Merge "Add missing XAnnotationValue#asChar method" into androidx-main am: b6be5c2722

Original change: https://android-review.googlesource.com/c/platform/frameworks/support/+/2141501

Change-Id: I76f7cc53d5e27981e3660f9b04dec9dda05188a6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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/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/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/api/current.txt b/activity/activity/api/current.txt
index e01b95c..34caae0 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_current.txt b/activity/activity/api/public_plus_experimental_current.txt
index e01b95c..34caae0 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/activity/activity/api/restricted_current.txt b/activity/activity/api/restricted_current.txt
index 5fdb966..37e460b 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/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
index 3e7fefd..389c8bc 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
@@ -115,6 +115,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 02637bb..6e76941 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/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-resources/lint-baseline.xml b/appcompat/appcompat-resources/lint-baseline.xml
index 788b592..a35bd9e 100644
--- a/appcompat/appcompat-resources/lint-baseline.xml
+++ b/appcompat/appcompat-resources/lint-baseline.xml
@@ -208,7 +208,9 @@
         errorLine1="    public void setColorFilter(ColorFilter cf) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="87"
+            column="32"/>
     </issue>
 
     <issue
@@ -217,7 +219,9 @@
         errorLine1="    public boolean setState(final int[] stateSet) {"
         errorLine2="                                  ~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="97"
+            column="35"/>
     </issue>
 
     <issue
@@ -226,7 +230,9 @@
         errorLine1="    public int[] getState() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="102"
+            column="12"/>
     </issue>
 
     <issue
@@ -235,7 +241,9 @@
         errorLine1="    public Drawable getCurrent() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="112"
+            column="12"/>
     </issue>
 
     <issue
@@ -244,7 +252,9 @@
         errorLine1="    public Region getTransparentRegion() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="128"
+            column="12"/>
     </issue>
 
     <issue
@@ -253,7 +263,9 @@
         errorLine1="    public boolean getPadding(Rect padding) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="153"
+            column="31"/>
     </issue>
 
     <issue
@@ -262,7 +274,9 @@
         errorLine1="    public void invalidateDrawable(Drawable who) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="161"
+            column="36"/>
     </issue>
 
     <issue
@@ -271,7 +285,9 @@
         errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="169"
+            column="34"/>
     </issue>
 
     <issue
@@ -280,7 +296,9 @@
         errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
         errorLine2="                                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="169"
+            column="48"/>
     </issue>
 
     <issue
@@ -289,7 +307,9 @@
         errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="177"
+            column="36"/>
     </issue>
 
     <issue
@@ -298,7 +318,9 @@
         errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
         errorLine2="                                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="177"
+            column="50"/>
     </issue>
 
     <issue
@@ -307,7 +329,9 @@
         errorLine1="    public void setTintList(ColorStateList tint) {"
         errorLine2="                            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="202"
+            column="29"/>
     </issue>
 
     <issue
@@ -316,7 +340,9 @@
         errorLine1="    public void setTintMode(PorterDuff.Mode tintMode) {"
         errorLine2="                            ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="207"
+            column="29"/>
     </issue>
 
     <issue
@@ -325,7 +351,9 @@
         errorLine1="    public Drawable getWrappedDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="221"
+            column="12"/>
     </issue>
 
     <issue
@@ -334,7 +362,9 @@
         errorLine1="    public void setWrappedDrawable(Drawable drawable) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+            line="225"
+            column="36"/>
     </issue>
 
     <issue
@@ -343,7 +373,9 @@
         errorLine1="    public static synchronized ResourceManagerInternal get() {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+            line="96"
+            column="32"/>
     </issue>
 
     <issue
@@ -352,7 +384,9 @@
         errorLine1="    public synchronized void setHooks(ResourceManagerHooks hooks) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+            line="131"
+            column="39"/>
     </issue>
 
     <issue
@@ -361,7 +395,9 @@
         errorLine1="    public synchronized Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+            line="135"
+            column="25"/>
     </issue>
 
     <issue
@@ -370,7 +406,9 @@
         errorLine1="    public static synchronized PorterDuffColorFilter getPorterDuffColorFilter("
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+            line="471"
+            column="32"/>
     </issue>
 
     <issue
@@ -379,7 +417,9 @@
         errorLine1="            int color, PorterDuff.Mode mode) {"
         errorLine2="                       ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+            file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+            line="472"
+            column="24"/>
     </issue>
 
     <issue
@@ -388,7 +428,9 @@
         errorLine1="    public static Context wrap(@NonNull final Context context) {"
         errorLine2="                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"
+            line="45"
+            column="19"/>
     </issue>
 
     <issue
@@ -397,7 +439,9 @@
         errorLine1="    public Resources.Theme getTheme() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"
+            line="107"
+            column="12"/>
     </issue>
 
     <issue
@@ -406,7 +450,9 @@
         errorLine1="    public Resources getResources() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"
+            line="121"
+            column="12"/>
     </issue>
 
     <issue
@@ -415,7 +461,9 @@
         errorLine1="    public AssetManager getAssets() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"
+            line="126"
+            column="12"/>
     </issue>
 
     <issue
@@ -424,7 +472,9 @@
         errorLine1="    public ColorStateList mTintList;"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintInfo.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintInfo.java"
+            line="29"
+            column="12"/>
     </issue>
 
     <issue
@@ -433,7 +483,9 @@
         errorLine1="    public PorterDuff.Mode mTintMode;"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintInfo.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintInfo.java"
+            line="30"
+            column="12"/>
     </issue>
 
     <issue
@@ -442,7 +494,9 @@
         errorLine1="    public Drawable getDrawable(int id) throws NotFoundException {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java"/>
+            file="src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java"
+            line="66"
+            column="12"/>
     </issue>
 
 </issues>
diff --git a/appcompat/appcompat/api/current.txt b/appcompat/appcompat/api/current.txt
index e36516b..4882539 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);
@@ -339,6 +343,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 {
diff --git a/appcompat/appcompat/api/public_plus_experimental_current.txt b/appcompat/appcompat/api/public_plus_experimental_current.txt
index e36516b..4882539 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);
@@ -339,6 +343,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 {
diff --git a/appcompat/appcompat/api/restricted_current.txt b/appcompat/appcompat/api/restricted_current.txt
index cfb6629..53c0cb0 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);
@@ -363,6 +367,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!);
diff --git a/appcompat/appcompat/lint-baseline.xml b/appcompat/appcompat/lint-baseline.xml
index 857ba3e..991b490 100644
--- a/appcompat/appcompat/lint-baseline.xml
+++ b/appcompat/appcompat/lint-baseline.xml
@@ -250,7 +250,9 @@
         errorLine1="            result = (T) method.invoke(object);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java"
+            line="814"
+            column="26"/>
     </issue>
 
     <issue
@@ -259,7 +261,9 @@
         errorLine1="                mResolvedMethod.invoke(mResolvedContext, v);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="441"
+            column="17"/>
     </issue>
 
     <issue
@@ -268,7 +272,9 @@
         errorLine1="            mSetExclusiveCheckableMethod.invoke(mWrappedObject, checkable);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="391"
+            column="13"/>
     </issue>
 
     <issue
@@ -277,7 +283,9 @@
         errorLine1="                    mDoBeforeTextChanged.invoke(view);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="2084"
+            column="21"/>
     </issue>
 
     <issue
@@ -286,7 +294,9 @@
         errorLine1="                    mDoAfterTextChanged.invoke(view);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="2094"
+            column="21"/>
     </issue>
 
     <issue
@@ -295,7 +305,9 @@
         errorLine1="                    mEnsureImeVisible.invoke(view, /* visible = */ true);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="2104"
+            column="21"/>
     </issue>
 
     <issue
@@ -304,7 +316,9 @@
         errorLine1="                    return (Boolean) mMethod.invoke(mRealOwner, item);"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"
+            line="265"
+            column="38"/>
     </issue>
 
     <issue
@@ -313,7 +327,9 @@
         errorLine1="                    mMethod.invoke(mRealOwner, item);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"
+            line="267"
+            column="21"/>
     </issue>
 
     <issue
@@ -322,7 +338,9 @@
         errorLine1="                sComputeFitSystemWindowsMethod.invoke(view, inoutInsets, outLocalInsets);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+            line="68"
+            column="17"/>
     </issue>
 
     <issue
@@ -331,7 +349,9 @@
         errorLine1="    fun testTileifyLayerDrawable() {"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/appcompat/widget/AppCompatProgressBarHelperTest.kt"/>
+            file="src/androidTest/java/androidx/appcompat/widget/AppCompatProgressBarHelperTest.kt"
+            line="35"
+            column="9"/>
     </issue>
 
     <issue
@@ -340,9 +360,13 @@
         errorLine1="    public View getTabContainer() {"
         errorLine2="                ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="243"
+            column="17"/>
         <location
             file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="229"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -352,7 +376,9 @@
         errorLine1="    public boolean isInOverlayMode() {"
         errorLine2="                   ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java"
+            line="210"
+            column="20"/>
     </issue>
 
     <issue
@@ -361,9 +387,13 @@
         errorLine1="    public ActionBar getSupportActionBar() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="162"
+            column="22"/>
         <location
             file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="182"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -373,9 +403,13 @@
         errorLine1="    public abstract ActionBar getSupportActionBar();"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="279"
+            column="31"/>
         <location
             file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="296"
+            column="26"
             message="Setter here"/>
     </issue>
 
@@ -385,9 +419,13 @@
         errorLine1="    public Resources.Theme getTheme() {"
         errorLine2="                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="149"
+            column="28"/>
         <location
             file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="133"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -397,7 +435,9 @@
         errorLine1="    int getItemIndexOffset() {"
         errorLine2="        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="160"
+            column="9"/>
     </issue>
 
     <issue
@@ -406,7 +446,9 @@
         errorLine1="    boolean isQwertyMode() {"
         errorLine2="            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="791"
+            column="13"/>
     </issue>
 
     <issue
@@ -415,7 +457,9 @@
         errorLine1="    boolean getOptionalIconsVisible() {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1346"
+            column="13"/>
     </issue>
 
     <issue
@@ -424,7 +468,9 @@
         errorLine1="    Runnable getCallback() {"
         errorLine2="             ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="232"
+            column="14"/>
     </issue>
 
     <issue
@@ -433,9 +479,13 @@
         errorLine1="    public SubMenu getSubMenu() {"
         errorLine2="                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="418"
+            column="20"/>
         <location
             file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="427"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -445,7 +495,9 @@
         errorLine1="    public void setIsActionButton(boolean isActionButton) {"
         errorLine2="                ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="719"
+            column="17"/>
     </issue>
 
     <issue
@@ -454,7 +506,9 @@
         errorLine1="                String labelColumn) {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="677"
+            column="17"/>
     </issue>
 
     <issue
@@ -463,7 +517,9 @@
         errorLine1="    void setDropdownParams(SpinnerAdapter adapter, AdapterView.OnItemSelectedListener listener);"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="83"
+            column="52"/>
     </issue>
 
     <issue
@@ -472,7 +528,9 @@
         errorLine1="            AdapterView.OnItemSelectedListener listener) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="516"
+            column="13"/>
     </issue>
 
     <issue
@@ -481,7 +539,9 @@
         errorLine1="    public abstract void setCustomView(View view);"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="217"
+            column="40"/>
     </issue>
 
     <issue
@@ -490,7 +550,9 @@
         errorLine1="    public abstract void setCustomView(View view, LayoutParams layoutParams);"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="237"
+            column="40"/>
     </issue>
 
     <issue
@@ -499,7 +561,9 @@
         errorLine1="    public abstract void setCustomView(View view, LayoutParams layoutParams);"
         errorLine2="                                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="237"
+            column="51"/>
     </issue>
 
     <issue
@@ -508,7 +572,9 @@
         errorLine1="    public abstract void setIcon(Drawable icon);"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="286"
+            column="34"/>
     </issue>
 
     <issue
@@ -517,7 +583,9 @@
         errorLine1="    public abstract void setLogo(Drawable logo);"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="316"
+            column="34"/>
     </issue>
 
     <issue
@@ -526,7 +594,9 @@
         errorLine1="    public abstract void setTitle(CharSequence title);"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="390"
+            column="35"/>
     </issue>
 
     <issue
@@ -535,7 +605,9 @@
         errorLine1="    public abstract void setSubtitle(CharSequence subtitle);"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="413"
+            column="38"/>
     </issue>
 
     <issue
@@ -544,7 +616,9 @@
         errorLine1="    public void setStackedBackgroundDrawable(Drawable d) { }"
         errorLine2="                                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="530"
+            column="46"/>
     </issue>
 
     <issue
@@ -553,7 +627,9 @@
         errorLine1="    public void setSplitBackgroundDrawable(Drawable d) { }"
         errorLine2="                                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="540"
+            column="44"/>
     </issue>
 
     <issue
@@ -562,7 +638,9 @@
         errorLine1="    public abstract View getCustomView();"
         errorLine2="                    ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="545"
+            column="21"/>
     </issue>
 
     <issue
@@ -571,7 +649,9 @@
         errorLine1="    public abstract void addOnMenuVisibilityListener(OnMenuVisibilityListener listener);"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="823"
+            column="54"/>
     </issue>
 
     <issue
@@ -580,7 +660,9 @@
         errorLine1="    public abstract void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener);"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="831"
+            column="57"/>
     </issue>
 
     <issue
@@ -589,7 +671,9 @@
         errorLine1="    public Context getThemedContext() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="858"
+            column="12"/>
     </issue>
 
     <issue
@@ -598,7 +682,9 @@
         errorLine1="    public void onConfigurationChanged(Configuration config) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="1051"
+            column="40"/>
     </issue>
 
     <issue
@@ -607,7 +693,9 @@
         errorLine1="    public ActionMode startActionMode(ActionMode.Callback callback) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="1061"
+            column="12"/>
     </issue>
 
     <issue
@@ -616,7 +704,9 @@
         errorLine1="    public ActionMode startActionMode(ActionMode.Callback callback) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="1061"
+            column="39"/>
     </issue>
 
     <issue
@@ -625,7 +715,9 @@
         errorLine1="    public boolean onMenuKeyEvent(KeyEvent event) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="1085"
+            column="35"/>
     </issue>
 
     <issue
@@ -634,7 +726,9 @@
         errorLine1="    public boolean onKeyShortcut(int keyCode, KeyEvent ev) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="1091"
+            column="47"/>
     </issue>
 
     <issue
@@ -643,7 +737,9 @@
         errorLine1="    public void setWindowTitle(CharSequence title) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="1103"
+            column="32"/>
     </issue>
 
     <issue
@@ -652,7 +748,9 @@
         errorLine1="        public LayoutParams(@NonNull Context c, AttributeSet attrs) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="1376"
+            column="49"/>
     </issue>
 
     <issue
@@ -661,7 +759,9 @@
         errorLine1="        public LayoutParams(LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="1398"
+            column="29"/>
     </issue>
 
     <issue
@@ -670,7 +770,9 @@
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBar.java"
+            line="1404"
+            column="29"/>
     </issue>
 
     <issue
@@ -679,7 +781,9 @@
         errorLine1="    public ActionBarContainer(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="55"
+            column="31"/>
     </issue>
 
     <issue
@@ -688,7 +792,9 @@
         errorLine1="    public ActionBarContainer(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="59"
+            column="31"/>
     </issue>
 
     <issue
@@ -697,7 +803,9 @@
         errorLine1="    public ActionBarContainer(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="59"
+            column="48"/>
     </issue>
 
     <issue
@@ -706,7 +814,9 @@
         errorLine1="    public void setPrimaryBackground(Drawable bg) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="90"
+            column="38"/>
     </issue>
 
     <issue
@@ -715,7 +825,9 @@
         errorLine1="    public void setStackedBackground(Drawable bg) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="111"
+            column="38"/>
     </issue>
 
     <issue
@@ -724,7 +836,9 @@
         errorLine1="    public void setSplitBackground(Drawable bg) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="132"
+            column="36"/>
     </issue>
 
     <issue
@@ -733,7 +847,9 @@
         errorLine1="    protected boolean verifyDrawable(Drawable who) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="162"
+            column="38"/>
     </issue>
 
     <issue
@@ -742,7 +858,9 @@
         errorLine1="    public boolean onInterceptTouchEvent(MotionEvent ev) {"
         errorLine2="                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="209"
+            column="42"/>
     </issue>
 
     <issue
@@ -751,7 +869,9 @@
         errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="214"
+            column="33"/>
     </issue>
 
     <issue
@@ -760,7 +880,9 @@
         errorLine1="    public boolean onHoverEvent(MotionEvent ev) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="222"
+            column="33"/>
     </issue>
 
     <issue
@@ -769,7 +891,9 @@
         errorLine1="    public void setTabContainer(ScrollingTabContainerView tabView) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="229"
+            column="33"/>
     </issue>
 
     <issue
@@ -778,7 +902,9 @@
         errorLine1="    public View getTabContainer() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="243"
+            column="12"/>
     </issue>
 
     <issue
@@ -787,7 +913,9 @@
         errorLine1="    public android.view.ActionMode startActionModeForChild(View child,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="248"
+            column="12"/>
     </issue>
 
     <issue
@@ -796,7 +924,9 @@
         errorLine1="    public android.view.ActionMode startActionModeForChild(View child,"
         errorLine2="                                                           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="248"
+            column="60"/>
     </issue>
 
     <issue
@@ -805,7 +935,9 @@
         errorLine1="            android.view.ActionMode.Callback callback) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="249"
+            column="13"/>
     </issue>
 
     <issue
@@ -814,7 +946,9 @@
         errorLine1="    public android.view.ActionMode startActionModeForChild(View child,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="255"
+            column="12"/>
     </issue>
 
     <issue
@@ -823,7 +957,9 @@
         errorLine1="    public android.view.ActionMode startActionModeForChild(View child,"
         errorLine2="                                                           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="255"
+            column="60"/>
     </issue>
 
     <issue
@@ -832,7 +968,9 @@
         errorLine1="            android.view.ActionMode.Callback callback, int type) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+            line="256"
+            column="13"/>
     </issue>
 
     <issue
@@ -841,7 +979,9 @@
         errorLine1="    public void setCustomView(View view) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+            line="101"
+            column="31"/>
     </issue>
 
     <issue
@@ -850,7 +990,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+            line="116"
+            column="26"/>
     </issue>
 
     <issue
@@ -859,7 +1001,9 @@
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+            line="122"
+            column="29"/>
     </issue>
 
     <issue
@@ -868,7 +1012,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+            line="127"
+            column="12"/>
     </issue>
 
     <issue
@@ -877,7 +1023,9 @@
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+            line="131"
+            column="12"/>
     </issue>
 
     <issue
@@ -886,7 +1034,9 @@
         errorLine1="    public void initForMode(final ActionMode mode) {"
         errorLine2="                                  ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+            line="162"
+            column="35"/>
     </issue>
 
     <issue
@@ -895,7 +1045,9 @@
         errorLine1="    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+            line="236"
+            column="15"/>
     </issue>
 
     <issue
@@ -904,7 +1056,9 @@
         errorLine1="    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+            line="243"
+            column="12"/>
     </issue>
 
     <issue
@@ -913,7 +1067,9 @@
         errorLine1="    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+            line="243"
+            column="56"/>
     </issue>
 
     <issue
@@ -922,7 +1078,9 @@
         errorLine1="        void setActionBarUpIndicator(Drawable upDrawable, @StringRes int contentDescRes);"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="92"
+            column="38"/>
     </issue>
 
     <issue
@@ -931,7 +1089,9 @@
         errorLine1="        Drawable getThemeUpIndicator();"
         errorLine2="        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="104"
+            column="9"/>
     </issue>
 
     <issue
@@ -940,7 +1100,9 @@
         errorLine1="        Context getActionBarThemedContext();"
         errorLine2="        ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="109"
+            column="9"/>
     </issue>
 
     <issue
@@ -949,7 +1111,9 @@
         errorLine1="    public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="152"
+            column="34"/>
     </issue>
 
     <issue
@@ -958,7 +1122,9 @@
         errorLine1="    public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="152"
+            column="53"/>
     </issue>
 
     <issue
@@ -967,7 +1133,9 @@
         errorLine1="    public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="183"
+            column="34"/>
     </issue>
 
     <issue
@@ -976,7 +1144,9 @@
         errorLine1="    public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="183"
+            column="53"/>
     </issue>
 
     <issue
@@ -985,7 +1155,9 @@
         errorLine1="            Toolbar toolbar, @StringRes int openDrawerContentDescRes,"
         errorLine2="            ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="184"
+            column="13"/>
     </issue>
 
     <issue
@@ -994,7 +1166,9 @@
         errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="258"
+            column="40"/>
     </issue>
 
     <issue
@@ -1003,7 +1177,9 @@
         errorLine1="    public boolean onOptionsItemSelected(MenuItem item) {"
         errorLine2="                                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="275"
+            column="42"/>
     </issue>
 
     <issue
@@ -1012,7 +1188,9 @@
         errorLine1="    public void setHomeAsUpIndicator(Drawable indicator) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="304"
+            column="38"/>
     </issue>
 
     <issue
@@ -1021,7 +1199,9 @@
         errorLine1="    public void onDrawerSlide(View drawerView, float slideOffset) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="414"
+            column="31"/>
     </issue>
 
     <issue
@@ -1030,7 +1210,9 @@
         errorLine1="    public void onDrawerOpened(View drawerView) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="430"
+            column="32"/>
     </issue>
 
     <issue
@@ -1039,7 +1221,9 @@
         errorLine1="    public void onDrawerClosed(View drawerView) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="445"
+            column="32"/>
     </issue>
 
     <issue
@@ -1048,7 +1232,9 @@
         errorLine1="    public View.OnClickListener getToolbarNavigationClickListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="472"
+            column="12"/>
     </issue>
 
     <issue
@@ -1057,7 +1243,9 @@
         errorLine1="            View.OnClickListener onToolbarNavigationClickListener) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+            file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+            line="486"
+            column="13"/>
     </issue>
 
     <issue
@@ -1066,7 +1254,9 @@
         errorLine1="    public static ActionBarPolicy get(Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionBarPolicy.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionBarPolicy.java"
+            line="42"
+            column="19"/>
     </issue>
 
     <issue
@@ -1075,7 +1265,9 @@
         errorLine1="    public static ActionBarPolicy get(Context context) {"
         errorLine2="                                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionBarPolicy.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionBarPolicy.java"
+            line="42"
+            column="39"/>
     </issue>
 
     <issue
@@ -1084,7 +1276,9 @@
         errorLine1="    public ActionMenuItem(Context context, int group, int id, int categoryOrder, int ordering,"
         errorLine2="                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="78"
+            column="27"/>
     </issue>
 
     <issue
@@ -1093,7 +1287,9 @@
         errorLine1="            CharSequence title) {"
         errorLine2="            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="79"
+            column="13"/>
     </issue>
 
     <issue
@@ -1102,7 +1298,9 @@
         errorLine1="    public Drawable getIcon() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="103"
+            column="12"/>
     </issue>
 
     <issue
@@ -1111,7 +1309,9 @@
         errorLine1="    public Intent getIntent() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="108"
+            column="12"/>
     </issue>
 
     <issue
@@ -1120,7 +1320,9 @@
         errorLine1="    public ContextMenuInfo getMenuInfo() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="118"
+            column="12"/>
     </issue>
 
     <issue
@@ -1129,7 +1331,9 @@
         errorLine1="    public SubMenu getSubMenu() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="138"
+            column="12"/>
     </issue>
 
     <issue
@@ -1138,7 +1342,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="143"
+            column="12"/>
     </issue>
 
     <issue
@@ -1147,7 +1353,9 @@
         errorLine1="    public CharSequence getTitleCondensed() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="148"
+            column="12"/>
     </issue>
 
     <issue
@@ -1156,7 +1364,9 @@
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="178"
+            column="12"/>
     </issue>
 
     <issue
@@ -1165,7 +1375,9 @@
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="184"
+            column="12"/>
     </issue>
 
     <issue
@@ -1174,7 +1386,9 @@
         errorLine1="    public MenuItem setCheckable(boolean checkable) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="191"
+            column="12"/>
     </issue>
 
     <issue
@@ -1183,7 +1397,9 @@
         errorLine1="    public ActionMenuItem setExclusiveCheckable(boolean exclusive) {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="196"
+            column="12"/>
     </issue>
 
     <issue
@@ -1192,7 +1408,9 @@
         errorLine1="    public MenuItem setChecked(boolean checked) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="202"
+            column="12"/>
     </issue>
 
     <issue
@@ -1201,7 +1419,9 @@
         errorLine1="    public MenuItem setEnabled(boolean enabled) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="208"
+            column="12"/>
     </issue>
 
     <issue
@@ -1210,7 +1430,9 @@
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="214"
+            column="12"/>
     </issue>
 
     <issue
@@ -1219,7 +1441,9 @@
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="214"
+            column="29"/>
     </issue>
 
     <issue
@@ -1228,7 +1452,9 @@
         errorLine1="    public MenuItem setIcon(int iconRes) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="222"
+            column="12"/>
     </issue>
 
     <issue
@@ -1237,7 +1463,9 @@
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="230"
+            column="12"/>
     </issue>
 
     <issue
@@ -1246,7 +1474,9 @@
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="230"
+            column="31"/>
     </issue>
 
     <issue
@@ -1255,7 +1485,9 @@
         errorLine1="    public MenuItem setNumericShortcut(char numericChar) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="236"
+            column="12"/>
     </issue>
 
     <issue
@@ -1264,7 +1496,9 @@
         errorLine1="    public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="242"
+            column="12"/>
     </issue>
 
     <issue
@@ -1273,7 +1507,9 @@
         errorLine1="    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="249"
+            column="12"/>
     </issue>
 
     <issue
@@ -1282,7 +1518,9 @@
         errorLine1="    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="249"
+            column="48"/>
     </issue>
 
     <issue
@@ -1291,7 +1529,9 @@
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="255"
+            column="12"/>
     </issue>
 
     <issue
@@ -1300,7 +1540,9 @@
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="262"
+            column="12"/>
     </issue>
 
     <issue
@@ -1309,7 +1551,9 @@
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="272"
+            column="12"/>
     </issue>
 
     <issue
@@ -1318,7 +1562,9 @@
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="272"
+            column="30"/>
     </issue>
 
     <issue
@@ -1327,7 +1573,9 @@
         errorLine1="    public MenuItem setTitle(int title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="278"
+            column="12"/>
     </issue>
 
     <issue
@@ -1336,7 +1584,9 @@
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="284"
+            column="12"/>
     </issue>
 
     <issue
@@ -1345,7 +1595,9 @@
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="284"
+            column="39"/>
     </issue>
 
     <issue
@@ -1354,7 +1606,9 @@
         errorLine1="    public MenuItem setVisible(boolean visible) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="290"
+            column="12"/>
     </issue>
 
     <issue
@@ -1363,7 +1617,9 @@
         errorLine1="    public SupportMenuItem setActionView(View actionView) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="324"
+            column="12"/>
     </issue>
 
     <issue
@@ -1372,7 +1628,9 @@
         errorLine1="    public SupportMenuItem setActionView(View actionView) {"
         errorLine2="                                         ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="324"
+            column="42"/>
     </issue>
 
     <issue
@@ -1381,7 +1639,9 @@
         errorLine1="    public View getActionView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="329"
+            column="12"/>
     </issue>
 
     <issue
@@ -1390,7 +1650,9 @@
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="334"
+            column="12"/>
     </issue>
 
     <issue
@@ -1399,7 +1661,9 @@
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="334"
+            column="39"/>
     </issue>
 
     <issue
@@ -1408,7 +1672,9 @@
         errorLine1="    public android.view.ActionProvider getActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="339"
+            column="12"/>
     </issue>
 
     <issue
@@ -1417,7 +1683,9 @@
         errorLine1="    public SupportMenuItem setActionView(int resId) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="344"
+            column="12"/>
     </issue>
 
     <issue
@@ -1426,7 +1694,9 @@
         errorLine1="    public ActionProvider getSupportActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="349"
+            column="12"/>
     </issue>
 
     <issue
@@ -1435,7 +1705,9 @@
         errorLine1="    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="354"
+            column="12"/>
     </issue>
 
     <issue
@@ -1444,7 +1716,9 @@
         errorLine1="    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="354"
+            column="53"/>
     </issue>
 
     <issue
@@ -1453,7 +1727,9 @@
         errorLine1="    public SupportMenuItem setShowAsActionFlags(int actionEnum) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="359"
+            column="12"/>
     </issue>
 
     <issue
@@ -1462,7 +1738,9 @@
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="380"
+            column="12"/>
     </issue>
 
     <issue
@@ -1471,7 +1749,9 @@
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="380"
+            column="47"/>
     </issue>
 
     <issue
@@ -1480,7 +1760,9 @@
         errorLine1="    public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="385"
+            column="12"/>
     </issue>
 
     <issue
@@ -1489,7 +1771,9 @@
         errorLine1="    public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="385"
+            column="50"/>
     </issue>
 
     <issue
@@ -1498,7 +1782,9 @@
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="391"
+            column="12"/>
     </issue>
 
     <issue
@@ -1507,7 +1793,9 @@
         errorLine1="    public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="396"
+            column="12"/>
     </issue>
 
     <issue
@@ -1516,7 +1804,9 @@
         errorLine1="    public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="396"
+            column="43"/>
     </issue>
 
     <issue
@@ -1525,7 +1815,9 @@
         errorLine1="    public CharSequence getTooltipText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="402"
+            column="12"/>
     </issue>
 
     <issue
@@ -1534,7 +1826,9 @@
         errorLine1="    public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="407"
+            column="12"/>
     </issue>
 
     <issue
@@ -1543,7 +1837,9 @@
         errorLine1="    public ColorStateList getIconTintList() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="417"
+            column="12"/>
     </issue>
 
     <issue
@@ -1552,7 +1848,9 @@
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="422"
+            column="12"/>
     </issue>
 
     <issue
@@ -1561,7 +1859,9 @@
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="422"
+            column="37"/>
     </issue>
 
     <issue
@@ -1570,7 +1870,9 @@
         errorLine1="    public PorterDuff.Mode getIconTintMode() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+            line="432"
+            column="12"/>
     </issue>
 
     <issue
@@ -1579,7 +1881,9 @@
         errorLine1="    public ActionMenuItemView(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="63"
+            column="31"/>
     </issue>
 
     <issue
@@ -1588,7 +1892,9 @@
         errorLine1="    public ActionMenuItemView(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="67"
+            column="31"/>
     </issue>
 
     <issue
@@ -1597,7 +1903,9 @@
         errorLine1="    public ActionMenuItemView(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="67"
+            column="48"/>
     </issue>
 
     <issue
@@ -1606,7 +1914,9 @@
         errorLine1="    public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="71"
+            column="31"/>
     </issue>
 
     <issue
@@ -1615,7 +1925,9 @@
         errorLine1="    public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="71"
+            column="48"/>
     </issue>
 
     <issue
@@ -1624,7 +1936,9 @@
         errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="91"
+            column="40"/>
     </issue>
 
     <issue
@@ -1633,7 +1947,9 @@
         errorLine1="    public MenuItemImpl getItemData() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="118"
+            column="12"/>
     </issue>
 
     <issue
@@ -1642,7 +1958,9 @@
         errorLine1="    public void initialize(MenuItemImpl itemData, int menuType) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="123"
+            column="28"/>
     </issue>
 
     <issue
@@ -1651,7 +1969,9 @@
         errorLine1="    public boolean onTouchEvent(MotionEvent e) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="140"
+            column="33"/>
     </issue>
 
     <issue
@@ -1660,7 +1980,9 @@
         errorLine1="    public void onClick(View v) {"
         errorLine2="                        ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="149"
+            column="25"/>
     </issue>
 
     <issue
@@ -1669,7 +1991,9 @@
         errorLine1="    public void setItemInvoker(MenuBuilder.ItemInvoker invoker) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="155"
+            column="32"/>
     </issue>
 
     <issue
@@ -1678,7 +2002,9 @@
         errorLine1="    public void setPopupCallback(PopupCallback popupCallback) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="159"
+            column="34"/>
     </issue>
 
     <issue
@@ -1687,7 +2013,9 @@
         errorLine1="    public void setIcon(Drawable icon) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="214"
+            column="25"/>
     </issue>
 
     <issue
@@ -1696,7 +2024,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="246"
+            column="26"/>
     </issue>
 
     <issue
@@ -1705,7 +2035,9 @@
         errorLine1="    public void onRestoreInstanceState(Parcelable state) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="330"
+            column="40"/>
     </issue>
 
     <issue
@@ -1714,7 +2046,9 @@
         errorLine1="        public abstract ShowableListMenu getPopup();"
         errorLine2="                        ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+            line="337"
+            column="25"/>
     </issue>
 
     <issue
@@ -1723,7 +2057,9 @@
         errorLine1="    public void setPresenter(ActionMenuPresenter presenter) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="124"
+            column="30"/>
     </issue>
 
     <issue
@@ -1732,7 +2068,9 @@
         errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="130"
+            column="40"/>
     </issue>
 
     <issue
@@ -1741,7 +2079,9 @@
         errorLine1="    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="143"
+            column="44"/>
     </issue>
 
     <issue
@@ -1750,7 +2090,9 @@
         errorLine1="    protected LayoutParams generateDefaultLayoutParams() {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="582"
+            column="15"/>
     </issue>
 
     <issue
@@ -1759,7 +2101,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="590"
+            column="12"/>
     </issue>
 
     <issue
@@ -1768,7 +2112,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="590"
+            column="46"/>
     </issue>
 
     <issue
@@ -1777,7 +2123,9 @@
         errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="595"
+            column="15"/>
     </issue>
 
     <issue
@@ -1786,7 +2134,9 @@
         errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="595"
+            column="49"/>
     </issue>
 
     <issue
@@ -1795,7 +2145,9 @@
         errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="609"
+            column="41"/>
     </issue>
 
     <issue
@@ -1804,7 +2156,9 @@
         errorLine1="    public LayoutParams generateOverflowButtonLayoutParams() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="615"
+            column="12"/>
     </issue>
 
     <issue
@@ -1813,7 +2167,9 @@
         errorLine1="    public boolean invokeItem(MenuItemImpl item) {"
         errorLine2="                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="624"
+            column="31"/>
     </issue>
 
     <issue
@@ -1822,7 +2178,9 @@
         errorLine1="    public void initialize(MenuBuilder menu) {"
         errorLine2="                           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="638"
+            column="28"/>
     </issue>
 
     <issue
@@ -1831,7 +2189,9 @@
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="650"
+            column="12"/>
     </issue>
 
     <issue
@@ -1840,7 +2200,9 @@
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="671"
+            column="34"/>
     </issue>
 
     <issue
@@ -1849,7 +2211,9 @@
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
         errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="671"
+            column="62"/>
     </issue>
 
     <issue
@@ -1858,7 +2222,9 @@
         errorLine1="    public MenuBuilder peekMenu() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="681"
+            column="12"/>
     </issue>
 
     <issue
@@ -1867,7 +2233,9 @@
         errorLine1="    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="749"
+            column="55"/>
     </issue>
 
     <issue
@@ -1876,7 +2244,9 @@
         errorLine1="        public boolean onMenuItemClick(MenuItem item);"
         errorLine2="                                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="771"
+            column="40"/>
     </issue>
 
     <issue
@@ -1885,7 +2255,9 @@
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="832"
+            column="29"/>
     </issue>
 
     <issue
@@ -1894,7 +2266,9 @@
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="832"
+            column="40"/>
     </issue>
 
     <issue
@@ -1903,7 +2277,9 @@
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams other) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="836"
+            column="29"/>
     </issue>
 
     <issue
@@ -1912,7 +2288,9 @@
         errorLine1="        public LayoutParams(LayoutParams other) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+            line="840"
+            column="29"/>
     </issue>
 
     <issue
@@ -1921,7 +2299,9 @@
         errorLine1="    public void setTag(Object tag) {"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="56"
+            column="24"/>
     </issue>
 
     <issue
@@ -1930,7 +2310,9 @@
         errorLine1="    public Object getTag() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="70"
+            column="12"/>
     </issue>
 
     <issue
@@ -1939,7 +2321,9 @@
         errorLine1="    public abstract void setTitle(CharSequence title);"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="83"
+            column="35"/>
     </issue>
 
     <issue
@@ -1948,7 +2332,9 @@
         errorLine1="    public abstract void setSubtitle(CharSequence subtitle);"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="105"
+            column="38"/>
     </issue>
 
     <issue
@@ -1957,7 +2343,9 @@
         errorLine1="    public abstract void setCustomView(View view);"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="165"
+            column="40"/>
     </issue>
 
     <issue
@@ -1966,7 +2354,9 @@
         errorLine1="    public abstract Menu getMenu();"
         errorLine2="                    ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="187"
+            column="21"/>
     </issue>
 
     <issue
@@ -1975,7 +2365,9 @@
         errorLine1="    public abstract CharSequence getTitle();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="194"
+            column="21"/>
     </issue>
 
     <issue
@@ -1984,7 +2376,9 @@
         errorLine1="    public abstract CharSequence getSubtitle();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="201"
+            column="21"/>
     </issue>
 
     <issue
@@ -1993,7 +2387,9 @@
         errorLine1="    public abstract View getCustomView();"
         errorLine2="                    ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="208"
+            column="21"/>
     </issue>
 
     <issue
@@ -2002,7 +2398,9 @@
         errorLine1="    public abstract MenuInflater getMenuInflater();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="213"
+            column="21"/>
     </issue>
 
     <issue
@@ -2011,7 +2409,9 @@
         errorLine1="        public boolean onCreateActionMode(ActionMode mode, Menu menu);"
         errorLine2="                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="256"
+            column="43"/>
     </issue>
 
     <issue
@@ -2020,7 +2420,9 @@
         errorLine1="        public boolean onCreateActionMode(ActionMode mode, Menu menu);"
         errorLine2="                                                           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="256"
+            column="60"/>
     </issue>
 
     <issue
@@ -2029,7 +2431,9 @@
         errorLine1="        public boolean onPrepareActionMode(ActionMode mode, Menu menu);"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="265"
+            column="44"/>
     </issue>
 
     <issue
@@ -2038,7 +2442,9 @@
         errorLine1="        public boolean onPrepareActionMode(ActionMode mode, Menu menu);"
         errorLine2="                                                            ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="265"
+            column="61"/>
     </issue>
 
     <issue
@@ -2047,7 +2453,9 @@
         errorLine1="        public boolean onActionItemClicked(ActionMode mode, MenuItem item);"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="275"
+            column="44"/>
     </issue>
 
     <issue
@@ -2056,7 +2464,9 @@
         errorLine1="        public boolean onActionItemClicked(ActionMode mode, MenuItem item);"
         errorLine2="                                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="275"
+            column="61"/>
     </issue>
 
     <issue
@@ -2065,7 +2475,9 @@
         errorLine1="        public void onDestroyActionMode(ActionMode mode);"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/ActionMode.java"
+            line="282"
+            column="41"/>
     </issue>
 
     <issue
@@ -2074,7 +2486,9 @@
         errorLine1="        public void setActivityChooserModel(ActivityChooserModel dataModel);"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="101"
+            column="45"/>
     </issue>
 
     <issue
@@ -2083,7 +2497,9 @@
         errorLine1="        public void sort(Intent intent, List&lt;ActivityResolveInfo> activities,"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="120"
+            column="26"/>
     </issue>
 
     <issue
@@ -2092,7 +2508,9 @@
         errorLine1="        public void sort(Intent intent, List&lt;ActivityResolveInfo> activities,"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="120"
+            column="41"/>
     </issue>
 
     <issue
@@ -2101,7 +2519,9 @@
         errorLine1="                List&lt;HistoricalRecord> historicalRecords);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="121"
+            column="17"/>
     </issue>
 
     <issue
@@ -2110,7 +2530,9 @@
         errorLine1="        public boolean onChooseActivity(ActivityChooserModel host, Intent intent);"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="145"
+            column="41"/>
     </issue>
 
     <issue
@@ -2119,7 +2541,9 @@
         errorLine1="        public boolean onChooseActivity(ActivityChooserModel host, Intent intent);"
         errorLine2="                                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="145"
+            column="68"/>
     </issue>
 
     <issue
@@ -2128,7 +2552,9 @@
         errorLine1="        public HistoricalRecord(String activityName, long time, float weight) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="782"
+            column="33"/>
     </issue>
 
     <issue
@@ -2137,7 +2563,9 @@
         errorLine1="        public HistoricalRecord(ComponentName activityName, long time, float weight) {"
         errorLine2="                                ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="793"
+            column="33"/>
     </issue>
 
     <issue
@@ -2146,7 +2574,9 @@
         errorLine1="        public ActivityResolveInfo(ResolveInfo resolveInfo) {"
         errorLine2="                                   ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="869"
+            column="36"/>
     </issue>
 
     <issue
@@ -2155,7 +2585,9 @@
         errorLine1="        public int compareTo(ActivityResolveInfo another) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+            line="897"
+            column="30"/>
     </issue>
 
     <issue
@@ -2164,7 +2596,9 @@
         errorLine1="    public void setActivityChooserModel(ActivityChooserModel dataModel) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+            line="304"
+            column="41"/>
     </issue>
 
     <issue
@@ -2173,7 +2607,9 @@
         errorLine1="    public void setExpandActivityOverflowButtonDrawable(Drawable drawable) {"
         errorLine2="                                                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+            line="323"
+            column="57"/>
     </issue>
 
     <issue
@@ -2182,7 +2618,9 @@
         errorLine1="    public void setProvider(ActionProvider provider) {"
         errorLine2="                            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+            line="347"
+            column="29"/>
     </issue>
 
     <issue
@@ -2191,7 +2629,9 @@
         errorLine1="    public ActivityChooserModel getDataModel() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+            line="488"
+            column="12"/>
     </issue>
 
     <issue
@@ -2200,7 +2640,9 @@
         errorLine1="    public void setOnDismissListener(PopupWindow.OnDismissListener listener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+            line="497"
+            column="38"/>
     </issue>
 
     <issue
@@ -2209,7 +2651,9 @@
         errorLine1="        public InnerLayout(Context context, AttributeSet attrs) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+            line="877"
+            column="28"/>
     </issue>
 
     <issue
@@ -2218,7 +2662,9 @@
         errorLine1="        public InnerLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+            line="877"
+            column="45"/>
     </issue>
 
     <issue
@@ -2227,7 +2673,9 @@
         errorLine1="        public RecycleListView(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="839"
+            column="32"/>
     </issue>
 
     <issue
@@ -2236,7 +2684,9 @@
         errorLine1="        public RecycleListView(Context context, AttributeSet attrs) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="843"
+            column="32"/>
     </issue>
 
     <issue
@@ -2245,7 +2695,9 @@
         errorLine1="        public RecycleListView(Context context, AttributeSet attrs) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="843"
+            column="49"/>
     </issue>
 
     <issue
@@ -2254,7 +2706,9 @@
         errorLine1="        public Drawable mIcon;"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="870"
+            column="16"/>
     </issue>
 
     <issue
@@ -2263,7 +2717,9 @@
         errorLine1="        public CharSequence mTitle;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="872"
+            column="16"/>
     </issue>
 
     <issue
@@ -2272,7 +2728,9 @@
         errorLine1="        public View mCustomTitleView;"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="873"
+            column="16"/>
     </issue>
 
     <issue
@@ -2281,7 +2739,9 @@
         errorLine1="        public CharSequence mMessage;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="874"
+            column="16"/>
     </issue>
 
     <issue
@@ -2290,7 +2750,9 @@
         errorLine1="        public CharSequence mPositiveButtonText;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="875"
+            column="16"/>
     </issue>
 
     <issue
@@ -2299,7 +2761,9 @@
         errorLine1="        public Drawable mPositiveButtonIcon;"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="876"
+            column="16"/>
     </issue>
 
     <issue
@@ -2308,7 +2772,9 @@
         errorLine1="        public DialogInterface.OnClickListener mPositiveButtonListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="877"
+            column="16"/>
     </issue>
 
     <issue
@@ -2317,7 +2783,9 @@
         errorLine1="        public CharSequence mNegativeButtonText;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="878"
+            column="16"/>
     </issue>
 
     <issue
@@ -2326,7 +2794,9 @@
         errorLine1="        public Drawable mNegativeButtonIcon;"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="879"
+            column="16"/>
     </issue>
 
     <issue
@@ -2335,7 +2805,9 @@
         errorLine1="        public DialogInterface.OnClickListener mNegativeButtonListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="880"
+            column="16"/>
     </issue>
 
     <issue
@@ -2344,7 +2816,9 @@
         errorLine1="        public CharSequence mNeutralButtonText;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="881"
+            column="16"/>
     </issue>
 
     <issue
@@ -2353,7 +2827,9 @@
         errorLine1="        public Drawable mNeutralButtonIcon;"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="882"
+            column="16"/>
     </issue>
 
     <issue
@@ -2362,7 +2838,9 @@
         errorLine1="        public DialogInterface.OnClickListener mNeutralButtonListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="883"
+            column="16"/>
     </issue>
 
     <issue
@@ -2371,7 +2849,9 @@
         errorLine1="        public DialogInterface.OnCancelListener mOnCancelListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="885"
+            column="16"/>
     </issue>
 
     <issue
@@ -2380,7 +2860,9 @@
         errorLine1="        public DialogInterface.OnDismissListener mOnDismissListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="886"
+            column="16"/>
     </issue>
 
     <issue
@@ -2389,7 +2871,9 @@
         errorLine1="        public DialogInterface.OnKeyListener mOnKeyListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="887"
+            column="16"/>
     </issue>
 
     <issue
@@ -2398,7 +2882,9 @@
         errorLine1="        public CharSequence[] mItems;"
         errorLine2="               ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="888"
+            column="16"/>
     </issue>
 
     <issue
@@ -2407,7 +2893,9 @@
         errorLine1="        public ListAdapter mAdapter;"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="889"
+            column="16"/>
     </issue>
 
     <issue
@@ -2416,7 +2904,9 @@
         errorLine1="        public DialogInterface.OnClickListener mOnClickListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="890"
+            column="16"/>
     </issue>
 
     <issue
@@ -2425,7 +2915,9 @@
         errorLine1="        public View mView;"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="892"
+            column="16"/>
     </issue>
 
     <issue
@@ -2434,7 +2926,9 @@
         errorLine1="        public boolean[] mCheckedItems;"
         errorLine2="               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="898"
+            column="16"/>
     </issue>
 
     <issue
@@ -2443,7 +2937,9 @@
         errorLine1="        public DialogInterface.OnMultiChoiceClickListener mOnCheckboxClickListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="902"
+            column="16"/>
     </issue>
 
     <issue
@@ -2452,7 +2948,9 @@
         errorLine1="        public Cursor mCursor;"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="903"
+            column="16"/>
     </issue>
 
     <issue
@@ -2461,7 +2959,9 @@
         errorLine1="        public String mLabelColumn;"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="904"
+            column="16"/>
     </issue>
 
     <issue
@@ -2470,7 +2970,9 @@
         errorLine1="        public String mIsCheckedColumn;"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="905"
+            column="16"/>
     </issue>
 
     <issue
@@ -2479,7 +2981,9 @@
         errorLine1="        public AdapterView.OnItemSelectedListener mOnItemSelectedListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="907"
+            column="16"/>
     </issue>
 
     <issue
@@ -2488,7 +2992,9 @@
         errorLine1="        public OnPrepareListViewListener mOnPrepareListViewListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="908"
+            column="16"/>
     </issue>
 
     <issue
@@ -2497,7 +3003,9 @@
         errorLine1="            void onPrepareListView(ListView listView);"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="921"
+            column="36"/>
     </issue>
 
     <issue
@@ -2506,7 +3014,9 @@
         errorLine1="        public AlertParams(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="924"
+            column="28"/>
     </issue>
 
     <issue
@@ -2515,7 +3025,9 @@
         errorLine1="        public void apply(AlertController dialog) {"
         errorLine2="                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertController.java"
+            line="930"
+            column="27"/>
     </issue>
 
     <issue
@@ -2524,7 +3036,9 @@
         errorLine1="    public Button getButton(int whichButton) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="130"
+            column="12"/>
     </issue>
 
     <issue
@@ -2533,7 +3047,9 @@
         errorLine1="    public ListView getListView() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="139"
+            column="12"/>
     </issue>
 
     <issue
@@ -2542,7 +3058,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="144"
+            column="26"/>
     </issue>
 
     <issue
@@ -2551,7 +3069,9 @@
         errorLine1="    public void setCustomTitle(View customTitleView) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="154"
+            column="32"/>
     </issue>
 
     <issue
@@ -2560,7 +3080,9 @@
         errorLine1="    public void setMessage(CharSequence message) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="163"
+            column="28"/>
     </issue>
 
     <issue
@@ -2569,7 +3091,9 @@
         errorLine1="    public void setView(View view) {"
         errorLine2="                        ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="171"
+            column="25"/>
     </issue>
 
     <issue
@@ -2578,7 +3102,9 @@
         errorLine1="    public void setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight,"
         errorLine2="                        ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="185"
+            column="25"/>
     </issue>
 
     <issue
@@ -2587,7 +3113,9 @@
         errorLine1="    public void setButton(int whichButton, CharSequence text, Message msg) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="210"
+            column="44"/>
     </issue>
 
     <issue
@@ -2596,7 +3124,9 @@
         errorLine1="    public void setButton(int whichButton, CharSequence text, Message msg) {"
         errorLine2="                                                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="210"
+            column="63"/>
     </issue>
 
     <issue
@@ -2605,7 +3135,9 @@
         errorLine1="    public void setButton(int whichButton, CharSequence text, OnClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="225"
+            column="44"/>
     </issue>
 
     <issue
@@ -2614,7 +3146,9 @@
         errorLine1="    public void setButton(int whichButton, CharSequence text, OnClickListener listener) {"
         errorLine2="                                                              ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="225"
+            column="63"/>
     </issue>
 
     <issue
@@ -2623,7 +3157,9 @@
         errorLine1="    public void setButton(int whichButton, CharSequence text, Drawable icon,"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="242"
+            column="44"/>
     </issue>
 
     <issue
@@ -2632,7 +3168,9 @@
         errorLine1="    public void setButton(int whichButton, CharSequence text, Drawable icon,"
         errorLine2="                                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="242"
+            column="63"/>
     </issue>
 
     <issue
@@ -2641,7 +3179,9 @@
         errorLine1="            OnClickListener listener) {"
         errorLine2="            ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="243"
+            column="13"/>
     </issue>
 
     <issue
@@ -2650,7 +3190,9 @@
         errorLine1="    public void setIcon(Drawable icon) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="261"
+            column="25"/>
     </issue>
 
     <issue
@@ -2659,7 +3201,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="277"
+            column="29"/>
     </issue>
 
     <issue
@@ -2668,7 +3212,9 @@
         errorLine1="    public boolean onKeyDown(int keyCode, KeyEvent event) {"
         errorLine2="                                          ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="283"
+            column="43"/>
     </issue>
 
     <issue
@@ -2677,7 +3223,9 @@
         errorLine1="    public boolean onKeyUp(int keyCode, KeyEvent event) {"
         errorLine2="                                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="291"
+            column="41"/>
     </issue>
 
     <issue
@@ -2686,7 +3234,9 @@
         errorLine1="        public Builder setTitle(@StringRes int titleId) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="366"
+            column="16"/>
     </issue>
 
     <issue
@@ -2695,7 +3245,9 @@
         errorLine1="        public Builder setTitle(@Nullable CharSequence title) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="376"
+            column="16"/>
     </issue>
 
     <issue
@@ -2704,7 +3256,9 @@
         errorLine1="        public Builder setCustomTitle(@Nullable View customTitleView) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="397"
+            column="16"/>
     </issue>
 
     <issue
@@ -2713,7 +3267,9 @@
         errorLine1="        public Builder setMessage(@StringRes int messageId) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="407"
+            column="16"/>
     </issue>
 
     <issue
@@ -2722,7 +3278,9 @@
         errorLine1="        public Builder setMessage(@Nullable CharSequence message) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="417"
+            column="16"/>
     </issue>
 
     <issue
@@ -2731,7 +3289,9 @@
         errorLine1="        public Builder setIcon(@DrawableRes int iconId) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="429"
+            column="16"/>
     </issue>
 
     <issue
@@ -2740,7 +3300,9 @@
         errorLine1="        public Builder setIcon(@Nullable Drawable icon) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="444"
+            column="16"/>
     </issue>
 
     <issue
@@ -2749,7 +3311,9 @@
         errorLine1="        public Builder setIconAttribute(@AttrRes int attrId) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="458"
+            column="16"/>
     </issue>
 
     <issue
@@ -2758,7 +3322,9 @@
         errorLine1="        public Builder setPositiveButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="472"
+            column="16"/>
     </issue>
 
     <issue
@@ -2767,7 +3333,9 @@
         errorLine1="        public Builder setPositiveButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="                                                                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="472"
+            column="71"/>
     </issue>
 
     <issue
@@ -2776,7 +3344,9 @@
         errorLine1="        public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="485"
+            column="16"/>
     </issue>
 
     <issue
@@ -2785,7 +3355,9 @@
         errorLine1="        public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="485"
+            column="42"/>
     </issue>
 
     <issue
@@ -2794,7 +3366,9 @@
         errorLine1="        public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                                                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="485"
+            column="67"/>
     </issue>
 
     <issue
@@ -2803,7 +3377,9 @@
         errorLine1="        public Builder setPositiveButtonIcon(Drawable icon) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="496"
+            column="16"/>
     </issue>
 
     <issue
@@ -2812,7 +3388,9 @@
         errorLine1="        public Builder setPositiveButtonIcon(Drawable icon) {"
         errorLine2="                                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="496"
+            column="46"/>
     </issue>
 
     <issue
@@ -2821,7 +3399,9 @@
         errorLine1="        public Builder setNegativeButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="508"
+            column="16"/>
     </issue>
 
     <issue
@@ -2830,7 +3410,9 @@
         errorLine1="        public Builder setNegativeButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="                                                                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="508"
+            column="71"/>
     </issue>
 
     <issue
@@ -2839,7 +3421,9 @@
         errorLine1="        public Builder setNegativeButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="521"
+            column="16"/>
     </issue>
 
     <issue
@@ -2848,7 +3432,9 @@
         errorLine1="        public Builder setNegativeButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="521"
+            column="42"/>
     </issue>
 
     <issue
@@ -2857,7 +3443,9 @@
         errorLine1="        public Builder setNegativeButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                                                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="521"
+            column="67"/>
     </issue>
 
     <issue
@@ -2866,7 +3454,9 @@
         errorLine1="        public Builder setNegativeButtonIcon(Drawable icon) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="532"
+            column="16"/>
     </issue>
 
     <issue
@@ -2875,7 +3465,9 @@
         errorLine1="        public Builder setNegativeButtonIcon(Drawable icon) {"
         errorLine2="                                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="532"
+            column="46"/>
     </issue>
 
     <issue
@@ -2884,7 +3476,9 @@
         errorLine1="        public Builder setNeutralButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="544"
+            column="16"/>
     </issue>
 
     <issue
@@ -2893,7 +3487,9 @@
         errorLine1="        public Builder setNeutralButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="                                                                     ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="544"
+            column="70"/>
     </issue>
 
     <issue
@@ -2902,7 +3498,9 @@
         errorLine1="        public Builder setNeutralButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="557"
+            column="16"/>
     </issue>
 
     <issue
@@ -2911,7 +3509,9 @@
         errorLine1="        public Builder setNeutralButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="557"
+            column="41"/>
     </issue>
 
     <issue
@@ -2920,7 +3520,9 @@
         errorLine1="        public Builder setNeutralButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="557"
+            column="66"/>
     </issue>
 
     <issue
@@ -2929,7 +3531,9 @@
         errorLine1="        public Builder setNeutralButtonIcon(Drawable icon) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="568"
+            column="16"/>
     </issue>
 
     <issue
@@ -2938,7 +3542,9 @@
         errorLine1="        public Builder setNeutralButtonIcon(Drawable icon) {"
         errorLine2="                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="568"
+            column="45"/>
     </issue>
 
     <issue
@@ -2947,7 +3553,9 @@
         errorLine1="        public Builder setCancelable(boolean cancelable) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="578"
+            column="16"/>
     </issue>
 
     <issue
@@ -2956,7 +3564,9 @@
         errorLine1="        public Builder setOnCancelListener(OnCancelListener onCancelListener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="599"
+            column="16"/>
     </issue>
 
     <issue
@@ -2965,7 +3575,9 @@
         errorLine1="        public Builder setOnCancelListener(OnCancelListener onCancelListener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="599"
+            column="44"/>
     </issue>
 
     <issue
@@ -2974,7 +3586,9 @@
         errorLine1="        public Builder setOnDismissListener(OnDismissListener onDismissListener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="609"
+            column="16"/>
     </issue>
 
     <issue
@@ -2983,7 +3597,9 @@
         errorLine1="        public Builder setOnDismissListener(OnDismissListener onDismissListener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="609"
+            column="45"/>
     </issue>
 
     <issue
@@ -2992,7 +3608,9 @@
         errorLine1="        public Builder setOnKeyListener(OnKeyListener onKeyListener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="619"
+            column="16"/>
     </issue>
 
     <issue
@@ -3001,7 +3619,9 @@
         errorLine1="        public Builder setOnKeyListener(OnKeyListener onKeyListener) {"
         errorLine2="                                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="619"
+            column="41"/>
     </issue>
 
     <issue
@@ -3010,7 +3630,9 @@
         errorLine1="        public Builder setItems(@ArrayRes int itemsId, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="630"
+            column="16"/>
     </issue>
 
     <issue
@@ -3019,7 +3641,9 @@
         errorLine1="        public Builder setItems(@ArrayRes int itemsId, final OnClickListener listener) {"
         errorLine2="                                                             ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="630"
+            column="62"/>
     </issue>
 
     <issue
@@ -3028,7 +3652,9 @@
         errorLine1="        public Builder setItems(CharSequence[] items, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="642"
+            column="16"/>
     </issue>
 
     <issue
@@ -3037,7 +3663,9 @@
         errorLine1="        public Builder setItems(CharSequence[] items, final OnClickListener listener) {"
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="642"
+            column="33"/>
     </issue>
 
     <issue
@@ -3046,7 +3674,9 @@
         errorLine1="        public Builder setItems(CharSequence[] items, final OnClickListener listener) {"
         errorLine2="                                                            ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="642"
+            column="61"/>
     </issue>
 
     <issue
@@ -3055,7 +3685,9 @@
         errorLine1="        public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="658"
+            column="16"/>
     </issue>
 
     <issue
@@ -3064,7 +3696,9 @@
         errorLine1="        public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="658"
+            column="41"/>
     </issue>
 
     <issue
@@ -3073,7 +3707,9 @@
         errorLine1="        public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="658"
+            column="68"/>
     </issue>
 
     <issue
@@ -3082,7 +3718,9 @@
         errorLine1="        public Builder setCursor(final Cursor cursor, final OnClickListener listener,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="676"
+            column="16"/>
     </issue>
 
     <issue
@@ -3091,7 +3729,9 @@
         errorLine1="        public Builder setCursor(final Cursor cursor, final OnClickListener listener,"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="676"
+            column="40"/>
     </issue>
 
     <issue
@@ -3100,7 +3740,9 @@
         errorLine1="        public Builder setCursor(final Cursor cursor, final OnClickListener listener,"
         errorLine2="                                                            ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="676"
+            column="61"/>
     </issue>
 
     <issue
@@ -3109,7 +3751,9 @@
         errorLine1="                String labelColumn) {"
         errorLine2="                ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="677"
+            column="17"/>
     </issue>
 
     <issue
@@ -3118,7 +3762,9 @@
         errorLine1="        public Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="702"
+            column="16"/>
     </issue>
 
     <issue
@@ -3127,7 +3773,9 @@
         errorLine1="        public Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems,"
         errorLine2="                                                                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="702"
+            column="67"/>
     </issue>
 
     <issue
@@ -3136,7 +3784,9 @@
         errorLine1="                final OnMultiChoiceClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="703"
+            column="23"/>
     </issue>
 
     <issue
@@ -3145,7 +3795,9 @@
         errorLine1="        public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="728"
+            column="16"/>
     </issue>
 
     <issue
@@ -3154,7 +3806,9 @@
         errorLine1="        public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,"
         errorLine2="                                           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="728"
+            column="44"/>
     </issue>
 
     <issue
@@ -3163,7 +3817,9 @@
         errorLine1="        public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,"
         errorLine2="                                                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="728"
+            column="66"/>
     </issue>
 
     <issue
@@ -3172,7 +3828,9 @@
         errorLine1="                final OnMultiChoiceClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="729"
+            column="23"/>
     </issue>
 
     <issue
@@ -3181,7 +3839,9 @@
         errorLine1="        public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="756"
+            column="16"/>
     </issue>
 
     <issue
@@ -3190,7 +3850,9 @@
         errorLine1="        public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
         errorLine2="                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="756"
+            column="44"/>
     </issue>
 
     <issue
@@ -3199,7 +3861,9 @@
         errorLine1="        public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="756"
+            column="59"/>
     </issue>
 
     <issue
@@ -3208,7 +3872,9 @@
         errorLine1="        public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
         errorLine2="                                                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="756"
+            column="83"/>
     </issue>
 
     <issue
@@ -3217,7 +3883,9 @@
         errorLine1="                final OnMultiChoiceClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="757"
+            column="23"/>
     </issue>
 
     <issue
@@ -3226,7 +3894,9 @@
         errorLine1="        public Builder setSingleChoiceItems(@ArrayRes int itemsId, int checkedItem,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="781"
+            column="16"/>
     </issue>
 
     <issue
@@ -3235,7 +3905,9 @@
         errorLine1="                final OnClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="782"
+            column="23"/>
     </issue>
 
     <issue
@@ -3244,7 +3916,9 @@
         errorLine1="        public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="806"
+            column="16"/>
     </issue>
 
     <issue
@@ -3253,7 +3927,9 @@
         errorLine1="        public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn,"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="806"
+            column="45"/>
     </issue>
 
     <issue
@@ -3262,7 +3938,9 @@
         errorLine1="        public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn,"
         errorLine2="                                                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="806"
+            column="77"/>
     </issue>
 
     <issue
@@ -3271,7 +3949,9 @@
         errorLine1="                final OnClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="807"
+            column="23"/>
     </issue>
 
     <issue
@@ -3280,7 +3960,9 @@
         errorLine1="        public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="830"
+            column="16"/>
     </issue>
 
     <issue
@@ -3289,7 +3971,9 @@
         errorLine1="        public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="830"
+            column="45"/>
     </issue>
 
     <issue
@@ -3298,7 +3982,9 @@
         errorLine1="        public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {"
         errorLine2="                                                                                         ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="830"
+            column="90"/>
     </issue>
 
     <issue
@@ -3307,7 +3993,9 @@
         errorLine1="        public Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="852"
+            column="16"/>
     </issue>
 
     <issue
@@ -3316,7 +4004,9 @@
         errorLine1="        public Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="852"
+            column="45"/>
     </issue>
 
     <issue
@@ -3325,7 +4015,9 @@
         errorLine1="        public Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {"
         errorLine2="                                                                                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="852"
+            column="89"/>
     </issue>
 
     <issue
@@ -3334,7 +4026,9 @@
         errorLine1="        public Builder setOnItemSelectedListener(final AdapterView.OnItemSelectedListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="867"
+            column="16"/>
     </issue>
 
     <issue
@@ -3343,7 +4037,9 @@
         errorLine1="        public Builder setOnItemSelectedListener(final AdapterView.OnItemSelectedListener listener) {"
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="867"
+            column="56"/>
     </issue>
 
     <issue
@@ -3352,7 +4048,9 @@
         errorLine1="        public Builder setView(int layoutResId) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="880"
+            column="16"/>
     </issue>
 
     <issue
@@ -3361,7 +4059,9 @@
         errorLine1="        public Builder setView(View view) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="901"
+            column="16"/>
     </issue>
 
     <issue
@@ -3370,7 +4070,9 @@
         errorLine1="        public Builder setView(View view) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="901"
+            column="32"/>
     </issue>
 
     <issue
@@ -3379,7 +4081,9 @@
         errorLine1="        public Builder setRecycleOnMeasureEnabled(boolean enabled) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="965"
+            column="16"/>
     </issue>
 
     <issue
@@ -3388,7 +4092,9 @@
         errorLine1="        public AlertDialog show() {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+            line="1007"
+            column="16"/>
     </issue>
 
     <issue
@@ -3397,7 +4103,9 @@
         errorLine1="    public AllCapsTransformationMethod(Context context) {"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+            line="37"
+            column="40"/>
     </issue>
 
     <issue
@@ -3406,7 +4114,9 @@
         errorLine1="    public CharSequence getTransformation(CharSequence source, View view) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+            line="42"
+            column="12"/>
     </issue>
 
     <issue
@@ -3415,7 +4125,9 @@
         errorLine1="    public CharSequence getTransformation(CharSequence source, View view) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+            line="42"
+            column="43"/>
     </issue>
 
     <issue
@@ -3424,7 +4136,9 @@
         errorLine1="    public CharSequence getTransformation(CharSequence source, View view) {"
         errorLine2="                                                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+            line="42"
+            column="64"/>
     </issue>
 
     <issue
@@ -3433,7 +4147,9 @@
         errorLine1="    public void onFocusChanged(View view, CharSequence sourceText, boolean focused,"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+            line="47"
+            column="32"/>
     </issue>
 
     <issue
@@ -3442,7 +4158,9 @@
         errorLine1="    public void onFocusChanged(View view, CharSequence sourceText, boolean focused,"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+            line="47"
+            column="43"/>
     </issue>
 
     <issue
@@ -3451,7 +4169,9 @@
         errorLine1="            int direction, Rect previouslyFocusedRect) {"
         errorLine2="                           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+            line="48"
+            column="28"/>
     </issue>
 
     <issue
@@ -3460,7 +4180,9 @@
         errorLine1="    protected void attachBaseContext(Context newBase) {"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="138"
+            column="38"/>
     </issue>
 
     <issue
@@ -3469,7 +4191,9 @@
         errorLine1="    public void setContentView(View view) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="199"
+            column="32"/>
     </issue>
 
     <issue
@@ -3478,7 +4202,9 @@
         errorLine1="    public void setContentView(View view, ViewGroup.LayoutParams params) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="205"
+            column="32"/>
     </issue>
 
     <issue
@@ -3487,7 +4213,9 @@
         errorLine1="    public void setContentView(View view, ViewGroup.LayoutParams params) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="205"
+            column="43"/>
     </issue>
 
     <issue
@@ -3496,7 +4224,9 @@
         errorLine1="    public void addContentView(View view, ViewGroup.LayoutParams params) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="211"
+            column="32"/>
     </issue>
 
     <issue
@@ -3505,7 +4235,9 @@
         errorLine1="    public void addContentView(View view, ViewGroup.LayoutParams params) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="211"
+            column="43"/>
     </issue>
 
     <issue
@@ -3514,7 +4246,9 @@
         errorLine1="    protected void onTitleChanged(CharSequence title, int color) {"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="283"
+            column="35"/>
     </issue>
 
     <issue
@@ -3523,7 +4257,9 @@
         errorLine1="    public boolean onMenuOpened(int featureId, Menu menu) {"
         errorLine2="                                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="563"
+            column="48"/>
     </issue>
 
     <issue
@@ -3532,7 +4268,9 @@
         errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
         errorLine2="                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="590"
+            column="37"/>
     </issue>
 
     <issue
@@ -3541,7 +4279,9 @@
         errorLine1="    public Resources getResources() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="603"
+            column="12"/>
     </issue>
 
     <issue
@@ -3550,7 +4290,9 @@
         errorLine1="    public boolean onKeyDown(int keyCode, KeyEvent event) {"
         errorLine2="                                          ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+            line="632"
+            column="43"/>
     </issue>
 
     <issue
@@ -3559,7 +4301,9 @@
         errorLine1="    public void setTextAppearance(Context context, int resId) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"
+            line="193"
+            column="35"/>
     </issue>
 
     <issue
@@ -3568,7 +4312,9 @@
         errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"
+            line="201"
+            column="12"/>
     </issue>
 
     <issue
@@ -3577,7 +4323,9 @@
         errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
         errorLine2="                                                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"
+            line="201"
+            column="52"/>
     </issue>
 
     <issue
@@ -3586,7 +4334,9 @@
         errorLine1="    public void setTextAppearance(Context context, int resId) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+            line="179"
+            column="35"/>
     </issue>
 
     <issue
@@ -3595,7 +4345,9 @@
         errorLine1="    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+            line="187"
+            column="48"/>
     </issue>
 
     <issue
@@ -3604,7 +4356,9 @@
         errorLine1="    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+            line="193"
+            column="51"/>
     </issue>
 
     <issue
@@ -3613,7 +4367,9 @@
         errorLine1="    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+            line="218"
+            column="34"/>
     </issue>
 
     <issue
@@ -3622,7 +4378,9 @@
         errorLine1="    public int[] getAutoSizeTextAvailableSizes() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+            line="352"
+            column="12"/>
     </issue>
 
     <issue
@@ -3631,7 +4389,9 @@
         errorLine1="    void onSupportActionModeStarted(ActionMode mode);"
         errorLine2="                                    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"
+            line="35"
+            column="37"/>
     </issue>
 
     <issue
@@ -3640,7 +4400,9 @@
         errorLine1="    void onSupportActionModeFinished(ActionMode mode);"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"
+            line="42"
+            column="38"/>
     </issue>
 
     <issue
@@ -3649,7 +4411,9 @@
         errorLine1="    ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback);"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"
+            line="54"
+            column="50"/>
     </issue>
 
     <issue
@@ -3658,7 +4422,9 @@
         errorLine1="    public void setButtonDrawable(Drawable buttonDrawable) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java"
+            line="104"
+            column="35"/>
     </issue>
 
     <issue
@@ -3667,7 +4433,9 @@
         errorLine1="    public abstract MenuInflater getMenuInflater();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="301"
+            column="21"/>
     </issue>
 
     <issue
@@ -3676,7 +4444,9 @@
         errorLine1="    public abstract void onCreate(Bundle savedInstanceState);"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="315"
+            column="35"/>
     </issue>
 
     <issue
@@ -3685,7 +4455,9 @@
         errorLine1="    public abstract void onPostCreate(Bundle savedInstanceState);"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="320"
+            column="39"/>
     </issue>
 
     <issue
@@ -3694,7 +4466,9 @@
         errorLine1="    public abstract void onConfigurationChanged(Configuration newConfig);"
         errorLine2="                                                ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="326"
+            column="49"/>
     </issue>
 
     <issue
@@ -3703,7 +4477,9 @@
         errorLine1="    public abstract void setContentView(View v);"
         errorLine2="                                        ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="363"
+            column="41"/>
     </issue>
 
     <issue
@@ -3712,7 +4488,9 @@
         errorLine1="    public abstract void setContentView(View v, ViewGroup.LayoutParams lp);"
         errorLine2="                                        ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="374"
+            column="41"/>
     </issue>
 
     <issue
@@ -3721,7 +4499,9 @@
         errorLine1="    public abstract void setContentView(View v, ViewGroup.LayoutParams lp);"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="374"
+            column="49"/>
     </issue>
 
     <issue
@@ -3730,7 +4510,9 @@
         errorLine1="    public abstract void addContentView(View v, ViewGroup.LayoutParams lp);"
         errorLine2="                                        ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="380"
+            column="41"/>
     </issue>
 
     <issue
@@ -3739,7 +4521,9 @@
         errorLine1="    public abstract void addContentView(View v, ViewGroup.LayoutParams lp);"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="380"
+            column="49"/>
     </issue>
 
     <issue
@@ -3748,7 +4532,9 @@
         errorLine1="    public abstract View createView(@Nullable View parent, String name, @NonNull Context context,"
         errorLine2="                    ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="481"
+            column="21"/>
     </issue>
 
     <issue
@@ -3757,7 +4543,9 @@
         errorLine1="    public abstract View createView(@Nullable View parent, String name, @NonNull Context context,"
         errorLine2="                                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="481"
+            column="60"/>
     </issue>
 
     <issue
@@ -3766,7 +4554,9 @@
         errorLine1="    public abstract void onSaveInstanceState(Bundle outState);"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+            line="503"
+            column="46"/>
     </issue>
 
     <issue
@@ -3775,7 +4565,9 @@
         errorLine1="    public AppCompatDialog(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="52"
+            column="28"/>
     </issue>
 
     <issue
@@ -3784,7 +4576,9 @@
         errorLine1="    public AppCompatDialog(Context context, int theme) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="56"
+            column="28"/>
     </issue>
 
     <issue
@@ -3793,7 +4587,9 @@
         errorLine1="    protected AppCompatDialog(Context context, boolean cancelable,"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="70"
+            column="31"/>
     </issue>
 
     <issue
@@ -3802,7 +4598,9 @@
         errorLine1="            OnCancelListener cancelListener) {"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="71"
+            column="13"/>
     </issue>
 
     <issue
@@ -3811,7 +4609,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="76"
+            column="29"/>
     </issue>
 
     <issue
@@ -3820,7 +4620,9 @@
         errorLine1="    public ActionBar getSupportActionBar() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="89"
+            column="12"/>
     </issue>
 
     <issue
@@ -3829,7 +4631,9 @@
         errorLine1="    public void setContentView(View view) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="99"
+            column="32"/>
     </issue>
 
     <issue
@@ -3838,7 +4642,9 @@
         errorLine1="    public void setContentView(View view, ViewGroup.LayoutParams params) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="104"
+            column="32"/>
     </issue>
 
     <issue
@@ -3847,7 +4653,9 @@
         errorLine1="    public void setContentView(View view, ViewGroup.LayoutParams params) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="104"
+            column="43"/>
     </issue>
 
     <issue
@@ -3856,7 +4664,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="116"
+            column="26"/>
     </issue>
 
     <issue
@@ -3865,7 +4675,9 @@
         errorLine1="    public void addContentView(View view, ViewGroup.LayoutParams params) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="128"
+            column="32"/>
     </issue>
 
     <issue
@@ -3874,7 +4686,9 @@
         errorLine1="    public void addContentView(View view, ViewGroup.LayoutParams params) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="128"
+            column="43"/>
     </issue>
 
     <issue
@@ -3883,7 +4697,9 @@
         errorLine1="    public AppCompatDelegate getDelegate() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="175"
+            column="12"/>
     </issue>
 
     <issue
@@ -3892,7 +4708,9 @@
         errorLine1="    public void onSupportActionModeStarted(ActionMode mode) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="193"
+            column="44"/>
     </issue>
 
     <issue
@@ -3901,7 +4719,9 @@
         errorLine1="    public void onSupportActionModeFinished(ActionMode mode) {"
         errorLine2="                                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="197"
+            column="45"/>
     </issue>
 
     <issue
@@ -3910,7 +4730,9 @@
         errorLine1="    public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="202"
+            column="57"/>
     </issue>
 
     <issue
@@ -3919,7 +4741,9 @@
         errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
         errorLine2="                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+            line="212"
+            column="37"/>
     </issue>
 
     <issue
@@ -3928,7 +4752,9 @@
         errorLine1="    public static synchronized AppCompatDrawableManager get() {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"
+            line="465"
+            column="32"/>
     </issue>
 
     <issue
@@ -3937,7 +4763,9 @@
         errorLine1="    public synchronized Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"
+            line="474"
+            column="25"/>
     </issue>
 
     <issue
@@ -3946,7 +4774,9 @@
         errorLine1="    public static synchronized PorterDuffColorFilter getPorterDuffColorFilter("
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"
+            line="505"
+            column="32"/>
     </issue>
 
     <issue
@@ -3955,7 +4785,9 @@
         errorLine1="            int color, PorterDuff.Mode mode) {"
         errorLine2="                       ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"
+            line="506"
+            column="24"/>
     </issue>
 
     <issue
@@ -3964,7 +4796,9 @@
         errorLine1="    public void setTextAppearance(Context context, int resId) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"
+            line="213"
+            column="35"/>
     </issue>
 
     <issue
@@ -3973,7 +4807,9 @@
         errorLine1="    public boolean onDragEvent(@SuppressWarnings(&quot;MissingNullability&quot;) DragEvent event) {"
         errorLine2="                                                                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"
+            line="295"
+            column="72"/>
     </issue>
 
     <issue
@@ -3982,7 +4818,9 @@
         errorLine1="    public void setImageBitmap(Bitmap bm) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatImageButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatImageButton.java"
+            line="112"
+            column="32"/>
     </issue>
 
     <issue
@@ -3991,7 +4829,9 @@
         errorLine1="    public void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java"
+            line="52"
+            column="36"/>
     </issue>
 
     <issue
@@ -4000,7 +4840,9 @@
         errorLine1="    public void setImageBitmap(Bitmap bm) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatImageView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatImageView.java"
+            line="123"
+            column="32"/>
     </issue>
 
     <issue
@@ -4009,7 +4851,9 @@
         errorLine1="    public void setTextAppearance(Context context, int resId) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"
+            line="191"
+            column="35"/>
     </issue>
 
     <issue
@@ -4018,7 +4862,9 @@
         errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"
+            line="199"
+            column="12"/>
     </issue>
 
     <issue
@@ -4027,7 +4873,9 @@
         errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
         errorLine2="                                                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"
+            line="199"
+            column="52"/>
     </issue>
 
     <issue
@@ -4036,7 +4884,9 @@
         errorLine1="    public AppCompatRadioButton(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
+            line="65"
+            column="33"/>
     </issue>
 
     <issue
@@ -4045,7 +4895,9 @@
         errorLine1="    public AppCompatRadioButton(Context context, @Nullable AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
+            line="69"
+            column="33"/>
     </issue>
 
     <issue
@@ -4054,7 +4906,9 @@
         errorLine1="    public AppCompatRadioButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
+            line="73"
+            column="33"/>
     </issue>
 
     <issue
@@ -4063,7 +4917,9 @@
         errorLine1="    public void setButtonDrawable(Drawable buttonDrawable) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
+            line="102"
+            column="35"/>
     </issue>
 
     <issue
@@ -4072,7 +4928,9 @@
         errorLine1="    protected synchronized void onDraw(Canvas canvas) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java"
+            line="59"
+            column="40"/>
     </issue>
 
     <issue
@@ -4081,7 +4939,9 @@
         errorLine1="            int defStyleAttr, int mode, Resources.Theme popupTheme) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="212"
+            column="41"/>
     </issue>
 
     <issue
@@ -4090,7 +4950,9 @@
         errorLine1="    public Context getPopupContext() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="312"
+            column="12"/>
     </issue>
 
     <issue
@@ -4099,7 +4961,9 @@
         errorLine1="    public void setPopupBackgroundDrawable(Drawable background) {"
         errorLine2="                                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="317"
+            column="44"/>
     </issue>
 
     <issue
@@ -4108,7 +4972,9 @@
         errorLine1="    public Drawable getPopupBackground() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="331"
+            column="12"/>
     </issue>
 
     <issue
@@ -4117,7 +4983,9 @@
         errorLine1="    public void setAdapter(SpinnerAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="405"
+            column="28"/>
     </issue>
 
     <issue
@@ -4126,7 +4994,9 @@
         errorLine1="    public boolean onTouchEvent(MotionEvent event) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="431"
+            column="33"/>
     </issue>
 
     <issue
@@ -4135,7 +5005,9 @@
         errorLine1="    public void setPrompt(CharSequence prompt) {"
         errorLine2="                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="466"
+            column="27"/>
     </issue>
 
     <issue
@@ -4144,7 +5016,9 @@
         errorLine1="    public CharSequence getPrompt() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="475"
+            column="12"/>
     </issue>
 
     <issue
@@ -4153,7 +5027,9 @@
         errorLine1="    public Parcelable onSaveInstanceState() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="620"
+            column="12"/>
     </issue>
 
     <issue
@@ -4162,7 +5038,9 @@
         errorLine1="    public void onRestoreInstanceState(Parcelable state) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+            line="628"
+            column="40"/>
     </issue>
 
     <issue
@@ -4171,7 +5049,9 @@
         errorLine1="    public void setTextAppearance(Context context, int resId) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+            line="210"
+            column="35"/>
     </issue>
 
     <issue
@@ -4180,7 +5060,9 @@
         errorLine1="    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+            line="269"
+            column="34"/>
     </issue>
 
     <issue
@@ -4189,7 +5071,9 @@
         errorLine1="    public int[] getAutoSizeTextAvailableSizes() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+            line="430"
+            column="12"/>
     </issue>
 
     <issue
@@ -4198,7 +5082,9 @@
         errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+            line="442"
+            column="12"/>
     </issue>
 
     <issue
@@ -4207,7 +5093,9 @@
         errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
         errorLine2="                                                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+            line="442"
+            column="52"/>
     </issue>
 
     <issue
@@ -4216,7 +5104,9 @@
         errorLine1="    public CharSequence getText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+            line="550"
+            column="12"/>
     </issue>
 
     <issue
@@ -4225,7 +5115,9 @@
         errorLine1="    protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="200"
+            column="48"/>
     </issue>
 
     <issue
@@ -4234,7 +5126,9 @@
         errorLine1="    protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {"
         errorLine2="                                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="200"
+            column="65"/>
     </issue>
 
     <issue
@@ -4243,7 +5137,9 @@
         errorLine1="    protected AppCompatImageView createImageView(Context context, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="205"
+            column="50"/>
     </issue>
 
     <issue
@@ -4252,7 +5148,9 @@
         errorLine1="    protected AppCompatImageView createImageView(Context context, AttributeSet attrs) {"
         errorLine2="                                                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="205"
+            column="67"/>
     </issue>
 
     <issue
@@ -4261,7 +5159,9 @@
         errorLine1="    protected AppCompatButton createButton(Context context, AttributeSet attrs) {"
         errorLine2="                                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="210"
+            column="44"/>
     </issue>
 
     <issue
@@ -4270,7 +5170,9 @@
         errorLine1="    protected AppCompatButton createButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="210"
+            column="61"/>
     </issue>
 
     <issue
@@ -4279,7 +5181,9 @@
         errorLine1="    protected AppCompatEditText createEditText(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="215"
+            column="48"/>
     </issue>
 
     <issue
@@ -4288,7 +5192,9 @@
         errorLine1="    protected AppCompatEditText createEditText(Context context, AttributeSet attrs) {"
         errorLine2="                                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="215"
+            column="65"/>
     </issue>
 
     <issue
@@ -4297,7 +5203,9 @@
         errorLine1="    protected AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="220"
+            column="46"/>
     </issue>
 
     <issue
@@ -4306,7 +5214,9 @@
         errorLine1="    protected AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {"
         errorLine2="                                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="220"
+            column="63"/>
     </issue>
 
     <issue
@@ -4315,7 +5225,9 @@
         errorLine1="    protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="225"
+            column="54"/>
     </issue>
 
     <issue
@@ -4324,7 +5236,9 @@
         errorLine1="    protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="225"
+            column="71"/>
     </issue>
 
     <issue
@@ -4333,7 +5247,9 @@
         errorLine1="    protected AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="230"
+            column="48"/>
     </issue>
 
     <issue
@@ -4342,7 +5258,9 @@
         errorLine1="    protected AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {"
         errorLine2="                                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="230"
+            column="65"/>
     </issue>
 
     <issue
@@ -4351,7 +5269,9 @@
         errorLine1="    protected AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="235"
+            column="54"/>
     </issue>
 
     <issue
@@ -4360,7 +5280,9 @@
         errorLine1="    protected AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="235"
+            column="71"/>
     </issue>
 
     <issue
@@ -4369,7 +5291,9 @@
         errorLine1="    protected AppCompatCheckedTextView createCheckedTextView(Context context, AttributeSet attrs) {"
         errorLine2="                                                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="240"
+            column="62"/>
     </issue>
 
     <issue
@@ -4378,7 +5302,9 @@
         errorLine1="    protected AppCompatCheckedTextView createCheckedTextView(Context context, AttributeSet attrs) {"
         errorLine2="                                                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="240"
+            column="79"/>
     </issue>
 
     <issue
@@ -4387,7 +5313,9 @@
         errorLine1="    protected AppCompatAutoCompleteTextView createAutoCompleteTextView(Context context,"
         errorLine2="                                                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="245"
+            column="72"/>
     </issue>
 
     <issue
@@ -4396,7 +5324,9 @@
         errorLine1="            AttributeSet attrs) {"
         errorLine2="            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="246"
+            column="13"/>
     </issue>
 
     <issue
@@ -4405,7 +5335,9 @@
         errorLine1="    protected AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(Context context,"
         errorLine2="                                                                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="251"
+            column="82"/>
     </issue>
 
     <issue
@@ -4414,7 +5346,9 @@
         errorLine1="            AttributeSet attrs) {"
         errorLine2="            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="252"
+            column="13"/>
     </issue>
 
     <issue
@@ -4423,7 +5357,9 @@
         errorLine1="    protected AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="257"
+            column="50"/>
     </issue>
 
     <issue
@@ -4432,7 +5368,9 @@
         errorLine1="    protected AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {"
         errorLine2="                                                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="257"
+            column="67"/>
     </issue>
 
     <issue
@@ -4441,7 +5379,9 @@
         errorLine1="    protected AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="262"
+            column="46"/>
     </issue>
 
     <issue
@@ -4450,7 +5390,9 @@
         errorLine1="    protected AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {"
         errorLine2="                                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="262"
+            column="63"/>
     </issue>
 
     <issue
@@ -4459,7 +5401,9 @@
         errorLine1="    protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="267"
+            column="56"/>
     </issue>
 
     <issue
@@ -4468,7 +5412,9 @@
         errorLine1="    protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="267"
+            column="73"/>
     </issue>
 
     <issue
@@ -4477,7 +5423,9 @@
         errorLine1="    protected View createView(Context context, String name, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="279"
+            column="31"/>
     </issue>
 
     <issue
@@ -4486,7 +5434,9 @@
         errorLine1="    protected View createView(Context context, String name, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="279"
+            column="48"/>
     </issue>
 
     <issue
@@ -4495,7 +5445,9 @@
         errorLine1="    protected View createView(Context context, String name, AttributeSet attrs) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+            file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+            line="279"
+            column="61"/>
     </issue>
 
     <issue
@@ -4504,7 +5456,9 @@
         errorLine1="    protected Context mSystemContext;"
         errorLine2="              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="40"
+            column="15"/>
     </issue>
 
     <issue
@@ -4513,7 +5467,9 @@
         errorLine1="    protected Context mContext;"
         errorLine2="              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="41"
+            column="15"/>
     </issue>
 
     <issue
@@ -4522,7 +5478,9 @@
         errorLine1="    protected MenuBuilder mMenu;"
         errorLine2="              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="42"
+            column="15"/>
     </issue>
 
     <issue
@@ -4531,7 +5489,9 @@
         errorLine1="    protected LayoutInflater mSystemInflater;"
         errorLine2="              ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="43"
+            column="15"/>
     </issue>
 
     <issue
@@ -4540,7 +5500,9 @@
         errorLine1="    protected LayoutInflater mInflater;"
         errorLine2="              ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="44"
+            column="15"/>
     </issue>
 
     <issue
@@ -4549,7 +5511,9 @@
         errorLine1="    protected MenuView mMenuView;"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="50"
+            column="15"/>
     </issue>
 
     <issue
@@ -4558,7 +5522,9 @@
         errorLine1="    public BaseMenuPresenter(Context context, int menuLayoutRes, int itemLayoutRes) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="61"
+            column="30"/>
     </issue>
 
     <issue
@@ -4567,7 +5533,9 @@
         errorLine1="    public void initForMenu(Context context, MenuBuilder menu) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="69"
+            column="29"/>
     </issue>
 
     <issue
@@ -4576,7 +5544,9 @@
         errorLine1="    public void initForMenu(Context context, MenuBuilder menu) {"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="69"
+            column="46"/>
     </issue>
 
     <issue
@@ -4585,7 +5555,9 @@
         errorLine1="    public MenuView getMenuView(ViewGroup root) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="76"
+            column="12"/>
     </issue>
 
     <issue
@@ -4594,7 +5566,9 @@
         errorLine1="    public MenuView getMenuView(ViewGroup root) {"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="76"
+            column="33"/>
     </issue>
 
     <issue
@@ -4603,7 +5577,9 @@
         errorLine1="    protected void addItemView(View itemView, int childIndex) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="133"
+            column="32"/>
     </issue>
 
     <issue
@@ -4612,7 +5588,9 @@
         errorLine1="    protected boolean filterLeftoverView(ViewGroup parent, int childIndex) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="147"
+            column="42"/>
     </issue>
 
     <issue
@@ -4621,7 +5599,9 @@
         errorLine1="    public void setCallback(Callback cb) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="153"
+            column="29"/>
     </issue>
 
     <issue
@@ -4630,7 +5610,9 @@
         errorLine1="    public Callback getCallback() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="157"
+            column="12"/>
     </issue>
 
     <issue
@@ -4639,7 +5621,9 @@
         errorLine1="    public MenuView.ItemView createItemView(ViewGroup parent) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="166"
+            column="12"/>
     </issue>
 
     <issue
@@ -4648,7 +5632,9 @@
         errorLine1="    public MenuView.ItemView createItemView(ViewGroup parent) {"
         errorLine2="                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="166"
+            column="45"/>
     </issue>
 
     <issue
@@ -4657,7 +5643,9 @@
         errorLine1="    public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="181"
+            column="12"/>
     </issue>
 
     <issue
@@ -4666,7 +5654,9 @@
         errorLine1="    public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="181"
+            column="29"/>
     </issue>
 
     <issue
@@ -4675,7 +5665,9 @@
         errorLine1="    public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
         errorLine2="                                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="181"
+            column="48"/>
     </issue>
 
     <issue
@@ -4684,7 +5676,9 @@
         errorLine1="    public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
         errorLine2="                                                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="181"
+            column="66"/>
     </issue>
 
     <issue
@@ -4693,7 +5687,9 @@
         errorLine1="    public abstract void bindItemView(MenuItemImpl item, MenuView.ItemView itemView);"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="198"
+            column="39"/>
     </issue>
 
     <issue
@@ -4702,7 +5698,9 @@
         errorLine1="    public abstract void bindItemView(MenuItemImpl item, MenuView.ItemView itemView);"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="198"
+            column="58"/>
     </issue>
 
     <issue
@@ -4711,7 +5709,9 @@
         errorLine1="    public boolean shouldIncludeItem(int childIndex, MenuItemImpl item) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="207"
+            column="54"/>
     </issue>
 
     <issue
@@ -4720,7 +5720,9 @@
         errorLine1="    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
         errorLine2="                            ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="212"
+            column="29"/>
     </issue>
 
     <issue
@@ -4729,7 +5731,9 @@
         errorLine1="    public boolean onSubMenuSelected(SubMenuBuilder menu) {"
         errorLine2="                                     ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="219"
+            column="38"/>
     </issue>
 
     <issue
@@ -4738,7 +5742,9 @@
         errorLine1="    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                        ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="233"
+            column="41"/>
     </issue>
 
     <issue
@@ -4747,7 +5753,9 @@
         errorLine1="    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="233"
+            column="59"/>
     </issue>
 
     <issue
@@ -4756,7 +5764,9 @@
         errorLine1="    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                          ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="238"
+            column="43"/>
     </issue>
 
     <issue
@@ -4765,7 +5775,9 @@
         errorLine1="    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+            line="238"
+            column="61"/>
     </issue>
 
     <issue
@@ -4774,7 +5786,9 @@
         errorLine1="    public void dispatchFitSystemWindows(Rect insets) {"
         errorLine2="                                         ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+            line="77"
+            column="42"/>
     </issue>
 
     <issue
@@ -4783,7 +5797,9 @@
         errorLine1="    public void setAttachListener(OnAttachListener attachListener) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+            line="81"
+            column="35"/>
     </issue>
 
     <issue
@@ -4792,7 +5808,9 @@
         errorLine1="    public TypedValue getMinWidthMajor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+            line="176"
+            column="12"/>
     </issue>
 
     <issue
@@ -4801,7 +5819,9 @@
         errorLine1="    public TypedValue getMinWidthMinor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+            line="181"
+            column="12"/>
     </issue>
 
     <issue
@@ -4810,7 +5830,9 @@
         errorLine1="    public TypedValue getFixedWidthMajor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+            line="186"
+            column="12"/>
     </issue>
 
     <issue
@@ -4819,7 +5841,9 @@
         errorLine1="    public TypedValue getFixedWidthMinor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+            line="191"
+            column="12"/>
     </issue>
 
     <issue
@@ -4828,7 +5852,9 @@
         errorLine1="    public TypedValue getFixedHeightMajor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+            line="196"
+            column="12"/>
     </issue>
 
     <issue
@@ -4837,7 +5863,9 @@
         errorLine1="    public TypedValue getFixedHeightMinor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+            line="201"
+            column="12"/>
     </issue>
 
     <issue
@@ -4846,7 +5874,9 @@
         errorLine1="    public ContextThemeWrapper(Context base, @StyleRes int themeResId) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="64"
+            column="32"/>
     </issue>
 
     <issue
@@ -4855,7 +5885,9 @@
         errorLine1="    public ContextThemeWrapper(Context base, Resources.Theme theme) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="78"
+            column="32"/>
     </issue>
 
     <issue
@@ -4864,7 +5896,9 @@
         errorLine1="    public ContextThemeWrapper(Context base, Resources.Theme theme) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="78"
+            column="46"/>
     </issue>
 
     <issue
@@ -4873,7 +5907,9 @@
         errorLine1="    protected void attachBaseContext(Context newBase) {"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="84"
+            column="38"/>
     </issue>
 
     <issue
@@ -4882,7 +5918,9 @@
         errorLine1="    public void applyOverrideConfiguration(Configuration overrideConfiguration) {"
         errorLine2="                                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="98"
+            column="44"/>
     </issue>
 
     <issue
@@ -4891,7 +5929,9 @@
         errorLine1="    public Resources getResources() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="110"
+            column="12"/>
     </issue>
 
     <issue
@@ -4900,7 +5940,9 @@
         errorLine1="    public Resources.Theme getTheme() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="149"
+            column="12"/>
     </issue>
 
     <issue
@@ -4909,7 +5951,9 @@
         errorLine1="    public Object getSystemService(String name) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="163"
+            column="12"/>
     </issue>
 
     <issue
@@ -4918,7 +5962,9 @@
         errorLine1="    public Object getSystemService(String name) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="163"
+            column="36"/>
     </issue>
 
     <issue
@@ -4927,7 +5973,9 @@
         errorLine1="    protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="184"
+            column="41"/>
     </issue>
 
     <issue
@@ -4936,7 +5984,9 @@
         errorLine1="    public AssetManager getAssets() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+            line="201"
+            column="12"/>
     </issue>
 
     <issue
@@ -4945,7 +5995,9 @@
         errorLine1="    void setWindowCallback(Window.Callback cb);"
         errorLine2="                           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+            line="39"
+            column="28"/>
     </issue>
 
     <issue
@@ -4954,7 +6006,9 @@
         errorLine1="    void setWindowTitle(CharSequence title);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+            line="40"
+            column="25"/>
     </issue>
 
     <issue
@@ -4963,7 +6017,9 @@
         errorLine1="    CharSequence getTitle();"
         errorLine2="    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+            line="41"
+            column="5"/>
     </issue>
 
     <issue
@@ -4972,7 +6028,9 @@
         errorLine1="    void setIcon(Drawable d);"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+            line="47"
+            column="18"/>
     </issue>
 
     <issue
@@ -4981,7 +6039,9 @@
         errorLine1="    void setMenu(Menu menu, MenuPresenter.Callback cb);"
         errorLine2="                 ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+            line="55"
+            column="18"/>
     </issue>
 
     <issue
@@ -4990,7 +6050,9 @@
         errorLine1="    void setMenu(Menu menu, MenuPresenter.Callback cb);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+            line="55"
+            column="29"/>
     </issue>
 
     <issue
@@ -4999,7 +6061,9 @@
         errorLine1="    void saveToolbarHierarchyState(SparseArray&lt;Parcelable> toolbarStates);"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+            line="56"
+            column="36"/>
     </issue>
 
     <issue
@@ -5008,7 +6072,9 @@
         errorLine1="    void restoreToolbarHierarchyState(SparseArray&lt;Parcelable> toolbarStates);"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+            line="57"
+            column="39"/>
     </issue>
 
     <issue
@@ -5017,7 +6083,9 @@
         errorLine1="    ViewGroup getViewGroup();"
         errorLine2="    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="47"
+            column="5"/>
     </issue>
 
     <issue
@@ -5026,7 +6094,9 @@
         errorLine1="    Context getContext();"
         errorLine2="    ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="48"
+            column="5"/>
     </issue>
 
     <issue
@@ -5035,7 +6105,9 @@
         errorLine1="    void setWindowCallback(Window.Callback cb);"
         errorLine2="                           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="51"
+            column="28"/>
     </issue>
 
     <issue
@@ -5044,7 +6116,9 @@
         errorLine1="    void setWindowTitle(CharSequence title);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="52"
+            column="25"/>
     </issue>
 
     <issue
@@ -5053,7 +6127,9 @@
         errorLine1="    CharSequence getTitle();"
         errorLine2="    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="53"
+            column="5"/>
     </issue>
 
     <issue
@@ -5062,7 +6138,9 @@
         errorLine1="    void setTitle(CharSequence title);"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="54"
+            column="19"/>
     </issue>
 
     <issue
@@ -5071,7 +6149,9 @@
         errorLine1="    CharSequence getSubtitle();"
         errorLine2="    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="55"
+            column="5"/>
     </issue>
 
     <issue
@@ -5080,7 +6160,9 @@
         errorLine1="    void setSubtitle(CharSequence subtitle);"
         errorLine2="                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="56"
+            column="22"/>
     </issue>
 
     <issue
@@ -5089,7 +6171,9 @@
         errorLine1="    void setIcon(Drawable d);"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="62"
+            column="18"/>
     </issue>
 
     <issue
@@ -5098,7 +6182,9 @@
         errorLine1="    void setLogo(Drawable d);"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="64"
+            column="18"/>
     </issue>
 
     <issue
@@ -5107,7 +6193,9 @@
         errorLine1="    void setMenu(Menu menu, MenuPresenter.Callback cb);"
         errorLine2="                 ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="71"
+            column="18"/>
     </issue>
 
     <issue
@@ -5116,7 +6204,9 @@
         errorLine1="    void setMenu(Menu menu, MenuPresenter.Callback cb);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="71"
+            column="29"/>
     </issue>
 
     <issue
@@ -5125,7 +6215,9 @@
         errorLine1="    void setEmbeddedTabView(ScrollingTabContainerView tabView);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="76"
+            column="29"/>
     </issue>
 
     <issue
@@ -5134,7 +6226,9 @@
         errorLine1="    void setDropdownParams(SpinnerAdapter adapter, AdapterView.OnItemSelectedListener listener);"
         errorLine2="                           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="83"
+            column="28"/>
     </issue>
 
     <issue
@@ -5143,7 +6237,9 @@
         errorLine1="    void setDropdownParams(SpinnerAdapter adapter, AdapterView.OnItemSelectedListener listener);"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="83"
+            column="52"/>
     </issue>
 
     <issue
@@ -5152,7 +6248,9 @@
         errorLine1="    void setCustomView(View view);"
         errorLine2="                       ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="87"
+            column="24"/>
     </issue>
 
     <issue
@@ -5161,7 +6259,9 @@
         errorLine1="    View getCustomView();"
         errorLine2="    ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="88"
+            column="5"/>
     </issue>
 
     <issue
@@ -5170,7 +6270,9 @@
         errorLine1="    ViewPropertyAnimatorCompat setupAnimatorToVisibility(int visibility, long duration);"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="90"
+            column="5"/>
     </issue>
 
     <issue
@@ -5179,7 +6281,9 @@
         errorLine1="    void setNavigationIcon(Drawable icon);"
         errorLine2="                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="91"
+            column="28"/>
     </issue>
 
     <issue
@@ -5188,7 +6292,9 @@
         errorLine1="    void setNavigationContentDescription(CharSequence description);"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="93"
+            column="42"/>
     </issue>
 
     <issue
@@ -5197,7 +6303,9 @@
         errorLine1="    void setDefaultNavigationIcon(Drawable icon);"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="96"
+            column="35"/>
     </issue>
 
     <issue
@@ -5206,7 +6314,9 @@
         errorLine1="    void saveHierarchyState(SparseArray&lt;Parcelable> toolbarStates);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="97"
+            column="29"/>
     </issue>
 
     <issue
@@ -5215,7 +6325,9 @@
         errorLine1="    void restoreHierarchyState(SparseArray&lt;Parcelable> toolbarStates);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="98"
+            column="32"/>
     </issue>
 
     <issue
@@ -5224,7 +6336,9 @@
         errorLine1="    void setBackgroundDrawable(Drawable d);"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="99"
+            column="32"/>
     </issue>
 
     <issue
@@ -5233,7 +6347,9 @@
         errorLine1="    void setMenuCallbacks(MenuPresenter.Callback presenterCallback,"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="103"
+            column="27"/>
     </issue>
 
     <issue
@@ -5242,7 +6358,9 @@
         errorLine1="            MenuBuilder.Callback menuBuilderCallback);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="104"
+            column="13"/>
     </issue>
 
     <issue
@@ -5251,7 +6369,9 @@
         errorLine1="    Menu getMenu();"
         errorLine2="    ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+            line="105"
+            column="5"/>
     </issue>
 
     <issue
@@ -5260,7 +6380,9 @@
         errorLine1="    public DrawerArrowDrawable(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"
+            line="128"
+            column="32"/>
     </issue>
 
     <issue
@@ -5269,7 +6391,9 @@
         errorLine1="    public void draw(Canvas canvas) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"
+            line="325"
+            column="22"/>
     </issue>
 
     <issue
@@ -5278,7 +6402,9 @@
         errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"
+            line="412"
+            column="32"/>
     </issue>
 
     <issue
@@ -5287,7 +6413,9 @@
         errorLine1="    public final Paint getPaint() {"
         errorLine2="                 ~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"/>
+            file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"
+            line="457"
+            column="18"/>
     </issue>
 
     <issue
@@ -5296,7 +6424,9 @@
         errorLine1="    public ExpandedMenuView(Context context, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+            line="52"
+            column="29"/>
     </issue>
 
     <issue
@@ -5305,7 +6435,9 @@
         errorLine1="    public ExpandedMenuView(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+            line="52"
+            column="46"/>
     </issue>
 
     <issue
@@ -5314,7 +6446,9 @@
         errorLine1="    public ExpandedMenuView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+            line="56"
+            column="29"/>
     </issue>
 
     <issue
@@ -5323,7 +6457,9 @@
         errorLine1="    public ExpandedMenuView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+            line="56"
+            column="46"/>
     </issue>
 
     <issue
@@ -5332,7 +6468,9 @@
         errorLine1="    public void initialize(MenuBuilder menu) {"
         errorLine2="                           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+            line="72"
+            column="28"/>
     </issue>
 
     <issue
@@ -5341,7 +6479,9 @@
         errorLine1="    public boolean invokeItem(MenuItemImpl item) {"
         errorLine2="                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+            line="85"
+            column="31"/>
     </issue>
 
     <issue
@@ -5350,7 +6490,9 @@
         errorLine1="    public void onItemClick(AdapterView parent, View v, int position, long id) {"
         errorLine2="                            ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+            line="91"
+            column="29"/>
     </issue>
 
     <issue
@@ -5359,7 +6501,9 @@
         errorLine1="    public void onItemClick(AdapterView parent, View v, int position, long id) {"
         errorLine2="                                                ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+            line="91"
+            column="49"/>
     </issue>
 
     <issue
@@ -5368,7 +6512,9 @@
         errorLine1="    public void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java"
+            line="47"
+            column="47"/>
     </issue>
 
     <issue
@@ -5377,7 +6523,9 @@
         errorLine1="    protected boolean fitSystemWindows(Rect insets) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java"
+            line="52"
+            column="40"/>
     </issue>
 
     <issue
@@ -5386,7 +6534,9 @@
         errorLine1="    public void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java"
+            line="47"
+            column="47"/>
     </issue>
 
     <issue
@@ -5395,7 +6545,9 @@
         errorLine1="    protected boolean fitSystemWindows(Rect insets) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java"/>
+            file="src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java"
+            line="52"
+            column="40"/>
     </issue>
 
     <issue
@@ -5404,7 +6556,9 @@
         errorLine1="        void onFitSystemWindows(Rect insets);"
         errorLine2="                                ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/FitWindowsViewGroup.java"/>
+            file="src/main/java/androidx/appcompat/widget/FitWindowsViewGroup.java"
+            line="32"
+            column="33"/>
     </issue>
 
     <issue
@@ -5413,7 +6567,9 @@
         errorLine1="    void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener);"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/FitWindowsViewGroup.java"/>
+            file="src/main/java/androidx/appcompat/widget/FitWindowsViewGroup.java"
+            line="35"
+            column="40"/>
     </issue>
 
     <issue
@@ -5422,7 +6578,9 @@
         errorLine1="    public ForwardingListener(View src) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+            line="68"
+            column="31"/>
     </issue>
 
     <issue
@@ -5431,7 +6589,9 @@
         errorLine1="    public abstract ShowableListMenu getPopup();"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+            line="90"
+            column="21"/>
     </issue>
 
     <issue
@@ -5440,7 +6600,9 @@
         errorLine1="    public boolean onTouch(View v, MotionEvent event) {"
         errorLine2="                           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+            line="93"
+            column="28"/>
     </issue>
 
     <issue
@@ -5449,7 +6611,9 @@
         errorLine1="    public boolean onTouch(View v, MotionEvent event) {"
         errorLine2="                                   ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+            line="93"
+            column="36"/>
     </issue>
 
     <issue
@@ -5458,7 +6622,9 @@
         errorLine1="    public void onViewAttachedToWindow(View v) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+            line="116"
+            column="40"/>
     </issue>
 
     <issue
@@ -5467,7 +6633,9 @@
         errorLine1="    public void onViewDetachedFromWindow(View v) {"
         errorLine2="                                         ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+            line="120"
+            column="42"/>
     </issue>
 
     <issue
@@ -5476,7 +6644,9 @@
         errorLine1="    public Drawable getDividerDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="239"
+            column="12"/>
     </issue>
 
     <issue
@@ -5485,7 +6655,9 @@
         errorLine1="    public void setDividerDrawable(Drawable divider) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="250"
+            column="36"/>
     </issue>
 
     <issue
@@ -5494,7 +6666,9 @@
         errorLine1="    protected void onDraw(Canvas canvas) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="302"
+            column="27"/>
     </issue>
 
     <issue
@@ -5503,7 +6677,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1750"
+            column="12"/>
     </issue>
 
     <issue
@@ -5512,7 +6688,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1750"
+            column="46"/>
     </issue>
 
     <issue
@@ -5521,7 +6699,9 @@
         errorLine1="    protected LayoutParams generateDefaultLayoutParams() {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1763"
+            column="15"/>
     </issue>
 
     <issue
@@ -5530,7 +6710,9 @@
         errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1773"
+            column="15"/>
     </issue>
 
     <issue
@@ -5539,7 +6721,9 @@
         errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1773"
+            column="49"/>
     </issue>
 
     <issue
@@ -5548,7 +6732,9 @@
         errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1780"
+            column="41"/>
     </issue>
 
     <issue
@@ -5557,7 +6743,9 @@
         errorLine1="    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1785"
+            column="48"/>
     </issue>
 
     <issue
@@ -5566,7 +6754,9 @@
         errorLine1="    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1791"
+            column="51"/>
     </issue>
 
     <issue
@@ -5575,7 +6765,9 @@
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1804"
+            column="29"/>
     </issue>
 
     <issue
@@ -5584,7 +6776,9 @@
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1804"
+            column="40"/>
     </issue>
 
     <issue
@@ -5593,7 +6787,9 @@
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1832"
+            column="29"/>
     </issue>
 
     <issue
@@ -5602,7 +6798,9 @@
         errorLine1="        public LayoutParams(ViewGroup.MarginLayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+            line="1839"
+            column="29"/>
     </issue>
 
     <issue
@@ -5611,7 +6809,9 @@
         errorLine1="    public ListMenuItemView(Context context, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+            line="73"
+            column="29"/>
     </issue>
 
     <issue
@@ -5620,7 +6820,9 @@
         errorLine1="    public ListMenuItemView(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+            line="73"
+            column="46"/>
     </issue>
 
     <issue
@@ -5629,7 +6831,9 @@
         errorLine1="    public ListMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+            line="77"
+            column="29"/>
     </issue>
 
     <issue
@@ -5638,7 +6842,9 @@
         errorLine1="    public ListMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+            line="77"
+            column="46"/>
     </issue>
 
     <issue
@@ -5647,7 +6853,9 @@
         errorLine1="    public void initialize(MenuItemImpl itemData, int menuType) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+            line="123"
+            column="28"/>
     </issue>
 
     <issue
@@ -5656,7 +6864,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+            line="154"
+            column="26"/>
     </issue>
 
     <issue
@@ -5665,7 +6875,9 @@
         errorLine1="    public MenuItemImpl getItemData() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+            line="165"
+            column="12"/>
     </issue>
 
     <issue
@@ -5674,7 +6886,9 @@
         errorLine1="    public void setIcon(Drawable icon) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+            line="255"
+            column="25"/>
     </issue>
 
     <issue
@@ -5683,7 +6897,9 @@
         errorLine1="    public void adjustListItemSelectionBounds(Rect rect) {"
         errorLine2="                                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+            line="346"
+            column="47"/>
     </issue>
 
     <issue
@@ -5692,7 +6908,9 @@
         errorLine1="    public ListMenuPresenter(Context context, int itemLayoutRes) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="70"
+            column="30"/>
     </issue>
 
     <issue
@@ -5701,7 +6919,9 @@
         errorLine1="    public void initForMenu(Context context, MenuBuilder menu) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="87"
+            column="29"/>
     </issue>
 
     <issue
@@ -5710,7 +6930,9 @@
         errorLine1="    public void initForMenu(Context context, MenuBuilder menu) {"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="87"
+            column="46"/>
     </issue>
 
     <issue
@@ -5719,7 +6941,9 @@
         errorLine1="    public MenuView getMenuView(ViewGroup root) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="104"
+            column="12"/>
     </issue>
 
     <issue
@@ -5728,7 +6952,9 @@
         errorLine1="    public MenuView getMenuView(ViewGroup root) {"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="104"
+            column="33"/>
     </issue>
 
     <issue
@@ -5737,7 +6963,9 @@
         errorLine1="    public ListAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="124"
+            column="12"/>
     </issue>
 
     <issue
@@ -5746,7 +6974,9 @@
         errorLine1="    public void setCallback(Callback cb) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="137"
+            column="29"/>
     </issue>
 
     <issue
@@ -5755,7 +6985,9 @@
         errorLine1="    public boolean onSubMenuSelected(SubMenuBuilder subMenu) {"
         errorLine2="                                     ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="142"
+            column="38"/>
     </issue>
 
     <issue
@@ -5764,7 +6996,9 @@
         errorLine1="    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
         errorLine2="                            ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="154"
+            column="29"/>
     </issue>
 
     <issue
@@ -5773,7 +7007,9 @@
         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"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="172"
+            column="29"/>
     </issue>
 
     <issue
@@ -5782,7 +7018,9 @@
         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"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="172"
+            column="52"/>
     </issue>
 
     <issue
@@ -5791,7 +7029,9 @@
         errorLine1="    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                        ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="182"
+            column="41"/>
     </issue>
 
     <issue
@@ -5800,7 +7040,9 @@
         errorLine1="    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="182"
+            column="59"/>
     </issue>
 
     <issue
@@ -5809,7 +7051,9 @@
         errorLine1="    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                          ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="187"
+            column="43"/>
     </issue>
 
     <issue
@@ -5818,7 +7062,9 @@
         errorLine1="    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="187"
+            column="61"/>
     </issue>
 
     <issue
@@ -5827,7 +7073,9 @@
         errorLine1="    public void saveHierarchyState(Bundle outState) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="191"
+            column="36"/>
     </issue>
 
     <issue
@@ -5836,7 +7084,9 @@
         errorLine1="    public void restoreHierarchyState(Bundle inState) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="199"
+            column="39"/>
     </issue>
 
     <issue
@@ -5845,7 +7095,9 @@
         errorLine1="    public Parcelable onSaveInstanceState() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="216"
+            column="12"/>
     </issue>
 
     <issue
@@ -5854,7 +7106,9 @@
         errorLine1="    public void onRestoreInstanceState(Parcelable state) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+            line="227"
+            column="40"/>
     </issue>
 
     <issue
@@ -5863,7 +7117,9 @@
         errorLine1="    public void setListSelector(Drawable selector) {"
         errorLine2="                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"
+            line="418"
+            column="33"/>
     </issue>
 
     <issue
@@ -5872,7 +7128,9 @@
         errorLine1="    public OnTouchListener createDragToOpenListener(View src) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"
+            line="1142"
+            column="12"/>
     </issue>
 
     <issue
@@ -5881,7 +7139,9 @@
         errorLine1="    public OnTouchListener createDragToOpenListener(View src) {"
         errorLine2="                                                    ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"
+            line="1142"
+            column="53"/>
     </issue>
 
     <issue
@@ -5890,7 +7150,9 @@
         errorLine1="    public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly,"
         errorLine2="                       ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+            line="43"
+            column="24"/>
     </issue>
 
     <issue
@@ -5899,7 +7161,9 @@
         errorLine1="    public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly,"
         errorLine2="                                         ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+            line="43"
+            column="42"/>
     </issue>
 
     <issue
@@ -5908,7 +7172,9 @@
         errorLine1="    public MenuBuilder getAdapterMenu() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+            line="70"
+            column="12"/>
     </issue>
 
     <issue
@@ -5917,7 +7183,9 @@
         errorLine1="    public MenuItemImpl getItem(int position) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+            line="75"
+            column="12"/>
     </issue>
 
     <issue
@@ -5926,7 +7194,9 @@
         errorLine1="    public View getView(int position, View convertView, ViewGroup parent) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+            line="92"
+            column="12"/>
     </issue>
 
     <issue
@@ -5935,7 +7205,9 @@
         errorLine1="    public View getView(int position, View convertView, ViewGroup parent) {"
         errorLine2="                                      ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+            line="92"
+            column="39"/>
     </issue>
 
     <issue
@@ -5944,7 +7216,9 @@
         errorLine1="    public View getView(int position, View convertView, ViewGroup parent) {"
         errorLine2="                                                        ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+            line="92"
+            column="57"/>
     </issue>
 
     <issue
@@ -5953,7 +7227,9 @@
         errorLine1="        boolean invokeItem(MenuItemImpl item);"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="220"
+            column="28"/>
     </issue>
 
     <issue
@@ -5962,7 +7238,9 @@
         errorLine1="    public MenuBuilder(Context context) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="223"
+            column="24"/>
     </issue>
 
     <issue
@@ -5971,7 +7249,9 @@
         errorLine1="    public MenuBuilder setDefaultShowAsAction(int defaultShowAsAction) {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="238"
+            column="12"/>
     </issue>
 
     <issue
@@ -5980,7 +7260,9 @@
         errorLine1="    public void addMenuPresenter(MenuPresenter presenter) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="249"
+            column="34"/>
     </issue>
 
     <issue
@@ -5989,7 +7271,9 @@
         errorLine1="    public void addMenuPresenter(MenuPresenter presenter, Context menuContext) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="262"
+            column="34"/>
     </issue>
 
     <issue
@@ -5998,7 +7282,9 @@
         errorLine1="    public void addMenuPresenter(MenuPresenter presenter, Context menuContext) {"
         errorLine2="                                                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="262"
+            column="59"/>
     </issue>
 
     <issue
@@ -6007,7 +7293,9 @@
         errorLine1="    public void removeMenuPresenter(MenuPresenter presenter) {"
         errorLine2="                                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="274"
+            column="37"/>
     </issue>
 
     <issue
@@ -6016,7 +7304,9 @@
         errorLine1="    public void savePresenterStates(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="364"
+            column="37"/>
     </issue>
 
     <issue
@@ -6025,7 +7315,9 @@
         errorLine1="    public void restorePresenterStates(Bundle state) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="368"
+            column="40"/>
     </issue>
 
     <issue
@@ -6034,7 +7326,9 @@
         errorLine1="    public void saveActionViewStates(Bundle outStates) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="372"
+            column="38"/>
     </issue>
 
     <issue
@@ -6043,7 +7337,9 @@
         errorLine1="    public void restoreActionViewStates(Bundle states) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="399"
+            column="41"/>
     </issue>
 
     <issue
@@ -6052,7 +7348,9 @@
         errorLine1="    protected String getActionViewStatesKey() {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="429"
+            column="15"/>
     </issue>
 
     <issue
@@ -6061,7 +7359,9 @@
         errorLine1="    public void setCallback(Callback cb) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="433"
+            column="29"/>
     </issue>
 
     <issue
@@ -6070,7 +7370,9 @@
         errorLine1="    protected MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="440"
+            column="15"/>
     </issue>
 
     <issue
@@ -6079,7 +7381,9 @@
         errorLine1="    protected MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {"
         errorLine2="                                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="440"
+            column="74"/>
     </issue>
 
     <issue
@@ -6088,7 +7392,9 @@
         errorLine1="    public MenuItem add(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="465"
+            column="12"/>
     </issue>
 
     <issue
@@ -6097,7 +7403,9 @@
         errorLine1="    public MenuItem add(CharSequence title) {"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="465"
+            column="25"/>
     </issue>
 
     <issue
@@ -6106,7 +7414,9 @@
         errorLine1="    public MenuItem add(int titleRes) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="470"
+            column="12"/>
     </issue>
 
     <issue
@@ -6115,7 +7425,9 @@
         errorLine1="    public MenuItem add(int group, int id, int categoryOrder, CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="475"
+            column="12"/>
     </issue>
 
     <issue
@@ -6124,7 +7436,9 @@
         errorLine1="    public MenuItem add(int group, int id, int categoryOrder, CharSequence title) {"
         errorLine2="                                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="475"
+            column="63"/>
     </issue>
 
     <issue
@@ -6133,7 +7447,9 @@
         errorLine1="    public MenuItem add(int group, int id, int categoryOrder, int title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="480"
+            column="12"/>
     </issue>
 
     <issue
@@ -6142,7 +7458,9 @@
         errorLine1="    public SubMenu addSubMenu(CharSequence title) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="485"
+            column="12"/>
     </issue>
 
     <issue
@@ -6151,7 +7469,9 @@
         errorLine1="    public SubMenu addSubMenu(CharSequence title) {"
         errorLine2="                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="485"
+            column="31"/>
     </issue>
 
     <issue
@@ -6160,7 +7480,9 @@
         errorLine1="    public SubMenu addSubMenu(int titleRes) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="490"
+            column="12"/>
     </issue>
 
     <issue
@@ -6169,7 +7491,9 @@
         errorLine1="    public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="495"
+            column="12"/>
     </issue>
 
     <issue
@@ -6178,7 +7502,9 @@
         errorLine1="    public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {"
         errorLine2="                                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="495"
+            column="69"/>
     </issue>
 
     <issue
@@ -6187,7 +7513,9 @@
         errorLine1="    public SubMenu addSubMenu(int group, int id, int categoryOrder, int title) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="504"
+            column="12"/>
     </issue>
 
     <issue
@@ -6196,7 +7524,9 @@
         errorLine1="    public int addIntentOptions(int group, int id, int categoryOrder, ComponentName caller,"
         errorLine2="                                                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="518"
+            column="71"/>
     </issue>
 
     <issue
@@ -6205,7 +7535,9 @@
         errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
         errorLine2="            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="519"
+            column="13"/>
     </issue>
 
     <issue
@@ -6214,7 +7546,9 @@
         errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="519"
+            column="33"/>
     </issue>
 
     <issue
@@ -6223,7 +7557,9 @@
         errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
         errorLine2="                                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="519"
+            column="59"/>
     </issue>
 
     <issue
@@ -6232,7 +7568,9 @@
         errorLine1="    public MenuItem findItem(int id) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="692"
+            column="12"/>
     </issue>
 
     <issue
@@ -6241,7 +7579,9 @@
         errorLine1="    public MenuItem getItem(int index) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="751"
+            column="12"/>
     </issue>
 
     <issue
@@ -6250,7 +7590,9 @@
         errorLine1="    public boolean isShortcutKey(int keyCode, KeyEvent event) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="756"
+            column="47"/>
     </issue>
 
     <issue
@@ -6259,7 +7601,9 @@
         errorLine1="    public Context getContext() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="829"
+            column="12"/>
     </issue>
 
     <issue
@@ -6268,7 +7612,9 @@
         errorLine1="    public boolean performShortcut(int keyCode, KeyEvent event, int flags) {"
         errorLine2="                                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="858"
+            column="49"/>
     </issue>
 
     <issue
@@ -6277,7 +7623,9 @@
         errorLine1="    public boolean performItemAction(MenuItem item, int flags) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="974"
+            column="38"/>
     </issue>
 
     <issue
@@ -6286,7 +7634,9 @@
         errorLine1="    public boolean performItemAction(MenuItem item, MenuPresenter preferredPresenter, int flags) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="978"
+            column="38"/>
     </issue>
 
     <issue
@@ -6295,7 +7645,9 @@
         errorLine1="    public boolean performItemAction(MenuItem item, MenuPresenter preferredPresenter, int flags) {"
         errorLine2="                                                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="978"
+            column="53"/>
     </issue>
 
     <issue
@@ -6304,7 +7656,9 @@
         errorLine1="    public ArrayList&lt;MenuItemImpl> getActionItems() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1202"
+            column="12"/>
     </issue>
 
     <issue
@@ -6313,7 +7667,9 @@
         errorLine1="    public ArrayList&lt;MenuItemImpl> getNonActionItems() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1207"
+            column="12"/>
     </issue>
 
     <issue
@@ -6322,7 +7678,9 @@
         errorLine1="    protected MenuBuilder setHeaderTitleInt(CharSequence title) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1258"
+            column="15"/>
     </issue>
 
     <issue
@@ -6331,7 +7689,9 @@
         errorLine1="    protected MenuBuilder setHeaderTitleInt(CharSequence title) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1258"
+            column="45"/>
     </issue>
 
     <issue
@@ -6340,7 +7700,9 @@
         errorLine1="    protected MenuBuilder setHeaderTitleInt(int titleRes) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1270"
+            column="15"/>
     </issue>
 
     <issue
@@ -6349,7 +7711,9 @@
         errorLine1="    protected MenuBuilder setHeaderIconInt(Drawable icon) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1282"
+            column="15"/>
     </issue>
 
     <issue
@@ -6358,7 +7722,9 @@
         errorLine1="    protected MenuBuilder setHeaderIconInt(Drawable icon) {"
         errorLine2="                                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1282"
+            column="44"/>
     </issue>
 
     <issue
@@ -6367,7 +7733,9 @@
         errorLine1="    protected MenuBuilder setHeaderIconInt(int iconRes) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1294"
+            column="15"/>
     </issue>
 
     <issue
@@ -6376,7 +7744,9 @@
         errorLine1="    protected MenuBuilder setHeaderViewInt(View view) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1306"
+            column="15"/>
     </issue>
 
     <issue
@@ -6385,7 +7755,9 @@
         errorLine1="    protected MenuBuilder setHeaderViewInt(View view) {"
         errorLine2="                                           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1306"
+            column="44"/>
     </issue>
 
     <issue
@@ -6394,7 +7766,9 @@
         errorLine1="    public CharSequence getHeaderTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1311"
+            column="12"/>
     </issue>
 
     <issue
@@ -6403,7 +7777,9 @@
         errorLine1="    public Drawable getHeaderIcon() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1315"
+            column="12"/>
     </issue>
 
     <issue
@@ -6412,7 +7788,9 @@
         errorLine1="    public View getHeaderView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1319"
+            column="12"/>
     </issue>
 
     <issue
@@ -6421,7 +7799,9 @@
         errorLine1="    public MenuBuilder getRootMenu() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1327"
+            column="12"/>
     </issue>
 
     <issue
@@ -6430,7 +7810,9 @@
         errorLine1="    public void setCurrentMenuInfo(ContextMenu.ContextMenuInfo menuInfo) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1338"
+            column="36"/>
     </issue>
 
     <issue
@@ -6439,7 +7821,9 @@
         errorLine1="    public boolean expandItemActionView(MenuItemImpl item) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1350"
+            column="41"/>
     </issue>
 
     <issue
@@ -6448,7 +7832,9 @@
         errorLine1="    public boolean collapseItemActionView(MenuItemImpl item) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1372"
+            column="43"/>
     </issue>
 
     <issue
@@ -6457,7 +7843,9 @@
         errorLine1="    public MenuItemImpl getExpandedItem() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+            line="1394"
+            column="12"/>
     </issue>
 
     <issue
@@ -6466,7 +7854,9 @@
         errorLine1="    public MenuItem setEnabled(boolean enabled) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="189"
+            column="12"/>
     </issue>
 
     <issue
@@ -6475,7 +7865,9 @@
         errorLine1="    public Intent getIntent() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="222"
+            column="12"/>
     </issue>
 
     <issue
@@ -6484,7 +7876,9 @@
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="227"
+            column="12"/>
     </issue>
 
     <issue
@@ -6493,7 +7887,9 @@
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="227"
+            column="31"/>
     </issue>
 
     <issue
@@ -6502,7 +7898,9 @@
         errorLine1="    public MenuItem setCallback(Runnable callback) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="236"
+            column="12"/>
     </issue>
 
     <issue
@@ -6511,7 +7909,9 @@
         errorLine1="    public MenuItem setCallback(Runnable callback) {"
         errorLine2="                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="236"
+            column="33"/>
     </issue>
 
     <issue
@@ -6520,7 +7920,9 @@
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="247"
+            column="12"/>
     </issue>
 
     <issue
@@ -6529,7 +7931,9 @@
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="260"
+            column="12"/>
     </issue>
 
     <issue
@@ -6538,7 +7942,9 @@
         errorLine1="    public MenuItem setNumericShortcut(char numericChar) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="289"
+            column="12"/>
     </issue>
 
     <issue
@@ -6547,7 +7953,9 @@
         errorLine1="    public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="302"
+            column="12"/>
     </issue>
 
     <issue
@@ -6556,7 +7964,9 @@
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="316"
+            column="12"/>
     </issue>
 
     <issue
@@ -6565,7 +7975,9 @@
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="326"
+            column="12"/>
     </issue>
 
     <issue
@@ -6574,7 +7986,9 @@
         errorLine1="    public SubMenu getSubMenu() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="418"
+            column="12"/>
     </issue>
 
     <issue
@@ -6583,7 +7997,9 @@
         errorLine1="    public void setSubMenu(SubMenuBuilder subMenu) {"
         errorLine2="                           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="427"
+            column="28"/>
     </issue>
 
     <issue
@@ -6592,7 +8008,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="435"
+            column="12"/>
     </issue>
 
     <issue
@@ -6601,7 +8019,9 @@
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="452"
+            column="12"/>
     </issue>
 
     <issue
@@ -6610,7 +8030,9 @@
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="452"
+            column="30"/>
     </issue>
 
     <issue
@@ -6619,7 +8041,9 @@
         errorLine1="    public MenuItem setTitle(int title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="465"
+            column="12"/>
     </issue>
 
     <issue
@@ -6628,7 +8052,9 @@
         errorLine1="    public CharSequence getTitleCondensed() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="470"
+            column="12"/>
     </issue>
 
     <issue
@@ -6637,7 +8063,9 @@
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="485"
+            column="12"/>
     </issue>
 
     <issue
@@ -6646,7 +8074,9 @@
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="485"
+            column="39"/>
     </issue>
 
     <issue
@@ -6655,7 +8085,9 @@
         errorLine1="    public Drawable getIcon() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="499"
+            column="12"/>
     </issue>
 
     <issue
@@ -6664,7 +8096,9 @@
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="515"
+            column="12"/>
     </issue>
 
     <issue
@@ -6673,7 +8107,9 @@
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="515"
+            column="29"/>
     </issue>
 
     <issue
@@ -6682,7 +8118,9 @@
         errorLine1="    public MenuItem setIcon(int iconResId) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="525"
+            column="12"/>
     </issue>
 
     <issue
@@ -6691,7 +8129,9 @@
         errorLine1="    public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="538"
+            column="12"/>
     </issue>
 
     <issue
@@ -6700,7 +8140,9 @@
         errorLine1="    public ColorStateList getIconTintList() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="549"
+            column="12"/>
     </issue>
 
     <issue
@@ -6709,7 +8151,9 @@
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="554"
+            column="12"/>
     </issue>
 
     <issue
@@ -6718,7 +8162,9 @@
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="554"
+            column="37"/>
     </issue>
 
     <issue
@@ -6727,7 +8173,9 @@
         errorLine1="    public PorterDuff.Mode getIconTintMode() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="565"
+            column="12"/>
     </issue>
 
     <issue
@@ -6736,7 +8184,9 @@
         errorLine1="    public MenuItem setCheckable(boolean checkable) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="594"
+            column="12"/>
     </issue>
 
     <issue
@@ -6745,7 +8195,9 @@
         errorLine1="    public MenuItem setChecked(boolean checked) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="618"
+            column="12"/>
     </issue>
 
     <issue
@@ -6754,7 +8206,9 @@
         errorLine1="    public MenuItem setVisible(boolean shown) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="661"
+            column="12"/>
     </issue>
 
     <issue
@@ -6763,7 +8217,9 @@
         errorLine1="    public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener clickListener) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="671"
+            column="12"/>
     </issue>
 
     <issue
@@ -6772,7 +8228,9 @@
         errorLine1="    public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener clickListener) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="671"
+            column="48"/>
     </issue>
 
     <issue
@@ -6781,7 +8239,9 @@
         errorLine1="    public ContextMenuInfo getMenuInfo() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="686"
+            column="12"/>
     </issue>
 
     <issue
@@ -6790,7 +8250,9 @@
         errorLine1="    public SupportMenuItem setActionView(View view) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="750"
+            column="12"/>
     </issue>
 
     <issue
@@ -6799,7 +8261,9 @@
         errorLine1="    public SupportMenuItem setActionView(View view) {"
         errorLine2="                                         ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="750"
+            column="42"/>
     </issue>
 
     <issue
@@ -6808,7 +8272,9 @@
         errorLine1="    public SupportMenuItem setActionView(int resId) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="761"
+            column="12"/>
     </issue>
 
     <issue
@@ -6817,7 +8283,9 @@
         errorLine1="    public View getActionView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="769"
+            column="12"/>
     </issue>
 
     <issue
@@ -6826,7 +8294,9 @@
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="781"
+            column="12"/>
     </issue>
 
     <issue
@@ -6835,7 +8305,9 @@
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="781"
+            column="39"/>
     </issue>
 
     <issue
@@ -6844,7 +8316,9 @@
         errorLine1="    public android.view.ActionProvider getActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="787"
+            column="12"/>
     </issue>
 
     <issue
@@ -6853,7 +8327,9 @@
         errorLine1="    public ActionProvider getSupportActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="793"
+            column="12"/>
     </issue>
 
     <issue
@@ -6862,7 +8338,9 @@
         errorLine1="    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="798"
+            column="12"/>
     </issue>
 
     <issue
@@ -6871,7 +8349,9 @@
         errorLine1="    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="798"
+            column="53"/>
     </issue>
 
     <issue
@@ -6880,7 +8360,9 @@
         errorLine1="    public SupportMenuItem setShowAsActionFlags(int actionEnum) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="817"
+            column="12"/>
     </issue>
 
     <issue
@@ -6889,7 +8371,9 @@
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="875"
+            column="12"/>
     </issue>
 
     <issue
@@ -6898,7 +8382,9 @@
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="875"
+            column="47"/>
     </issue>
 
     <issue
@@ -6907,7 +8393,9 @@
         errorLine1="    public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="881"
+            column="12"/>
     </issue>
 
     <issue
@@ -6916,7 +8404,9 @@
         errorLine1="    public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="881"
+            column="50"/>
     </issue>
 
     <issue
@@ -6925,7 +8415,9 @@
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="890"
+            column="12"/>
     </issue>
 
     <issue
@@ -6934,7 +8426,9 @@
         errorLine1="    public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="895"
+            column="12"/>
     </issue>
 
     <issue
@@ -6943,7 +8437,9 @@
         errorLine1="    public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="895"
+            column="43"/>
     </issue>
 
     <issue
@@ -6952,7 +8448,9 @@
         errorLine1="    public CharSequence getTooltipText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+            line="904"
+            column="12"/>
     </issue>
 
     <issue
@@ -6961,7 +8459,9 @@
         errorLine1="    public MenuItemWrapperICS(Context context, SupportMenuItem object) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="55"
+            column="31"/>
     </issue>
 
     <issue
@@ -6970,7 +8470,9 @@
         errorLine1="    public MenuItemWrapperICS(Context context, SupportMenuItem object) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="55"
+            column="48"/>
     </issue>
 
     <issue
@@ -6979,7 +8481,9 @@
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="79"
+            column="12"/>
     </issue>
 
     <issue
@@ -6988,7 +8492,9 @@
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="79"
+            column="30"/>
     </issue>
 
     <issue
@@ -6997,7 +8503,9 @@
         errorLine1="    public MenuItem setTitle(int title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="85"
+            column="12"/>
     </issue>
 
     <issue
@@ -7006,7 +8514,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="91"
+            column="12"/>
     </issue>
 
     <issue
@@ -7015,7 +8525,9 @@
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="96"
+            column="12"/>
     </issue>
 
     <issue
@@ -7024,7 +8536,9 @@
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="96"
+            column="39"/>
     </issue>
 
     <issue
@@ -7033,7 +8547,9 @@
         errorLine1="    public CharSequence getTitleCondensed() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="102"
+            column="12"/>
     </issue>
 
     <issue
@@ -7042,7 +8558,9 @@
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="107"
+            column="12"/>
     </issue>
 
     <issue
@@ -7051,7 +8569,9 @@
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="107"
+            column="29"/>
     </issue>
 
     <issue
@@ -7060,7 +8580,9 @@
         errorLine1="    public MenuItem setIcon(int iconRes) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="113"
+            column="12"/>
     </issue>
 
     <issue
@@ -7069,7 +8591,9 @@
         errorLine1="    public Drawable getIcon() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="119"
+            column="12"/>
     </issue>
 
     <issue
@@ -7078,7 +8602,9 @@
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="124"
+            column="12"/>
     </issue>
 
     <issue
@@ -7087,7 +8613,9 @@
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="124"
+            column="31"/>
     </issue>
 
     <issue
@@ -7096,7 +8624,9 @@
         errorLine1="    public Intent getIntent() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="130"
+            column="12"/>
     </issue>
 
     <issue
@@ -7105,7 +8635,9 @@
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="135"
+            column="12"/>
     </issue>
 
     <issue
@@ -7114,7 +8646,9 @@
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="141"
+            column="12"/>
     </issue>
 
     <issue
@@ -7123,7 +8657,9 @@
         errorLine1="    public MenuItem setNumericShortcut(char numericChar) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="148"
+            column="12"/>
     </issue>
 
     <issue
@@ -7132,7 +8668,9 @@
         errorLine1="    public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="154"
+            column="12"/>
     </issue>
 
     <issue
@@ -7141,7 +8679,9 @@
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="170"
+            column="12"/>
     </issue>
 
     <issue
@@ -7150,7 +8690,9 @@
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="176"
+            column="12"/>
     </issue>
 
     <issue
@@ -7159,7 +8701,9 @@
         errorLine1="    public MenuItem setCheckable(boolean checkable) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="192"
+            column="12"/>
     </issue>
 
     <issue
@@ -7168,7 +8712,9 @@
         errorLine1="    public MenuItem setChecked(boolean checked) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="203"
+            column="12"/>
     </issue>
 
     <issue
@@ -7177,7 +8723,9 @@
         errorLine1="    public MenuItem setVisible(boolean visible) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="214"
+            column="12"/>
     </issue>
 
     <issue
@@ -7186,7 +8734,9 @@
         errorLine1="    public MenuItem setEnabled(boolean enabled) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="224"
+            column="12"/>
     </issue>
 
     <issue
@@ -7195,7 +8745,9 @@
         errorLine1="    public SubMenu getSubMenu() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="240"
+            column="12"/>
     </issue>
 
     <issue
@@ -7204,7 +8756,9 @@
         errorLine1="    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="245"
+            column="12"/>
     </issue>
 
     <issue
@@ -7213,7 +8767,9 @@
         errorLine1="    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="245"
+            column="48"/>
     </issue>
 
     <issue
@@ -7222,7 +8778,9 @@
         errorLine1="    public ContextMenu.ContextMenuInfo getMenuInfo() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="252"
+            column="12"/>
     </issue>
 
     <issue
@@ -7231,7 +8789,9 @@
         errorLine1="    public MenuItem setShowAsActionFlags(int actionEnum) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="262"
+            column="12"/>
     </issue>
 
     <issue
@@ -7240,7 +8800,9 @@
         errorLine1="    public MenuItem setActionView(View view) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="268"
+            column="12"/>
     </issue>
 
     <issue
@@ -7249,7 +8811,9 @@
         errorLine1="    public MenuItem setActionView(View view) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="268"
+            column="35"/>
     </issue>
 
     <issue
@@ -7258,7 +8822,9 @@
         errorLine1="    public MenuItem setActionView(int resId) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="277"
+            column="12"/>
     </issue>
 
     <issue
@@ -7267,7 +8833,9 @@
         errorLine1="    public View getActionView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="290"
+            column="12"/>
     </issue>
 
     <issue
@@ -7276,7 +8844,9 @@
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider provider) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="299"
+            column="12"/>
     </issue>
 
     <issue
@@ -7285,7 +8855,9 @@
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider provider) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="299"
+            column="39"/>
     </issue>
 
     <issue
@@ -7294,7 +8866,9 @@
         errorLine1="    public android.view.ActionProvider getActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="311"
+            column="12"/>
     </issue>
 
     <issue
@@ -7303,7 +8877,9 @@
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="335"
+            column="12"/>
     </issue>
 
     <issue
@@ -7312,7 +8888,9 @@
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="335"
+            column="47"/>
     </issue>
 
     <issue
@@ -7321,7 +8899,9 @@
         errorLine1="    public MenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="342"
+            column="12"/>
     </issue>
 
     <issue
@@ -7330,7 +8910,9 @@
         errorLine1="    public MenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="342"
+            column="43"/>
     </issue>
 
     <issue
@@ -7339,7 +8921,9 @@
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="348"
+            column="12"/>
     </issue>
 
     <issue
@@ -7348,7 +8932,9 @@
         errorLine1="    public MenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="353"
+            column="12"/>
     </issue>
 
     <issue
@@ -7357,7 +8943,9 @@
         errorLine1="    public MenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="353"
+            column="36"/>
     </issue>
 
     <issue
@@ -7366,7 +8954,9 @@
         errorLine1="    public CharSequence getTooltipText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="359"
+            column="12"/>
     </issue>
 
     <issue
@@ -7375,7 +8965,9 @@
         errorLine1="    public MenuItem setIconTintList(ColorStateList tint) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="364"
+            column="12"/>
     </issue>
 
     <issue
@@ -7384,7 +8976,9 @@
         errorLine1="    public MenuItem setIconTintList(ColorStateList tint) {"
         errorLine2="                                    ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="364"
+            column="37"/>
     </issue>
 
     <issue
@@ -7393,7 +8987,9 @@
         errorLine1="    public ColorStateList getIconTintList() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="370"
+            column="12"/>
     </issue>
 
     <issue
@@ -7402,7 +8998,9 @@
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode tintMode) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="375"
+            column="12"/>
     </issue>
 
     <issue
@@ -7411,7 +9009,9 @@
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode tintMode) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="375"
+            column="37"/>
     </issue>
 
     <issue
@@ -7420,7 +9020,9 @@
         errorLine1="    public PorterDuff.Mode getIconTintMode() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+            line="381"
+            column="12"/>
     </issue>
 
     <issue
@@ -7429,7 +9031,9 @@
         errorLine1="    public ListView getListView() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java"
+            line="353"
+            column="12"/>
     </issue>
 
     <issue
@@ -7438,7 +9042,9 @@
         errorLine1="    public void setEnterTransition(Object enterTransition) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+            line="87"
+            column="36"/>
     </issue>
 
     <issue
@@ -7447,7 +9053,9 @@
         errorLine1="    public void setExitTransition(Object exitTransition) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+            line="93"
+            column="35"/>
     </issue>
 
     <issue
@@ -7456,7 +9064,9 @@
         errorLine1="    public void setHoverListener(MenuItemHoverListener hoverListener) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+            line="99"
+            column="34"/>
     </issue>
 
     <issue
@@ -7465,7 +9075,9 @@
         errorLine1="        public MenuDropDownListView(Context context, boolean hijackFocus) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+            line="148"
+            column="37"/>
     </issue>
 
     <issue
@@ -7474,7 +9086,9 @@
         errorLine1="        public void setHoverListener(MenuItemHoverListener hoverListener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+            line="163"
+            column="38"/>
     </issue>
 
     <issue
@@ -7483,7 +9097,9 @@
         errorLine1="        public boolean onKeyDown(int keyCode, KeyEvent event) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+            line="172"
+            column="47"/>
     </issue>
 
     <issue
@@ -7492,7 +9108,9 @@
         errorLine1="        public boolean onHoverEvent(MotionEvent ev) {"
         errorLine2="                                    ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+            line="201"
+            column="37"/>
     </issue>
 
     <issue
@@ -7501,7 +9119,9 @@
         errorLine1="    void initForMenu(Context context, MenuBuilder menu);"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="70"
+            column="22"/>
     </issue>
 
     <issue
@@ -7510,7 +9130,9 @@
         errorLine1="    void initForMenu(Context context, MenuBuilder menu);"
         errorLine2="                                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="70"
+            column="39"/>
     </issue>
 
     <issue
@@ -7519,7 +9141,9 @@
         errorLine1="    MenuView getMenuView(ViewGroup root);"
         errorLine2="    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="79"
+            column="5"/>
     </issue>
 
     <issue
@@ -7528,7 +9152,9 @@
         errorLine1="    MenuView getMenuView(ViewGroup root);"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="79"
+            column="26"/>
     </issue>
 
     <issue
@@ -7537,7 +9163,9 @@
         errorLine1="    void setCallback(Callback cb);"
         errorLine2="                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="94"
+            column="22"/>
     </issue>
 
     <issue
@@ -7546,7 +9174,9 @@
         errorLine1="    boolean onSubMenuSelected(SubMenuBuilder subMenu);"
         errorLine2="                              ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="104"
+            column="31"/>
     </issue>
 
     <issue
@@ -7555,7 +9185,9 @@
         errorLine1="    void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing);"
         errorLine2="                     ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="116"
+            column="22"/>
     </issue>
 
     <issue
@@ -7564,7 +9196,9 @@
         errorLine1="    boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item);"
         errorLine2="                                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="131"
+            column="34"/>
     </issue>
 
     <issue
@@ -7573,7 +9207,9 @@
         errorLine1="    boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item);"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="131"
+            column="52"/>
     </issue>
 
     <issue
@@ -7582,7 +9218,9 @@
         errorLine1="    boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item);"
         errorLine2="                                   ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="140"
+            column="36"/>
     </issue>
 
     <issue
@@ -7591,7 +9229,9 @@
         errorLine1="    boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item);"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="140"
+            column="54"/>
     </issue>
 
     <issue
@@ -7600,7 +9240,9 @@
         errorLine1="    Parcelable onSaveInstanceState();"
         errorLine2="    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="154"
+            column="5"/>
     </issue>
 
     <issue
@@ -7609,7 +9251,9 @@
         errorLine1="    void onRestoreInstanceState(Parcelable state);"
         errorLine2="                                ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+            line="160"
+            column="33"/>
     </issue>
 
     <issue
@@ -7618,7 +9262,9 @@
         errorLine1="    void initialize(MenuBuilder menu);"
         errorLine2="                    ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+            line="39"
+            column="21"/>
     </issue>
 
     <issue
@@ -7627,7 +9273,9 @@
         errorLine1="        void initialize(MenuItemImpl itemData, int menuType);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+            line="60"
+            column="25"/>
     </issue>
 
     <issue
@@ -7636,7 +9284,9 @@
         errorLine1="        MenuItemImpl getItemData();"
         errorLine2="        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+            line="66"
+            column="9"/>
     </issue>
 
     <issue
@@ -7645,7 +9295,9 @@
         errorLine1="        void setTitle(CharSequence title);"
         errorLine2="                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+            line="72"
+            column="23"/>
     </issue>
 
     <issue
@@ -7654,7 +9306,9 @@
         errorLine1="        void setIcon(Drawable icon);"
         errorLine2="                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+            line="106"
+            column="22"/>
     </issue>
 
     <issue
@@ -7663,7 +9317,9 @@
         errorLine1="    public MenuWrapperICS(Context context, SupportMenu object) {"
         errorLine2="                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="40"
+            column="27"/>
     </issue>
 
     <issue
@@ -7672,7 +9328,9 @@
         errorLine1="    public MenuWrapperICS(Context context, SupportMenu object) {"
         errorLine2="                                           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="40"
+            column="44"/>
     </issue>
 
     <issue
@@ -7681,7 +9339,9 @@
         errorLine1="    public MenuItem add(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="49"
+            column="12"/>
     </issue>
 
     <issue
@@ -7690,7 +9350,9 @@
         errorLine1="    public MenuItem add(CharSequence title) {"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="49"
+            column="25"/>
     </issue>
 
     <issue
@@ -7699,7 +9361,9 @@
         errorLine1="    public MenuItem add(int titleRes) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="54"
+            column="12"/>
     </issue>
 
     <issue
@@ -7708,7 +9372,9 @@
         errorLine1="    public MenuItem add(int groupId, int itemId, int order, CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="59"
+            column="12"/>
     </issue>
 
     <issue
@@ -7717,7 +9383,9 @@
         errorLine1="    public MenuItem add(int groupId, int itemId, int order, CharSequence title) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="59"
+            column="61"/>
     </issue>
 
     <issue
@@ -7726,7 +9394,9 @@
         errorLine1="    public MenuItem add(int groupId, int itemId, int order, int titleRes) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="64"
+            column="12"/>
     </issue>
 
     <issue
@@ -7735,7 +9405,9 @@
         errorLine1="    public SubMenu addSubMenu(CharSequence title) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="69"
+            column="12"/>
     </issue>
 
     <issue
@@ -7744,7 +9416,9 @@
         errorLine1="    public SubMenu addSubMenu(CharSequence title) {"
         errorLine2="                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="69"
+            column="31"/>
     </issue>
 
     <issue
@@ -7753,7 +9427,9 @@
         errorLine1="    public SubMenu addSubMenu(int titleRes) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="74"
+            column="12"/>
     </issue>
 
     <issue
@@ -7762,7 +9438,9 @@
         errorLine1="    public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="79"
+            column="12"/>
     </issue>
 
     <issue
@@ -7771,7 +9449,9 @@
         errorLine1="    public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {"
         errorLine2="                                                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="79"
+            column="67"/>
     </issue>
 
     <issue
@@ -7780,7 +9460,9 @@
         errorLine1="    public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="84"
+            column="12"/>
     </issue>
 
     <issue
@@ -7789,7 +9471,9 @@
         errorLine1="    public int addIntentOptions(int groupId, int itemId, int order, ComponentName caller,"
         errorLine2="                                                                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="90"
+            column="69"/>
     </issue>
 
     <issue
@@ -7798,7 +9482,9 @@
         errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
         errorLine2="            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="91"
+            column="13"/>
     </issue>
 
     <issue
@@ -7807,7 +9493,9 @@
         errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="91"
+            column="33"/>
     </issue>
 
     <issue
@@ -7816,7 +9504,9 @@
         errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
         errorLine2="                                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="91"
+            column="59"/>
     </issue>
 
     <issue
@@ -7825,7 +9515,9 @@
         errorLine1="    public MenuItem findItem(int id) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="148"
+            column="12"/>
     </issue>
 
     <issue
@@ -7834,7 +9526,9 @@
         errorLine1="    public MenuItem getItem(int index) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="158"
+            column="12"/>
     </issue>
 
     <issue
@@ -7843,7 +9537,9 @@
         errorLine1="    public boolean performShortcut(int keyCode, KeyEvent event, int flags) {"
         errorLine2="                                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="168"
+            column="49"/>
     </issue>
 
     <issue
@@ -7852,7 +9548,9 @@
         errorLine1="    public boolean isShortcutKey(int keyCode, KeyEvent event) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+            line="173"
+            column="47"/>
     </issue>
 
     <issue
@@ -7861,7 +9559,9 @@
         errorLine1="        boolean onMenuItemClick(MenuItem item);"
         errorLine2="                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/PopupMenu.java"/>
+            file="src/main/java/androidx/appcompat/widget/PopupMenu.java"
+            line="295"
+            column="33"/>
     </issue>
 
     <issue
@@ -7870,7 +9570,9 @@
         errorLine1="        void onDismiss(PopupMenu menu);"
         errorLine2="                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/PopupMenu.java"/>
+            file="src/main/java/androidx/appcompat/widget/PopupMenu.java"
+            line="307"
+            column="24"/>
     </issue>
 
     <issue
@@ -7879,7 +9581,9 @@
         errorLine1="    protected ViewPropertyAnimator mVisibilityAnim;"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+            line="75"
+            column="15"/>
     </issue>
 
     <issue
@@ -7888,7 +9592,9 @@
         errorLine1="    protected void onConfigurationChanged(Configuration newConfig) {"
         errorLine2="                                          ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+            line="225"
+            column="43"/>
     </issue>
 
     <issue
@@ -7897,7 +9603,9 @@
         errorLine1="    public void addTab(ActionBar.Tab tab, boolean setSelected) {"
         errorLine2="                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+            line="310"
+            column="24"/>
     </issue>
 
     <issue
@@ -7906,7 +9614,9 @@
         errorLine1="    public void addTab(ActionBar.Tab tab, int position, boolean setSelected) {"
         errorLine2="                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+            line="325"
+            column="24"/>
     </issue>
 
     <issue
@@ -7915,7 +9625,9 @@
         errorLine1="    public void onItemSelected(AdapterView&lt;?> adapterView, View view, int position, long id) {"
         errorLine2="                               ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+            line="371"
+            column="32"/>
     </issue>
 
     <issue
@@ -7924,7 +9636,9 @@
         errorLine1="    public void onItemSelected(AdapterView&lt;?> adapterView, View view, int position, long id) {"
         errorLine2="                                                           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+            line="371"
+            column="60"/>
     </issue>
 
     <issue
@@ -7933,7 +9647,9 @@
         errorLine1="    public void onNothingSelected(AdapterView&lt;?> adapterView) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+            line="377"
+            column="35"/>
     </issue>
 
     <issue
@@ -7942,7 +9658,9 @@
         errorLine1="        boolean onQueryTextSubmit(String query);"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="221"
+            column="35"/>
     </issue>
 
     <issue
@@ -7951,7 +9669,9 @@
         errorLine1="        boolean onQueryTextChange(String newText);"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="231"
+            column="35"/>
     </issue>
 
     <issue
@@ -7960,7 +9680,9 @@
         errorLine1="    public void setSearchableInfo(SearchableInfo searchable) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="412"
+            column="35"/>
     </issue>
 
     <issue
@@ -7969,7 +9691,9 @@
         errorLine1="    public void setAppSearchData(Bundle appSearchData) {"
         errorLine2="                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="435"
+            column="34"/>
     </issue>
 
     <issue
@@ -7978,7 +9702,9 @@
         errorLine1="    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {"
         errorLine2="                                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="486"
+            column="48"/>
     </issue>
 
     <issue
@@ -7987,7 +9713,9 @@
         errorLine1="    public void setOnQueryTextListener(OnQueryTextListener listener) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="518"
+            column="40"/>
     </issue>
 
     <issue
@@ -7996,7 +9724,9 @@
         errorLine1="    public void setOnCloseListener(OnCloseListener listener) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="527"
+            column="36"/>
     </issue>
 
     <issue
@@ -8005,7 +9735,9 @@
         errorLine1="    public void setOnQueryTextFocusChangeListener(OnFocusChangeListener listener) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="536"
+            column="51"/>
     </issue>
 
     <issue
@@ -8014,7 +9746,9 @@
         errorLine1="    public void setOnSuggestionListener(OnSuggestionListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="545"
+            column="41"/>
     </issue>
 
     <issue
@@ -8023,7 +9757,9 @@
         errorLine1="    public void setOnSearchClickListener(OnClickListener listener) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="557"
+            column="42"/>
     </issue>
 
     <issue
@@ -8032,7 +9768,9 @@
         errorLine1="    public CharSequence getQuery() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="566"
+            column="12"/>
     </issue>
 
     <issue
@@ -8041,7 +9779,9 @@
         errorLine1="    public void setQuery(CharSequence query, boolean submit) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="578"
+            column="26"/>
     </issue>
 
     <issue
@@ -8050,7 +9790,9 @@
         errorLine1="    public void setSuggestionsAdapter(CursorAdapter adapter) {"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="754"
+            column="39"/>
     </issue>
 
     <issue
@@ -8059,7 +9801,9 @@
         errorLine1="    public CursorAdapter getSuggestionsAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="764"
+            column="12"/>
     </issue>
 
     <issue
@@ -8068,7 +9812,9 @@
         errorLine1="    protected Parcelable onSaveInstanceState() {"
         errorLine2="              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1355"
+            column="15"/>
     </issue>
 
     <issue
@@ -8077,7 +9823,9 @@
         errorLine1="    protected void onRestoreInstanceState(Parcelable state) {"
         errorLine2="                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1363"
+            column="43"/>
     </issue>
 
     <issue
@@ -8086,7 +9834,9 @@
         errorLine1="        public SearchAutoComplete(Context context) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1852"
+            column="35"/>
     </issue>
 
     <issue
@@ -8095,7 +9845,9 @@
         errorLine1="        public SearchAutoComplete(Context context, AttributeSet attrs) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1856"
+            column="35"/>
     </issue>
 
     <issue
@@ -8104,7 +9856,9 @@
         errorLine1="        public SearchAutoComplete(Context context, AttributeSet attrs) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1856"
+            column="52"/>
     </issue>
 
     <issue
@@ -8113,7 +9867,9 @@
         errorLine1="        public SearchAutoComplete(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1860"
+            column="35"/>
     </issue>
 
     <issue
@@ -8122,7 +9878,9 @@
         errorLine1="        public SearchAutoComplete(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1860"
+            column="52"/>
     </issue>
 
     <issue
@@ -8131,7 +9889,9 @@
         errorLine1="        protected void replaceText(CharSequence text) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1895"
+            column="36"/>
     </issue>
 
     <issue
@@ -8140,7 +9900,9 @@
         errorLine1="        protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {"
         errorLine2="                                                                      ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1931"
+            column="71"/>
     </issue>
 
     <issue
@@ -8149,7 +9911,9 @@
         errorLine1="        public boolean onKeyPreIme(int keyCode, KeyEvent event) {"
         errorLine2="                                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1946"
+            column="49"/>
     </issue>
 
     <issue
@@ -8158,7 +9922,9 @@
         errorLine1="        public InputConnection onCreateInputConnection(EditorInfo editorInfo) {"
         errorLine2="               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1993"
+            column="16"/>
     </issue>
 
     <issue
@@ -8167,7 +9933,9 @@
         errorLine1="        public InputConnection onCreateInputConnection(EditorInfo editorInfo) {"
         errorLine2="                                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+            file="src/main/java/androidx/appcompat/widget/SearchView.java"
+            line="1993"
+            column="56"/>
     </issue>
 
     <issue
@@ -8176,7 +9944,9 @@
         errorLine1="        public boolean onShareTargetSelected(ShareActionProvider source, Intent intent);"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+            line="153"
+            column="46"/>
     </issue>
 
     <issue
@@ -8185,7 +9955,9 @@
         errorLine1="        public boolean onShareTargetSelected(ShareActionProvider source, Intent intent);"
         errorLine2="                                                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+            line="153"
+            column="74"/>
     </issue>
 
     <issue
@@ -8194,7 +9966,9 @@
         errorLine1="    public ShareActionProvider(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+            line="196"
+            column="32"/>
     </issue>
 
     <issue
@@ -8203,7 +9977,9 @@
         errorLine1="    public void setOnShareTargetSelectedListener(OnShareTargetSelectedListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+            line="211"
+            column="50"/>
     </issue>
 
     <issue
@@ -8212,7 +9988,9 @@
         errorLine1="    public View onCreateActionView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+            line="220"
+            column="12"/>
     </issue>
 
     <issue
@@ -8221,7 +9999,9 @@
         errorLine1="    public void onPrepareSubMenu(SubMenu subMenu) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+            line="256"
+            column="34"/>
     </issue>
 
     <issue
@@ -8230,7 +10010,9 @@
         errorLine1="    public void setShareHistoryFileName(String shareHistoryFile) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+            line="320"
+            column="41"/>
     </issue>
 
     <issue
@@ -8239,7 +10021,9 @@
         errorLine1="    public void setShareIntent(Intent shareIntent) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+            file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+            line="341"
+            column="32"/>
     </issue>
 
     <issue
@@ -8248,7 +10032,9 @@
         errorLine1="    ListView getListView();"
         errorLine2="    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/ShowableListMenu.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/ShowableListMenu.java"
+            line="41"
+            column="5"/>
     </issue>
 
     <issue
@@ -8257,7 +10043,9 @@
         errorLine1="    public StandaloneActionMode(Context context, ActionBarContextView view,"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="49"
+            column="33"/>
     </issue>
 
     <issue
@@ -8266,7 +10054,9 @@
         errorLine1="    public StandaloneActionMode(Context context, ActionBarContextView view,"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="49"
+            column="50"/>
     </issue>
 
     <issue
@@ -8275,7 +10065,9 @@
         errorLine1="            ActionMode.Callback callback, boolean isFocusable) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="50"
+            column="13"/>
     </issue>
 
     <issue
@@ -8284,7 +10076,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="62"
+            column="26"/>
     </issue>
 
     <issue
@@ -8293,7 +10087,9 @@
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="67"
+            column="29"/>
     </issue>
 
     <issue
@@ -8302,7 +10098,9 @@
         errorLine1="    public void setCustomView(View view) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="93"
+            column="31"/>
     </issue>
 
     <issue
@@ -8311,7 +10109,9 @@
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="114"
+            column="12"/>
     </issue>
 
     <issue
@@ -8320,7 +10120,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="119"
+            column="12"/>
     </issue>
 
     <issue
@@ -8329,7 +10131,9 @@
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="124"
+            column="12"/>
     </issue>
 
     <issue
@@ -8338,7 +10142,9 @@
         errorLine1="    public View getCustomView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="129"
+            column="12"/>
     </issue>
 
     <issue
@@ -8347,7 +10153,9 @@
         errorLine1="    public MenuInflater getMenuInflater() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="134"
+            column="12"/>
     </issue>
 
     <issue
@@ -8356,7 +10164,9 @@
         errorLine1="    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
         errorLine2="                            ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="143"
+            column="29"/>
     </issue>
 
     <issue
@@ -8365,7 +10175,9 @@
         errorLine1="    public boolean onSubMenuSelected(SubMenuBuilder subMenu) {"
         errorLine2="                                     ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="146"
+            column="38"/>
     </issue>
 
     <issue
@@ -8374,7 +10186,9 @@
         errorLine1="    public void onCloseSubMenu(SubMenuBuilder menu) {"
         errorLine2="                               ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+            file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+            line="155"
+            column="32"/>
     </issue>
 
     <issue
@@ -8383,7 +10197,9 @@
         errorLine1="    public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {"
         errorLine2="                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="42"
+            column="27"/>
     </issue>
 
     <issue
@@ -8392,7 +10208,9 @@
         errorLine1="    public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {"
         errorLine2="                                           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="42"
+            column="44"/>
     </issue>
 
     <issue
@@ -8401,7 +10219,9 @@
         errorLine1="    public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {"
         errorLine2="                                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="42"
+            column="68"/>
     </issue>
 
     <issue
@@ -8410,7 +10230,9 @@
         errorLine1="    public Menu getParentMenu() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="69"
+            column="12"/>
     </issue>
 
     <issue
@@ -8419,7 +10241,9 @@
         errorLine1="    public MenuItem getItem() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="74"
+            column="12"/>
     </issue>
 
     <issue
@@ -8428,7 +10252,9 @@
         errorLine1="    public void setCallback(Callback callback) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="79"
+            column="29"/>
     </issue>
 
     <issue
@@ -8437,7 +10263,9 @@
         errorLine1="    public MenuBuilder getRootMenu() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="84"
+            column="12"/>
     </issue>
 
     <issue
@@ -8446,7 +10274,9 @@
         errorLine1="    public SubMenu setIcon(Drawable icon) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="95"
+            column="12"/>
     </issue>
 
     <issue
@@ -8455,7 +10285,9 @@
         errorLine1="    public SubMenu setIcon(Drawable icon) {"
         errorLine2="                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="95"
+            column="28"/>
     </issue>
 
     <issue
@@ -8464,7 +10296,9 @@
         errorLine1="    public SubMenu setIcon(int iconRes) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="101"
+            column="12"/>
     </issue>
 
     <issue
@@ -8473,7 +10307,9 @@
         errorLine1="    public SubMenu setHeaderIcon(Drawable icon) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="107"
+            column="12"/>
     </issue>
 
     <issue
@@ -8482,7 +10318,9 @@
         errorLine1="    public SubMenu setHeaderIcon(Drawable icon) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="107"
+            column="34"/>
     </issue>
 
     <issue
@@ -8491,7 +10329,9 @@
         errorLine1="    public SubMenu setHeaderIcon(int iconRes) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="112"
+            column="12"/>
     </issue>
 
     <issue
@@ -8500,7 +10340,9 @@
         errorLine1="    public SubMenu setHeaderTitle(CharSequence title) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="117"
+            column="12"/>
     </issue>
 
     <issue
@@ -8509,7 +10351,9 @@
         errorLine1="    public SubMenu setHeaderTitle(CharSequence title) {"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="117"
+            column="35"/>
     </issue>
 
     <issue
@@ -8518,7 +10362,9 @@
         errorLine1="    public SubMenu setHeaderTitle(int titleRes) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="122"
+            column="12"/>
     </issue>
 
     <issue
@@ -8527,7 +10373,9 @@
         errorLine1="    public SubMenu setHeaderView(View view) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="127"
+            column="12"/>
     </issue>
 
     <issue
@@ -8536,7 +10384,9 @@
         errorLine1="    public SubMenu setHeaderView(View view) {"
         errorLine2="                                 ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="127"
+            column="34"/>
     </issue>
 
     <issue
@@ -8545,7 +10395,9 @@
         errorLine1="    public boolean expandItemActionView(MenuItemImpl item) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="132"
+            column="41"/>
     </issue>
 
     <issue
@@ -8554,7 +10406,9 @@
         errorLine1="    public boolean collapseItemActionView(MenuItemImpl item) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="137"
+            column="43"/>
     </issue>
 
     <issue
@@ -8563,7 +10417,9 @@
         errorLine1="    public String getActionViewStatesKey() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+            line="142"
+            column="12"/>
     </issue>
 
     <issue
@@ -8572,7 +10428,9 @@
         errorLine1="    public SupportActionModeWrapper(Context context,"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="48"
+            column="37"/>
     </issue>
 
     <issue
@@ -8581,7 +10439,9 @@
         errorLine1="            androidx.appcompat.view.ActionMode supportActionMode) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="49"
+            column="13"/>
     </issue>
 
     <issue
@@ -8590,7 +10450,9 @@
         errorLine1="    public Object getTag() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="55"
+            column="12"/>
     </issue>
 
     <issue
@@ -8599,7 +10461,9 @@
         errorLine1="    public void setTag(Object tag) {"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="60"
+            column="24"/>
     </issue>
 
     <issue
@@ -8608,7 +10472,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="65"
+            column="26"/>
     </issue>
 
     <issue
@@ -8617,7 +10483,9 @@
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="70"
+            column="29"/>
     </issue>
 
     <issue
@@ -8626,7 +10494,9 @@
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="85"
+            column="12"/>
     </issue>
 
     <issue
@@ -8635,7 +10505,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="90"
+            column="12"/>
     </issue>
 
     <issue
@@ -8644,7 +10516,9 @@
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="100"
+            column="12"/>
     </issue>
 
     <issue
@@ -8653,7 +10527,9 @@
         errorLine1="    public View getCustomView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="110"
+            column="12"/>
     </issue>
 
     <issue
@@ -8662,7 +10538,9 @@
         errorLine1="    public void setCustomView(View view) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="115"
+            column="31"/>
     </issue>
 
     <issue
@@ -8671,7 +10549,9 @@
         errorLine1="    public MenuInflater getMenuInflater() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="120"
+            column="12"/>
     </issue>
 
     <issue
@@ -8680,7 +10560,9 @@
         errorLine1="        public CallbackWrapper(Context context, Callback supportCallback) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="150"
+            column="32"/>
     </issue>
 
     <issue
@@ -8689,7 +10571,9 @@
         errorLine1="        public CallbackWrapper(Context context, Callback supportCallback) {"
         errorLine2="                                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="150"
+            column="49"/>
     </issue>
 
     <issue
@@ -8698,7 +10582,9 @@
         errorLine1="        public boolean onCreateActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="158"
+            column="43"/>
     </issue>
 
     <issue
@@ -8707,7 +10593,9 @@
         errorLine1="        public boolean onCreateActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
         errorLine2="                                                                                   ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="158"
+            column="84"/>
     </issue>
 
     <issue
@@ -8716,7 +10604,9 @@
         errorLine1="        public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="164"
+            column="44"/>
     </issue>
 
     <issue
@@ -8725,7 +10615,9 @@
         errorLine1="        public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
         errorLine2="                                                                                    ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="164"
+            column="85"/>
     </issue>
 
     <issue
@@ -8734,7 +10626,9 @@
         errorLine1="        public boolean onActionItemClicked(androidx.appcompat.view.ActionMode mode,"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="170"
+            column="44"/>
     </issue>
 
     <issue
@@ -8743,7 +10637,9 @@
         errorLine1="                android.view.MenuItem item) {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="171"
+            column="17"/>
     </issue>
 
     <issue
@@ -8752,7 +10648,9 @@
         errorLine1="        public void onDestroyActionMode(androidx.appcompat.view.ActionMode mode) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="177"
+            column="41"/>
     </issue>
 
     <issue
@@ -8761,7 +10659,9 @@
         errorLine1="        public ActionMode getActionModeWrapper(androidx.appcompat.view.ActionMode mode) {"
         errorLine2="               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="190"
+            column="16"/>
     </issue>
 
     <issue
@@ -8770,7 +10670,9 @@
         errorLine1="        public ActionMode getActionModeWrapper(androidx.appcompat.view.ActionMode mode) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+            line="190"
+            column="48"/>
     </issue>
 
     <issue
@@ -8779,7 +10681,9 @@
         errorLine1="    public SupportMenuInflater(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"
+            line="100"
+            column="32"/>
     </issue>
 
     <issue
@@ -8788,7 +10692,9 @@
         errorLine1="    public void inflate(@LayoutRes int menuRes, Menu menu) {"
         errorLine2="                                                ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"/>
+            file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"
+            line="117"
+            column="49"/>
     </issue>
 
     <issue
@@ -8797,7 +10703,9 @@
         errorLine1="    public void setSwitchTextAppearance(Context context, int resid) {"
         errorLine2="                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="343"
+            column="41"/>
     </issue>
 
     <issue
@@ -8806,7 +10714,9 @@
         errorLine1="    public void setSwitchTypeface(Typeface tf, int style) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="410"
+            column="35"/>
     </issue>
 
     <issue
@@ -8815,7 +10725,9 @@
         errorLine1="    public void setSwitchTypeface(Typeface typeface) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="438"
+            column="35"/>
     </issue>
 
     <issue
@@ -8824,7 +10736,9 @@
         errorLine1="    public void setTrackDrawable(Drawable track) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="529"
+            column="34"/>
     </issue>
 
     <issue
@@ -8833,7 +10747,9 @@
         errorLine1="    public Drawable getTrackDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="559"
+            column="12"/>
     </issue>
 
     <issue
@@ -8842,7 +10758,9 @@
         errorLine1="    public void setThumbDrawable(Drawable thumb) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="651"
+            column="34"/>
     </issue>
 
     <issue
@@ -8851,7 +10769,9 @@
         errorLine1="    public Drawable getThumbDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="683"
+            column="12"/>
     </issue>
 
     <issue
@@ -8860,7 +10780,9 @@
         errorLine1="    public CharSequence getTextOn() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="799"
+            column="12"/>
     </issue>
 
     <issue
@@ -8869,7 +10791,9 @@
         errorLine1="    public void setTextOn(CharSequence textOn) {"
         errorLine2="                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="822"
+            column="27"/>
     </issue>
 
     <issue
@@ -8878,7 +10802,9 @@
         errorLine1="    public CharSequence getTextOff() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="838"
+            column="12"/>
     </issue>
 
     <issue
@@ -8887,7 +10813,9 @@
         errorLine1="    public void setTextOff(CharSequence textOff) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="860"
+            column="28"/>
     </issue>
 
     <issue
@@ -8896,7 +10824,9 @@
         errorLine1="    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="973"
+            column="46"/>
     </issue>
 
     <issue
@@ -8905,7 +10835,9 @@
         errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="1010"
+            column="33"/>
     </issue>
 
     <issue
@@ -8914,7 +10846,9 @@
         errorLine1="    public void draw(Canvas c) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="1243"
+            column="22"/>
     </issue>
 
     <issue
@@ -8923,7 +10857,9 @@
         errorLine1="    protected void onDraw(Canvas canvas) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="1308"
+            column="27"/>
     </issue>
 
     <issue
@@ -8932,7 +10868,9 @@
         errorLine1="    protected int[] onCreateDrawableState(int extraSpace) {"
         errorLine2="              ~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="1432"
+            column="15"/>
     </issue>
 
     <issue
@@ -8941,7 +10879,9 @@
         errorLine1="    protected boolean verifyDrawable(Drawable who) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="1478"
+            column="38"/>
     </issue>
 
     <issue
@@ -8950,7 +10890,9 @@
         errorLine1="    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="1501"
+            column="48"/>
     </issue>
 
     <issue
@@ -8959,7 +10901,9 @@
         errorLine1="    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+            line="1507"
+            column="51"/>
     </issue>
 
     <issue
@@ -8968,7 +10912,9 @@
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="53"
+            column="19"/>
     </issue>
 
     <issue
@@ -8977,7 +10923,9 @@
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="53"
+            column="57"/>
     </issue>
 
     <issue
@@ -8986,7 +10934,9 @@
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="53"
+            column="74"/>
     </issue>
 
     <issue
@@ -8995,7 +10945,9 @@
         errorLine1="            int[] attrs) {"
         errorLine2="            ~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="54"
+            column="13"/>
     </issue>
 
     <issue
@@ -9004,7 +10956,9 @@
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="58"
+            column="19"/>
     </issue>
 
     <issue
@@ -9013,7 +10967,9 @@
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="58"
+            column="57"/>
     </issue>
 
     <issue
@@ -9022,7 +10978,9 @@
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="58"
+            column="74"/>
     </issue>
 
     <issue
@@ -9031,7 +10989,9 @@
         errorLine1="            int[] attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="            ~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="59"
+            column="13"/>
     </issue>
 
     <issue
@@ -9040,7 +11000,9 @@
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, int resid, int[] attrs) {"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="64"
+            column="19"/>
     </issue>
 
     <issue
@@ -9049,7 +11011,9 @@
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, int resid, int[] attrs) {"
         errorLine2="                                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="64"
+            column="57"/>
     </issue>
 
     <issue
@@ -9058,7 +11022,9 @@
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, int resid, int[] attrs) {"
         errorLine2="                                                                                    ~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="64"
+            column="85"/>
     </issue>
 
     <issue
@@ -9067,7 +11033,9 @@
         errorLine1="    public TypedArray getWrappedTypeArray() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="76"
+            column="12"/>
     </issue>
 
     <issue
@@ -9076,7 +11044,9 @@
         errorLine1="    public Drawable getDrawable(int index) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="80"
+            column="12"/>
     </issue>
 
     <issue
@@ -9085,7 +11055,9 @@
         errorLine1="    public Drawable getDrawableIfKnown(int index) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="90"
+            column="12"/>
     </issue>
 
     <issue
@@ -9094,7 +11066,9 @@
         errorLine1="    public Resources getResources() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="142"
+            column="12"/>
     </issue>
 
     <issue
@@ -9103,7 +11077,9 @@
         errorLine1="    public CharSequence getText(int index) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="146"
+            column="12"/>
     </issue>
 
     <issue
@@ -9112,7 +11088,9 @@
         errorLine1="    public String getString(int index) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="150"
+            column="12"/>
     </issue>
 
     <issue
@@ -9121,7 +11099,9 @@
         errorLine1="    public String getNonResourceString(int index) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="154"
+            column="12"/>
     </issue>
 
     <issue
@@ -9130,7 +11110,9 @@
         errorLine1="    public ColorStateList getColorStateList(int index) {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="174"
+            column="12"/>
     </issue>
 
     <issue
@@ -9139,7 +11121,9 @@
         errorLine1="    public int getLayoutDimension(int index, String name) {"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="204"
+            column="46"/>
     </issue>
 
     <issue
@@ -9148,7 +11132,9 @@
         errorLine1="    public CharSequence[] getTextArray(int index) {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="220"
+            column="12"/>
     </issue>
 
     <issue
@@ -9157,7 +11143,9 @@
         errorLine1="    public boolean getValue(int index, TypedValue outValue) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="224"
+            column="40"/>
     </issue>
 
     <issue
@@ -9166,7 +11154,9 @@
         errorLine1="    public TypedValue peekValue(int index) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="244"
+            column="12"/>
     </issue>
 
     <issue
@@ -9175,7 +11165,9 @@
         errorLine1="    public String getPositionDescription() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+            file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+            line="248"
+            column="12"/>
     </issue>
 
     <issue
@@ -9184,7 +11176,9 @@
         errorLine1="    public void setMenu(MenuBuilder menu, ActionMenuPresenter outerPresenter) {"
         errorLine2="                        ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="576"
+            column="25"/>
     </issue>
 
     <issue
@@ -9193,7 +11187,9 @@
         errorLine1="    public void setMenu(MenuBuilder menu, ActionMenuPresenter outerPresenter) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="576"
+            column="43"/>
     </issue>
 
     <issue
@@ -9202,7 +11198,9 @@
         errorLine1="    public void setLogo(Drawable drawable) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="650"
+            column="25"/>
     </issue>
 
     <issue
@@ -9211,7 +11209,9 @@
         errorLine1="    public Drawable getLogo() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="673"
+            column="12"/>
     </issue>
 
     <issue
@@ -9220,7 +11220,9 @@
         errorLine1="    public void setLogoDescription(CharSequence description) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="697"
+            column="36"/>
     </issue>
 
     <issue
@@ -9229,7 +11231,9 @@
         errorLine1="    public CharSequence getLogoDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="712"
+            column="12"/>
     </issue>
 
     <issue
@@ -9238,7 +11242,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="760"
+            column="12"/>
     </issue>
 
     <issue
@@ -9247,7 +11253,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="784"
+            column="26"/>
     </issue>
 
     <issue
@@ -9256,7 +11264,9 @@
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="817"
+            column="12"/>
     </issue>
 
     <issue
@@ -9265,7 +11275,9 @@
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="839"
+            column="29"/>
     </issue>
 
     <issue
@@ -9274,7 +11286,9 @@
         errorLine1="    public void setTitleTextAppearance(Context context, @StyleRes int resId) {"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="870"
+            column="40"/>
     </issue>
 
     <issue
@@ -9283,7 +11297,9 @@
         errorLine1="    public void setSubtitleTextAppearance(Context context, @StyleRes int resId) {"
         errorLine2="                                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="881"
+            column="43"/>
     </issue>
 
     <issue
@@ -9292,7 +11308,9 @@
         errorLine1="    public void setNavigationOnClickListener(OnClickListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="1048"
+            column="46"/>
     </issue>
 
     <issue
@@ -9301,7 +11319,9 @@
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="1157"
+            column="12"/>
     </issue>
 
     <issue
@@ -9310,7 +11330,9 @@
         errorLine1="    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="1234"
+            column="44"/>
     </issue>
 
     <issue
@@ -9319,7 +11341,9 @@
         errorLine1="    protected Parcelable onSaveInstanceState() {"
         errorLine2="              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="1579"
+            column="15"/>
     </issue>
 
     <issue
@@ -9328,7 +11352,9 @@
         errorLine1="    protected void onRestoreInstanceState(Parcelable state) {"
         errorLine2="                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="1591"
+            column="43"/>
     </issue>
 
     <issue
@@ -9337,7 +11363,9 @@
         errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="1625"
+            column="33"/>
     </issue>
 
     <issue
@@ -9346,7 +11374,9 @@
         errorLine1="    public boolean onHoverEvent(MotionEvent ev) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="1651"
+            column="33"/>
     </issue>
 
     <issue
@@ -9355,7 +11385,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2246"
+            column="12"/>
     </issue>
 
     <issue
@@ -9364,7 +11396,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2246"
+            column="46"/>
     </issue>
 
     <issue
@@ -9373,7 +11407,9 @@
         errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2251"
+            column="15"/>
     </issue>
 
     <issue
@@ -9382,7 +11418,9 @@
         errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2251"
+            column="49"/>
     </issue>
 
     <issue
@@ -9391,7 +11429,9 @@
         errorLine1="    protected LayoutParams generateDefaultLayoutParams() {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2264"
+            column="15"/>
     </issue>
 
     <issue
@@ -9400,7 +11440,9 @@
         errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2269"
+            column="41"/>
     </issue>
 
     <issue
@@ -9409,7 +11451,9 @@
         errorLine1="    public DecorToolbar getWrapper() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2275"
+            column="12"/>
     </issue>
 
     <issue
@@ -9418,7 +11462,9 @@
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2324"
+            column="34"/>
     </issue>
 
     <issue
@@ -9427,7 +11473,9 @@
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
         errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2324"
+            column="62"/>
     </issue>
 
     <issue
@@ -9436,7 +11484,9 @@
         errorLine1="        public boolean onMenuItemClick(MenuItem item);"
         errorLine2="                                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2441"
+            column="40"/>
     </issue>
 
     <issue
@@ -9445,7 +11495,9 @@
         errorLine1="        public LayoutParams(@NonNull Context c, AttributeSet attrs) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2460"
+            column="49"/>
     </issue>
 
     <issue
@@ -9454,7 +11506,9 @@
         errorLine1="        public LayoutParams(LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2478"
+            column="29"/>
     </issue>
 
     <issue
@@ -9463,7 +11517,9 @@
         errorLine1="        public LayoutParams(ActionBar.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2484"
+            column="29"/>
     </issue>
 
     <issue
@@ -9472,7 +11528,9 @@
         errorLine1="        public LayoutParams(MarginLayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2488"
+            column="29"/>
     </issue>
 
     <issue
@@ -9481,7 +11539,9 @@
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2495"
+            column="29"/>
     </issue>
 
     <issue
@@ -9490,7 +11550,9 @@
         errorLine1="        public SavedState(Parcel source) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2511"
+            column="27"/>
     </issue>
 
     <issue
@@ -9499,7 +11561,9 @@
         errorLine1="        public SavedState(Parcel source, ClassLoader loader) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2515"
+            column="27"/>
     </issue>
 
     <issue
@@ -9508,7 +11572,9 @@
         errorLine1="        public SavedState(Parcel source, ClassLoader loader) {"
         errorLine2="                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2515"
+            column="42"/>
     </issue>
 
     <issue
@@ -9517,7 +11583,9 @@
         errorLine1="        public SavedState(Parcelable superState) {"
         errorLine2="                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2521"
+            column="27"/>
     </issue>
 
     <issue
@@ -9526,7 +11594,9 @@
         errorLine1="        public void writeToParcel(Parcel out, int flags) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+            file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+            line="2526"
+            column="35"/>
     </issue>
 
     <issue
@@ -9535,7 +11605,9 @@
         errorLine1="    public ToolbarWidgetWrapper(Toolbar toolbar, boolean style) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="95"
+            column="33"/>
     </issue>
 
     <issue
@@ -9544,7 +11616,9 @@
         errorLine1="    public ToolbarWidgetWrapper(Toolbar toolbar, boolean style,"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="100"
+            column="33"/>
     </issue>
 
     <issue
@@ -9553,7 +11627,9 @@
         errorLine1="    public ViewGroup getViewGroup() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="216"
+            column="12"/>
     </issue>
 
     <issue
@@ -9562,7 +11638,9 @@
         errorLine1="    public Context getContext() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="221"
+            column="12"/>
     </issue>
 
     <issue
@@ -9571,7 +11649,9 @@
         errorLine1="    public void setWindowCallback(Window.Callback cb) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="236"
+            column="35"/>
     </issue>
 
     <issue
@@ -9580,7 +11660,9 @@
         errorLine1="    public void setWindowTitle(CharSequence title) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="241"
+            column="32"/>
     </issue>
 
     <issue
@@ -9589,7 +11671,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="249"
+            column="12"/>
     </issue>
 
     <issue
@@ -9598,7 +11682,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="254"
+            column="26"/>
     </issue>
 
     <issue
@@ -9607,7 +11693,9 @@
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="270"
+            column="12"/>
     </issue>
 
     <issue
@@ -9616,7 +11704,9 @@
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="275"
+            column="29"/>
     </issue>
 
     <issue
@@ -9625,7 +11715,9 @@
         errorLine1="    public void setIcon(Drawable d) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="308"
+            column="25"/>
     </issue>
 
     <issue
@@ -9634,7 +11726,9 @@
         errorLine1="    public void setLogo(Drawable d) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="319"
+            column="25"/>
     </issue>
 
     <issue
@@ -9643,7 +11737,9 @@
         errorLine1="    public void setMenu(Menu menu, MenuPresenter.Callback cb) {"
         errorLine2="                        ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="367"
+            column="25"/>
     </issue>
 
     <issue
@@ -9652,7 +11748,9 @@
         errorLine1="    public void setMenu(Menu menu, MenuPresenter.Callback cb) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="367"
+            column="36"/>
     </issue>
 
     <issue
@@ -9661,7 +11759,9 @@
         errorLine1="    public void setEmbeddedTabView(ScrollingTabContainerView tabView) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="424"
+            column="36"/>
     </issue>
 
     <issue
@@ -9670,7 +11770,9 @@
         errorLine1="    public void setDropdownParams(SpinnerAdapter adapter,"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="515"
+            column="35"/>
     </issue>
 
     <issue
@@ -9679,7 +11781,9 @@
         errorLine1="            AdapterView.OnItemSelectedListener listener) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="516"
+            column="13"/>
     </issue>
 
     <issue
@@ -9688,7 +11792,9 @@
         errorLine1="    public void setCustomView(View view) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="542"
+            column="31"/>
     </issue>
 
     <issue
@@ -9697,7 +11803,9 @@
         errorLine1="    public View getCustomView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="553"
+            column="12"/>
     </issue>
 
     <issue
@@ -9706,7 +11814,9 @@
         errorLine1="    public ViewPropertyAnimatorCompat setupAnimatorToVisibility(final int visibility,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="567"
+            column="12"/>
     </issue>
 
     <issue
@@ -9715,7 +11825,9 @@
         errorLine1="    public void setNavigationIcon(Drawable icon) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="595"
+            column="35"/>
     </issue>
 
     <issue
@@ -9724,7 +11836,9 @@
         errorLine1="    public void setDefaultNavigationIcon(Drawable defaultNavigationIcon) {"
         errorLine2="                                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="606"
+            column="42"/>
     </issue>
 
     <issue
@@ -9733,7 +11847,9 @@
         errorLine1="    public void setNavigationContentDescription(CharSequence description) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="622"
+            column="49"/>
     </issue>
 
     <issue
@@ -9742,7 +11858,9 @@
         errorLine1="    public void saveHierarchyState(SparseArray&lt;Parcelable> toolbarStates) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="643"
+            column="36"/>
     </issue>
 
     <issue
@@ -9751,7 +11869,9 @@
         errorLine1="    public void restoreHierarchyState(SparseArray&lt;Parcelable> toolbarStates) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="648"
+            column="39"/>
     </issue>
 
     <issue
@@ -9760,7 +11880,9 @@
         errorLine1="    public void setBackgroundDrawable(Drawable d) {"
         errorLine2="                                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="653"
+            column="39"/>
     </issue>
 
     <issue
@@ -9769,7 +11891,9 @@
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback actionMenuPresenterCallback,"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="673"
+            column="34"/>
     </issue>
 
     <issue
@@ -9778,7 +11902,9 @@
         errorLine1="            MenuBuilder.Callback menuBuilderCallback) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="674"
+            column="13"/>
     </issue>
 
     <issue
@@ -9787,7 +11913,9 @@
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+            line="679"
+            column="12"/>
     </issue>
 
     <issue
@@ -9796,7 +11924,9 @@
         errorLine1="    public ViewPropertyAnimatorCompatSet play(ViewPropertyAnimatorCompat animator) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="52"
+            column="12"/>
     </issue>
 
     <issue
@@ -9805,7 +11935,9 @@
         errorLine1="    public ViewPropertyAnimatorCompatSet play(ViewPropertyAnimatorCompat animator) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="52"
+            column="47"/>
     </issue>
 
     <issue
@@ -9814,7 +11946,9 @@
         errorLine1="    public ViewPropertyAnimatorCompatSet playSequentially(ViewPropertyAnimatorCompat anim1,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="59"
+            column="12"/>
     </issue>
 
     <issue
@@ -9823,7 +11957,9 @@
         errorLine1="    public ViewPropertyAnimatorCompatSet playSequentially(ViewPropertyAnimatorCompat anim1,"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="59"
+            column="59"/>
     </issue>
 
     <issue
@@ -9832,7 +11968,9 @@
         errorLine1="            ViewPropertyAnimatorCompat anim2) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="60"
+            column="13"/>
     </issue>
 
     <issue
@@ -9841,7 +11979,9 @@
         errorLine1="    public ViewPropertyAnimatorCompatSet setDuration(long duration) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="99"
+            column="12"/>
     </issue>
 
     <issue
@@ -9850,7 +11990,9 @@
         errorLine1="    public ViewPropertyAnimatorCompatSet setInterpolator(Interpolator interpolator) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="106"
+            column="12"/>
     </issue>
 
     <issue
@@ -9859,7 +12001,9 @@
         errorLine1="    public ViewPropertyAnimatorCompatSet setInterpolator(Interpolator interpolator) {"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="106"
+            column="58"/>
     </issue>
 
     <issue
@@ -9868,7 +12012,9 @@
         errorLine1="    public ViewPropertyAnimatorCompatSet setListener(ViewPropertyAnimatorListener listener) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="113"
+            column="12"/>
     </issue>
 
     <issue
@@ -9877,7 +12023,9 @@
         errorLine1="    public ViewPropertyAnimatorCompatSet setListener(ViewPropertyAnimatorListener listener) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+            file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+            line="113"
+            column="54"/>
     </issue>
 
     <issue
@@ -9886,7 +12034,9 @@
         errorLine1="    public void setLayoutInflater(LayoutInflater inflater) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+            line="138"
+            column="35"/>
     </issue>
 
     <issue
@@ -9895,7 +12045,9 @@
         errorLine1="    public LayoutInflater getLayoutInflater() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+            line="145"
+            column="12"/>
     </issue>
 
     <issue
@@ -9904,7 +12056,9 @@
         errorLine1="    public void draw(Canvas canvas) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+            line="156"
+            column="22"/>
     </issue>
 
     <issue
@@ -9913,7 +12067,9 @@
         errorLine1="    protected void dispatchDraw(Canvas canvas) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+            line="160"
+            column="33"/>
     </issue>
 
     <issue
@@ -9922,7 +12078,9 @@
         errorLine1="    public View inflate() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+            line="197"
+            column="12"/>
     </issue>
 
     <issue
@@ -9931,7 +12089,9 @@
         errorLine1="    public void setOnInflateListener(OnInflateListener inflateListener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+            line="249"
+            column="38"/>
     </issue>
 
     <issue
@@ -9940,7 +12100,9 @@
         errorLine1="        void onInflate(ViewStubCompat stub, View inflated);"
         errorLine2="                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+            line="268"
+            column="24"/>
     </issue>
 
     <issue
@@ -9949,7 +12111,9 @@
         errorLine1="        void onInflate(ViewStubCompat stub, View inflated);"
         errorLine2="                                            ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+            line="268"
+            column="45"/>
     </issue>
 
     <issue
@@ -9958,7 +12122,9 @@
         errorLine1="    public static boolean isLayoutRtl(View view) {"
         errorLine2="                                      ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+            line="57"
+            column="39"/>
     </issue>
 
     <issue
@@ -9967,7 +12133,9 @@
         errorLine1="    public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {"
         errorLine2="                                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+            line="65"
+            column="48"/>
     </issue>
 
     <issue
@@ -9976,7 +12144,9 @@
         errorLine1="    public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {"
         errorLine2="                                                          ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+            line="65"
+            column="59"/>
     </issue>
 
     <issue
@@ -9985,7 +12155,9 @@
         errorLine1="    public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {"
         errorLine2="                                                                            ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+            line="65"
+            column="77"/>
     </issue>
 
     <issue
@@ -9994,7 +12166,9 @@
         errorLine1="    public static void makeOptionalFitsSystemWindows(View view) {"
         errorLine2="                                                     ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+            file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+            line="79"
+            column="54"/>
     </issue>
 
     <issue
@@ -10003,7 +12177,9 @@
         errorLine1="    public WindowCallbackWrapper(Window.Callback wrapped) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="51"
+            column="34"/>
     </issue>
 
     <issue
@@ -10012,7 +12188,9 @@
         errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
         errorLine2="                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="59"
+            column="37"/>
     </issue>
 
     <issue
@@ -10021,7 +12199,9 @@
         errorLine1="    public boolean dispatchKeyShortcutEvent(KeyEvent event) {"
         errorLine2="                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="64"
+            column="45"/>
     </issue>
 
     <issue
@@ -10030,7 +12210,9 @@
         errorLine1="    public boolean dispatchTouchEvent(MotionEvent event) {"
         errorLine2="                                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="69"
+            column="39"/>
     </issue>
 
     <issue
@@ -10039,7 +12221,9 @@
         errorLine1="    public boolean dispatchTrackballEvent(MotionEvent event) {"
         errorLine2="                                          ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="74"
+            column="43"/>
     </issue>
 
     <issue
@@ -10048,7 +12232,9 @@
         errorLine1="    public boolean dispatchGenericMotionEvent(MotionEvent event) {"
         errorLine2="                                              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="79"
+            column="47"/>
     </issue>
 
     <issue
@@ -10057,7 +12243,9 @@
         errorLine1="    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="84"
+            column="55"/>
     </issue>
 
     <issue
@@ -10066,7 +12254,9 @@
         errorLine1="    public View onCreatePanelView(int featureId) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="89"
+            column="12"/>
     </issue>
 
     <issue
@@ -10075,7 +12265,9 @@
         errorLine1="    public boolean onCreatePanelMenu(int featureId, Menu menu) {"
         errorLine2="                                                    ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="94"
+            column="53"/>
     </issue>
 
     <issue
@@ -10084,7 +12276,9 @@
         errorLine1="    public boolean onPreparePanel(int featureId, View view, Menu menu) {"
         errorLine2="                                                 ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="99"
+            column="50"/>
     </issue>
 
     <issue
@@ -10093,7 +12287,9 @@
         errorLine1="    public boolean onPreparePanel(int featureId, View view, Menu menu) {"
         errorLine2="                                                            ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="99"
+            column="61"/>
     </issue>
 
     <issue
@@ -10102,7 +12298,9 @@
         errorLine1="    public boolean onMenuOpened(int featureId, Menu menu) {"
         errorLine2="                                               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="104"
+            column="48"/>
     </issue>
 
     <issue
@@ -10111,7 +12309,9 @@
         errorLine1="    public boolean onMenuItemSelected(int featureId, MenuItem item) {"
         errorLine2="                                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="109"
+            column="54"/>
     </issue>
 
     <issue
@@ -10120,7 +12320,9 @@
         errorLine1="    public void onWindowAttributesChanged(WindowManager.LayoutParams attrs) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="114"
+            column="43"/>
     </issue>
 
     <issue
@@ -10129,7 +12331,9 @@
         errorLine1="    public void onPanelClosed(int featureId, Menu menu) {"
         errorLine2="                                             ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="139"
+            column="46"/>
     </issue>
 
     <issue
@@ -10138,7 +12342,9 @@
         errorLine1="    public boolean onSearchRequested(SearchEvent searchEvent) {"
         errorLine2="                                     ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="145"
+            column="38"/>
     </issue>
 
     <issue
@@ -10147,7 +12353,9 @@
         errorLine1="    public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="155"
+            column="12"/>
     </issue>
 
     <issue
@@ -10156,7 +12364,9 @@
         errorLine1="    public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="155"
+            column="50"/>
     </issue>
 
     <issue
@@ -10165,7 +12375,9 @@
         errorLine1="    public ActionMode onWindowStartingActionMode(ActionMode.Callback callback, int type) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="161"
+            column="12"/>
     </issue>
 
     <issue
@@ -10174,7 +12386,9 @@
         errorLine1="    public ActionMode onWindowStartingActionMode(ActionMode.Callback callback, int type) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="161"
+            column="50"/>
     </issue>
 
     <issue
@@ -10183,7 +12397,9 @@
         errorLine1="    public void onActionModeStarted(ActionMode mode) {"
         errorLine2="                                    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="166"
+            column="37"/>
     </issue>
 
     <issue
@@ -10192,7 +12408,9 @@
         errorLine1="    public void onActionModeFinished(ActionMode mode) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="171"
+            column="38"/>
     </issue>
 
     <issue
@@ -10201,7 +12419,9 @@
         errorLine1="            List&lt;KeyboardShortcutGroup> data, Menu menu, int deviceId) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="178"
+            column="13"/>
     </issue>
 
     <issue
@@ -10210,7 +12430,9 @@
         errorLine1="            List&lt;KeyboardShortcutGroup> data, Menu menu, int deviceId) {"
         errorLine2="                                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="178"
+            column="47"/>
     </issue>
 
     <issue
@@ -10219,7 +12441,9 @@
         errorLine1="    public final Window.Callback getWrapped() {"
         errorLine2="                 ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+            line="188"
+            column="18"/>
     </issue>
 
     <issue
@@ -10228,7 +12452,9 @@
         errorLine1="    public WindowDecorActionBar(Activity activity, boolean overlayMode) {"
         errorLine2="                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="168"
+            column="33"/>
     </issue>
 
     <issue
@@ -10237,7 +12463,9 @@
         errorLine1="    public WindowDecorActionBar(Dialog dialog) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="178"
+            column="33"/>
     </issue>
 
     <issue
@@ -10246,7 +12474,9 @@
         errorLine1="    public WindowDecorActionBar(View layout) {"
         errorLine2="                                ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="187"
+            column="33"/>
     </issue>
 
     <issue
@@ -10255,7 +12485,9 @@
         errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="255"
+            column="40"/>
     </issue>
 
     <issue
@@ -10264,7 +12496,9 @@
         errorLine1="    public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="337"
+            column="45"/>
     </issue>
 
     <issue
@@ -10273,7 +12507,9 @@
         errorLine1="    public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="342"
+            column="48"/>
     </issue>
 
     <issue
@@ -10282,7 +12518,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="437"
+            column="26"/>
     </issue>
 
     <issue
@@ -10291,7 +12529,9 @@
         errorLine1="    public void setWindowTitle(CharSequence title) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="442"
+            column="32"/>
     </issue>
 
     <issue
@@ -10300,7 +12540,9 @@
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="457"
+            column="29"/>
     </issue>
 
     <issue
@@ -10309,7 +12551,9 @@
         errorLine1="    public void setBackgroundDrawable(Drawable d) {"
         errorLine2="                                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="479"
+            column="39"/>
     </issue>
 
     <issue
@@ -10318,7 +12562,9 @@
         errorLine1="    public void setStackedBackgroundDrawable(Drawable d) {"
         errorLine2="                                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="484"
+            column="46"/>
     </issue>
 
     <issue
@@ -10327,7 +12573,9 @@
         errorLine1="    public void setSplitBackgroundDrawable(Drawable d) {"
         errorLine2="                                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="489"
+            column="44"/>
     </issue>
 
     <issue
@@ -10336,7 +12584,9 @@
         errorLine1="    public View getCustomView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="494"
+            column="12"/>
     </issue>
 
     <issue
@@ -10345,7 +12595,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="499"
+            column="12"/>
     </issue>
 
     <issue
@@ -10354,7 +12606,9 @@
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="504"
+            column="12"/>
     </issue>
 
     <issue
@@ -10363,7 +12617,9 @@
         errorLine1="    public ActionMode startActionMode(ActionMode.Callback callback) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="519"
+            column="12"/>
     </issue>
 
     <issue
@@ -10372,7 +12628,9 @@
         errorLine1="    public ActionMode startActionMode(ActionMode.Callback callback) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="519"
+            column="39"/>
     </issue>
 
     <issue
@@ -10381,7 +12639,9 @@
         errorLine1="    public void addTab(Tab tab) {"
         errorLine2="                       ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="557"
+            column="24"/>
     </issue>
 
     <issue
@@ -10390,7 +12650,9 @@
         errorLine1="    public void addTab(Tab tab, int position) {"
         errorLine2="                       ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="562"
+            column="24"/>
     </issue>
 
     <issue
@@ -10399,7 +12661,9 @@
         errorLine1="    public void addTab(Tab tab, boolean setSelected) {"
         errorLine2="                       ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="567"
+            column="24"/>
     </issue>
 
     <issue
@@ -10408,7 +12672,9 @@
         errorLine1="    public void addTab(Tab tab, int position, boolean setSelected) {"
         errorLine2="                       ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="577"
+            column="24"/>
     </issue>
 
     <issue
@@ -10417,7 +12683,9 @@
         errorLine1="    public Tab newTab() {"
         errorLine2="           ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="587"
+            column="12"/>
     </issue>
 
     <issue
@@ -10426,7 +12694,9 @@
         errorLine1="    public void removeTab(Tab tab) {"
         errorLine2="                          ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="592"
+            column="27"/>
     </issue>
 
     <issue
@@ -10435,7 +12705,9 @@
         errorLine1="    public void selectTab(Tab tab) {"
         errorLine2="                          ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="622"
+            column="27"/>
     </issue>
 
     <issue
@@ -10444,7 +12716,9 @@
         errorLine1="    public Tab getSelectedTab() {"
         errorLine2="           ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="659"
+            column="12"/>
     </issue>
 
     <issue
@@ -10453,7 +12727,9 @@
         errorLine1="    public Context getThemedContext() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="916"
+            column="12"/>
     </issue>
 
     <issue
@@ -10462,7 +12738,9 @@
         errorLine1="    public void setHomeAsUpIndicator(Drawable indicator) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="938"
+            column="38"/>
     </issue>
 
     <issue
@@ -10471,7 +12749,9 @@
         errorLine1="    public void setHomeActionContentDescription(CharSequence description) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="948"
+            column="49"/>
     </issue>
 
     <issue
@@ -10480,7 +12760,9 @@
         errorLine1="        public ActionModeImpl(Context context, ActionMode.Callback callback) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="989"
+            column="31"/>
     </issue>
 
     <issue
@@ -10489,7 +12771,9 @@
         errorLine1="        public ActionModeImpl(Context context, ActionMode.Callback callback) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="989"
+            column="48"/>
     </issue>
 
     <issue
@@ -10498,7 +12782,9 @@
         errorLine1="        public MenuInflater getMenuInflater() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="998"
+            column="16"/>
     </issue>
 
     <issue
@@ -10507,7 +12793,9 @@
         errorLine1="        public Menu getMenu() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1003"
+            column="16"/>
     </issue>
 
     <issue
@@ -10516,7 +12804,9 @@
         errorLine1="        public void setCustomView(View view) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1063"
+            column="35"/>
     </issue>
 
     <issue
@@ -10525,7 +12815,9 @@
         errorLine1="        public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1069"
+            column="33"/>
     </issue>
 
     <issue
@@ -10534,7 +12826,9 @@
         errorLine1="        public void setTitle(CharSequence title) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1074"
+            column="30"/>
     </issue>
 
     <issue
@@ -10543,7 +12837,9 @@
         errorLine1="        public CharSequence getTitle() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1089"
+            column="16"/>
     </issue>
 
     <issue
@@ -10552,7 +12848,9 @@
         errorLine1="        public CharSequence getSubtitle() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1094"
+            column="16"/>
     </issue>
 
     <issue
@@ -10561,7 +12859,9 @@
         errorLine1="        public View getCustomView() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1110"
+            column="16"/>
     </issue>
 
     <issue
@@ -10570,7 +12870,9 @@
         errorLine1="        public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1123"
+            column="33"/>
     </issue>
 
     <issue
@@ -10579,7 +12881,9 @@
         errorLine1="        public boolean onSubMenuSelected(SubMenuBuilder subMenu) {"
         errorLine2="                                         ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1126"
+            column="42"/>
     </issue>
 
     <issue
@@ -10588,7 +12892,9 @@
         errorLine1="        public void onCloseSubMenu(SubMenuBuilder menu) {"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1139"
+            column="36"/>
     </issue>
 
     <issue
@@ -10597,7 +12903,9 @@
         errorLine1="        public Object getTag() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1166"
+            column="16"/>
     </issue>
 
     <issue
@@ -10606,7 +12914,9 @@
         errorLine1="        public Tab setTag(Object tag) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1171"
+            column="16"/>
     </issue>
 
     <issue
@@ -10615,7 +12925,9 @@
         errorLine1="        public Tab setTag(Object tag) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1171"
+            column="27"/>
     </issue>
 
     <issue
@@ -10624,7 +12936,9 @@
         errorLine1="        public ActionBar.TabListener getCallback() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1176"
+            column="16"/>
     </issue>
 
     <issue
@@ -10633,7 +12947,9 @@
         errorLine1="        public Tab setTabListener(ActionBar.TabListener callback) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1181"
+            column="16"/>
     </issue>
 
     <issue
@@ -10642,7 +12958,9 @@
         errorLine1="        public Tab setTabListener(ActionBar.TabListener callback) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1181"
+            column="35"/>
     </issue>
 
     <issue
@@ -10651,7 +12969,9 @@
         errorLine1="        public View getCustomView() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1187"
+            column="16"/>
     </issue>
 
     <issue
@@ -10660,7 +12980,9 @@
         errorLine1="        public Tab setCustomView(View view) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1192"
+            column="16"/>
     </issue>
 
     <issue
@@ -10669,7 +12991,9 @@
         errorLine1="        public Tab setCustomView(View view) {"
         errorLine2="                                 ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1192"
+            column="34"/>
     </issue>
 
     <issue
@@ -10678,7 +13002,9 @@
         errorLine1="        public Tab setCustomView(int layoutResId) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1201"
+            column="16"/>
     </issue>
 
     <issue
@@ -10687,7 +13013,9 @@
         errorLine1="        public Drawable getIcon() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1207"
+            column="16"/>
     </issue>
 
     <issue
@@ -10696,7 +13024,9 @@
         errorLine1="        public CharSequence getText() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1221"
+            column="16"/>
     </issue>
 
     <issue
@@ -10705,7 +13035,9 @@
         errorLine1="        public Tab setIcon(Drawable icon) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1226"
+            column="16"/>
     </issue>
 
     <issue
@@ -10714,7 +13046,9 @@
         errorLine1="        public Tab setIcon(Drawable icon) {"
         errorLine2="                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1226"
+            column="28"/>
     </issue>
 
     <issue
@@ -10723,7 +13057,9 @@
         errorLine1="        public Tab setIcon(int resId) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1235"
+            column="16"/>
     </issue>
 
     <issue
@@ -10732,7 +13068,9 @@
         errorLine1="        public Tab setText(CharSequence text) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1240"
+            column="16"/>
     </issue>
 
     <issue
@@ -10741,7 +13079,9 @@
         errorLine1="        public Tab setText(CharSequence text) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1240"
+            column="28"/>
     </issue>
 
     <issue
@@ -10750,7 +13090,9 @@
         errorLine1="        public Tab setText(int resId) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1249"
+            column="16"/>
     </issue>
 
     <issue
@@ -10759,7 +13101,9 @@
         errorLine1="        public Tab setContentDescription(int resId) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1259"
+            column="16"/>
     </issue>
 
     <issue
@@ -10768,7 +13112,9 @@
         errorLine1="        public Tab setContentDescription(CharSequence contentDesc) {"
         errorLine2="               ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1264"
+            column="16"/>
     </issue>
 
     <issue
@@ -10777,7 +13123,9 @@
         errorLine1="        public Tab setContentDescription(CharSequence contentDesc) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1264"
+            column="42"/>
     </issue>
 
     <issue
@@ -10786,7 +13134,9 @@
         errorLine1="        public CharSequence getContentDescription() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1273"
+            column="16"/>
     </issue>
 
     <issue
@@ -10795,7 +13145,9 @@
         errorLine1="    public void setCustomView(View view) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1279"
+            column="31"/>
     </issue>
 
     <issue
@@ -10804,7 +13156,9 @@
         errorLine1="    public void setCustomView(View view, LayoutParams layoutParams) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1284"
+            column="31"/>
     </issue>
 
     <issue
@@ -10813,7 +13167,9 @@
         errorLine1="    public void setCustomView(View view, LayoutParams layoutParams) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1284"
+            column="42"/>
     </issue>
 
     <issue
@@ -10822,7 +13178,9 @@
         errorLine1="    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {"
         errorLine2="                                           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1290"
+            column="44"/>
     </issue>
 
     <issue
@@ -10831,7 +13189,9 @@
         errorLine1="    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1290"
+            column="68"/>
     </issue>
 
     <issue
@@ -10840,7 +13200,9 @@
         errorLine1="    public Tab getTabAt(int index) {"
         errorLine2="           ~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1354"
+            column="12"/>
     </issue>
 
     <issue
@@ -10849,7 +13211,9 @@
         errorLine1="    public void setIcon(Drawable icon) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1365"
+            column="25"/>
     </issue>
 
     <issue
@@ -10858,7 +13222,9 @@
         errorLine1="    public void setLogo(Drawable logo) {"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1379"
+            column="25"/>
     </issue>
 
     <issue
@@ -10867,7 +13233,9 @@
         errorLine1="    public boolean onKeyShortcut(int keyCode, KeyEvent event) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+            file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+            line="1395"
+            column="47"/>
     </issue>
 
 </issues>
diff --git a/appcompat/appcompat/src/androidTest/AndroidManifest.xml b/appcompat/appcompat/src/androidTest/AndroidManifest.xml
index d128244..69e53ae 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"/>
 
@@ -335,6 +344,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/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityA.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityA.java
new file mode 100644
index 0000000..5719451
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityA.java
@@ -0,0 +1,22 @@
+/*
+ * 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;
+
+/**
+ * An activity for locales with a unique class name.
+ */
+public class LocalesActivityA extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityB.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityB.java
new file mode 100644
index 0000000..b327efb
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityB.java
@@ -0,0 +1,22 @@
+/*
+ * 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;
+
+/**
+ * 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/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivity.java
new file mode 100644
index 0000000..d7c757e
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivity.java
@@ -0,0 +1,22 @@
+/*
+ * 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;
+
+/**
+ * An activity that handles locales configuration changes.
+ */
+public class LocalesConfigChangesActivity extends LocalesUpdateActivity { }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityA.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityA.java
new file mode 100644
index 0000000..c6b0d8b
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityA.java
@@ -0,0 +1,22 @@
+/*
+ * 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;
+
+/**
+ * An activity that handles locales configuration changes.
+ */
+public class LocalesConfigChangesActivityA extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityB.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityB.java
new file mode 100644
index 0000000..c59c33b
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityB.java
@@ -0,0 +1,22 @@
+/*
+ * 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;
+
+/**
+ * An activity that handles locales configuration changes.
+ */
+public class LocalesConfigChangesActivityB extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityWithoutLayoutDirection.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityWithoutLayoutDirection.java
new file mode 100644
index 0000000..77d7bfb
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityWithoutLayoutDirection.java
@@ -0,0 +1,23 @@
+/*
+ * 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;
+
+/**
+ * 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/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivity.java
new file mode 100644
index 0000000..14efcde
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivity.java
@@ -0,0 +1,19 @@
+/*
+ * 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;
+
+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/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/main/java/androidx/appcompat/app/AppCompatActivity.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
index 981c192..41c34c9 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;
@@ -662,4 +663,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..e02fd89 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
@@ -17,12 +17,21 @@
 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;
@@ -30,19 +39,25 @@
 import android.view.ViewGroup;
 import android.view.Window;
 
+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 +110,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 +184,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 +199,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 +548,31 @@
     public abstract boolean applyDayNight();
 
     /**
+     * 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 +647,113 @@
     }
 
     /**
+     * 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>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></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.
+     */
+    @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 +764,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 +1031,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 8219742..1f38170 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;
@@ -75,6 +76,7 @@
 import android.widget.TextView;
 
 import androidx.annotation.CallSuper;
+import androidx.annotation.DoNotInline;
 import androidx.annotation.IdRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -109,6 +111,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 +128,7 @@
 import org.xmlpull.v1.XmlPullParser;
 
 import java.util.List;
+import java.util.Locale;
 
 /**
  * @hide
@@ -258,9 +262,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;
 
@@ -360,13 +363,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);
+            final Configuration config = createOverrideAppConfiguration(
+                    baseContext, modeToApply, localesToApply, null);
             if (DEBUG) {
                 Log.d(TAG, String.format("Attempting to apply config to base context: %s",
                         config.toString()));
@@ -385,8 +397,8 @@
 
         // Again, but using the AppCompat version of ContextThemeWrapper.
         if (baseContext instanceof ContextThemeWrapper) {
-            final Configuration config = createOverrideConfigurationForDayNight(
-                    baseContext, modeToApply, null);
+            final Configuration config = createOverrideAppConfiguration(
+                    baseContext, modeToApply, localesToApply, null);
             if (DEBUG) {
                 Log.d(TAG, String.format("Attempting to apply config to base context: %s",
                         config.toString()));
@@ -442,8 +454,8 @@
             }
         }
 
-        final Configuration config = createOverrideConfigurationForDayNight(
-                baseContext, modeToApply, configOverlay);
+        final Configuration config = createOverrideAppConfiguration(
+                baseContext, modeToApply, localesToApply, configOverlay);
         if (DEBUG) {
             Log.d(TAG, String.format("Applying night mode using ContextThemeWrapper and "
                     + "applyOverrideConfiguration(). Config: %s", config.toString()));
@@ -497,9 +509,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
@@ -661,16 +673,34 @@
         // 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);
     }
 
     @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
@@ -2369,15 +2399,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;
@@ -2385,7 +2450,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();
@@ -2403,6 +2484,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) {
@@ -2461,9 +2586,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) {
         int newNightMode;
         switch (mode) {
@@ -2492,43 +2646,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);
+                createOverrideAppConfiguration(mContext, nightMode, locales, null);
 
-        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
@@ -2537,41 +2724,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) {
@@ -2579,6 +2786,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.
@@ -2602,19 +2812,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);
             }
         }
     }
@@ -2644,13 +2858,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;
@@ -2667,19 +2882,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;
     }
 
     /**
@@ -3603,6 +3818,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)
@@ -3612,12 +3837,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();
@@ -3627,6 +3860,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)
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/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..1f164db 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,67 @@
     }
 
     /**
+     * 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) {
+                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 +1134,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 +1160,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 +1256,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 +1266,6 @@
 
             SearchResultPage searchResultPage =
                     doQueryLocked(
-                            queryExpression,
                             searchSpecToProtoConverter,
                             sStatsBuilder);
             addNextPageToken(packageName, searchResultPage.getNextPageToken());
@@ -897,16 +1286,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 +1298,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 +1306,7 @@
             sStatsBuilder =
                     new SearchStats.Builder(
                             SearchStats.VISIBILITY_SCOPE_GLOBAL,
-                            callerPackageName);
+                            callerAccess.getCallingPackageName());
         }
 
         mReadWriteLock.readLock().lock();
@@ -951,22 +1331,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 +1361,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 +1398,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 +1418,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 +1534,7 @@
         try {
             throwIfClosedLocked();
 
-            mLogUtil.piiTrace("getNextPage, request", nextPageToken);
+            LogUtil.piiTrace(TAG, "getNextPage, request", nextPageToken);
             checkNextPageToken(packageName, nextPageToken);
             SearchResultProto searchResultProto = mIcingSearchEngineLocked.getNextPage(
                     nextPageToken);
@@ -1099,7 +1545,8 @@
                         statsBuilder);
             }
 
-            mLogUtil.piiTrace(
+            LogUtil.piiTrace(
+                    TAG,
                     "getNextPage, response",
                     searchResultProto.getResultsCount(),
                     searchResultProto);
@@ -1155,7 +1602,7 @@
         try {
             throwIfClosedLocked();
 
-            mLogUtil.piiTrace("invalidateNextPageToken, request", nextPageToken);
+            LogUtil.piiTrace(TAG, "invalidateNextPageToken, request", nextPageToken);
             checkNextPageToken(packageName, nextPageToken);
             mIcingSearchEngineLocked.invalidateNextPageToken(nextPageToken);
 
@@ -1195,9 +1642,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 +1681,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 +1713,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 +1769,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 +1793,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 +1806,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 +1848,11 @@
         int numDocumentsDeleted =
                 deleteResultProto.getDeleteByQueryStats().getNumDocumentsDeleted();
         updateDocumentCountAfterRemovalLocked(packageName, numDocumentsDeleted);
+
+        if (prefixedObservedSchemas != null && !prefixedObservedSchemas.isEmpty()) {
+            dispatchChangeNotificationsAfterRemoveByQueryLocked(packageName,
+                    deleteResultProto, prefixedObservedSchemas);
+        }
     }
 
     @GuardedBy("mReadWriteLock")
@@ -1509,6 +1871,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 +1977,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 +2044,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 +2096,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 +2166,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 +2193,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 +2215,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 +2341,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 +2375,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 +2383,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 +2577,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 +2593,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..cf0bde3 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.
      */
@@ -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/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..c3e8b5e 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";
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..4f086da 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;
     }
 
     /**
@@ -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")
@@ -1177,7 +1153,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 +1214,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 +1238,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 +1257,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 +1276,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 +1295,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 +1314,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 +1334,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 +1365,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 +1375,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 +1396,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 +1410,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) {
@@ -1454,5 +1440,12 @@
                 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..ef5320d 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,7 +101,7 @@
 
     /**
      * Return the schemas most recently successfully provided to
-     * {@link AppSearchSession#setSchema}.
+     * {@link AppSearchSession#setSchemaAsync}.
      *
      * <p>It is inefficient to call this method repeatedly.
      */
@@ -75,12 +116,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 =
+                    mBundle.getBundle(SCHEMAS_VISIBLE_TO_PACKAGES_FIELD);
+            Map<String, Set<PackageIdentifier>> copy = new ArrayMap<>();
+            for (String key : schemaVisibleToPackagesBundle.keySet()) {
+                List<Bundle> PackageIdentifierBundles = 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 =
+                    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 +291,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 +422,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/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..4428927 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java
@@ -268,52 +268,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 +342,8 @@
         private static final String SNIPPET_RANGE_UPPER_FIELD = "snippetRangeUpper";
 
         private final String mPropertyPath;
+        @Nullable
+        private PropertyPath mPropertyPathObject = null;
         final Bundle mBundle;
 
         /**
@@ -377,9 +395,32 @@
         }
 
         /**
+         * 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() {
@@ -396,7 +437,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 +453,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 +522,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 +542,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 +563,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(
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..75cdc0e 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
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..6f04dc5
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
@@ -0,0 +1,259 @@
+/*
+ * 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 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 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) {
+            visibleToPermissions.add(
+                    new VisibilityPermissionDocument(permissionDocument)
+                            .getAllRequiredPermissions());
+        }
+        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/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/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/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/public/src/main/kotlin/androidx/build/SupportConfig.kt b/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
index a300078..e443289 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.
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 8b2b44e..98bf612 100644
--- a/camera/camera-camera2/lint-baseline.xml
+++ b/camera/camera-camera2/lint-baseline.xml
@@ -196,7 +196,8 @@
         errorLine1="                    CaptureRequest.CONTROL_AF_REGIONS, mAfRects);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            column="21"/>
     </issue>
 
     <issue
@@ -205,7 +206,9 @@
         errorLine1="                    CaptureRequest.CONTROL_AF_REGIONS, mAfRects);"
         errorLine2="                                                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="193"
+            column="56"/>
     </issue>
 
     <issue
@@ -214,7 +217,9 @@
         errorLine1="            configBuilder.setCaptureRequestOption("
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="196"
+            column="27"/>
     </issue>
 
     <issue
@@ -223,7 +228,9 @@
         errorLine1="                    CaptureRequest.CONTROL_AE_REGIONS, mAeRects);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="197"
+            column="21"/>
     </issue>
 
     <issue
@@ -232,7 +239,9 @@
         errorLine1="                    CaptureRequest.CONTROL_AE_REGIONS, mAeRects);"
         errorLine2="                                                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="197"
+            column="56"/>
     </issue>
 
     <issue
@@ -241,7 +250,9 @@
         errorLine1="            configBuilder.setCaptureRequestOption("
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="200"
+            column="27"/>
     </issue>
 
     <issue
@@ -250,7 +261,9 @@
         errorLine1="                    CaptureRequest.CONTROL_AWB_REGIONS, mAwbRects);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="201"
+            column="21"/>
     </issue>
 
     <issue
@@ -259,7 +272,9 @@
         errorLine1="                    CaptureRequest.CONTROL_AWB_REGIONS, mAwbRects);"
         errorLine2="                                                        ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="201"
+            column="57"/>
     </issue>
 
     <issue
@@ -268,7 +283,9 @@
         errorLine1="        Camera2ImplConfig.Builder configBuilder = new Camera2ImplConfig.Builder();"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="376"
+            column="51"/>
     </issue>
 
     <issue
@@ -277,7 +294,9 @@
         errorLine1="        configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="377"
+            column="23"/>
     </issue>
 
     <issue
@@ -286,7 +305,9 @@
         errorLine1="        configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="377"
+            column="47"/>
     </issue>
 
     <issue
@@ -295,7 +316,9 @@
         errorLine1="                CaptureRequest.CONTROL_AF_TRIGGER_START);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="378"
+            column="17"/>
     </issue>
 
     <issue
@@ -304,7 +327,9 @@
         errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_MODE,"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="385"
+            column="27"/>
     </issue>
 
     <issue
@@ -313,7 +338,9 @@
         errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_MODE,"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="385"
+            column="51"/>
     </issue>
 
     <issue
@@ -322,7 +349,9 @@
         errorLine1="                    mCameraControl.getSupportedAeMode(CaptureRequest.CONTROL_AE_MODE_ON));"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="386"
+            column="21"/>
     </issue>
 
     <issue
@@ -331,7 +360,9 @@
         errorLine1="        builder.addImplementationOptions(configBuilder.build());"
         errorLine2="                                                       ~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="388"
+            column="56"/>
     </issue>
 
     <issue
@@ -340,7 +371,9 @@
         errorLine1="        Camera2ImplConfig.Builder configBuilder = new Camera2ImplConfig.Builder();"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="436"
+            column="51"/>
     </issue>
 
     <issue
@@ -349,7 +382,9 @@
         errorLine1="        configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="437"
+            column="23"/>
     </issue>
 
     <issue
@@ -358,7 +393,9 @@
         errorLine1="        configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="437"
+            column="47"/>
     </issue>
 
     <issue
@@ -367,7 +404,9 @@
         errorLine1="                CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="438"
+            column="17"/>
     </issue>
 
     <issue
@@ -376,7 +415,9 @@
         errorLine1="        builder.addImplementationOptions(configBuilder.build());"
         errorLine2="                                                       ~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="439"
+            column="56"/>
     </issue>
 
     <issue
@@ -385,7 +426,9 @@
         errorLine1="        Camera2ImplConfig.Builder configBuilder = new Camera2ImplConfig.Builder();"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="478"
+            column="51"/>
     </issue>
 
     <issue
@@ -394,7 +437,9 @@
         errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="480"
+            column="27"/>
     </issue>
 
     <issue
@@ -403,7 +448,9 @@
         errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="480"
+            column="51"/>
     </issue>
 
     <issue
@@ -412,7 +459,9 @@
         errorLine1="                    CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="481"
+            column="21"/>
     </issue>
 
     <issue
@@ -421,7 +470,9 @@
         errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="484"
+            column="27"/>
     </issue>
 
     <issue
@@ -430,7 +481,9 @@
         errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="484"
+            column="51"/>
     </issue>
 
     <issue
@@ -439,7 +492,9 @@
         errorLine1="                    CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="485"
+            column="21"/>
     </issue>
 
     <issue
@@ -448,7 +503,9 @@
         errorLine1="        builder.addImplementationOptions(configBuilder.build());"
         errorLine2="                                                       ~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+            line="487"
+            column="56"/>
     </issue>
 
     <issue
@@ -457,7 +514,9 @@
         errorLine1="        Camera2ImplConfig.Builder camera2ConfigBuilder = new Camera2ImplConfig.Builder();"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpacker.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpacker.java"
+            line="54"
+            column="58"/>
     </issue>
 
     <issue
@@ -466,7 +525,9 @@
         errorLine1="        builder.addImplementationOptions(camera2ConfigBuilder.build());"
         errorLine2="                                                              ~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpacker.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpacker.java"
+            line="61"
+            column="63"/>
     </issue>
 
     <issue
@@ -475,7 +536,9 @@
         errorLine1="                builder.setCaptureRequestOption(CaptureRequest.CONTROL_ENABLE_ZSL, true);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"
+            line="55"
+            column="25"/>
     </issue>
 
     <issue
@@ -484,7 +547,9 @@
         errorLine1="                builder.setCaptureRequestOption(CaptureRequest.CONTROL_ENABLE_ZSL, true);"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"
+            line="55"
+            column="49"/>
     </issue>
 
     <issue
@@ -493,7 +558,9 @@
         errorLine1="                builder.setCaptureRequestOption(CaptureRequest.CONTROL_ENABLE_ZSL, true);"
         errorLine2="                                                                                   ~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"
+            line="55"
+            column="84"/>
     </issue>
 
     <issue
@@ -502,7 +569,9 @@
         errorLine1="                builder.setCaptureRequestOption(CaptureRequest.CONTROL_ENABLE_ZSL, false);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"
+            line="59"
+            column="25"/>
     </issue>
 
     <issue
@@ -511,7 +580,9 @@
         errorLine1="                builder.setCaptureRequestOption(CaptureRequest.CONTROL_ENABLE_ZSL, false);"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"
+            line="59"
+            column="49"/>
     </issue>
 
     <issue
@@ -520,7 +591,9 @@
         errorLine1="                builder.setCaptureRequestOption(CaptureRequest.CONTROL_ENABLE_ZSL, false);"
         errorLine2="                                                                                   ~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/ImageCapturePixelHDRPlus.java"
+            line="59"
+            column="84"/>
     </issue>
 
     <issue
@@ -529,7 +602,9 @@
         errorLine1="        Camera2ImplConfig.Builder camera2ConfigBuilder = new Camera2ImplConfig.Builder();"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"
+            line="48"
+            column="58"/>
     </issue>
 
     <issue
@@ -538,7 +613,9 @@
         errorLine1="        camera2ConfigBuilder.setCaptureRequestOption(CaptureRequest.TONEMAP_MODE,"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"
+            line="49"
+            column="30"/>
     </issue>
 
     <issue
@@ -547,7 +624,9 @@
         errorLine1="        camera2ConfigBuilder.setCaptureRequestOption(CaptureRequest.TONEMAP_MODE,"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"
+            line="49"
+            column="54"/>
     </issue>
 
     <issue
@@ -556,7 +635,9 @@
         errorLine1="                CaptureRequest.TONEMAP_MODE_HIGH_QUALITY);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"
+            line="50"
+            column="17"/>
     </issue>
 
     <issue
@@ -565,7 +646,9 @@
         errorLine1="        sessionBuilder.addImplementationOptions(camera2ConfigBuilder.build());"
         errorLine2="                                                                     ~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/workaround/PreviewPixelHDRnet.java"
+            line="51"
+            column="70"/>
     </issue>
 
     <issue
@@ -574,7 +657,9 @@
         errorLine1="    @RequiresApi(21)"
         errorLine2="    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi24Impl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi24Impl.java"
+            line="102"
+            column="5"/>
     </issue>
 
     <issue
@@ -583,7 +668,9 @@
         errorLine1="    @RequiresApi(21)"
         errorLine2="    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi26Impl.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi26Impl.java"
+            line="167"
+            column="5"/>
     </issue>
 
     <issue
@@ -592,7 +679,9 @@
         errorLine1="    public static List&lt;OutputConfiguration> transformFromCompat("
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+            line="137"
+            column="19"/>
     </issue>
 
     <issue
@@ -601,7 +690,9 @@
         errorLine1="    public List&lt;OutputConfigurationCompat> getOutputConfigurations() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+            line="162"
+            column="12"/>
     </issue>
 
     <issue
@@ -610,7 +701,9 @@
         errorLine1="    public CameraCaptureSession.StateCallback getStateCallback() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+            line="171"
+            column="12"/>
     </issue>
 
     <issue
@@ -619,7 +712,9 @@
         errorLine1="    public Executor getExecutor() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+            line="180"
+            column="12"/>
     </issue>
 
     <issue
@@ -628,7 +723,9 @@
         errorLine1="    public InputConfigurationCompat getInputConfiguration() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+            line="189"
+            column="12"/>
     </issue>
 
     <issue
@@ -637,7 +734,9 @@
         errorLine1="    public CaptureRequest getSessionParameters() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+            line="211"
+            column="12"/>
     </issue>
 
     <issue
@@ -646,7 +745,9 @@
         errorLine1="    public void setSessionParameters(CaptureRequest params) {"
         errorLine2="                                     ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+            line="233"
+            column="38"/>
     </issue>
 
 </issues>
diff --git a/camera/camera-core/lint-baseline.xml b/camera/camera-core/lint-baseline.xml
index 05f0d79..b048d06 100644
--- a/camera/camera-core/lint-baseline.xml
+++ b/camera/camera-core/lint-baseline.xml
@@ -157,7 +157,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"
+            line="76"
+            column="5"/>
     </issue>
 
     <issue
@@ -166,7 +168,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"
+            line="81"
+            column="5"/>
     </issue>
 
     <issue
@@ -175,7 +179,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"
+            line="86"
+            column="5"/>
     </issue>
 
     <issue
@@ -184,7 +190,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"
+            line="91"
+            column="5"/>
     </issue>
 
     <issue
@@ -193,7 +201,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"
+            line="97"
+            column="5"/>
     </issue>
 
     <issue
@@ -202,7 +212,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"
+            line="103"
+            column="5"/>
     </issue>
 
     <issue
@@ -211,7 +223,9 @@
         errorLine1="    /**"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/ForwardingImageProxy.java"
+            line="109"
+            column="5"/>
     </issue>
 
     <issue
@@ -220,7 +234,9 @@
         errorLine1="        @Override"
         errorLine2="        ^">
         <location
-            file="src/main/java/androidx/camera/core/ImageProxyDownsampler.java"/>
+            file="src/main/java/androidx/camera/core/ImageProxyDownsampler.java"
+            line="239"
+            column="9"/>
     </issue>
 
     <issue
@@ -229,7 +245,9 @@
         errorLine1="        @Override"
         errorLine2="        ^">
         <location
-            file="src/main/java/androidx/camera/core/ImageProxyDownsampler.java"/>
+            file="src/main/java/androidx/camera/core/ImageProxyDownsampler.java"
+            line="244"
+            column="9"/>
     </issue>
 
     <issue
@@ -238,7 +256,9 @@
         errorLine1="        @Override"
         errorLine2="        ^">
         <location
-            file="src/main/java/androidx/camera/core/ImageProxyDownsampler.java"/>
+            file="src/main/java/androidx/camera/core/ImageProxyDownsampler.java"
+            line="249"
+            column="9"/>
     </issue>
 
     <issue
@@ -247,7 +267,9 @@
         errorLine1="    @NonNull"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/SettableImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/SettableImageProxy.java"
+            line="68"
+            column="5"/>
     </issue>
 
     <issue
@@ -256,7 +278,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/SettableImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/SettableImageProxy.java"
+            line="78"
+            column="5"/>
     </issue>
 
     <issue
@@ -265,7 +289,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/SettableImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/SettableImageProxy.java"
+            line="89"
+            column="5"/>
     </issue>
 
     <issue
@@ -274,7 +300,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/SettableImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/SettableImageProxy.java"
+            line="94"
+            column="5"/>
     </issue>
 
     <issue
@@ -283,7 +311,9 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/camera/core/SingleCloseImageProxy.java"/>
+            file="src/main/java/androidx/camera/core/SingleCloseImageProxy.java"
+            line="38"
+            column="5"/>
     </issue>
 
     <issue
@@ -292,7 +322,9 @@
         errorLine1="    ListenableFuture&lt;O> apply(@Nullable I input) throws Exception;"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/utils/futures/AsyncFunction.java"/>
+            file="src/main/java/androidx/camera/core/impl/utils/futures/AsyncFunction.java"
+            line="50"
+            column="5"/>
     </issue>
 
     <issue
@@ -301,7 +333,9 @@
         errorLine1="    boolean checkSupported(String cameraId, List&lt;SurfaceConfig> surfaceConfigList);"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
+            file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"
+            line="65"
+            column="28"/>
     </issue>
 
     <issue
@@ -310,7 +344,9 @@
         errorLine1="    boolean checkSupported(String cameraId, List&lt;SurfaceConfig> surfaceConfigList);"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
+            file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"
+            line="65"
+            column="45"/>
     </issue>
 
     <issue
@@ -319,7 +355,9 @@
         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/impl/CameraDeviceSurfaceManager.java"
+            line="75"
+            column="5"/>
     </issue>
 
     <issue
@@ -328,7 +366,9 @@
         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/impl/CameraDeviceSurfaceManager.java"
+            line="75"
+            column="42"/>
     </issue>
 
     <issue
@@ -337,7 +377,9 @@
         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/impl/CameraDeviceSurfaceManager.java"
+            line="75"
+            column="76"/>
     </issue>
 
     <issue
@@ -346,7 +388,9 @@
         errorLine1="    public CameraInfoUnavailableException(String s, Throwable e) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"/>
+            file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"
+            line="28"
+            column="43"/>
     </issue>
 
     <issue
@@ -355,7 +399,9 @@
         errorLine1="    public CameraInfoUnavailableException(String s, Throwable e) {"
         errorLine2="                                                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"/>
+            file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"
+            line="28"
+            column="53"/>
     </issue>
 
     <issue
@@ -364,7 +410,9 @@
         errorLine1="    public CameraInfoUnavailableException(String s) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"/>
+            file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"
+            line="34"
+            column="43"/>
     </issue>
 
     <issue
@@ -373,7 +421,9 @@
         errorLine1="    void onOutputSurface(Surface surface, int imageFormat);"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"/>
+            file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"
+            line="39"
+            column="26"/>
     </issue>
 
     <issue
@@ -382,7 +432,9 @@
         errorLine1="    void process(ImageProxyBundle bundle);"
         errorLine2="                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"/>
+            file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"
+            line="52"
+            column="18"/>
     </issue>
 
     <issue
@@ -391,7 +443,9 @@
         errorLine1="    void onResolutionUpdate(Size size);"
         errorLine2="                            ~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"/>
+            file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"
+            line="59"
+            column="29"/>
     </issue>
 
     <issue
@@ -400,7 +454,9 @@
         errorLine1="    CaptureConfig getCaptureConfig();"
         errorLine2="    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/CaptureStage.java"/>
+            file="src/main/java/androidx/camera/core/impl/CaptureStage.java"
+            line="33"
+            column="5"/>
     </issue>
 
     <issue
@@ -409,7 +465,9 @@
         errorLine1="        public CaptureConfig getCaptureConfig() {"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/CaptureStage.java"/>
+            file="src/main/java/androidx/camera/core/impl/CaptureStage.java"
+            line="52"
+            column="16"/>
     </issue>
 
     <issue
@@ -418,7 +476,9 @@
         errorLine1="    void onFailure(Throwable t);"
         errorLine2="                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/utils/futures/FutureCallback.java"/>
+            file="src/main/java/androidx/camera/core/impl/utils/futures/FutureCallback.java"
+            line="51"
+            column="20"/>
     </issue>
 
     <issue
@@ -427,7 +487,9 @@
         errorLine1="    public static Handler getInstance() {"
         errorLine2="                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/utils/MainThreadAsyncHandler.java"/>
+            file="src/main/java/androidx/camera/core/impl/utils/MainThreadAsyncHandler.java"
+            line="37"
+            column="19"/>
     </issue>
 
     <issue
@@ -436,7 +498,9 @@
         errorLine1="    public static &lt;T> Optional&lt;T> absent() {"
         errorLine2="                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
+            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+            line="80"
+            column="23"/>
     </issue>
 
     <issue
@@ -445,7 +509,9 @@
         errorLine1="    public static &lt;T> Optional&lt;T> of(T reference) {"
         errorLine2="                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
+            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+            line="92"
+            column="23"/>
     </issue>
 
     <issue
@@ -454,7 +520,9 @@
         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"/>
+            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+            line="104"
+            column="23"/>
     </issue>
 
     <issue
@@ -463,7 +531,9 @@
         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"/>
+            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+            line="179"
+            column="21"/>
     </issue>
 
     <issue
@@ -472,7 +542,9 @@
         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"/>
+            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+            line="179"
+            column="36"/>
     </issue>
 
     <issue
@@ -481,7 +553,9 @@
         errorLine1="    public abstract T or(Supplier&lt;? extends T> supplier);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
+            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+            line="191"
+            column="26"/>
     </issue>
 
     <issue
@@ -490,7 +564,9 @@
         errorLine1="    public static SurfaceSizeDefinition create("
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+            line="51"
+            column="19"/>
     </issue>
 
     <issue
@@ -499,7 +575,9 @@
         errorLine1="            Size analysisSize,"
         errorLine2="            ~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+            line="52"
+            column="13"/>
     </issue>
 
     <issue
@@ -508,7 +586,9 @@
         errorLine1="            Size previewSize,"
         errorLine2="            ~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+            line="53"
+            column="13"/>
     </issue>
 
     <issue
@@ -517,7 +597,9 @@
         errorLine1="            Size recordSize) {"
         errorLine2="            ~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+            line="54"
+            column="13"/>
     </issue>
 
     <issue
@@ -526,7 +608,9 @@
         errorLine1="    public abstract Size getAnalysisSize();"
         errorLine2="                    ~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+            line="59"
+            column="21"/>
     </issue>
 
     <issue
@@ -535,7 +619,9 @@
         errorLine1="    public abstract Size getPreviewSize();"
         errorLine2="                    ~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+            line="62"
+            column="21"/>
     </issue>
 
     <issue
@@ -544,7 +630,9 @@
         errorLine1="    public abstract Size getRecordSize();"
         errorLine2="                    ~~~~">
         <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+            line="65"
+            column="21"/>
     </issue>
 
 </issues>
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/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/lint-baseline.xml b/car/app/app/lint-baseline.xml
index fc546b9..a2f983e 100644
--- a/car/app/app/lint-baseline.xml
+++ b/car/app/app/lint-baseline.xml
@@ -70,7 +70,9 @@
         errorLine1="        ZonedDateTime zonedDateTime = ZonedDateTime.parse(&quot;2020-05-14T19:57:00-07:00[US/Pacific]&quot;);"
         errorLine2="                                                    ~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="135"
+            column="53"/>
     </issue>
 
     <issue
@@ -79,7 +81,9 @@
         errorLine1="        DateTimeWithZone dateTimeWithZone = DateTimeWithZone.create(zonedDateTime);"
         errorLine2="                                                             ~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="136"
+            column="62"/>
     </issue>
 
     <issue
@@ -88,7 +92,9 @@
         errorLine1="        assertDateTimeWithZoneEquals(zonedDateTime, dateTimeWithZone);"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="138"
+            column="9"/>
     </issue>
 
     <issue
@@ -97,7 +103,9 @@
         errorLine1="                    DateTimeWithZone.create(null);"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="147"
+            column="38"/>
     </issue>
 
     <issue
@@ -106,7 +114,9 @@
         errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
         errorLine2="                                                                            ~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="156"
+            column="77"/>
     </issue>
 
     <issue
@@ -115,7 +125,9 @@
         errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
         errorLine2="                         ~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="156"
+            column="26"/>
     </issue>
 
     <issue
@@ -124,7 +136,9 @@
         errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
         errorLine2="                                                                            ~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="174"
+            column="77"/>
     </issue>
 
     <issue
@@ -133,7 +147,9 @@
         errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
         errorLine2="                         ~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="174"
+            column="26"/>
     </issue>
 
     <issue
@@ -142,7 +158,9 @@
         errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
         errorLine2="                                                                            ~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="193"
+            column="77"/>
     </issue>
 
     <issue
@@ -151,7 +169,9 @@
         errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
         errorLine2="                         ~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="193"
+            column="26"/>
     </issue>
 
     <issue
@@ -160,7 +180,9 @@
         errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
         errorLine2="                                                                            ~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="212"
+            column="77"/>
     </issue>
 
     <issue
@@ -169,7 +191,9 @@
         errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
         errorLine2="                         ~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="212"
+            column="26"/>
     </issue>
 
     <issue
@@ -178,7 +202,9 @@
         errorLine1="                .stream()"
         errorLine2="                 ~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"/>
+            file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"
+            line="132"
+            column="18"/>
     </issue>
 
     <issue
@@ -187,7 +213,9 @@
         errorLine1="                .mapToLong(List::size)"
         errorLine2="                 ~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"/>
+            file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"
+            line="133"
+            column="18"/>
     </issue>
 
     <issue
@@ -196,7 +224,9 @@
         errorLine1="                .sum()).isEqualTo(6);"
         errorLine2="                 ~~~">
         <location
-            file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"/>
+            file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"
+            line="134"
+            column="18"/>
     </issue>
 
     <issue
@@ -205,7 +235,9 @@
         errorLine1="        packageInfo.signingInfo = mock(SigningInfo.class);"
         errorLine2="                                       ~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"/>
+            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+            line="109"
+            column="40"/>
     </issue>
 
     <issue
@@ -214,7 +246,9 @@
         errorLine1="        packageInfo.signingInfo = mock(SigningInfo.class);"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"/>
+            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+            line="109"
+            column="9"/>
     </issue>
 
     <issue
@@ -223,7 +257,9 @@
         errorLine1="        when(packageInfo.signingInfo.getSigningCertificateHistory()).thenReturn(signatures);"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"/>
+            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+            line="110"
+            column="38"/>
     </issue>
 
     <issue
@@ -232,7 +268,9 @@
         errorLine1="        when(packageInfo.signingInfo.getSigningCertificateHistory()).thenReturn(signatures);"
         errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"/>
+            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+            line="110"
+            column="14"/>
     </issue>
 
     <issue
@@ -241,7 +279,9 @@
         errorLine1="        ZonedDateTime arrivalTime = ZonedDateTime.parse(&quot;2020-05-14T19:57:00-07:00[US/Pacific]&quot;);"
         errorLine2="                                                  ~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="69"
+            column="51"/>
     </issue>
 
     <issue
@@ -250,7 +290,9 @@
         errorLine1="        Duration remainingTime = Duration.ofHours(10);"
         errorLine2="                                          ~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="70"
+            column="43"/>
     </issue>
 
     <issue
@@ -259,7 +301,9 @@
         errorLine1="                new TravelEstimate.Builder(mRemainingDistance, arrivalTime).setRemainingTime("
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="73"
+            column="17"/>
     </issue>
 
     <issue
@@ -268,7 +312,9 @@
         errorLine1="                new TravelEstimate.Builder(mRemainingDistance, arrivalTime).setRemainingTime("
         errorLine2="                                                                            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="73"
+            column="77"/>
     </issue>
 
     <issue
@@ -277,7 +323,9 @@
         errorLine1="        assertThat(travelEstimate.getRemainingTimeSeconds()).isEqualTo(remainingTime.getSeconds());"
         errorLine2="                                                                                     ~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="77"
+            column="86"/>
     </issue>
 
     <issue
@@ -286,7 +334,9 @@
         errorLine1="        assertDateTimeWithZoneEquals(arrivalTime, travelEstimate.getArrivalTimeAtDestination());"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="78"
+            column="9"/>
     </issue>
 
     <issue
@@ -295,7 +345,9 @@
         errorLine1="        ZonedDateTime arrivalTime = ZonedDateTime.parse(&quot;2020-05-14T19:57:00-07:00[US/Pacific]&quot;);"
         errorLine2="                                                  ~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="115"
+            column="51"/>
     </issue>
 
     <issue
@@ -304,7 +356,9 @@
         errorLine1="                new TravelEstimate.Builder("
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="119"
+            column="17"/>
     </issue>
 
     <issue
@@ -313,7 +367,9 @@
         errorLine1="                        remainingDistance, arrivalTime).setRemainingTime("
         errorLine2="                                                        ~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="120"
+            column="57"/>
     </issue>
 
     <issue
@@ -322,7 +378,9 @@
         errorLine1="                        Duration.ofSeconds(REMAINING_TIME_UNKNOWN)).build();"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="121"
+            column="34"/>
     </issue>
 
     <issue
@@ -331,7 +389,9 @@
         errorLine1="        assertDateTimeWithZoneEquals(arrivalTime, travelEstimate.getArrivalTimeAtDestination());"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="125"
+            column="9"/>
     </issue>
 
     <issue
@@ -340,7 +400,9 @@
         errorLine1="        mCarAppApiLevel = handshakeInfo.getHostCarAppApiLevel();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/car/app/CarContext.java"/>
+            file="src/main/java/androidx/car/app/CarContext.java"
+            line="646"
+            column="27"/>
     </issue>
 
     <issue
@@ -349,7 +411,9 @@
         errorLine1="            enumName = (String) nameMethod.invoke(obj);"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/car/app/serialization/Bundler.java"/>
+            file="src/main/java/androidx/car/app/serialization/Bundler.java"
+            line="343"
+            column="33"/>
     </issue>
 
     <issue
@@ -358,7 +422,9 @@
         errorLine1="            Object obj = converter.invoke(null, binder);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/car/app/serialization/Bundler.java"/>
+            file="src/main/java/androidx/car/app/serialization/Bundler.java"
+            line="428"
+            column="26"/>
     </issue>
 
     <issue
@@ -367,7 +433,9 @@
         errorLine1="            return nameMethod.invoke(null, enumName);"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/car/app/serialization/Bundler.java"/>
+            file="src/main/java/androidx/car/app/serialization/Bundler.java"
+            line="517"
+            column="20"/>
     </issue>
 
     <issue
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/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/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/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/ui/ui-text/build.gradle b/compose/ui/ui-text/build.gradle
index 2a8df57..65ed872 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(":compose:ui:ui-test-font"))
@@ -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/coordinatorlayout/coordinatorlayout/lint-baseline.xml b/coordinatorlayout/coordinatorlayout/lint-baseline.xml
index 4d6e46f..11cf628 100644
--- a/coordinatorlayout/coordinatorlayout/lint-baseline.xml
+++ b/coordinatorlayout/coordinatorlayout/lint-baseline.xml
@@ -160,7 +160,8 @@
         errorLine1="    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {"
         errorLine2="                                                   ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            column="52"/>
     </issue>
 
     <issue
@@ -169,7 +170,9 @@
         errorLine1="    public boolean onStartNestedScroll(View child, View target, int axes, int type) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1792"
+            column="40"/>
     </issue>
 
     <issue
@@ -178,7 +181,9 @@
         errorLine1="    public boolean onStartNestedScroll(View child, View target, int axes, int type) {"
         errorLine2="                                                   ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1792"
+            column="52"/>
     </issue>
 
     <issue
@@ -187,7 +192,9 @@
         errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1817"
+            column="40"/>
     </issue>
 
     <issue
@@ -196,7 +203,9 @@
         errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes) {"
         errorLine2="                                                   ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1817"
+            column="52"/>
     </issue>
 
     <issue
@@ -205,7 +214,9 @@
         errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes, int type) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1823"
+            column="40"/>
     </issue>
 
     <issue
@@ -214,7 +225,9 @@
         errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes, int type) {"
         errorLine2="                                                   ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1823"
+            column="52"/>
     </issue>
 
     <issue
@@ -223,7 +236,9 @@
         errorLine1="    public void onStopNestedScroll(View target) {"
         errorLine2="                                   ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1844"
+            column="36"/>
     </issue>
 
     <issue
@@ -232,7 +247,9 @@
         errorLine1="    public void onStopNestedScroll(View target, int type) {"
         errorLine2="                                   ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1850"
+            column="36"/>
     </issue>
 
     <issue
@@ -241,7 +258,9 @@
         errorLine1="    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1872"
+            column="32"/>
     </issue>
 
     <issue
@@ -250,7 +269,9 @@
         errorLine1="    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1879"
+            column="32"/>
     </issue>
 
     <issue
@@ -259,7 +280,9 @@
         errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1934"
+            column="35"/>
     </issue>
 
     <issue
@@ -268,7 +291,9 @@
         errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
         errorLine2="                                                               ~~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1934"
+            column="64"/>
     </issue>
 
     <issue
@@ -277,7 +302,9 @@
         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"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1940"
+            column="35"/>
     </issue>
 
     <issue
@@ -286,7 +313,9 @@
         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"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1940"
+            column="64"/>
     </issue>
 
     <issue
@@ -295,7 +324,9 @@
         errorLine1="    public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) {"
         errorLine2="                                 ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="1983"
+            column="34"/>
     </issue>
 
     <issue
@@ -304,7 +335,9 @@
         errorLine1="    public boolean onNestedPreFling(View target, float velocityX, float velocityY) {"
         errorLine2="                                    ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="2013"
+            column="37"/>
     </issue>
 
     <issue
@@ -313,7 +346,9 @@
         errorLine1="        public Behavior(Context context, AttributeSet attrs) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="2124"
+            column="25"/>
     </issue>
 
     <issue
@@ -322,7 +357,9 @@
         errorLine1="        public Behavior(Context context, AttributeSet attrs) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="2124"
+            column="42"/>
     </issue>
 
     <issue
@@ -331,7 +368,9 @@
         errorLine1="        public LayoutParams(LayoutParams p) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="2929"
+            column="29"/>
     </issue>
 
     <issue
@@ -340,7 +379,9 @@
         errorLine1="        public LayoutParams(MarginLayoutParams p) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="2933"
+            column="29"/>
     </issue>
 
     <issue
@@ -349,7 +390,9 @@
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="2937"
+            column="29"/>
     </issue>
 
     <issue
@@ -358,7 +401,9 @@
         errorLine1="    protected void onRestoreInstanceState(Parcelable state) {"
         errorLine2="                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="3262"
+            column="43"/>
     </issue>
 
     <issue
@@ -367,7 +412,9 @@
         errorLine1="    protected Parcelable onSaveInstanceState() {"
         errorLine2="              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="3290"
+            column="15"/>
     </issue>
 
     <issue
@@ -376,7 +423,9 @@
         errorLine1="    public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {"
         errorLine2="                                                 ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="3314"
+            column="50"/>
     </issue>
 
     <issue
@@ -385,7 +434,9 @@
         errorLine1="    public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {"
         errorLine2="                                                             ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+            line="3314"
+            column="62"/>
     </issue>
 
     <issue
@@ -394,7 +445,9 @@
         errorLine1="    public static void getDescendantRect(ViewGroup parent, View descendant, Rect out) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"
+            line="76"
+            column="42"/>
     </issue>
 
     <issue
@@ -403,7 +456,9 @@
         errorLine1="    public static void getDescendantRect(ViewGroup parent, View descendant, Rect out) {"
         errorLine2="                                                           ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"
+            line="76"
+            column="60"/>
     </issue>
 
     <issue
@@ -412,7 +467,9 @@
         errorLine1="    public static void getDescendantRect(ViewGroup parent, View descendant, Rect out) {"
         errorLine2="                                                                            ~~~~">
         <location
-            file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"/>
+            file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"
+            line="76"
+            column="77"/>
     </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-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-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
index 6364b8a..ffe7f74 100644
--- a/core/core-ktx/lint-baseline.xml
+++ b/core/core-ktx/lint-baseline.xml
@@ -160,7 +160,8 @@
         errorLine1="    @Px end: Int = marginEnd,"
         errorLine2="                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/ViewGroup.kt"/>
+            file="src/main/java/androidx/core/view/ViewGroup.kt"
+            column="20"/>
     </issue>
 
     <issue
@@ -169,7 +170,9 @@
         errorLine1="    marginStart = start"
         errorLine2="    ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/ViewGroup.kt"/>
+            file="src/main/java/androidx/core/view/ViewGroup.kt"
+            line="163"
+            column="5"/>
     </issue>
 
     <issue
@@ -178,7 +181,9 @@
         errorLine1="    marginEnd = end"
         errorLine2="    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/ViewGroup.kt"/>
+            file="src/main/java/androidx/core/view/ViewGroup.kt"
+            line="165"
+            column="5"/>
     </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 bb46e53..ca22339 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);
@@ -1010,10 +1014,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 {
@@ -1748,6 +1757,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();
@@ -1766,7 +1776,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);
   }
 
@@ -3035,6 +3056,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
@@ -3131,6 +3155,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();
@@ -3224,6 +3249,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();
@@ -3289,6 +3315,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;
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 f6099ee..d26a074 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);
@@ -1010,10 +1014,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 {
@@ -1754,6 +1763,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();
@@ -1772,7 +1782,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);
   }
 
@@ -3041,6 +3062,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
@@ -3137,6 +3161,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();
@@ -3230,6 +3255,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();
@@ -3295,6 +3321,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;
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 615169b..0f1a77c 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);
@@ -1118,10 +1122,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 {
@@ -2082,6 +2091,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();
@@ -2100,7 +2110,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);
   }
 
@@ -3491,6 +3512,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
@@ -3519,7 +3543,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 {
@@ -3592,6 +3616,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();
@@ -3685,6 +3710,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();
@@ -3754,6 +3780,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;
diff --git a/core/core/lint-baseline.xml b/core/core/lint-baseline.xml
index 3dde51d..12f4527 100644
--- a/core/core/lint-baseline.xml
+++ b/core/core/lint-baseline.xml
@@ -241,7 +241,8 @@
         errorLine1="                    &amp;&amp; Arrays.equals(nc1.getVibrationPattern(), nc2.getVibrationPattern())"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            column="42"/>
     </issue>
 
     <issue
@@ -250,7 +251,9 @@
         errorLine1="                    &amp;&amp; Arrays.equals(nc1.getVibrationPattern(), nc2.getVibrationPattern())"
         errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="183"
+            column="69"/>
     </issue>
 
     <issue
@@ -259,7 +262,9 @@
         errorLine1="                    &amp;&amp; Objects.equals(nc1.getGroup(), nc2.getGroup())"
         errorLine2="                                          ~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="184"
+            column="43"/>
     </issue>
 
     <issue
@@ -268,7 +273,9 @@
         errorLine1="                    &amp;&amp; Objects.equals(nc1.getGroup(), nc2.getGroup())"
         errorLine2="                                                          ~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="184"
+            column="59"/>
     </issue>
 
     <issue
@@ -277,7 +284,9 @@
         errorLine1="                    &amp;&amp; Objects.equals(nc1.getAudioAttributes(), nc2.getAudioAttributes());"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="185"
+            column="43"/>
     </issue>
 
     <issue
@@ -286,7 +295,9 @@
         errorLine1="                    &amp;&amp; Objects.equals(nc1.getAudioAttributes(), nc2.getAudioAttributes());"
         errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="185"
+            column="69"/>
     </issue>
 
     <issue
@@ -295,7 +306,9 @@
         errorLine1="            assertEquals(expected.getImportance(), actual.getImportance());"
         errorLine2="                                  ~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="200"
+            column="35"/>
     </issue>
 
     <issue
@@ -304,7 +317,9 @@
         errorLine1="            assertEquals(expected.getLightColor(), actual.getLightColor());"
         errorLine2="                                  ~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="201"
+            column="35"/>
     </issue>
 
     <issue
@@ -313,7 +328,9 @@
         errorLine1="            assertEquals(expected.getId(), actual.getId());"
         errorLine2="                                  ~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="202"
+            column="35"/>
     </issue>
 
     <issue
@@ -322,7 +339,9 @@
         errorLine1="            assertEquals(expected.getName(), actual.getName());"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="203"
+            column="35"/>
     </issue>
 
     <issue
@@ -331,7 +350,9 @@
         errorLine1="            assertEquals(expected.getDescription(), actual.getDescription());"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="204"
+            column="35"/>
     </issue>
 
     <issue
@@ -340,7 +361,9 @@
         errorLine1="            assertEquals(expected.getSound(), actual.getSound());"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="205"
+            column="35"/>
     </issue>
 
     <issue
@@ -349,7 +372,9 @@
         errorLine1="            assertArrayEquals(expected.getVibrationPattern(), actual.getVibrationPattern());"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="206"
+            column="40"/>
     </issue>
 
     <issue
@@ -358,7 +383,9 @@
         errorLine1="            assertEquals(expected.getGroup(), actual.getGroup());"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="207"
+            column="35"/>
     </issue>
 
     <issue
@@ -367,7 +394,9 @@
         errorLine1="            assertEquals(expected.getAudioAttributes(), actual.getAudioAttributes());"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="208"
+            column="35"/>
     </issue>
 
     <issue
@@ -376,7 +405,9 @@
         errorLine1="            assertEquals(expected.getId(), actual.getId());"
         errorLine2="                                  ~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"
+            line="113"
+            column="35"/>
     </issue>
 
     <issue
@@ -385,7 +416,9 @@
         errorLine1="            assertEquals(expected.getName(), actual.getName());"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"
+            line="114"
+            column="35"/>
     </issue>
 
     <issue
@@ -394,7 +427,9 @@
         errorLine1="        Notification nWith = builder.addInvisibleAction(0, &quot;testAction&quot;, null)"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="251"
+            column="38"/>
     </issue>
 
     <issue
@@ -403,7 +438,9 @@
         errorLine1="        List&lt;NotificationCompat.Action> actions = NotificationCompat.getInvisibleActions(nWith);"
         errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="253"
+            column="70"/>
     </issue>
 
     <issue
@@ -412,7 +449,9 @@
         errorLine1="            assertEquals(Icon.TYPE_BITMAP, ((Icon) firstBuiltIcon).getType());"
         errorLine2="                                                                   ~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="1467"
+            column="68"/>
     </issue>
 
     <issue
@@ -421,7 +460,9 @@
         errorLine1="            assertEquals(Icon.TYPE_BITMAP, ((Icon) rebuiltIcon).getType());"
         errorLine2="                                                                ~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="1482"
+            column="65"/>
     </issue>
 
     <issue
@@ -430,7 +471,9 @@
         errorLine1="        assertEquals(Icon.TYPE_RESOURCE, firstBuiltIcon.getType());"
         errorLine2="                                                        ~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="1499"
+            column="57"/>
     </issue>
 
     <issue
@@ -439,7 +482,9 @@
         errorLine1="        assertEquals(Icon.TYPE_RESOURCE, rebuiltIcon.getType());"
         errorLine2="                                                     ~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="1509"
+            column="54"/>
     </issue>
 
     <issue
@@ -448,7 +493,9 @@
         errorLine1="                new NotificationCompat.BubbleMetadata.Builder(shortcutId)"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="2113"
+            column="17"/>
     </issue>
 
     <issue
@@ -457,7 +504,9 @@
         errorLine1="                NotificationCompat.getInvisibleActions(notification);"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="2326"
+            column="36"/>
     </issue>
 
     <issue
@@ -466,7 +515,9 @@
         errorLine1="        assertBundleEquals(&quot;Notification.extras&quot;, n2.extras, n2.extras)"
         errorLine2="                                                  ~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationTester.kt"/>
+            file="src/androidTest/java/androidx/core/app/NotificationTester.kt"
+            line="32"
+            column="51"/>
     </issue>
 
     <issue
@@ -475,7 +526,9 @@
         errorLine1="        assertBundleEquals(&quot;Notification.extras&quot;, n2.extras, n2.extras)"
         errorLine2="                                                             ~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/app/NotificationTester.kt"/>
+            file="src/androidTest/java/androidx/core/app/NotificationTester.kt"
+            line="32"
+            column="62"/>
     </issue>
 
     <issue
@@ -484,7 +537,9 @@
         errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE).build());"
         errorLine2="                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="70"
+            column="18"/>
     </issue>
 
     <issue
@@ -493,7 +548,9 @@
         errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE)"
         errorLine2="                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="72"
+            column="18"/>
     </issue>
 
     <issue
@@ -502,7 +559,9 @@
         errorLine1="                .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL).build());"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="73"
+            column="18"/>
     </issue>
 
     <issue
@@ -511,7 +570,9 @@
         errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE)"
         errorLine2="                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="75"
+            column="18"/>
     </issue>
 
     <issue
@@ -520,7 +581,9 @@
         errorLine1="                .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL)"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="76"
+            column="18"/>
     </issue>
 
     <issue
@@ -529,7 +592,9 @@
         errorLine1="                .setTextDirection(LTR).build());"
         errorLine2="                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="77"
+            column="18"/>
     </issue>
 
     <issue
@@ -538,7 +603,9 @@
         errorLine1="                .setTextDirection(LTR).build());"
         errorLine2="                                  ~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="77"
+            column="35"/>
     </issue>
 
     <issue
@@ -547,7 +614,9 @@
         errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE).build().getBreakStrategy());"
         errorLine2="                                                                        ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="83"
+            column="73"/>
     </issue>
 
     <issue
@@ -556,7 +625,9 @@
         errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE).build().getBreakStrategy());"
         errorLine2="                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="83"
+            column="18"/>
     </issue>
 
     <issue
@@ -565,7 +636,9 @@
         errorLine1="                .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NONE).build()"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="85"
+            column="18"/>
     </issue>
 
     <issue
@@ -574,7 +647,9 @@
         errorLine1="                .getHyphenationFrequency());"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="86"
+            column="18"/>
     </issue>
 
     <issue
@@ -583,7 +658,9 @@
         errorLine1="        assertEquals(RTL, new Params.Builder(PAINT).setTextDirection(RTL).build()"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="87"
+            column="53"/>
     </issue>
 
     <issue
@@ -592,7 +669,9 @@
         errorLine1="        assertEquals(RTL, new Params.Builder(PAINT).setTextDirection(RTL).build()"
         errorLine2="                     ~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="87"
+            column="22"/>
     </issue>
 
     <issue
@@ -601,7 +680,9 @@
         errorLine1="        assertEquals(RTL, new Params.Builder(PAINT).setTextDirection(RTL).build()"
         errorLine2="                                                                     ~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="87"
+            column="70"/>
     </issue>
 
     <issue
@@ -610,7 +691,9 @@
         errorLine1="                .getTextDirection());"
         errorLine2="                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="88"
+            column="18"/>
     </issue>
 
     <issue
@@ -619,7 +702,9 @@
         errorLine1="                .toShortcutInfo());"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="566"
+            column="18"/>
     </issue>
 
     <issue
@@ -628,7 +713,9 @@
         errorLine1="                .toShortcutInfo());"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="574"
+            column="18"/>
     </issue>
 
     <issue
@@ -637,7 +724,9 @@
         errorLine1="                .toShortcutInfo());"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="582"
+            column="18"/>
     </issue>
 
     <issue
@@ -646,7 +735,9 @@
         errorLine1="                .toShortcutInfo());"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="590"
+            column="18"/>
     </issue>
 
     <issue
@@ -655,7 +746,9 @@
         errorLine1="                .toShortcutInfo());"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="598"
+            column="18"/>
     </issue>
 
     <issue
@@ -664,7 +757,9 @@
         errorLine1="                assertEquals(getDefaultSubscriptionId(), actual);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"
+            line="110"
+            column="30"/>
     </issue>
 
     <issue
@@ -673,7 +768,9 @@
         errorLine1="                assertEquals(expected, getDefaultSubscriptionId());"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"/>
+            file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"
+            line="112"
+            column="40"/>
     </issue>
 
     <issue
@@ -682,7 +779,9 @@
         errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
         errorLine2="        ~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/widget/TestContentView.java"/>
+            file="src/androidTest/java/androidx/core/widget/TestContentView.java"
+            line="53"
+            column="9"/>
     </issue>
 
     <issue
@@ -691,7 +790,9 @@
         errorLine1="        requestApplyInsets()"
         errorLine2="        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt"/>
+            file="src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt"
+            line="424"
+            column="9"/>
     </issue>
 
     <issue
@@ -700,7 +801,9 @@
         errorLine1="                    builder.setSemanticAction(action.getSemanticAction());"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4805"
+            column="47"/>
     </issue>
 
     <issue
@@ -709,7 +812,9 @@
         errorLine1="                            ? remoteInput.getEditChoicesBeforeSending()"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6449"
+            column="31"/>
     </issue>
 
     <issue
@@ -718,7 +823,9 @@
         errorLine1="                                ? src.getEditChoicesBeforeSending()"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7483"
+            column="35"/>
     </issue>
 
     <issue
@@ -727,7 +834,9 @@
         errorLine1="                actionBuilder.setSemanticAction(action.getSemanticAction());"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="389"
+            column="49"/>
     </issue>
 
     <issue
@@ -736,7 +845,9 @@
         errorLine1="                super(compat.getDispatchMode());"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/WindowInsetsAnimationCompat.java"/>
+            file="src/main/java/androidx/core/view/WindowInsetsAnimationCompat.java"
+            line="968"
+            column="23"/>
     </issue>
 
     <issue
@@ -745,7 +856,9 @@
         errorLine1="                    requestRelaunchActivityMethod.invoke(activityThread,"
         errorLine2="                    ^">
         <location
-            file="src/main/java/androidx/core/app/ActivityRecreator.java"/>
+            file="src/main/java/androidx/core/app/ActivityRecreator.java"
+            line="152"
+            column="21"/>
     </issue>
 
     <issue
@@ -754,7 +867,9 @@
         errorLine1="                            performStopActivity3ParamsMethod.invoke(activityThread,"
         errorLine2="                            ^">
         <location
-            file="src/main/java/androidx/core/app/ActivityRecreator.java"/>
+            file="src/main/java/androidx/core/app/ActivityRecreator.java"
+            line="274"
+            column="29"/>
     </issue>
 
     <issue
@@ -763,7 +878,9 @@
         errorLine1="                            performStopActivity2ParamsMethod.invoke(activityThread,"
         errorLine2="                            ^">
         <location
-            file="src/main/java/androidx/core/app/ActivityRecreator.java"/>
+            file="src/main/java/androidx/core/app/ActivityRecreator.java"
+            line="277"
+            column="29"/>
     </issue>
 
     <issue
@@ -772,7 +889,9 @@
         errorLine1="            return (String) getMethod.invoke(systemProperties, name);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/DisplayCompat.java"/>
+            file="src/main/java/androidx/core/view/DisplayCompat.java"
+            line="136"
+            column="29"/>
     </issue>
 
     <issue
@@ -781,7 +900,9 @@
         errorLine1="                Object value = sActionBarOnMenuKeyMethod.invoke(actionBar, event);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/KeyEventDispatcher.java"/>
+            file="src/main/java/androidx/core/view/KeyEventDispatcher.java"
+            line="108"
+            column="32"/>
     </issue>
 
     <issue
@@ -790,7 +911,9 @@
         errorLine1="                    Boolean result = (Boolean) sMethodUserHandleIsAppMethod.invoke(null, uid);"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/ProcessCompat.java"/>
+            file="src/main/java/androidx/core/os/ProcessCompat.java"
+            line="104"
+            column="48"/>
     </issue>
 
     <issue
@@ -799,7 +922,9 @@
         errorLine1="                    Boolean result = (Boolean) sMethodUserIdIsAppMethod.invoke(null, uid);"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/ProcessCompat.java"/>
+            file="src/main/java/androidx/core/os/ProcessCompat.java"
+            line="143"
+            column="48"/>
     </issue>
 
     <issue
@@ -808,7 +933,9 @@
         errorLine1="                        removeItemAtMethod.invoke(menu, i);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/widget/TextViewCompat.java"/>
+            file="src/main/java/androidx/core/widget/TextViewCompat.java"
+            line="630"
+            column="25"/>
     </issue>
 
     <issue
@@ -817,7 +944,9 @@
         errorLine1="            return (Typeface) sCreateFromFamiliesWithDefault.invoke("
         errorLine2="                              ^">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java"
+            line="127"
+            column="31"/>
     </issue>
 
     <issue
@@ -826,7 +955,9 @@
         errorLine1="            final Boolean result = (Boolean) sAddFontWeightStyle.invoke("
         errorLine2="                                             ^">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java"
+            line="138"
+            column="46"/>
     </issue>
 
     <issue
@@ -835,7 +966,9 @@
         errorLine1="            final Boolean result = (Boolean) sAddFontWeightStyle.invoke("
         errorLine2="                                             ^">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java"
+            line="112"
+            column="46"/>
     </issue>
 
     <issue
@@ -844,7 +977,9 @@
         errorLine1="            return (Typeface) sCreateFromFamiliesWithDefault.invoke("
         errorLine2="                              ^">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java"
+            line="124"
+            column="31"/>
     </issue>
 
     <issue
@@ -853,7 +988,9 @@
         errorLine1="            return (Boolean) mAddFontFromAssetManager.invoke(family,"
         errorLine2="                             ^">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="140"
+            column="30"/>
     </issue>
 
     <issue
@@ -862,7 +999,9 @@
         errorLine1="            return (Boolean) mAddFontFromBuffer.invoke(family,"
         errorLine2="                             ^">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="155"
+            column="30"/>
     </issue>
 
     <issue
@@ -871,7 +1010,9 @@
         errorLine1="            return (Typeface) mCreateFromFamiliesWithDefault.invoke(null /* static method */,"
         errorLine2="                              ^">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="171"
+            column="31"/>
     </issue>
 
     <issue
@@ -880,7 +1021,9 @@
         errorLine1="            return (Boolean) mFreeze.invoke(family);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="183"
+            column="30"/>
     </issue>
 
     <issue
@@ -889,7 +1032,9 @@
         errorLine1="            mAbortCreation.invoke(family);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="194"
+            column="13"/>
     </issue>
 
     <issue
@@ -898,7 +1043,9 @@
         errorLine1="            return (Typeface) mCreateFromFamiliesWithDefault.invoke(null /* static method */,"
         errorLine2="                              ^">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+            line="51"
+            column="31"/>
     </issue>
 
     <issue
@@ -907,7 +1054,9 @@
         errorLine1="                return (Boolean) sIsProjectedDrawableMethod.invoke(mDrawable);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/drawable/WrappedDrawableApi21.java"/>
+            file="src/main/java/androidx/core/graphics/drawable/WrappedDrawableApi21.java"
+            line="131"
+            column="34"/>
     </issue>
 
     <issue
@@ -916,7 +1065,9 @@
         errorLine1="                mAction = new AccessibilityNodeInfo.AccessibilityAction(id, label);"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="643"
+            column="27"/>
     </issue>
 
     <issue
@@ -925,7 +1076,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.AccessibilityAction) mAction).getId();"
         errorLine2="                                                                             ~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="657"
+            column="78"/>
     </issue>
 
     <issue
@@ -934,7 +1087,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.AccessibilityAction) mAction).getLabel();"
         errorLine2="                                                                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="671"
+            column="78"/>
     </issue>
 
     <issue
@@ -943,7 +1098,9 @@
         errorLine1="                return new CollectionInfoCompat(AccessibilityNodeInfo.CollectionInfo.obtain("
         errorLine2="                                                                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="782"
+            column="86"/>
     </issue>
 
     <issue
@@ -952,7 +1109,9 @@
         errorLine1="                return new CollectionInfoCompat(AccessibilityNodeInfo.CollectionInfo.obtain("
         errorLine2="                                                                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="785"
+            column="86"/>
     </issue>
 
     <issue
@@ -961,7 +1120,9 @@
         errorLine1="                return new CollectionInfoCompat(AccessibilityNodeInfo.CollectionInfo.obtain("
         errorLine2="                                                                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="804"
+            column="86"/>
     </issue>
 
     <issue
@@ -970,7 +1131,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionInfo) mInfo).getColumnCount();"
         errorLine2="                                                                      ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="822"
+            column="71"/>
     </issue>
 
     <issue
@@ -979,7 +1142,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionInfo) mInfo).getRowCount();"
         errorLine2="                                                                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="835"
+            column="71"/>
     </issue>
 
     <issue
@@ -988,7 +1153,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionInfo) mInfo).isHierarchical();"
         errorLine2="                                                                      ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="848"
+            column="71"/>
     </issue>
 
     <issue
@@ -997,7 +1164,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionInfo) mInfo).getSelectionMode();"
         errorLine2="                                                                      ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="866"
+            column="71"/>
     </issue>
 
     <issue
@@ -1006,7 +1175,9 @@
         errorLine1="                return new CollectionItemInfoCompat(AccessibilityNodeInfo.CollectionItemInfo.obtain("
         errorLine2="                                                                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="903"
+            column="94"/>
     </issue>
 
     <issue
@@ -1015,7 +1186,9 @@
         errorLine1="                return new CollectionItemInfoCompat(AccessibilityNodeInfo.CollectionItemInfo.obtain("
         errorLine2="                                                                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="906"
+            column="94"/>
     </issue>
 
     <issue
@@ -1024,7 +1197,9 @@
         errorLine1="                return new CollectionItemInfoCompat(AccessibilityNodeInfo.CollectionItemInfo.obtain("
         errorLine2="                                                                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="928"
+            column="94"/>
     </issue>
 
     <issue
@@ -1033,7 +1208,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).getColumnIndex();"
         errorLine2="                                                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="946"
+            column="75"/>
     </issue>
 
     <issue
@@ -1042,7 +1219,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).getColumnSpan();"
         errorLine2="                                                                          ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="959"
+            column="75"/>
     </issue>
 
     <issue
@@ -1051,7 +1230,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).getRowIndex();"
         errorLine2="                                                                          ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="972"
+            column="75"/>
     </issue>
 
     <issue
@@ -1060,7 +1241,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).getRowSpan();"
         errorLine2="                                                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="985"
+            column="75"/>
     </issue>
 
     <issue
@@ -1069,7 +1252,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).isHeading();"
         errorLine2="                                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1002"
+            column="75"/>
     </issue>
 
     <issue
@@ -1078,7 +1263,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).isSelected();"
         errorLine2="                                                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1015"
+            column="75"/>
     </issue>
 
     <issue
@@ -1087,7 +1274,9 @@
         errorLine1="                        AccessibilityNodeInfo.RangeInfo.obtain(type, min, max, current));"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1045"
+            column="57"/>
     </issue>
 
     <issue
@@ -1096,7 +1285,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.RangeInfo) mInfo).getCurrent();"
         errorLine2="                                                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1064"
+            column="66"/>
     </issue>
 
     <issue
@@ -1105,7 +1296,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.RangeInfo) mInfo).getMax();"
         errorLine2="                                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1077"
+            column="66"/>
     </issue>
 
     <issue
@@ -1114,7 +1307,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.RangeInfo) mInfo).getMin();"
         errorLine2="                                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1090"
+            column="66"/>
     </issue>
 
     <issue
@@ -1123,7 +1318,9 @@
         errorLine1="                return ((AccessibilityNodeInfo.RangeInfo) mInfo).getType();"
         errorLine2="                                                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1107"
+            column="66"/>
     </issue>
 
     <issue
@@ -1132,7 +1329,9 @@
         errorLine1="                mInfo = new TouchDelegateInfo(targetMap);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1127"
+            column="25"/>
     </issue>
 
     <issue
@@ -1141,7 +1340,9 @@
         errorLine1="                return mInfo.getRegionCount();"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1149"
+            column="30"/>
     </issue>
 
     <issue
@@ -1150,7 +1351,9 @@
         errorLine1="                return mInfo.getRegionAt(index);"
         errorLine2="                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1168"
+            column="30"/>
     </issue>
 
     <issue
@@ -1159,7 +1362,9 @@
         errorLine1="                AccessibilityNodeInfo info = mInfo.getTargetForRegion(region);"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1196"
+            column="52"/>
     </issue>
 
     <issue
@@ -1168,7 +1373,9 @@
         errorLine1="                    AccessibilityNodeInfo.obtain(root, virtualDescendantId));"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1757"
+            column="43"/>
     </issue>
 
     <issue
@@ -1177,7 +1384,9 @@
         errorLine1="            mInfo.setSource(root, virtualDescendantId);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1819"
+            column="19"/>
     </issue>
 
     <issue
@@ -1186,7 +1395,9 @@
         errorLine1="            return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.findFocus(focus));"
         errorLine2="                                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1836"
+            column="74"/>
     </issue>
 
     <issue
@@ -1195,7 +1406,9 @@
         errorLine1="            return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.focusSearch(direction));"
         errorLine2="                                                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1858"
+            column="74"/>
     </issue>
 
     <issue
@@ -1204,7 +1417,9 @@
         errorLine1="            mInfo.addChild(root, virtualDescendantId);"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1930"
+            column="19"/>
     </issue>
 
     <issue
@@ -1213,7 +1428,9 @@
         errorLine1="            return mInfo.removeChild(child);"
         errorLine2="                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1950"
+            column="26"/>
     </issue>
 
     <issue
@@ -1222,7 +1439,9 @@
         errorLine1="            return mInfo.removeChild(root, virtualDescendantId);"
         errorLine2="                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1968"
+            column="26"/>
     </issue>
 
     <issue
@@ -1231,7 +1450,9 @@
         errorLine1="        ArrayList&lt;Integer> list = mInfo.getExtras()"
         errorLine2="                                        ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2006"
+            column="41"/>
     </issue>
 
     <issue
@@ -1240,7 +1461,9 @@
         errorLine1="            mInfo.getExtras().putIntegerArrayList(key, list);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2010"
+            column="19"/>
     </issue>
 
     <issue
@@ -1249,7 +1472,9 @@
         errorLine1="            mInfo.addAction((AccessibilityNodeInfo.AccessibilityAction) action.mAction);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2033"
+            column="19"/>
     </issue>
 
     <issue
@@ -1258,7 +1483,9 @@
         errorLine1="            return mInfo.removeAction((AccessibilityNodeInfo.AccessibilityAction) action.mAction);"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2058"
+            column="26"/>
     </issue>
 
     <issue
@@ -1267,7 +1494,9 @@
         errorLine1="            return mInfo.performAction(action, arguments);"
         errorLine2="                         ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2095"
+            column="26"/>
     </issue>
 
     <issue
@@ -1276,7 +1505,9 @@
         errorLine1="            mInfo.setMovementGranularities(granularities);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2115"
+            column="19"/>
     </issue>
 
     <issue
@@ -1285,7 +1516,9 @@
         errorLine1="            return mInfo.getMovementGranularities();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2126"
+            column="26"/>
     </issue>
 
     <issue
@@ -1294,7 +1527,9 @@
         errorLine1="            mInfo.setParent(root, virtualDescendantId);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2212"
+            column="19"/>
     </issue>
 
     <issue
@@ -1303,7 +1538,9 @@
         errorLine1="            return mInfo.isVisibleToUser();"
         errorLine2="                         ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2382"
+            column="26"/>
     </issue>
 
     <issue
@@ -1312,7 +1549,9 @@
         errorLine1="            mInfo.setVisibleToUser(visibleToUser);"
         errorLine2="                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2402"
+            column="19"/>
     </issue>
 
     <issue
@@ -1321,7 +1560,9 @@
         errorLine1="            return mInfo.isAccessibilityFocused();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2413"
+            column="26"/>
     </issue>
 
     <issue
@@ -1330,7 +1571,9 @@
         errorLine1="            mInfo.setAccessibilityFocused(focused);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2433"
+            column="19"/>
     </issue>
 
     <issue
@@ -1339,7 +1582,9 @@
         errorLine1="            return mInfo.isImportantForAccessibility();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2591"
+            column="26"/>
     </issue>
 
     <issue
@@ -1348,7 +1593,9 @@
         errorLine1="            mInfo.setImportantForAccessibility(important);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2610"
+            column="19"/>
     </issue>
 
     <issue
@@ -1357,7 +1604,9 @@
         errorLine1="            mInfo.getExtras().remove(SPANS_START_KEY);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2769"
+            column="19"/>
     </issue>
 
     <issue
@@ -1366,7 +1615,9 @@
         errorLine1="            mInfo.getExtras().remove(SPANS_END_KEY);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2770"
+            column="19"/>
     </issue>
 
     <issue
@@ -1375,7 +1626,9 @@
         errorLine1="            mInfo.getExtras().remove(SPANS_FLAGS_KEY);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2771"
+            column="19"/>
     </issue>
 
     <issue
@@ -1384,7 +1637,9 @@
         errorLine1="            mInfo.getExtras().remove(SPANS_ID_KEY);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2772"
+            column="19"/>
     </issue>
 
     <issue
@@ -1393,7 +1648,9 @@
         errorLine1="            return mInfo.getStateDescription();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2815"
+            column="26"/>
     </issue>
 
     <issue
@@ -1402,7 +1659,9 @@
         errorLine1="            return mInfo.getExtras().getCharSequence(STATE_DESCRIPTION_KEY);"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2817"
+            column="26"/>
     </issue>
 
     <issue
@@ -1411,7 +1670,9 @@
         errorLine1="            mInfo.setStateDescription(stateDescription);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2850"
+            column="19"/>
     </issue>
 
     <issue
@@ -1420,7 +1681,9 @@
         errorLine1="            mInfo.getExtras().putCharSequence(STATE_DESCRIPTION_KEY, stateDescription);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2852"
+            column="19"/>
     </issue>
 
     <issue
@@ -1429,7 +1692,9 @@
         errorLine1="            return mInfo.getUniqueId();"
         errorLine2="                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2915"
+            column="26"/>
     </issue>
 
     <issue
@@ -1438,7 +1703,9 @@
         errorLine1="            return mInfo.getExtras().getString(UNIQUE_ID_KEY);"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2917"
+            column="26"/>
     </issue>
 
     <issue
@@ -1447,7 +1714,9 @@
         errorLine1="            mInfo.setUniqueId(uniqueId);"
         errorLine2="                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2935"
+            column="19"/>
     </issue>
 
     <issue
@@ -1456,7 +1725,9 @@
         errorLine1="            mInfo.getExtras().putString(UNIQUE_ID_KEY, uniqueId);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2937"
+            column="19"/>
     </issue>
 
     <issue
@@ -1465,7 +1736,9 @@
         errorLine1="            mInfo.setViewIdResourceName(viewId);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2880"
+            column="19"/>
     </issue>
 
     <issue
@@ -1474,7 +1747,9 @@
         errorLine1="            return mInfo.getViewIdResourceName();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2898"
+            column="26"/>
     </issue>
 
     <issue
@@ -1483,7 +1758,9 @@
         errorLine1="            return mInfo.getLiveRegion();"
         errorLine2="                         ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2924"
+            column="26"/>
     </issue>
 
     <issue
@@ -1492,7 +1769,9 @@
         errorLine1="            mInfo.setLiveRegion(mode);"
         errorLine2="                  ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2944"
+            column="19"/>
     </issue>
 
     <issue
@@ -1501,7 +1780,9 @@
         errorLine1="            return mInfo.getDrawingOrder();"
         errorLine2="                         ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2961"
+            column="26"/>
     </issue>
 
     <issue
@@ -1510,7 +1791,9 @@
         errorLine1="            mInfo.setDrawingOrder(drawingOrderInParent);"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2980"
+            column="19"/>
     </issue>
 
     <issue
@@ -1519,7 +1802,9 @@
         errorLine1="            AccessibilityNodeInfo.CollectionInfo info = mInfo.getCollectionInfo();"
         errorLine2="                                                              ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2992"
+            column="63"/>
     </issue>
 
     <issue
@@ -1528,7 +1813,9 @@
         errorLine1="            mInfo.setCollectionInfo((collectionInfo == null) ? null"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3002"
+            column="19"/>
     </issue>
 
     <issue
@@ -1537,7 +1824,9 @@
         errorLine1="            mInfo.setCollectionItemInfo((collectionItemInfo == null) ? null"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3011"
+            column="19"/>
     </issue>
 
     <issue
@@ -1546,7 +1835,9 @@
         errorLine1="            AccessibilityNodeInfo.CollectionItemInfo info = mInfo.getCollectionItemInfo();"
         errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3025"
+            column="67"/>
     </issue>
 
     <issue
@@ -1555,7 +1846,9 @@
         errorLine1="            AccessibilityNodeInfo.RangeInfo info = mInfo.getRangeInfo();"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3040"
+            column="58"/>
     </issue>
 
     <issue
@@ -1564,7 +1857,9 @@
         errorLine1="            mInfo.setRangeInfo((AccessibilityNodeInfo.RangeInfo) rangeInfo.mInfo);"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3060"
+            column="19"/>
     </issue>
 
     <issue
@@ -1573,7 +1868,9 @@
         errorLine1="            actions = (List&lt;Object>) (List&lt;?>) mInfo.getActionList();"
         errorLine2="                                                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3078"
+            column="54"/>
     </issue>
 
     <issue
@@ -1582,7 +1879,9 @@
         errorLine1="            mInfo.setContentInvalid(contentInvalid);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3106"
+            column="19"/>
     </issue>
 
     <issue
@@ -1591,7 +1890,9 @@
         errorLine1="            return mInfo.isContentInvalid();"
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3118"
+            column="26"/>
     </issue>
 
     <issue
@@ -1600,7 +1901,9 @@
         errorLine1="            return mInfo.isContextClickable();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3131"
+            column="26"/>
     </issue>
 
     <issue
@@ -1609,7 +1912,9 @@
         errorLine1="            mInfo.setContextClickable(contextClickable);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3150"
+            column="19"/>
     </issue>
 
     <issue
@@ -1618,7 +1923,9 @@
         errorLine1="            return mInfo.getHintText();"
         errorLine2="                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3161"
+            column="26"/>
     </issue>
 
     <issue
@@ -1627,7 +1934,9 @@
         errorLine1="            return mInfo.getExtras().getCharSequence(HINT_TEXT_KEY);"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3163"
+            column="26"/>
     </issue>
 
     <issue
@@ -1636,7 +1945,9 @@
         errorLine1="            mInfo.setHintText(hintText);"
         errorLine2="                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3183"
+            column="19"/>
     </issue>
 
     <issue
@@ -1645,7 +1956,9 @@
         errorLine1="            mInfo.getExtras().putCharSequence(HINT_TEXT_KEY, hintText);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3185"
+            column="19"/>
     </issue>
 
     <issue
@@ -1654,7 +1967,9 @@
         errorLine1="            mInfo.setError(error);"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3204"
+            column="19"/>
     </issue>
 
     <issue
@@ -1663,7 +1978,9 @@
         errorLine1="            return mInfo.getError();"
         errorLine2="                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3215"
+            column="26"/>
     </issue>
 
     <issue
@@ -1672,7 +1989,9 @@
         errorLine1="            mInfo.setLabelFor(labeled);"
         errorLine2="                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3229"
+            column="19"/>
     </issue>
 
     <issue
@@ -1681,7 +2000,9 @@
         errorLine1="            mInfo.setLabelFor(root, virtualDescendantId);"
         errorLine2="                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3249"
+            column="19"/>
     </issue>
 
     <issue
@@ -1690,7 +2011,9 @@
         errorLine1="            return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.getLabelFor());"
         errorLine2="                                                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3266"
+            column="74"/>
     </issue>
 
     <issue
@@ -1699,7 +2022,9 @@
         errorLine1="            mInfo.setLabeledBy(label);"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3280"
+            column="19"/>
     </issue>
 
     <issue
@@ -1708,7 +2033,9 @@
         errorLine1="            mInfo.setLabeledBy(root, virtualDescendantId);"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3305"
+            column="19"/>
     </issue>
 
     <issue
@@ -1717,7 +2044,9 @@
         errorLine1="            return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.getLabeledBy());"
         errorLine2="                                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3322"
+            column="74"/>
     </issue>
 
     <issue
@@ -1726,7 +2055,9 @@
         errorLine1="            return mInfo.canOpenPopup();"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3335"
+            column="26"/>
     </issue>
 
     <issue
@@ -1735,7 +2066,9 @@
         errorLine1="            mInfo.setCanOpenPopup(opensPopup);"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3353"
+            column="19"/>
     </issue>
 
     <issue
@@ -1744,7 +2077,9 @@
         errorLine1="            List&lt;AccessibilityNodeInfo> nodes = mInfo.findAccessibilityNodeInfosByViewId(viewId);"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3382"
+            column="55"/>
     </issue>
 
     <issue
@@ -1753,7 +2088,9 @@
         errorLine1="            return mInfo.getExtras();"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3408"
+            column="26"/>
     </issue>
 
     <issue
@@ -1762,7 +2099,9 @@
         errorLine1="            return mInfo.getInputType();"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3421"
+            column="26"/>
     </issue>
 
     <issue
@@ -1771,7 +2110,9 @@
         errorLine1="            mInfo.setInputType(inputType);"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3442"
+            column="19"/>
     </issue>
 
     <issue
@@ -1780,7 +2121,9 @@
         errorLine1="            return mInfo.getAvailableExtraData();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3460"
+            column="26"/>
     </issue>
 
     <issue
@@ -1789,7 +2132,9 @@
         errorLine1="            mInfo.setAvailableExtraData(extraDataKeys);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3484"
+            column="19"/>
     </issue>
 
     <issue
@@ -1798,7 +2143,9 @@
         errorLine1="            mInfo.setMaxTextLength(max);"
         errorLine2="                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3505"
+            column="19"/>
     </issue>
 
     <issue
@@ -1807,7 +2154,9 @@
         errorLine1="            return mInfo.getMaxTextLength();"
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3517"
+            column="26"/>
     </issue>
 
     <issue
@@ -1816,7 +2165,9 @@
         errorLine1="            mInfo.setTextSelection(start, end);"
         errorLine2="                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3538"
+            column="19"/>
     </issue>
 
     <issue
@@ -1825,7 +2176,9 @@
         errorLine1="            return mInfo.getTextSelectionStart();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3549"
+            column="26"/>
     </issue>
 
     <issue
@@ -1834,7 +2187,9 @@
         errorLine1="            return mInfo.getTextSelectionEnd();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3562"
+            column="26"/>
     </issue>
 
     <issue
@@ -1843,7 +2198,9 @@
         errorLine1="            return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.getTraversalBefore());"
         errorLine2="                                                                         ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3579"
+            column="74"/>
     </issue>
 
     <issue
@@ -1852,7 +2209,9 @@
         errorLine1="            mInfo.setTraversalBefore(view);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3601"
+            column="19"/>
     </issue>
 
     <issue
@@ -1861,7 +2220,9 @@
         errorLine1="            mInfo.setTraversalBefore(root, virtualDescendantId);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3628"
+            column="19"/>
     </issue>
 
     <issue
@@ -1870,7 +2231,9 @@
         errorLine1="            return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.getTraversalAfter());"
         errorLine2="                                                                         ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3644"
+            column="74"/>
     </issue>
 
     <issue
@@ -1879,7 +2242,9 @@
         errorLine1="            mInfo.setTraversalAfter(view);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3666"
+            column="19"/>
     </issue>
 
     <issue
@@ -1888,7 +2253,9 @@
         errorLine1="            mInfo.setTraversalAfter(root, virtualDescendantId);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3692"
+            column="19"/>
     </issue>
 
     <issue
@@ -1897,7 +2264,9 @@
         errorLine1="            return AccessibilityWindowInfoCompat.wrapNonNullInstance(mInfo.getWindow());"
         errorLine2="                                                                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3705"
+            column="76"/>
     </issue>
 
     <issue
@@ -1906,7 +2275,9 @@
         errorLine1="            return mInfo.isDismissable();"
         errorLine2="                         ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3718"
+            column="26"/>
     </issue>
 
     <issue
@@ -1915,7 +2286,9 @@
         errorLine1="            mInfo.setDismissable(dismissable);"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3736"
+            column="19"/>
     </issue>
 
     <issue
@@ -1924,7 +2297,9 @@
         errorLine1="            return mInfo.isEditable();"
         errorLine2="                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3747"
+            column="26"/>
     </issue>
 
     <issue
@@ -1933,7 +2308,9 @@
         errorLine1="            mInfo.setEditable(editable);"
         errorLine2="                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3767"
+            column="19"/>
     </issue>
 
     <issue
@@ -1942,7 +2319,9 @@
         errorLine1="            return mInfo.isMultiLine();"
         errorLine2="                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3778"
+            column="26"/>
     </issue>
 
     <issue
@@ -1951,7 +2330,9 @@
         errorLine1="            mInfo.setMultiLine(multiLine);"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3796"
+            column="19"/>
     </issue>
 
     <issue
@@ -1960,7 +2341,9 @@
         errorLine1="            return mInfo.getTooltipText();"
         errorLine2="                         ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3808"
+            column="26"/>
     </issue>
 
     <issue
@@ -1969,7 +2352,9 @@
         errorLine1="            return mInfo.getExtras().getCharSequence(TOOLTIP_TEXT_KEY);"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3810"
+            column="26"/>
     </issue>
 
     <issue
@@ -1978,7 +2363,9 @@
         errorLine1="            mInfo.setTooltipText(tooltipText);"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3830"
+            column="19"/>
     </issue>
 
     <issue
@@ -1987,7 +2374,9 @@
         errorLine1="            mInfo.getExtras().putCharSequence(TOOLTIP_TEXT_KEY, tooltipText);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3832"
+            column="19"/>
     </issue>
 
     <issue
@@ -1996,7 +2385,9 @@
         errorLine1="            mInfo.setPaneTitle(paneTitle);"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3850"
+            column="19"/>
     </issue>
 
     <issue
@@ -2005,7 +2396,9 @@
         errorLine1="            mInfo.getExtras().putCharSequence(PANE_TITLE_KEY, paneTitle);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3852"
+            column="19"/>
     </issue>
 
     <issue
@@ -2014,7 +2407,9 @@
         errorLine1="            return mInfo.getPaneTitle();"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3864"
+            column="26"/>
     </issue>
 
     <issue
@@ -2023,7 +2418,9 @@
         errorLine1="            return mInfo.getExtras().getCharSequence(PANE_TITLE_KEY);"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3866"
+            column="26"/>
     </issue>
 
     <issue
@@ -2032,7 +2429,9 @@
         errorLine1="            return mInfo.isScreenReaderFocusable();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3883"
+            column="26"/>
     </issue>
 
     <issue
@@ -2041,7 +2440,9 @@
         errorLine1="            mInfo.setScreenReaderFocusable(screenReaderFocusable);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3902"
+            column="19"/>
     </issue>
 
     <issue
@@ -2050,7 +2451,9 @@
         errorLine1="            return mInfo.isShowingHintText();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3917"
+            column="26"/>
     </issue>
 
     <issue
@@ -2059,7 +2462,9 @@
         errorLine1="            mInfo.setShowingHintText(showingHintText);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3937"
+            column="19"/>
     </issue>
 
     <issue
@@ -2068,7 +2473,9 @@
         errorLine1="            return mInfo.isHeading();"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3954"
+            column="26"/>
     </issue>
 
     <issue
@@ -2077,7 +2484,9 @@
         errorLine1="            mInfo.setHeading(isHeading);"
         errorLine2="                  ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3974"
+            column="19"/>
     </issue>
 
     <issue
@@ -2086,7 +2495,9 @@
         errorLine1="            return mInfo.isTextEntryKey();"
         errorLine2="                         ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3987"
+            column="26"/>
     </issue>
 
     <issue
@@ -2095,7 +2506,9 @@
         errorLine1="            mInfo.setTextEntryKey(isTextEntryKey);"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="4005"
+            column="19"/>
     </issue>
 
     <issue
@@ -2104,7 +2517,9 @@
         errorLine1="            return mInfo.refresh();"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="4022"
+            column="26"/>
     </issue>
 
     <issue
@@ -2113,7 +2528,9 @@
         errorLine1="            return mInfo.getExtras().getCharSequence(ROLE_DESCRIPTION_KEY);"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="4034"
+            column="26"/>
     </issue>
 
     <issue
@@ -2122,7 +2539,9 @@
         errorLine1="            mInfo.getExtras().putCharSequence(ROLE_DESCRIPTION_KEY, roleDescription);"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="4066"
+            column="19"/>
     </issue>
 
     <issue
@@ -2131,7 +2550,9 @@
         errorLine1="            TouchDelegateInfo delegateInfo = mInfo.getTouchDelegateInfo();"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="4088"
+            column="52"/>
     </issue>
 
     <issue
@@ -2140,7 +2561,9 @@
         errorLine1="            mInfo.setTouchDelegateInfo(delegatedInfo.mInfo);"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="4115"
+            column="19"/>
     </issue>
 
     <issue
@@ -2149,7 +2572,9 @@
         errorLine1="            return info.loadDescription(packageManager);"
         errorLine2="                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java"/>
+            file="src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java"
+            line="199"
+            column="25"/>
     </issue>
 
     <issue
@@ -2158,7 +2583,9 @@
         errorLine1="            return info.getCapabilities();"
         errorLine2="                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java"/>
+            file="src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java"
+            line="288"
+            column="25"/>
     </issue>
 
     <issue
@@ -2167,7 +2594,9 @@
         errorLine1="            return activityManager.isLowRamDevice();"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityManagerCompat.java"
+            line="41"
+            column="36"/>
     </issue>
 
     <issue
@@ -2176,7 +2605,9 @@
         errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeCustomAnimation(context,"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="69"
+            column="66"/>
     </issue>
 
     <issue
@@ -2185,7 +2616,9 @@
         errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeScaleUpAnimation("
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="99"
+            column="66"/>
     </issue>
 
     <issue
@@ -2194,7 +2627,9 @@
         errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeClipRevealAnimation("
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="123"
+            column="66"/>
     </issue>
 
     <issue
@@ -2203,7 +2638,9 @@
         errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeThumbnailScaleUpAnimation("
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="152"
+            column="66"/>
     </issue>
 
     <issue
@@ -2212,7 +2649,9 @@
         errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeSceneTransitionAnimation("
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="180"
+            column="66"/>
     </issue>
 
     <issue
@@ -2221,7 +2660,9 @@
         errorLine1="                    ActivityOptions.makeSceneTransitionAnimation(activity, pairs));"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="217"
+            column="37"/>
     </issue>
 
     <issue
@@ -2230,7 +2671,9 @@
         errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeTaskLaunchBehind());"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="235"
+            column="66"/>
     </issue>
 
     <issue
@@ -2239,7 +2682,9 @@
         errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeBasic());"
         errorLine2="                                                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="247"
+            column="66"/>
     </issue>
 
     <issue
@@ -2248,7 +2693,9 @@
         errorLine1="                mActivityOptions.requestUsageTimeReport(receiver);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="277"
+            column="34"/>
     </issue>
 
     <issue
@@ -2257,7 +2704,9 @@
         errorLine1="                    mActivityOptions.setLaunchBounds(screenSpacePixelRect));"
         errorLine2="                                     ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="288"
+            column="38"/>
     </issue>
 
     <issue
@@ -2266,7 +2715,9 @@
         errorLine1="            return mActivityOptions.getLaunchBounds();"
         errorLine2="                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+            line="296"
+            column="37"/>
     </issue>
 
     <issue
@@ -2275,7 +2726,9 @@
         errorLine1="            alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(triggerTime, showIntent),"
         errorLine2="                         ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+            line="62"
+            column="26"/>
     </issue>
 
     <issue
@@ -2284,7 +2737,9 @@
         errorLine1="            alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(triggerTime, showIntent),"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+            line="62"
+            column="40"/>
     </issue>
 
     <issue
@@ -2293,7 +2748,9 @@
         errorLine1="            alarmManager.setAndAllowWhileIdle(type, triggerAtMillis, operation);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+            line="120"
+            column="26"/>
     </issue>
 
     <issue
@@ -2302,7 +2759,9 @@
         errorLine1="            alarmManager.setExact(type, triggerAtMillis, operation);"
         errorLine2="                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+            line="165"
+            column="26"/>
     </issue>
 
     <issue
@@ -2311,7 +2770,9 @@
         errorLine1="            alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+            line="225"
+            column="26"/>
     </issue>
 
     <issue
@@ -2320,7 +2781,9 @@
         errorLine1="            return AppOpsManager.permissionToOp(permission);"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+            line="79"
+            column="34"/>
     </issue>
 
     <issue
@@ -2329,7 +2792,9 @@
         errorLine1="            return appOpsManager.noteOp(op, uid, packageName);"
         errorLine2="                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+            line="110"
+            column="34"/>
     </issue>
 
     <issue
@@ -2338,7 +2803,9 @@
         errorLine1="            return appOpsManager.noteOpNoThrow(op, uid, packageName);"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+            line="130"
+            column="34"/>
     </issue>
 
     <issue
@@ -2347,7 +2814,9 @@
         errorLine1="            AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+            line="160"
+            column="51"/>
     </issue>
 
     <issue
@@ -2356,7 +2825,9 @@
         errorLine1="            return appOpsManager.noteProxyOp(op, proxiedPackageName);"
         errorLine2="                                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+            line="161"
+            column="34"/>
     </issue>
 
     <issue
@@ -2365,7 +2836,9 @@
         errorLine1="            AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+            line="179"
+            column="51"/>
     </issue>
 
     <issue
@@ -2374,7 +2847,9 @@
         errorLine1="            return appOpsManager.noteProxyOpNoThrow(op, proxiedPackageName);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+            line="180"
+            column="34"/>
     </issue>
 
     <issue
@@ -2383,7 +2858,9 @@
         errorLine1="            return bitmap.hasMipMap();"
         errorLine2="                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/BitmapCompat.java"/>
+            file="src/main/java/androidx/core/graphics/BitmapCompat.java"
+            line="29"
+            column="27"/>
     </issue>
 
     <issue
@@ -2392,7 +2869,9 @@
         errorLine1="            bitmap.setHasMipMap(hasMipMap);"
         errorLine2="                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/BitmapCompat.java"/>
+            file="src/main/java/androidx/core/graphics/BitmapCompat.java"
+            line="36"
+            column="20"/>
     </issue>
 
     <issue
@@ -2401,7 +2880,9 @@
         errorLine1="            return bitmap.getAllocationByteCount();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/BitmapCompat.java"/>
+            file="src/main/java/androidx/core/graphics/BitmapCompat.java"
+            line="49"
+            column="27"/>
     </issue>
 
     <issue
@@ -2410,7 +2891,9 @@
         errorLine1="                    ? new BlendModeColorFilter(color, blendMode) : null;"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/BlendModeColorFilterCompat.java"/>
+            file="src/main/java/androidx/core/graphics/BlendModeColorFilterCompat.java"
+            line="45"
+            column="23"/>
     </issue>
 
     <issue
@@ -2419,7 +2902,9 @@
         errorLine1="            return bundle.getBinder(key);"
         errorLine2="                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/BundleCompat.java"/>
+            file="src/main/java/androidx/core/app/BundleCompat.java"
+            line="106"
+            column="27"/>
     </issue>
 
     <issue
@@ -2428,7 +2913,9 @@
         errorLine1="            bundle.putBinder(key, binder);"
         errorLine2="                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/BundleCompat.java"/>
+            file="src/main/java/androidx/core/app/BundleCompat.java"
+            line="122"
+            column="20"/>
     </issue>
 
     <issue
@@ -2437,7 +2924,9 @@
         errorLine1="                ((android.os.CancellationSignal) obj).cancel();"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/CancellationSignal.java"/>
+            file="src/main/java/androidx/core/os/CancellationSignal.java"
+            line="84"
+            column="55"/>
     </issue>
 
     <issue
@@ -2446,7 +2935,9 @@
         errorLine1="                mCancellationSignalObj = new android.os.CancellationSignal();"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/CancellationSignal.java"/>
+            file="src/main/java/androidx/core/os/CancellationSignal.java"
+            line="143"
+            column="42"/>
     </issue>
 
     <issue
@@ -2455,7 +2946,9 @@
         errorLine1="                    ((android.os.CancellationSignal) mCancellationSignalObj).cancel();"
         errorLine2="                                                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/CancellationSignal.java"/>
+            file="src/main/java/androidx/core/os/CancellationSignal.java"
+            line="145"
+            column="78"/>
     </issue>
 
     <issue
@@ -2464,7 +2957,9 @@
         errorLine1="            return LocaleListCompat.wrap(configuration.getLocales());"
         errorLine2="                                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/ConfigurationCompat.java"/>
+            file="src/main/java/androidx/core/os/ConfigurationCompat.java"
+            line="42"
+            column="56"/>
     </issue>
 
     <issue
@@ -2473,7 +2968,9 @@
         errorLine1="            return new CursorWindow(name, windowSizeBytes);"
         errorLine2="                   ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/database/CursorWindowCompat.java"/>
+            file="src/main/java/androidx/core/database/CursorWindowCompat.java"
+            line="43"
+            column="20"/>
     </issue>
 
     <issue
@@ -2482,7 +2979,9 @@
         errorLine1="            return new CursorWindow(name);"
         errorLine2="                   ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/database/CursorWindowCompat.java"/>
+            file="src/main/java/androidx/core/database/CursorWindowCompat.java"
+            line="45"
+            column="20"/>
     </issue>
 
     <issue
@@ -2491,7 +2990,9 @@
         errorLine1="            return dialog.requireViewById(id);"
         errorLine2="                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/DialogCompat.java"/>
+            file="src/main/java/androidx/core/app/DialogCompat.java"
+            line="56"
+            column="27"/>
     </issue>
 
     <issue
@@ -2500,7 +3001,9 @@
         errorLine1="            return Environment.getExternalStorageState(path);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/EnvironmentCompat.java"/>
+            file="src/main/java/androidx/core/os/EnvironmentCompat.java"
+            line="60"
+            column="32"/>
     </issue>
 
     <issue
@@ -2509,7 +3012,9 @@
         errorLine1="            return Environment.getStorageState(path);"
         errorLine2="                               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/EnvironmentCompat.java"/>
+            file="src/main/java/androidx/core/os/EnvironmentCompat.java"
+            line="62"
+            column="32"/>
     </issue>
 
     <issue
@@ -2518,7 +3023,9 @@
         errorLine1="            return wrap(new LocaleList(localeList));"
         errorLine2="                        ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+            file="src/main/java/androidx/core/os/LocaleListCompat.java"
+            line="74"
+            column="25"/>
     </issue>
 
     <issue
@@ -2527,7 +3034,9 @@
         errorLine1="                        ? Locale.forLanguageTag(tags[i])"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+            file="src/main/java/androidx/core/os/LocaleListCompat.java"
+            line="165"
+            column="34"/>
     </issue>
 
     <issue
@@ -2536,7 +3045,9 @@
         errorLine1="            return LocaleListCompat.wrap(LocaleList.getAdjustedDefault());"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+            file="src/main/java/androidx/core/os/LocaleListCompat.java"
+            line="206"
+            column="53"/>
     </issue>
 
     <issue
@@ -2545,7 +3056,9 @@
         errorLine1="            return LocaleListCompat.wrap(LocaleList.getDefault());"
         errorLine2="                                                    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+            file="src/main/java/androidx/core/os/LocaleListCompat.java"
+            line="226"
+            column="53"/>
     </issue>
 
     <issue
@@ -2554,7 +3067,9 @@
         errorLine1="            final String script = locale.getScript();"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/LocaleListCompatWrapper.java"/>
+            file="src/main/java/androidx/core/os/LocaleListCompatWrapper.java"
+            line="163"
+            column="42"/>
     </issue>
 
     <issue
@@ -2563,7 +3078,9 @@
         errorLine1="            message.setAsynchronous(async);"
         errorLine2="                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/MessageCompat.java"/>
+            file="src/main/java/androidx/core/os/MessageCompat.java"
+            line="72"
+            column="21"/>
     </issue>
 
     <issue
@@ -2572,7 +3089,9 @@
         errorLine1="                message.setAsynchronous(async);"
         errorLine2="                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/MessageCompat.java"/>
+            file="src/main/java/androidx/core/os/MessageCompat.java"
+            line="79"
+            column="25"/>
     </issue>
 
     <issue
@@ -2581,7 +3100,9 @@
         errorLine1="            return message.isAsynchronous();"
         errorLine2="                           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/MessageCompat.java"/>
+            file="src/main/java/androidx/core/os/MessageCompat.java"
+            line="98"
+            column="28"/>
     </issue>
 
     <issue
@@ -2590,7 +3111,9 @@
         errorLine1="                return message.isAsynchronous();"
         errorLine2="                               ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/MessageCompat.java"/>
+            file="src/main/java/androidx/core/os/MessageCompat.java"
+            line="104"
+            column="32"/>
     </issue>
 
     <issue
@@ -2599,7 +3122,9 @@
         errorLine1="            return LocaleList.matchesLanguageAndScript(supported, desired);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+            file="src/main/java/androidx/core/os/LocaleListCompat.java"
+            line="251"
+            column="31"/>
     </issue>
 
     <issue
@@ -2608,7 +3133,9 @@
         errorLine1="            return sourceActivity.shouldUpRecreateTask(targetIntent);"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NavUtils.java"/>
+            file="src/main/java/androidx/core/app/NavUtils.java"
+            line="61"
+            column="35"/>
     </issue>
 
     <issue
@@ -2617,7 +3144,9 @@
         errorLine1="            sourceActivity.navigateUpTo(upIntent);"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NavUtils.java"/>
+            file="src/main/java/androidx/core/app/NavUtils.java"
+            line="109"
+            column="28"/>
     </issue>
 
     <issue
@@ -2626,7 +3155,9 @@
         errorLine1="            Intent result = sourceActivity.getParentActivityIntent();"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NavUtils.java"/>
+            file="src/main/java/androidx/core/app/NavUtils.java"
+            line="132"
+            column="44"/>
     </issue>
 
     <issue
@@ -2635,7 +3166,9 @@
         errorLine1="        this(channel.getId(), channel.getImportance());"
         errorLine2="                     ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="284"
+            column="22"/>
     </issue>
 
     <issue
@@ -2644,7 +3177,9 @@
         errorLine1="        this(channel.getId(), channel.getImportance());"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="284"
+            column="39"/>
     </issue>
 
     <issue
@@ -2653,7 +3188,9 @@
         errorLine1="        mName = channel.getName();"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="286"
+            column="25"/>
     </issue>
 
     <issue
@@ -2662,7 +3199,9 @@
         errorLine1="        mDescription = channel.getDescription();"
         errorLine2="                               ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="287"
+            column="32"/>
     </issue>
 
     <issue
@@ -2671,7 +3210,9 @@
         errorLine1="        mGroupId = channel.getGroup();"
         errorLine2="                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="288"
+            column="28"/>
     </issue>
 
     <issue
@@ -2680,7 +3221,9 @@
         errorLine1="        mShowBadge = channel.canShowBadge();"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="289"
+            column="30"/>
     </issue>
 
     <issue
@@ -2689,7 +3232,9 @@
         errorLine1="        mSound = channel.getSound();"
         errorLine2="                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="290"
+            column="26"/>
     </issue>
 
     <issue
@@ -2698,7 +3243,9 @@
         errorLine1="        mAudioAttributes = channel.getAudioAttributes();"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="291"
+            column="36"/>
     </issue>
 
     <issue
@@ -2707,7 +3254,9 @@
         errorLine1="        mLights = channel.shouldShowLights();"
         errorLine2="                          ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="292"
+            column="27"/>
     </issue>
 
     <issue
@@ -2716,7 +3265,9 @@
         errorLine1="        mLightColor = channel.getLightColor();"
         errorLine2="                              ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="293"
+            column="31"/>
     </issue>
 
     <issue
@@ -2725,7 +3276,9 @@
         errorLine1="        mVibrationEnabled = channel.shouldVibrate();"
         errorLine2="                                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="294"
+            column="37"/>
     </issue>
 
     <issue
@@ -2734,7 +3287,9 @@
         errorLine1="        mVibrationPattern = channel.getVibrationPattern();"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="295"
+            column="37"/>
     </issue>
 
     <issue
@@ -2743,7 +3298,9 @@
         errorLine1="            mParentId = channel.getParentChannelId();"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="297"
+            column="33"/>
     </issue>
 
     <issue
@@ -2752,7 +3309,9 @@
         errorLine1="            mConversationId = channel.getConversationId();"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="298"
+            column="39"/>
     </issue>
 
     <issue
@@ -2761,7 +3320,9 @@
         errorLine1="        mBypassDnd = channel.canBypassDnd();"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="301"
+            column="30"/>
     </issue>
 
     <issue
@@ -2770,7 +3331,9 @@
         errorLine1="        mLockscreenVisibility = channel.getLockscreenVisibility();"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="302"
+            column="41"/>
     </issue>
 
     <issue
@@ -2779,7 +3342,9 @@
         errorLine1="            mCanBubble = channel.canBubble();"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="304"
+            column="34"/>
     </issue>
 
     <issue
@@ -2788,7 +3353,9 @@
         errorLine1="            mImportantConversation = channel.isImportantConversation();"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="307"
+            column="46"/>
     </issue>
 
     <issue
@@ -2797,7 +3364,9 @@
         errorLine1="        NotificationChannel channel = new NotificationChannel(mId, mName, mImportance);"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="320"
+            column="39"/>
     </issue>
 
     <issue
@@ -2806,7 +3375,9 @@
         errorLine1="        channel.setDescription(mDescription);"
         errorLine2="                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="321"
+            column="17"/>
     </issue>
 
     <issue
@@ -2815,7 +3386,9 @@
         errorLine1="        channel.setGroup(mGroupId);"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="322"
+            column="17"/>
     </issue>
 
     <issue
@@ -2824,7 +3397,9 @@
         errorLine1="        channel.setShowBadge(mShowBadge);"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="323"
+            column="17"/>
     </issue>
 
     <issue
@@ -2833,7 +3408,9 @@
         errorLine1="        channel.setSound(mSound, mAudioAttributes);"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="324"
+            column="17"/>
     </issue>
 
     <issue
@@ -2842,7 +3419,9 @@
         errorLine1="        channel.enableLights(mLights);"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="325"
+            column="17"/>
     </issue>
 
     <issue
@@ -2851,7 +3430,9 @@
         errorLine1="        channel.setLightColor(mLightColor);"
         errorLine2="                ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="326"
+            column="17"/>
     </issue>
 
     <issue
@@ -2860,7 +3441,9 @@
         errorLine1="        channel.setVibrationPattern(mVibrationPattern);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="327"
+            column="17"/>
     </issue>
 
     <issue
@@ -2869,7 +3452,9 @@
         errorLine1="        channel.enableVibration(mVibrationEnabled);"
         errorLine2="                ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="328"
+            column="17"/>
     </issue>
 
     <issue
@@ -2878,7 +3463,9 @@
         errorLine1="            channel.setConversationId(mParentId, mConversationId);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+            line="330"
+            column="21"/>
     </issue>
 
     <issue
@@ -2887,7 +3474,9 @@
         errorLine1="        this(group.getId());"
         errorLine2="                   ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+            line="115"
+            column="20"/>
     </issue>
 
     <issue
@@ -2896,7 +3485,9 @@
         errorLine1="        mName = group.getName();"
         errorLine2="                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+            line="117"
+            column="23"/>
     </issue>
 
     <issue
@@ -2905,7 +3496,9 @@
         errorLine1="            mDescription = group.getDescription();"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+            line="119"
+            column="34"/>
     </issue>
 
     <issue
@@ -2914,7 +3507,9 @@
         errorLine1="            mBlocked = group.isBlocked();"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+            line="123"
+            column="30"/>
     </issue>
 
     <issue
@@ -2923,7 +3518,9 @@
         errorLine1="            mChannels = getChannelsCompat(group.getChannels());"
         errorLine2="                                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+            line="124"
+            column="49"/>
     </issue>
 
     <issue
@@ -2932,7 +3529,9 @@
         errorLine1="            if (mId.equals(channel.getGroup())) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+            line="136"
+            column="36"/>
     </issue>
 
     <issue
@@ -2941,7 +3540,9 @@
         errorLine1="        NotificationChannelGroup group = new NotificationChannelGroup(mId, mName);"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+            line="152"
+            column="42"/>
     </issue>
 
     <issue
@@ -2950,7 +3551,9 @@
         errorLine1="            group.setDescription(mDescription);"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+            line="154"
+            column="19"/>
     </issue>
 
     <issue
@@ -2959,7 +3562,9 @@
         errorLine1="                this.mSmallIcon = notification.getSmallIcon();"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="1030"
+            column="48"/>
     </issue>
 
     <issue
@@ -2968,7 +3573,9 @@
         errorLine1="                mNotification.audioAttributes = new AudioAttributes.Builder()"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="1537"
+            column="49"/>
     </issue>
 
     <issue
@@ -2977,7 +3584,9 @@
         errorLine1="                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)"
         errorLine2="                         ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="1538"
+            column="26"/>
     </issue>
 
     <issue
@@ -2986,7 +3595,9 @@
         errorLine1="                        .setUsage(AudioAttributes.USAGE_NOTIFICATION)"
         errorLine2="                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="1539"
+            column="26"/>
     </issue>
 
     <issue
@@ -2995,7 +3606,9 @@
         errorLine1="                        .build();"
         errorLine2="                         ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="1540"
+            column="26"/>
     </issue>
 
     <issue
@@ -3004,7 +3617,9 @@
         errorLine1="                mNotification.audioAttributes = new AudioAttributes.Builder()"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="1566"
+            column="49"/>
     </issue>
 
     <issue
@@ -3013,7 +3628,9 @@
         errorLine1="                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)"
         errorLine2="                         ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="1567"
+            column="26"/>
     </issue>
 
     <issue
@@ -3022,7 +3639,9 @@
         errorLine1="                        .setLegacyStreamType(streamType)"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="1568"
+            column="26"/>
     </issue>
 
     <issue
@@ -3031,7 +3650,9 @@
         errorLine1="                        .build();"
         errorLine2="                         ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="1569"
+            column="26"/>
     </issue>
 
     <issue
@@ -3040,7 +3661,9 @@
         errorLine1="                return Notification.Builder.recoverBuilder(mContext, notification)"
         errorLine2="                                            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2117"
+            column="45"/>
     </issue>
 
     <issue
@@ -3049,7 +3672,9 @@
         errorLine1="                        .createContentView();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2118"
+            column="26"/>
     </issue>
 
     <issue
@@ -3058,7 +3683,9 @@
         errorLine1="                return Notification.Builder.recoverBuilder(mContext, notification)"
         errorLine2="                                            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2151"
+            column="45"/>
     </issue>
 
     <issue
@@ -3067,7 +3694,9 @@
         errorLine1="                        .createBigContentView();"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2152"
+            column="26"/>
     </issue>
 
     <issue
@@ -3076,7 +3705,9 @@
         errorLine1="                        Notification.Builder.recoverBuilder(mContext, notification);"
         errorLine2="                                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2186"
+            column="46"/>
     </issue>
 
     <issue
@@ -3085,7 +3716,9 @@
         errorLine1="                return platformBuilder.createHeadsUpContentView();"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2187"
+            column="40"/>
     </issue>
 
     <issue
@@ -3094,7 +3727,9 @@
         errorLine1="                    contentView.setTextViewTextSize(R.id.text, TypedValue.COMPLEX_UNIT_PX,"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2892"
+            column="33"/>
     </issue>
 
     <issue
@@ -3103,7 +3738,9 @@
         errorLine1="                contentView.setViewPadding(R.id.line1, 0, 0, 0, 0);"
         errorLine2="                            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2896"
+            column="29"/>
     </issue>
 
     <issue
@@ -3112,7 +3749,9 @@
         errorLine1="                        contentView.setChronometerCountDown(R.id.chronometer,"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2907"
+            column="37"/>
     </issue>
 
     <issue
@@ -3121,7 +3760,9 @@
         errorLine1="                outerView.setViewPadding(R.id.notification_main_column_container,"
         errorLine2="                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2988"
+            column="27"/>
     </issue>
 
     <issue
@@ -3130,7 +3771,9 @@
         errorLine1="                        new Notification.BigPictureStyle(builder.getBuilder())"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3131"
+            column="25"/>
     </issue>
 
     <issue
@@ -3139,7 +3782,9 @@
         errorLine1="                                .setBigContentTitle(mBigContentTitle)"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3132"
+            column="34"/>
     </issue>
 
     <issue
@@ -3148,7 +3793,9 @@
         errorLine1="                                .bigPicture(mPicture);"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3133"
+            column="34"/>
     </issue>
 
     <issue
@@ -3157,7 +3804,9 @@
         errorLine1="                        new Notification.BigTextStyle(builder.getBuilder())"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3362"
+            column="25"/>
     </issue>
 
     <issue
@@ -3166,7 +3815,9 @@
         errorLine1="                                .setBigContentTitle(mBigContentTitle)"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3363"
+            column="34"/>
     </issue>
 
     <issue
@@ -3175,7 +3826,9 @@
         errorLine1="                                .bigText(mBigText);"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3364"
+            column="34"/>
     </issue>
 
     <issue
@@ -3184,7 +3837,9 @@
         errorLine1="                    style.setSummaryText(mSummaryText);"
         errorLine2="                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3366"
+            column="27"/>
     </issue>
 
     <issue
@@ -3193,7 +3848,9 @@
         errorLine1="                    frameworkStyle = new Notification.MessagingStyle(mUser.toAndroidPerson());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3713"
+            column="38"/>
     </issue>
 
     <issue
@@ -3202,7 +3859,9 @@
         errorLine1="                    frameworkStyle = new Notification.MessagingStyle(mUser.getName());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3715"
+            column="38"/>
     </issue>
 
     <issue
@@ -3211,7 +3870,9 @@
         errorLine1="                    frameworkStyle.addMessage(message.toAndroidMessage());"
         errorLine2="                                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3719"
+            column="36"/>
     </issue>
 
     <issue
@@ -3220,7 +3881,9 @@
         errorLine1="                        frameworkStyle.addHistoricMessage(historicMessage.toAndroidMessage());"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3724"
+            column="40"/>
     </issue>
 
     <issue
@@ -3229,7 +3892,9 @@
         errorLine1="                    frameworkStyle.setConversationTitle(mConversationTitle);"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3736"
+            column="36"/>
     </issue>
 
     <issue
@@ -3238,7 +3903,9 @@
         errorLine1="                    frameworkStyle.setGroupConversation(mIsGroupConversation);"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3742"
+            column="36"/>
     </issue>
 
     <issue
@@ -3247,7 +3914,9 @@
         errorLine1="                frameworkStyle.setBuilder(builder.getBuilder());"
         errorLine2="                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3744"
+            column="32"/>
     </issue>
 
     <issue
@@ -3256,7 +3925,9 @@
         errorLine1="                    new Notification.BigTextStyle(builder.getBuilder())"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3777"
+            column="21"/>
     </issue>
 
     <issue
@@ -3265,7 +3936,9 @@
         errorLine1="                            .setBigContentTitle(null)"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3778"
+            column="30"/>
     </issue>
 
     <issue
@@ -3274,7 +3947,9 @@
         errorLine1="                            .bigText(completeMessage);"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3779"
+            column="30"/>
     </issue>
 
     <issue
@@ -3283,7 +3958,9 @@
         errorLine1="                    frameworkMessage = new Notification.MessagingStyle.Message("
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4167"
+            column="40"/>
     </issue>
 
     <issue
@@ -3292,7 +3969,9 @@
         errorLine1="                    frameworkMessage = new Notification.MessagingStyle.Message("
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4171"
+            column="40"/>
     </issue>
 
     <issue
@@ -3301,7 +3980,9 @@
         errorLine1="                    frameworkMessage.setData(getDataMimeType(), getDataUri());"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4177"
+            column="38"/>
     </issue>
 
     <issue
@@ -3310,7 +3991,9 @@
         errorLine1="                        new Notification.InboxStyle(builder.getBuilder())"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4268"
+            column="25"/>
     </issue>
 
     <issue
@@ -3319,7 +4002,9 @@
         errorLine1="                                .setBigContentTitle(mBigContentTitle);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4269"
+            column="34"/>
     </issue>
 
     <issue
@@ -3328,7 +4013,9 @@
         errorLine1="                    style.setSummaryText(mSummaryText);"
         errorLine2="                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4271"
+            column="27"/>
     </issue>
 
     <issue
@@ -3337,7 +4024,9 @@
         errorLine1="                    style.addLine(text);"
         errorLine2="                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4274"
+            column="27"/>
     </issue>
 
     <issue
@@ -3346,7 +4035,9 @@
         errorLine1="                builder.getBuilder().setStyle(new Notification.DecoratedCustomViewStyle());"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4368"
+            column="38"/>
     </issue>
 
     <issue
@@ -3355,7 +4046,9 @@
         errorLine1="                builder.getBuilder().setStyle(new Notification.DecoratedCustomViewStyle());"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4368"
+            column="47"/>
     </issue>
 
     <issue
@@ -3364,7 +4057,9 @@
         errorLine1="                button.setContentDescription(R.id.action_container, action.title);"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4486"
+            column="24"/>
     </issue>
 
     <issue
@@ -3373,7 +4068,9 @@
         errorLine1="                if (Build.VERSION.SDK_INT >= 23 &amp;&amp; action.getIcon() != null) {"
         errorLine2="                                                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4785"
+            column="59"/>
     </issue>
 
     <issue
@@ -3382,7 +4079,9 @@
         errorLine1="                    IconCompat iconCompat = IconCompat.createFromIcon(action.getIcon());"
         errorLine2="                                                                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4786"
+            column="78"/>
     </issue>
 
     <issue
@@ -3391,7 +4090,9 @@
         errorLine1="                    android.app.RemoteInput[] remoteInputs = action.getRemoteInputs();"
         errorLine2="                                                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4794"
+            column="69"/>
     </issue>
 
     <issue
@@ -3400,7 +4101,9 @@
         errorLine1="                    builder.mAllowGeneratedReplies = action.getAllowGeneratedReplies();"
         errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4802"
+            column="61"/>
     </issue>
 
     <issue
@@ -3409,7 +4112,9 @@
         errorLine1="                    builder.setSemanticAction(action.getSemanticAction());"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4805"
+            column="54"/>
     </issue>
 
     <issue
@@ -3418,7 +4123,9 @@
         errorLine1="                    builder.setContextual(action.isContextual());"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4808"
+            column="50"/>
     </issue>
 
     <issue
@@ -3427,7 +4134,9 @@
         errorLine1="                    builder.setAuthenticationRequired(action.isAuthenticationRequired());"
         errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4811"
+            column="62"/>
     </issue>
 
     <issue
@@ -3436,7 +4145,9 @@
         errorLine1="                actionBuilder = new Notification.Action.Builder("
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="5662"
+            column="33"/>
     </issue>
 
     <issue
@@ -3445,7 +4156,9 @@
         errorLine1="                actionBuilder = new Notification.Action.Builder("
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="5671"
+            column="33"/>
     </issue>
 
     <issue
@@ -3454,7 +4167,9 @@
         errorLine1="                actionBuilder.setAllowGeneratedReplies(actionCompat.getAllowGeneratedReplies());"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="5683"
+            column="31"/>
     </issue>
 
     <issue
@@ -3463,7 +4178,9 @@
         errorLine1="                actionBuilder.setAuthenticationRequired(actionCompat.isAuthenticationRequired());"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="5686"
+            column="31"/>
     </issue>
 
     <issue
@@ -3472,7 +4189,9 @@
         errorLine1="                actionBuilder.setAuthenticationRequired(actionCompat.isAuthenticationRequired());"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="5686"
+            column="31"/>
     </issue>
 
     <issue
@@ -3481,7 +4200,9 @@
         errorLine1="            actionBuilder.addExtras(actionExtras);"
         errorLine2="                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="5688"
+            column="27"/>
     </issue>
 
     <issue
@@ -3490,7 +4211,9 @@
         errorLine1="                    actionBuilder.addRemoteInput(remoteInput);"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="5693"
+            column="35"/>
     </issue>
 
     <issue
@@ -3499,7 +4222,9 @@
         errorLine1="            return actionBuilder.build();"
         errorLine2="                                 ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="5696"
+            column="34"/>
     </issue>
 
     <issue
@@ -3508,7 +4233,9 @@
         errorLine1="                    ? new RemoteInput(remoteInput.getResultKey(),"
         errorLine2="                                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6444"
+            column="51"/>
     </issue>
 
     <issue
@@ -3517,7 +4244,9 @@
         errorLine1="                    remoteInput.getLabel(),"
         errorLine2="                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6445"
+            column="33"/>
     </issue>
 
     <issue
@@ -3526,7 +4255,9 @@
         errorLine1="                    remoteInput.getChoices(),"
         errorLine2="                                ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6446"
+            column="33"/>
     </issue>
 
     <issue
@@ -3535,7 +4266,9 @@
         errorLine1="                    remoteInput.getAllowFreeFormInput(),"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6447"
+            column="33"/>
     </issue>
 
     <issue
@@ -3544,7 +4277,9 @@
         errorLine1="                            ? remoteInput.getEditChoicesBeforeSending()"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6449"
+            column="43"/>
     </issue>
 
     <issue
@@ -3553,7 +4288,9 @@
         errorLine1="                    remoteInput.getExtras(),"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6451"
+            column="33"/>
     </issue>
 
     <issue
@@ -3562,7 +4299,9 @@
         errorLine1="                        new android.app.RemoteInput.Builder(remoteInputCompat.getResultKey())"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6477"
+            column="25"/>
     </issue>
 
     <issue
@@ -3571,7 +4310,9 @@
         errorLine1="                                .setLabel(remoteInputCompat.getLabel())"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6478"
+            column="34"/>
     </issue>
 
     <issue
@@ -3580,7 +4321,9 @@
         errorLine1="                                .setChoices(remoteInputCompat.getChoices())"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6479"
+            column="34"/>
     </issue>
 
     <issue
@@ -3589,7 +4332,9 @@
         errorLine1="                                .setAllowFreeFormInput(remoteInputCompat.getAllowFreeFormInput())"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6480"
+            column="34"/>
     </issue>
 
     <issue
@@ -3598,7 +4343,9 @@
         errorLine1="                                .addExtras(remoteInputCompat.getExtras())"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6481"
+            column="34"/>
     </issue>
 
     <issue
@@ -3607,7 +4354,9 @@
         errorLine1="                                .build();"
         errorLine2="                                 ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6482"
+            column="34"/>
     </issue>
 
     <issue
@@ -3616,7 +4365,9 @@
         errorLine1="            return BubbleMetadata.fromPlatform(notification.getBubbleMetadata());"
         errorLine2="                                                            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7460"
+            column="61"/>
     </issue>
 
     <issue
@@ -3625,7 +4376,9 @@
         errorLine1="        final android.app.RemoteInput[] srcArray = action.getRemoteInputs();"
         errorLine2="                                                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7470"
+            column="59"/>
     </issue>
 
     <issue
@@ -3634,7 +4387,9 @@
         errorLine1="                        src.getResultKey(),"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7478"
+            column="29"/>
     </issue>
 
     <issue
@@ -3643,7 +4398,9 @@
         errorLine1="                        src.getLabel(),"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7479"
+            column="29"/>
     </issue>
 
     <issue
@@ -3652,7 +4409,9 @@
         errorLine1="                        src.getChoices(),"
         errorLine2="                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7480"
+            column="29"/>
     </issue>
 
     <issue
@@ -3661,7 +4420,9 @@
         errorLine1="                        src.getAllowFreeFormInput(),"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7481"
+            column="29"/>
     </issue>
 
     <issue
@@ -3670,7 +4431,9 @@
         errorLine1="                                ? src.getEditChoicesBeforeSending()"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7483"
+            column="39"/>
     </issue>
 
     <issue
@@ -3679,7 +4442,9 @@
         errorLine1="                        src.getExtras(),"
         errorLine2="                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7485"
+            column="29"/>
     </issue>
 
     <issue
@@ -3688,7 +4453,9 @@
         errorLine1="            allowGeneratedReplies = action.getExtras().getBoolean("
         errorLine2="                                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7492"
+            column="44"/>
     </issue>
 
     <issue
@@ -3697,7 +4464,9 @@
         errorLine1="                    || action.getAllowGeneratedReplies();"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7494"
+            column="31"/>
     </issue>
 
     <issue
@@ -3706,7 +4475,9 @@
         errorLine1="            allowGeneratedReplies = action.getExtras().getBoolean("
         errorLine2="                                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7496"
+            column="44"/>
     </issue>
 
     <issue
@@ -3715,7 +4486,9 @@
         errorLine1="                action.getExtras().getBoolean(Action.EXTRA_SHOWS_USER_INTERFACE, true);"
         errorLine2="                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7501"
+            column="24"/>
     </issue>
 
     <issue
@@ -3724,7 +4497,9 @@
         errorLine1="            semanticAction = action.getSemanticAction();"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7505"
+            column="37"/>
     </issue>
 
     <issue
@@ -3733,7 +4508,9 @@
         errorLine1="            semanticAction = action.getExtras().getInt("
         errorLine2="                                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7507"
+            column="37"/>
     </issue>
 
     <issue
@@ -3742,7 +4519,9 @@
         errorLine1="        final boolean isContextual = Build.VERSION.SDK_INT >= 29 ? action.isContextual() : false;"
         errorLine2="                                                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7511"
+            column="75"/>
     </issue>
 
     <issue
@@ -3751,7 +4530,9 @@
         errorLine1="                Build.VERSION.SDK_INT >= 31 ? action.isAuthenticationRequired() : false;"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7514"
+            column="54"/>
     </issue>
 
     <issue
@@ -3760,7 +4541,9 @@
         errorLine1="            if (action.getIcon() == null &amp;&amp; action.icon != 0) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7517"
+            column="24"/>
     </issue>
 
     <issue
@@ -3769,7 +4552,9 @@
         errorLine1="                        action.getExtras(), remoteInputs, null, allowGeneratedReplies,"
         errorLine2="                               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7519"
+            column="32"/>
     </issue>
 
     <issue
@@ -3778,7 +4563,9 @@
         errorLine1="            IconCompat icon = action.getIcon() == null"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7522"
+            column="38"/>
     </issue>
 
     <issue
@@ -3787,7 +4574,9 @@
         errorLine1="                    ? null : IconCompat.createFromIconOrNullIfZeroResId(action.getIcon());"
         errorLine2="                                                                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7523"
+            column="80"/>
     </issue>
 
     <issue
@@ -3796,7 +4585,9 @@
         errorLine1="            return new Action(icon, action.title, action.actionIntent, action.getExtras(),"
         errorLine2="                                                                              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7524"
+            column="79"/>
     </issue>
 
     <issue
@@ -3805,7 +4596,9 @@
         errorLine1="            return new Action(action.icon, action.title, action.actionIntent, action.getExtras(),"
         errorLine2="                                                                                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7528"
+            column="86"/>
     </issue>
 
     <issue
@@ -3814,7 +4607,9 @@
         errorLine1="            return notification.getGroup();"
         errorLine2="                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7645"
+            column="33"/>
     </issue>
 
     <issue
@@ -3823,7 +4618,9 @@
         errorLine1="            return notification.getSortKey();"
         errorLine2="                                ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7753"
+            column="33"/>
     </issue>
 
     <issue
@@ -3832,7 +4629,9 @@
         errorLine1="            return notification.getChannelId();"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7769"
+            column="33"/>
     </issue>
 
     <issue
@@ -3841,7 +4640,9 @@
         errorLine1="            return notification.getTimeoutAfter();"
         errorLine2="                                ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7781"
+            column="33"/>
     </issue>
 
     <issue
@@ -3850,7 +4651,9 @@
         errorLine1="            return notification.getBadgeIconType();"
         errorLine2="                                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7794"
+            column="33"/>
     </issue>
 
     <issue
@@ -3859,7 +4662,9 @@
         errorLine1="            return notification.getShortcutId();"
         errorLine2="                                ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7806"
+            column="33"/>
     </issue>
 
     <issue
@@ -3868,7 +4673,9 @@
         errorLine1="            return notification.getSettingsText();"
         errorLine2="                                ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7817"
+            column="33"/>
     </issue>
 
     <issue
@@ -3877,7 +4684,9 @@
         errorLine1="            LocusId locusId = notification.getLocusId();"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7833"
+            column="44"/>
     </issue>
 
     <issue
@@ -3886,7 +4695,9 @@
         errorLine1="            return notification.getGroupAlertBehavior();"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7848"
+            column="33"/>
     </issue>
 
     <issue
@@ -3895,7 +4706,9 @@
         errorLine1="            return notification.getAllowSystemGeneratedContextualActions();"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7861"
+            column="33"/>
     </issue>
 
     <issue
@@ -3904,7 +4717,9 @@
         errorLine1="            mBuilder = new Notification.Builder(b.mContext, b.mChannelId);"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="72"
+            column="24"/>
     </issue>
 
     <issue
@@ -3913,7 +4728,9 @@
         errorLine1="            mBuilder.setSubText(b.mSubText)"
         errorLine2="                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="101"
+            column="22"/>
     </issue>
 
     <issue
@@ -3922,7 +4739,9 @@
         errorLine1="                    .setUsesChronometer(b.mUseChronometer)"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="102"
+            column="22"/>
     </issue>
 
     <issue
@@ -3931,7 +4750,9 @@
         errorLine1="                    .setPriority(b.mPriority);"
         errorLine2="                     ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="103"
+            column="22"/>
     </issue>
 
     <issue
@@ -3940,7 +4761,9 @@
         errorLine1="            mBuilder.setShowWhen(b.mShowWhen);"
         errorLine2="                     ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="133"
+            column="22"/>
     </issue>
 
     <issue
@@ -3949,7 +4772,9 @@
         errorLine1="            mBuilder.setLocalOnly(b.mLocalOnly)"
         errorLine2="                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="145"
+            column="22"/>
     </issue>
 
     <issue
@@ -3958,7 +4783,9 @@
         errorLine1="                    .setGroup(b.mGroupKey)"
         errorLine2="                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="146"
+            column="22"/>
     </issue>
 
     <issue
@@ -3967,7 +4794,9 @@
         errorLine1="                    .setGroupSummary(b.mGroupSummary)"
         errorLine2="                     ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="147"
+            column="22"/>
     </issue>
 
     <issue
@@ -3976,7 +4805,9 @@
         errorLine1="                    .setSortKey(b.mSortKey);"
         errorLine2="                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="148"
+            column="22"/>
     </issue>
 
     <issue
@@ -3985,7 +4816,9 @@
         errorLine1="            mBuilder.setCategory(b.mCategory)"
         errorLine2="                     ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="153"
+            column="22"/>
     </issue>
 
     <issue
@@ -3994,7 +4827,9 @@
         errorLine1="                    .setColor(b.mColor)"
         errorLine2="                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="154"
+            column="22"/>
     </issue>
 
     <issue
@@ -4003,7 +4838,9 @@
         errorLine1="                    .setVisibility(b.mVisibility)"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="155"
+            column="22"/>
     </issue>
 
     <issue
@@ -4012,7 +4849,9 @@
         errorLine1="                    .setPublicVersion(b.mPublicVersion)"
         errorLine2="                     ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="156"
+            column="22"/>
     </issue>
 
     <issue
@@ -4021,7 +4860,9 @@
         errorLine1="                    .setSound(n.sound, n.audioAttributes);"
         errorLine2="                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="157"
+            column="22"/>
     </issue>
 
     <issue
@@ -4030,7 +4871,9 @@
         errorLine1="                    mBuilder.addPerson(person);"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="168"
+            column="30"/>
     </issue>
 
     <issue
@@ -4039,7 +4882,9 @@
         errorLine1="                mBuilder.setSmallIcon(b.mSmallIcon);"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="202"
+            column="26"/>
     </issue>
 
     <issue
@@ -4048,7 +4893,9 @@
         errorLine1="            mBuilder.setExtras(b.mExtras)"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="206"
+            column="22"/>
     </issue>
 
     <issue
@@ -4057,7 +4904,9 @@
         errorLine1="                    .setRemoteInputHistory(b.mRemoteInputHistory);"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="207"
+            column="22"/>
     </issue>
 
     <issue
@@ -4066,7 +4915,9 @@
         errorLine1="                mBuilder.setCustomContentView(b.mContentView);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="209"
+            column="26"/>
     </issue>
 
     <issue
@@ -4075,7 +4926,9 @@
         errorLine1="                mBuilder.setCustomBigContentView(b.mBigContentView);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="212"
+            column="26"/>
     </issue>
 
     <issue
@@ -4084,7 +4937,9 @@
         errorLine1="                mBuilder.setCustomHeadsUpContentView(b.mHeadsUpContentView);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="215"
+            column="26"/>
     </issue>
 
     <issue
@@ -4093,7 +4948,9 @@
         errorLine1="            mBuilder.setBadgeIconType(b.mBadgeIcon)"
         errorLine2="                     ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="219"
+            column="22"/>
     </issue>
 
     <issue
@@ -4102,7 +4959,9 @@
         errorLine1="                    .setSettingsText(b.mSettingsText)"
         errorLine2="                     ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="220"
+            column="22"/>
     </issue>
 
     <issue
@@ -4111,7 +4970,9 @@
         errorLine1="                    .setShortcutId(b.mShortcutId)"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="221"
+            column="22"/>
     </issue>
 
     <issue
@@ -4120,7 +4981,9 @@
         errorLine1="                    .setTimeoutAfter(b.mTimeout)"
         errorLine2="                     ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="222"
+            column="22"/>
     </issue>
 
     <issue
@@ -4129,7 +4992,9 @@
         errorLine1="                    .setGroupAlertBehavior(b.mGroupAlertBehavior);"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="223"
+            column="22"/>
     </issue>
 
     <issue
@@ -4138,7 +5003,9 @@
         errorLine1="                mBuilder.setColorized(b.mColorized);"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="225"
+            column="26"/>
     </issue>
 
     <issue
@@ -4147,7 +5014,9 @@
         errorLine1="                mBuilder.addPerson(p.toAndroidPerson());"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="237"
+            column="26"/>
     </issue>
 
     <issue
@@ -4156,7 +5025,9 @@
         errorLine1="            mBuilder.setAllowSystemGeneratedContextualActions("
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="241"
+            column="22"/>
     </issue>
 
     <issue
@@ -4165,7 +5036,9 @@
         errorLine1="            mBuilder.setBubbleMetadata("
         errorLine2="                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="244"
+            column="22"/>
     </issue>
 
     <issue
@@ -4174,7 +5047,9 @@
         errorLine1="                mBuilder.setLocusId(b.mLocusId.toLocusId());"
         errorLine2="                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="247"
+            column="26"/>
     </issue>
 
     <issue
@@ -4183,7 +5058,9 @@
         errorLine1="                mBuilder.setForegroundServiceBehavior(b.mFgsDeferBehavior);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="252"
+            column="26"/>
     </issue>
 
     <issue
@@ -4192,7 +5069,9 @@
         errorLine1="                    mBuilder.setGroup(NotificationCompat.GROUP_KEY_SILENT);"
         errorLine2="                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="271"
+            column="30"/>
     </issue>
 
     <issue
@@ -4201,7 +5080,9 @@
         errorLine1="                mBuilder.setGroupAlertBehavior(mGroupAlertBehavior);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="273"
+            column="26"/>
     </issue>
 
     <issue
@@ -4210,7 +5091,9 @@
         errorLine1="                actionBuilder = new Notification.Action.Builder("
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="358"
+            column="33"/>
     </issue>
 
     <issue
@@ -4219,7 +5102,9 @@
         errorLine1="                actionBuilder = new Notification.Action.Builder("
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="363"
+            column="33"/>
     </issue>
 
     <issue
@@ -4228,7 +5113,9 @@
         errorLine1="                    actionBuilder.addRemoteInput(remoteInput);"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="371"
+            column="35"/>
     </issue>
 
     <issue
@@ -4237,7 +5124,9 @@
         errorLine1="                actionBuilder.setAllowGeneratedReplies(action.getAllowGeneratedReplies());"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="383"
+            column="31"/>
     </issue>
 
     <issue
@@ -4246,7 +5135,9 @@
         errorLine1="                actionBuilder.setSemanticAction(action.getSemanticAction());"
         errorLine2="                              ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="389"
+            column="31"/>
     </issue>
 
     <issue
@@ -4255,7 +5146,9 @@
         errorLine1="                actionBuilder.setContextual(action.isContextual());"
         errorLine2="                              ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="393"
+            column="31"/>
     </issue>
 
     <issue
@@ -4264,7 +5157,9 @@
         errorLine1="                actionBuilder.setAuthenticationRequired(action.isAuthenticationRequired());"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="397"
+            column="31"/>
     </issue>
 
     <issue
@@ -4273,7 +5168,9 @@
         errorLine1="            actionBuilder.addExtras(actionExtras);"
         errorLine2="                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="402"
+            column="27"/>
     </issue>
 
     <issue
@@ -4282,7 +5179,9 @@
         errorLine1="            mBuilder.addAction(actionBuilder.build());"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="403"
+            column="22"/>
     </issue>
 
     <issue
@@ -4291,7 +5190,9 @@
         errorLine1="            mBuilder.addAction(actionBuilder.build());"
         errorLine2="                                             ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="403"
+            column="46"/>
     </issue>
 
     <issue
@@ -4300,7 +5201,9 @@
         errorLine1="            return mBuilder.build();"
         errorLine2="                            ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="413"
+            column="29"/>
     </issue>
 
     <issue
@@ -4309,7 +5212,9 @@
         errorLine1="            Notification notification =  mBuilder.build();"
         errorLine2="                                                  ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="415"
+            column="51"/>
     </issue>
 
     <issue
@@ -4318,7 +5223,9 @@
         errorLine1="                if (notification.getGroup() != null"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="419"
+            column="34"/>
     </issue>
 
     <issue
@@ -4327,7 +5234,9 @@
         errorLine1="                if (notification.getGroup() != null"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="425"
+            column="34"/>
     </issue>
 
     <issue
@@ -4336,7 +5245,9 @@
         errorLine1="            mBuilder.setExtras(mExtras);"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="434"
+            column="22"/>
     </issue>
 
     <issue
@@ -4345,7 +5256,9 @@
         errorLine1="            Notification notification = mBuilder.build();"
         errorLine2="                                                 ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="435"
+            column="50"/>
     </issue>
 
     <issue
@@ -4354,7 +5267,9 @@
         errorLine1="                if (notification.getGroup() != null"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="448"
+            column="34"/>
     </issue>
 
     <issue
@@ -4363,7 +5278,9 @@
         errorLine1="                if (notification.getGroup() != null"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="454"
+            column="34"/>
     </issue>
 
     <issue
@@ -4372,7 +5289,9 @@
         errorLine1="            mBuilder.setExtras(mExtras);"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="462"
+            column="22"/>
     </issue>
 
     <issue
@@ -4381,7 +5300,9 @@
         errorLine1="            Notification notification = mBuilder.build();"
         errorLine2="                                                 ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="463"
+            column="50"/>
     </issue>
 
     <issue
@@ -4390,7 +5311,9 @@
         errorLine1="                if (notification.getGroup() != null"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="473"
+            column="34"/>
     </issue>
 
     <issue
@@ -4399,7 +5322,9 @@
         errorLine1="                if (notification.getGroup() != null"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="479"
+            column="34"/>
     </issue>
 
     <issue
@@ -4408,7 +5333,9 @@
         errorLine1="            mBuilder.setExtras(mExtras);"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="495"
+            column="22"/>
     </issue>
 
     <issue
@@ -4417,7 +5344,9 @@
         errorLine1="            Notification notification = mBuilder.build();"
         errorLine2="                                                 ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="496"
+            column="50"/>
     </issue>
 
     <issue
@@ -4426,7 +5355,9 @@
         errorLine1="            Notification notification = mBuilder.build();"
         errorLine2="                                                 ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="505"
+            column="50"/>
     </issue>
 
     <issue
@@ -4435,7 +5366,9 @@
         errorLine1="            return mNotificationManager.areNotificationsEnabled();"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="232"
+            column="41"/>
     </issue>
 
     <issue
@@ -4444,7 +5377,9 @@
         errorLine1="            return mNotificationManager.getImportance();"
         errorLine2="                                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="263"
+            column="41"/>
     </issue>
 
     <issue
@@ -4453,7 +5388,9 @@
         errorLine1="            mNotificationManager.createNotificationChannel(channel);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="291"
+            column="34"/>
     </issue>
 
     <issue
@@ -4462,7 +5399,9 @@
         errorLine1="            mNotificationManager.createNotificationChannelGroup(group);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="330"
+            column="34"/>
     </issue>
 
     <issue
@@ -4471,7 +5410,9 @@
         errorLine1="            mNotificationManager.createNotificationChannels(channels);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="357"
+            column="34"/>
     </issue>
 
     <issue
@@ -4480,7 +5421,9 @@
         errorLine1="            mNotificationManager.createNotificationChannels(platformChannels);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="376"
+            column="34"/>
     </issue>
 
     <issue
@@ -4489,7 +5432,9 @@
         errorLine1="            mNotificationManager.createNotificationChannelGroups(groups);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="390"
+            column="34"/>
     </issue>
 
     <issue
@@ -4498,7 +5443,9 @@
         errorLine1="            mNotificationManager.createNotificationChannelGroups(platformGroups);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="409"
+            column="34"/>
     </issue>
 
     <issue
@@ -4507,7 +5454,9 @@
         errorLine1="            mNotificationManager.deleteNotificationChannel(channelId);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="424"
+            column="34"/>
     </issue>
 
     <issue
@@ -4516,7 +5465,9 @@
         errorLine1="            mNotificationManager.deleteNotificationChannelGroup(groupId);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="436"
+            column="34"/>
     </issue>
 
     <issue
@@ -4525,7 +5476,9 @@
         errorLine1="            for (NotificationChannel channel : mNotificationManager.getNotificationChannels()) {"
         errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="451"
+            column="69"/>
     </issue>
 
     <issue
@@ -4534,7 +5487,9 @@
         errorLine1="                if (channelIds.contains(channel.getId())) {"
         errorLine2="                                                ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="452"
+            column="49"/>
     </issue>
 
     <issue
@@ -4543,7 +5498,9 @@
         errorLine1="                        &amp;&amp; channelIds.contains(channel.getParentChannelId())) {"
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="456"
+            column="56"/>
     </issue>
 
     <issue
@@ -4552,7 +5509,9 @@
         errorLine1="                mNotificationManager.deleteNotificationChannel(channel.getId());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="459"
+            column="38"/>
     </issue>
 
     <issue
@@ -4561,7 +5520,9 @@
         errorLine1="                mNotificationManager.deleteNotificationChannel(channel.getId());"
         errorLine2="                                                                       ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="459"
+            column="72"/>
     </issue>
 
     <issue
@@ -4570,7 +5531,9 @@
         errorLine1="            return mNotificationManager.getNotificationChannel(channelId);"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="472"
+            column="41"/>
     </issue>
 
     <issue
@@ -4579,7 +5542,9 @@
         errorLine1="            return mNotificationManager.getNotificationChannel(channelId, conversationId);"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="505"
+            column="41"/>
     </issue>
 
     <issue
@@ -4588,7 +5553,9 @@
         errorLine1="            return mNotificationManager.getNotificationChannelGroup(channelGroupId);"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="538"
+            column="41"/>
     </issue>
 
     <issue
@@ -4597,7 +5564,9 @@
         errorLine1="                if (group.getId().equals(channelGroupId)) return group;"
         errorLine2="                          ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="542"
+            column="27"/>
     </issue>
 
     <issue
@@ -4606,7 +5575,9 @@
         errorLine1="            return mNotificationManager.getNotificationChannels();"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="580"
+            column="41"/>
     </issue>
 
     <issue
@@ -4615,7 +5586,9 @@
         errorLine1="            return mNotificationManager.getNotificationChannelGroups();"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+            line="612"
+            column="41"/>
     </issue>
 
     <issue
@@ -4624,7 +5597,9 @@
         errorLine1="                mWrapped = new PrecomputedText.Params.Builder(paint)"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="198"
+            column="28"/>
     </issue>
 
     <issue
@@ -4633,7 +5608,9 @@
         errorLine1="                        .setBreakStrategy(strategy)"
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="199"
+            column="26"/>
     </issue>
 
     <issue
@@ -4642,7 +5619,9 @@
         errorLine1="                        .setHyphenationFrequency(frequency)"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="200"
+            column="26"/>
     </issue>
 
     <issue
@@ -4651,7 +5630,9 @@
         errorLine1="                        .setTextDirection(textDir)"
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="201"
+            column="26"/>
     </issue>
 
     <issue
@@ -4660,7 +5641,9 @@
         errorLine1="                        .build();"
         errorLine2="                         ~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="202"
+            column="26"/>
     </issue>
 
     <issue
@@ -4669,7 +5652,9 @@
         errorLine1="            mPaint = wrapped.getTextPaint();"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="214"
+            column="30"/>
     </issue>
 
     <issue
@@ -4678,7 +5663,9 @@
         errorLine1="            mTextDir = wrapped.getTextDirection();"
         errorLine2="                               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="215"
+            column="32"/>
     </issue>
 
     <issue
@@ -4687,7 +5674,9 @@
         errorLine1="            mBreakStrategy = wrapped.getBreakStrategy();"
         errorLine2="                                     ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="216"
+            column="38"/>
     </issue>
 
     <issue
@@ -4696,7 +5685,9 @@
         errorLine1="            mHyphenationFrequency = wrapped.getHyphenationFrequency();"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="217"
+            column="45"/>
     </issue>
 
     <issue
@@ -4705,7 +5696,9 @@
         errorLine1="                if (mPaint.getLetterSpacing() != other.getTextPaint().getLetterSpacing()) {"
         errorLine2="                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="293"
+            column="28"/>
     </issue>
 
     <issue
@@ -4714,7 +5707,9 @@
         errorLine1="                if (mPaint.getLetterSpacing() != other.getTextPaint().getLetterSpacing()) {"
         errorLine2="                                                                      ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="293"
+            column="71"/>
     </issue>
 
     <issue
@@ -4723,7 +5718,9 @@
         errorLine1="                if (!TextUtils.equals(mPaint.getFontFeatureSettings(),"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="296"
+            column="46"/>
     </issue>
 
     <issue
@@ -4732,7 +5729,9 @@
         errorLine1="                        other.getTextPaint().getFontFeatureSettings())) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="297"
+            column="46"/>
     </issue>
 
     <issue
@@ -4741,7 +5740,9 @@
         errorLine1="                if (!mPaint.getTextLocales().equals(other.getTextPaint().getTextLocales())) {"
         errorLine2="                            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="305"
+            column="29"/>
     </issue>
 
     <issue
@@ -4750,7 +5751,9 @@
         errorLine1="                if (!mPaint.getTextLocales().equals(other.getTextPaint().getTextLocales())) {"
         errorLine2="                                                                         ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="305"
+            column="74"/>
     </issue>
 
     <issue
@@ -4759,7 +5762,9 @@
         errorLine1="                if (!mPaint.getTextLocale().equals(other.getTextPaint().getTextLocale())) {"
         errorLine2="                            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="309"
+            column="29"/>
     </issue>
 
     <issue
@@ -4768,7 +5773,9 @@
         errorLine1="                if (!mPaint.getTextLocale().equals(other.getTextPaint().getTextLocale())) {"
         errorLine2="                                                                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="309"
+            column="73"/>
     </issue>
 
     <issue
@@ -4777,7 +5784,9 @@
         errorLine1="                        mPaint.getTextSkewX(), mPaint.getLetterSpacing(), mPaint.getFlags(),"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="353"
+            column="55"/>
     </issue>
 
     <issue
@@ -4786,7 +5795,9 @@
         errorLine1="                        mPaint.getTextLocales(), mPaint.getTypeface(), mPaint.isElegantTextHeight(),"
         errorLine2="                                                                              ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="354"
+            column="79"/>
     </issue>
 
     <issue
@@ -4795,7 +5806,9 @@
         errorLine1="                        mPaint.getTextLocales(), mPaint.getTypeface(), mPaint.isElegantTextHeight(),"
         errorLine2="                               ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="354"
+            column="32"/>
     </issue>
 
     <issue
@@ -4804,7 +5817,9 @@
         errorLine1="                        mPaint.getTextSkewX(), mPaint.getLetterSpacing(), mPaint.getFlags(),"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="358"
+            column="55"/>
     </issue>
 
     <issue
@@ -4813,7 +5828,9 @@
         errorLine1="                        mPaint.getTextLocale(), mPaint.getTypeface(), mPaint.isElegantTextHeight(),"
         errorLine2="                               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="359"
+            column="32"/>
     </issue>
 
     <issue
@@ -4822,7 +5839,9 @@
         errorLine1="                        mPaint.getTextLocale(), mPaint.getTypeface(), mPaint.isElegantTextHeight(),"
         errorLine2="                                                                             ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="359"
+            column="78"/>
     </issue>
 
     <issue
@@ -4831,7 +5850,9 @@
         errorLine1="                        mPaint.getTextSkewX(), mPaint.getFlags(), mPaint.getTextLocale(),"
         errorLine2="                                                                         ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="363"
+            column="74"/>
     </issue>
 
     <issue
@@ -4840,7 +5861,9 @@
         errorLine1="                        mPaint.getTextSkewX(), mPaint.getFlags(), mPaint.getTextLocale(),"
         errorLine2="                                                                         ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="367"
+            column="74"/>
     </issue>
 
     <issue
@@ -4849,7 +5872,9 @@
         errorLine1="                sb.append(&quot;, letterSpacing=&quot; + mPaint.getLetterSpacing());"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="383"
+            column="55"/>
     </issue>
 
     <issue
@@ -4858,7 +5883,9 @@
         errorLine1="                sb.append(&quot;, elegantTextHeight=&quot; + mPaint.isElegantTextHeight());"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="384"
+            column="59"/>
     </issue>
 
     <issue
@@ -4867,7 +5894,9 @@
         errorLine1="                sb.append(&quot;, textLocale=&quot; + mPaint.getTextLocales());"
         errorLine2="                                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="387"
+            column="52"/>
     </issue>
 
     <issue
@@ -4876,7 +5905,9 @@
         errorLine1="                sb.append(&quot;, textLocale=&quot; + mPaint.getTextLocale());"
         errorLine2="                                                   ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="389"
+            column="52"/>
     </issue>
 
     <issue
@@ -4885,7 +5916,9 @@
         errorLine1="                sb.append(&quot;, variationSettings=&quot; + mPaint.getFontVariationSettings());"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="393"
+            column="59"/>
     </issue>
 
     <issue
@@ -4894,7 +5927,9 @@
         errorLine1="                        PrecomputedText.create(text, params.mWrapped), params);"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="439"
+            column="41"/>
     </issue>
 
     <issue
@@ -4903,7 +5938,9 @@
         errorLine1="                StaticLayout.Builder.obtain(text, 0, text.length(), params.getTextPaint(),"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="467"
+            column="38"/>
     </issue>
 
     <issue
@@ -4912,7 +5949,9 @@
         errorLine1="                        .setBreakStrategy(params.getBreakStrategy())"
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="469"
+            column="26"/>
     </issue>
 
     <issue
@@ -4921,7 +5960,9 @@
         errorLine1="                        .setHyphenationFrequency(params.getHyphenationFrequency())"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="470"
+            column="26"/>
     </issue>
 
     <issue
@@ -4930,7 +5971,9 @@
         errorLine1="                        .setTextDirection(params.getTextDirection())"
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="471"
+            column="26"/>
     </issue>
 
     <issue
@@ -4939,7 +5982,9 @@
         errorLine1="                        .build();"
         errorLine2="                         ~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="472"
+            column="26"/>
     </issue>
 
     <issue
@@ -4948,7 +5993,9 @@
         errorLine1="            return mWrapped.getParagraphCount();"
         errorLine2="                            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="530"
+            column="29"/>
     </issue>
 
     <issue
@@ -4957,7 +6004,9 @@
         errorLine1="            return mWrapped.getParagraphStart(paraIndex);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="542"
+            column="29"/>
     </issue>
 
     <issue
@@ -4966,7 +6015,9 @@
         errorLine1="            return mWrapped.getParagraphEnd(paraIndex);"
         errorLine2="                            ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="554"
+            column="29"/>
     </issue>
 
     <issue
@@ -4975,7 +6026,9 @@
         errorLine1="        ShortcutInfo.Builder builder = new ShortcutInfo.Builder(mContext, mId)"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="126"
+            column="40"/>
     </issue>
 
     <issue
@@ -4984,7 +6037,9 @@
         errorLine1="                .setShortLabel(mLabel)"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="127"
+            column="18"/>
     </issue>
 
     <issue
@@ -4993,7 +6048,9 @@
         errorLine1="                .setIntents(mIntents);"
         errorLine2="                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="128"
+            column="18"/>
     </issue>
 
     <issue
@@ -5002,7 +6059,9 @@
         errorLine1="            builder.setIcon(mIcon.toIcon(mContext));"
         errorLine2="                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="130"
+            column="21"/>
     </issue>
 
     <issue
@@ -5011,7 +6070,9 @@
         errorLine1="            builder.setLongLabel(mLongLabel);"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="133"
+            column="21"/>
     </issue>
 
     <issue
@@ -5020,7 +6081,9 @@
         errorLine1="            builder.setDisabledMessage(mDisabledMessage);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="136"
+            column="21"/>
     </issue>
 
     <issue
@@ -5029,7 +6092,9 @@
         errorLine1="            builder.setActivity(mActivity);"
         errorLine2="                    ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="139"
+            column="21"/>
     </issue>
 
     <issue
@@ -5038,7 +6103,9 @@
         errorLine1="            builder.setCategories(mCategories);"
         errorLine2="                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="142"
+            column="21"/>
     </issue>
 
     <issue
@@ -5047,7 +6114,9 @@
         errorLine1="        builder.setRank(mRank);"
         errorLine2="                ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="144"
+            column="17"/>
     </issue>
 
     <issue
@@ -5056,7 +6125,9 @@
         errorLine1="            builder.setExtras(mExtras);"
         errorLine2="                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="146"
+            column="21"/>
     </issue>
 
     <issue
@@ -5065,7 +6136,9 @@
         errorLine1="                builder.setPersons(persons);"
         errorLine2="                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="154"
+            column="25"/>
     </issue>
 
     <issue
@@ -5074,7 +6147,9 @@
         errorLine1="                builder.setLocusId(mLocusId.toLocusId());"
         errorLine2="                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="157"
+            column="25"/>
     </issue>
 
     <issue
@@ -5083,7 +6158,9 @@
         errorLine1="            builder.setLongLived(mIsLongLived);"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="159"
+            column="21"/>
     </issue>
 
     <issue
@@ -5092,7 +6169,9 @@
         errorLine1="            builder.setExtras(buildLegacyExtrasBundle());"
         errorLine2="                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="164"
+            column="21"/>
     </issue>
 
     <issue
@@ -5101,7 +6180,9 @@
         errorLine1="        return builder.build();"
         errorLine2="                       ~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="166"
+            column="24"/>
     </issue>
 
     <issue
@@ -5110,7 +6191,9 @@
         errorLine1="            mExtras = new PersistableBundle();"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="176"
+            column="23"/>
     </issue>
 
     <issue
@@ -5119,7 +6202,9 @@
         errorLine1="            mExtras.putInt(EXTRA_PERSON_COUNT, mPersons.length);"
         errorLine2="                    ~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="179"
+            column="21"/>
     </issue>
 
     <issue
@@ -5128,7 +6213,9 @@
         errorLine1="                mExtras.putPersistableBundle(EXTRA_PERSON_ + (i + 1),"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="181"
+            column="25"/>
     </issue>
 
     <issue
@@ -5137,7 +6224,9 @@
         errorLine1="            mExtras.putString(EXTRA_LOCUS_ID, mLocusId.getId());"
         errorLine2="                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="186"
+            column="21"/>
     </issue>
 
     <issue
@@ -5146,7 +6235,9 @@
         errorLine1="        mExtras.putBoolean(EXTRA_LONG_LIVED, mIsLongLived);"
         errorLine2="                ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="188"
+            column="17"/>
     </issue>
 
     <issue
@@ -5155,7 +6246,9 @@
         errorLine1="        if (bundle == null || !bundle.containsKey(EXTRA_PERSON_COUNT)) {"
         errorLine2="                                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="355"
+            column="39"/>
     </issue>
 
     <issue
@@ -5164,7 +6257,9 @@
         errorLine1="        int personsLength = bundle.getInt(EXTRA_PERSON_COUNT);"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="359"
+            column="36"/>
     </issue>
 
     <issue
@@ -5173,7 +6268,9 @@
         errorLine1="                    bundle.getPersistableBundle(EXTRA_PERSON_ + (i + 1)));"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="363"
+            column="28"/>
     </issue>
 
     <issue
@@ -5182,7 +6279,9 @@
         errorLine1="        if (bundle == null || !bundle.containsKey(EXTRA_LONG_LIVED)) {"
         errorLine2="                                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="375"
+            column="39"/>
     </issue>
 
     <issue
@@ -5191,7 +6290,9 @@
         errorLine1="        return bundle.getBoolean(EXTRA_LONG_LIVED);"
         errorLine2="                      ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="378"
+            column="23"/>
     </issue>
 
     <issue
@@ -5200,7 +6301,9 @@
         errorLine1="            if (shortcutInfo.getLocusId() == null) return null;"
         errorLine2="                             ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="503"
+            column="30"/>
     </issue>
 
     <issue
@@ -5209,7 +6312,9 @@
         errorLine1="            return LocusIdCompat.toLocusIdCompat(shortcutInfo.getLocusId());"
         errorLine2="                                                              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="504"
+            column="63"/>
     </issue>
 
     <issue
@@ -5218,7 +6323,9 @@
         errorLine1="            return getLocusIdFromExtra(shortcutInfo.getExtras());"
         errorLine2="                                                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="506"
+            column="53"/>
     </issue>
 
     <issue
@@ -5227,7 +6334,9 @@
         errorLine1="        final String locusId = bundle.getString(EXTRA_LOCUS_ID);"
         errorLine2="                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="535"
+            column="39"/>
     </issue>
 
     <issue
@@ -5236,7 +6345,9 @@
         errorLine1="            mInfo.mId = shortcutInfo.getId();"
         errorLine2="                                     ~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="605"
+            column="38"/>
     </issue>
 
     <issue
@@ -5245,7 +6356,9 @@
         errorLine1="            mInfo.mPackageName = shortcutInfo.getPackage();"
         errorLine2="                                              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="606"
+            column="47"/>
     </issue>
 
     <issue
@@ -5254,7 +6367,9 @@
         errorLine1="            Intent[] intents = shortcutInfo.getIntents();"
         errorLine2="                                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="607"
+            column="45"/>
     </issue>
 
     <issue
@@ -5263,7 +6378,9 @@
         errorLine1="            mInfo.mActivity = shortcutInfo.getActivity();"
         errorLine2="                                           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="609"
+            column="44"/>
     </issue>
 
     <issue
@@ -5272,7 +6389,9 @@
         errorLine1="            mInfo.mLabel = shortcutInfo.getShortLabel();"
         errorLine2="                                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="610"
+            column="41"/>
     </issue>
 
     <issue
@@ -5281,7 +6400,9 @@
         errorLine1="            mInfo.mLongLabel = shortcutInfo.getLongLabel();"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="611"
+            column="45"/>
     </issue>
 
     <issue
@@ -5290,7 +6411,9 @@
         errorLine1="            mInfo.mDisabledMessage = shortcutInfo.getDisabledMessage();"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="612"
+            column="51"/>
     </issue>
 
     <issue
@@ -5299,7 +6422,9 @@
         errorLine1="                mInfo.mDisabledReason = shortcutInfo.getDisabledReason();"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="614"
+            column="54"/>
     </issue>
 
     <issue
@@ -5308,7 +6433,9 @@
         errorLine1="                mInfo.mDisabledReason = shortcutInfo.isEnabled()"
         errorLine2="                                                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="616"
+            column="54"/>
     </issue>
 
     <issue
@@ -5317,7 +6444,9 @@
         errorLine1="            mInfo.mCategories = shortcutInfo.getCategories();"
         errorLine2="                                             ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="620"
+            column="46"/>
     </issue>
 
     <issue
@@ -5326,7 +6455,9 @@
         errorLine1="            mInfo.mPersons = ShortcutInfoCompat.getPersonsFromExtra(shortcutInfo.getExtras());"
         errorLine2="                                                                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="621"
+            column="82"/>
     </issue>
 
     <issue
@@ -5335,7 +6466,9 @@
         errorLine1="            mInfo.mUser = shortcutInfo.getUserHandle();"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="622"
+            column="40"/>
     </issue>
 
     <issue
@@ -5344,7 +6477,9 @@
         errorLine1="            mInfo.mLastChangedTimestamp = shortcutInfo.getLastChangedTimestamp();"
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="623"
+            column="56"/>
     </issue>
 
     <issue
@@ -5353,7 +6488,9 @@
         errorLine1="                mInfo.mIsCached = shortcutInfo.isCached();"
         errorLine2="                                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="625"
+            column="48"/>
     </issue>
 
     <issue
@@ -5362,7 +6499,9 @@
         errorLine1="            mInfo.mIsDynamic = shortcutInfo.isDynamic();"
         errorLine2="                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="627"
+            column="45"/>
     </issue>
 
     <issue
@@ -5371,7 +6510,9 @@
         errorLine1="            mInfo.mIsPinned = shortcutInfo.isPinned();"
         errorLine2="                                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="628"
+            column="44"/>
     </issue>
 
     <issue
@@ -5380,7 +6521,9 @@
         errorLine1="            mInfo.mIsDeclaredInManifest = shortcutInfo.isDeclaredInManifest();"
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="629"
+            column="56"/>
     </issue>
 
     <issue
@@ -5389,7 +6532,9 @@
         errorLine1="            mInfo.mIsImmutable = shortcutInfo.isImmutable();"
         errorLine2="                                              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="630"
+            column="47"/>
     </issue>
 
     <issue
@@ -5398,7 +6543,9 @@
         errorLine1="            mInfo.mIsEnabled = shortcutInfo.isEnabled();"
         errorLine2="                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="631"
+            column="45"/>
     </issue>
 
     <issue
@@ -5407,7 +6554,9 @@
         errorLine1="            mInfo.mHasKeyFieldsOnly = shortcutInfo.hasKeyFieldsOnly();"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="632"
+            column="52"/>
     </issue>
 
     <issue
@@ -5416,7 +6565,9 @@
         errorLine1="            mInfo.mRank = shortcutInfo.getRank();"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="634"
+            column="40"/>
     </issue>
 
     <issue
@@ -5425,7 +6576,9 @@
         errorLine1="            mInfo.mExtras = shortcutInfo.getExtras();"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="635"
+            column="42"/>
     </issue>
 
     <issue
@@ -5434,7 +6587,9 @@
         errorLine1="                        mInfo.mExtras = new PersistableBundle();"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="984"
+            column="41"/>
     </issue>
 
     <issue
@@ -5443,7 +6598,9 @@
         errorLine1="                        mInfo.mExtras.putStringArray("
         errorLine2="                                      ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="991"
+            column="39"/>
     </issue>
 
     <issue
@@ -5452,7 +6609,9 @@
         errorLine1="                            mInfo.mExtras.putStringArray(capability + &quot;/&quot; + paramName,"
         errorLine2="                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="997"
+            column="43"/>
     </issue>
 
     <issue
@@ -5461,7 +6620,9 @@
         errorLine1="                        mInfo.mExtras = new PersistableBundle();"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="1004"
+            column="41"/>
     </issue>
 
     <issue
@@ -5470,7 +6631,9 @@
         errorLine1="                    mInfo.mExtras.putString(EXTRA_SLICE_URI, UriCompat.toSafeString(mSliceUri));"
         errorLine2="                                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="1006"
+            column="35"/>
     </issue>
 
     <issue
@@ -5479,7 +6642,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).isRequestPinShortcutSupported();"
         errorLine2="                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="155"
+            column="28"/>
     </issue>
 
     <issue
@@ -5488,7 +6653,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).isRequestPinShortcutSupported();"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="155"
+            column="68"/>
     </issue>
 
     <issue
@@ -5497,7 +6664,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).requestPinShortcut("
         errorLine2="                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="197"
+            column="28"/>
     </issue>
 
     <issue
@@ -5506,7 +6675,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).requestPinShortcut("
         errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="197"
+            column="68"/>
     </issue>
 
     <issue
@@ -5515,7 +6686,9 @@
         errorLine1="            result = context.getSystemService(ShortcutManager.class)"
         errorLine2="                             ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="241"
+            column="30"/>
     </issue>
 
     <issue
@@ -5524,7 +6697,9 @@
         errorLine1="                    .createShortcutResultIntent(shortcut.toShortcutInfo());"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="242"
+            column="22"/>
     </issue>
 
     <issue
@@ -5533,7 +6708,9 @@
         errorLine1="                    context.getSystemService(ShortcutManager.class).getShortcuts(matchFlags);"
         errorLine2="                            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="282"
+            column="29"/>
     </issue>
 
     <issue
@@ -5542,7 +6719,9 @@
         errorLine1="                    context.getSystemService(ShortcutManager.class).getShortcuts(matchFlags);"
         errorLine2="                                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="282"
+            column="69"/>
     </issue>
 
     <issue
@@ -5551,7 +6730,9 @@
         errorLine1="            final ShortcutManager manager = context.getSystemService(ShortcutManager.class);"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="285"
+            column="53"/>
     </issue>
 
     <issue
@@ -5560,7 +6741,9 @@
         errorLine1="                shortcuts.addAll(manager.getManifestShortcuts());"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="288"
+            column="42"/>
     </issue>
 
     <issue
@@ -5569,7 +6752,9 @@
         errorLine1="                shortcuts.addAll(manager.getDynamicShortcuts());"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="291"
+            column="42"/>
     </issue>
 
     <issue
@@ -5578,7 +6763,9 @@
         errorLine1="                shortcuts.addAll(manager.getPinnedShortcuts());"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="294"
+            column="42"/>
     </issue>
 
     <issue
@@ -5587,7 +6774,9 @@
         errorLine1="            if (!context.getSystemService(ShortcutManager.class).addDynamicShortcuts(shortcuts)) {"
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="335"
+            column="26"/>
     </issue>
 
     <issue
@@ -5596,7 +6785,9 @@
         errorLine1="            if (!context.getSystemService(ShortcutManager.class).addDynamicShortcuts(shortcuts)) {"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="335"
+            column="66"/>
     </issue>
 
     <issue
@@ -5605,7 +6796,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).getMaxShortcutCountPerActivity();"
         errorLine2="                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="354"
+            column="28"/>
     </issue>
 
     <issue
@@ -5614,7 +6807,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).getMaxShortcutCountPerActivity();"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="354"
+            column="68"/>
     </issue>
 
     <issue
@@ -5623,7 +6818,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).isRateLimitingActive();"
         errorLine2="                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="371"
+            column="28"/>
     </issue>
 
     <issue
@@ -5632,7 +6829,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).isRateLimitingActive();"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="371"
+            column="68"/>
     </issue>
 
     <issue
@@ -5641,7 +6840,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).getIconMaxWidth();"
         errorLine2="                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="391"
+            column="28"/>
     </issue>
 
     <issue
@@ -5650,7 +6851,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).getIconMaxWidth();"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="391"
+            column="68"/>
     </issue>
 
     <issue
@@ -5659,7 +6862,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).getIconMaxHeight();"
         errorLine2="                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="402"
+            column="28"/>
     </issue>
 
     <issue
@@ -5668,7 +6873,9 @@
         errorLine1="            return context.getSystemService(ShortcutManager.class).getIconMaxHeight();"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="402"
+            column="68"/>
     </issue>
 
     <issue
@@ -5677,7 +6884,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).reportShortcutUsed(shortcutId);"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="429"
+            column="21"/>
     </issue>
 
     <issue
@@ -5686,7 +6895,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).reportShortcutUsed(shortcutId);"
         errorLine2="                                                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="429"
+            column="61"/>
     </issue>
 
     <issue
@@ -5695,7 +6906,9 @@
         errorLine1="            if (!context.getSystemService(ShortcutManager.class).setDynamicShortcuts(shortcuts)) {"
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="472"
+            column="26"/>
     </issue>
 
     <issue
@@ -5704,7 +6917,9 @@
         errorLine1="            if (!context.getSystemService(ShortcutManager.class).setDynamicShortcuts(shortcuts)) {"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="472"
+            column="66"/>
     </issue>
 
     <issue
@@ -5713,7 +6928,9 @@
         errorLine1="            List&lt;ShortcutInfo> shortcuts = context.getSystemService("
         errorLine2="                                                   ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="496"
+            column="52"/>
     </issue>
 
     <issue
@@ -5722,7 +6939,9 @@
         errorLine1="                    ShortcutManager.class).getDynamicShortcuts();"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="497"
+            column="44"/>
     </issue>
 
     <issue
@@ -5731,7 +6950,9 @@
         errorLine1="            if (!context.getSystemService(ShortcutManager.class).updateShortcuts(shortcuts)) {"
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="540"
+            column="26"/>
     </issue>
 
     <issue
@@ -5740,7 +6961,9 @@
         errorLine1="            if (!context.getSystemService(ShortcutManager.class).updateShortcuts(shortcuts)) {"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="540"
+            column="66"/>
     </issue>
 
     <issue
@@ -5749,7 +6972,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class)"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="607"
+            column="21"/>
     </issue>
 
     <issue
@@ -5758,7 +6983,9 @@
         errorLine1="                    .disableShortcuts(shortcutIds, disabledMessage);"
         errorLine2="                     ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="608"
+            column="22"/>
     </issue>
 
     <issue
@@ -5767,7 +6994,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).enableShortcuts(shortcutIds);"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="642"
+            column="21"/>
     </issue>
 
     <issue
@@ -5776,7 +7005,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).enableShortcuts(shortcutIds);"
         errorLine2="                                                            ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="642"
+            column="61"/>
     </issue>
 
     <issue
@@ -5785,7 +7016,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).removeDynamicShortcuts(shortcutIds);"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="661"
+            column="21"/>
     </issue>
 
     <issue
@@ -5794,7 +7027,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).removeDynamicShortcuts(shortcutIds);"
         errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="661"
+            column="61"/>
     </issue>
 
     <issue
@@ -5803,7 +7038,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).removeAllDynamicShortcuts();"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="679"
+            column="21"/>
     </issue>
 
     <issue
@@ -5812,7 +7049,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).removeAllDynamicShortcuts();"
         errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="679"
+            column="61"/>
     </issue>
 
     <issue
@@ -5821,7 +7060,9 @@
         errorLine1="        context.getSystemService(ShortcutManager.class).removeLongLivedShortcuts(shortcutIds);"
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="706"
+            column="17"/>
     </issue>
 
     <issue
@@ -5830,7 +7071,9 @@
         errorLine1="        context.getSystemService(ShortcutManager.class).removeLongLivedShortcuts(shortcutIds);"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="706"
+            column="57"/>
     </issue>
 
     <issue
@@ -5839,7 +7082,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).pushDynamicShortcut("
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="766"
+            column="21"/>
     </issue>
 
     <issue
@@ -5848,7 +7093,9 @@
         errorLine1="            context.getSystemService(ShortcutManager.class).pushDynamicShortcut("
         errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="766"
+            column="61"/>
     </issue>
 
     <issue
@@ -5857,7 +7104,9 @@
         errorLine1="            final ShortcutManager sm = context.getSystemService(ShortcutManager.class);"
         errorLine2="                                               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="769"
+            column="48"/>
     </issue>
 
     <issue
@@ -5866,7 +7115,9 @@
         errorLine1="            if (sm.isRateLimitingActive()) {"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="770"
+            column="20"/>
     </issue>
 
     <issue
@@ -5875,7 +7126,9 @@
         errorLine1="            final List&lt;ShortcutInfo> shortcuts = sm.getDynamicShortcuts();"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="773"
+            column="53"/>
     </issue>
 
     <issue
@@ -5884,7 +7137,9 @@
         errorLine1="                sm.removeDynamicShortcuts(Arrays.asList("
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="775"
+            column="20"/>
     </issue>
 
     <issue
@@ -5893,7 +7148,9 @@
         errorLine1="            sm.addDynamicShortcuts(Arrays.asList(shortcut.toShortcutInfo()));"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="778"
+            column="16"/>
     </issue>
 
     <issue
@@ -5902,7 +7159,9 @@
         errorLine1="                Build.VERSION.SDK_INT &lt; 19 || am == null || am.isLowRamDevice();"
         errorLine2="                                                               ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+            line="833"
+            column="64"/>
     </issue>
 
     <issue
@@ -5911,7 +7170,9 @@
         errorLine1="            textView.setTextAppearance(resId);"
         errorLine2="                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/widget/TextViewCompat.java"/>
+            file="src/main/java/androidx/core/widget/TextViewCompat.java"
+            line="289"
+            column="22"/>
     </issue>
 
     <issue
@@ -5920,7 +7181,9 @@
         errorLine1="public class NotificationCompat {"
         errorLine2="             ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="82"
+            column="14"/>
     </issue>
 
     <issue
@@ -5929,9 +7192,13 @@
         errorLine1="    public AccessibilityNodeInfoCompat getParent() {"
         errorLine2="                                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2166"
+            column="40"/>
         <location
             file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2181"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -5941,9 +7208,13 @@
         errorLine1="    public CollectionInfoCompat getCollectionInfo() {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2990"
+            column="33"/>
         <location
             file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3000"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -5953,9 +7224,13 @@
         errorLine1="    public CollectionItemInfoCompat getCollectionItemInfo() {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3023"
+            column="37"/>
         <location
             file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3009"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -5965,9 +7240,13 @@
         errorLine1="    public AccessibilityNodeInfoCompat getLabelFor() {"
         errorLine2="                                       ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3264"
+            column="40"/>
         <location
             file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3227"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -5977,9 +7256,13 @@
         errorLine1="    public AccessibilityNodeInfoCompat getLabeledBy() {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3320"
+            column="40"/>
         <location
             file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3278"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -5989,7 +7272,9 @@
         errorLine1="    public boolean canOpenPopup() {"
         errorLine2="                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3333"
+            column="20"/>
     </issue>
 
     <issue
@@ -5998,9 +7283,13 @@
         errorLine1="    public AccessibilityNodeInfoCompat getTraversalBefore() {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3577"
+            column="40"/>
         <location
             file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3599"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -6010,9 +7299,13 @@
         errorLine1="    public AccessibilityNodeInfoCompat getTraversalAfter() {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3642"
+            column="40"/>
         <location
             file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3664"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -6022,7 +7315,9 @@
         errorLine1="    public boolean hasMipMap() {"
         errorLine2="                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"/>
+            file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"
+            line="181"
+            column="20"/>
     </issue>
 
     <issue
@@ -6031,7 +7326,9 @@
         errorLine1="    public boolean hasAntiAlias() {"
         errorLine2="                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"/>
+            file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"
+            line="205"
+            column="20"/>
     </issue>
 
     <issue
@@ -6040,7 +7337,9 @@
         errorLine1="            @Nullable Object token, long delayMillis) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/os/HandlerCompat.java"/>
+            file="src/main/java/androidx/core/os/HandlerCompat.java"
+            line="181"
+            column="37"/>
     </issue>
 
     <issue
@@ -6049,7 +7348,9 @@
         errorLine1="    public &lt;T> T postAndWait(final Callable&lt;T> callable, int timeoutMillis)"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/provider/SelfDestructiveThread.java"/>
+            file="src/main/java/androidx/core/provider/SelfDestructiveThread.java"
+            line="169"
+            column="58"/>
     </issue>
 
     <issue
@@ -6058,7 +7359,9 @@
         errorLine1="        public AccessibilityActionCompat(int actionId, CharSequence label) {"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="610"
+            column="56"/>
     </issue>
 
     <issue
@@ -6067,7 +7370,9 @@
         errorLine1="        public AccessibilityActionCompat(int actionId, CharSequence label,"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="623"
+            column="56"/>
     </issue>
 
     <issue
@@ -6076,7 +7381,9 @@
         errorLine1="                AccessibilityViewCommand command) {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="624"
+            column="17"/>
     </issue>
 
     <issue
@@ -6085,7 +7392,9 @@
         errorLine1="        public CharSequence getLabel() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="669"
+            column="16"/>
     </issue>
 
     <issue
@@ -6094,7 +7403,9 @@
         errorLine1="        public boolean perform(View view, Bundle arguments) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="685"
+            column="32"/>
     </issue>
 
     <issue
@@ -6103,7 +7414,9 @@
         errorLine1="        public boolean perform(View view, Bundle arguments) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="685"
+            column="43"/>
     </issue>
 
     <issue
@@ -6112,7 +7425,9 @@
         errorLine1="        public AccessibilityActionCompat createReplacementAction(CharSequence label,"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="709"
+            column="16"/>
     </issue>
 
     <issue
@@ -6121,7 +7436,9 @@
         errorLine1="        public AccessibilityActionCompat createReplacementAction(CharSequence label,"
         errorLine2="                                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="709"
+            column="66"/>
     </issue>
 
     <issue
@@ -6130,7 +7447,9 @@
         errorLine1="                AccessibilityViewCommand command) {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="710"
+            column="17"/>
     </issue>
 
     <issue
@@ -6139,7 +7458,9 @@
         errorLine1="        public static CollectionInfoCompat obtain(int rowCount, int columnCount,"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="779"
+            column="23"/>
     </issue>
 
     <issue
@@ -6148,7 +7469,9 @@
         errorLine1="        public static CollectionInfoCompat obtain(int rowCount, int columnCount,"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="801"
+            column="23"/>
     </issue>
 
     <issue
@@ -6157,7 +7480,9 @@
         errorLine1="        public static CollectionItemInfoCompat obtain(int rowIndex, int rowSpan,"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="900"
+            column="23"/>
     </issue>
 
     <issue
@@ -6166,7 +7491,9 @@
         errorLine1="        public static CollectionItemInfoCompat obtain(int rowIndex, int rowSpan,"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="925"
+            column="23"/>
     </issue>
 
     <issue
@@ -6175,7 +7502,9 @@
         errorLine1="        public static RangeInfoCompat obtain(int type, float min, float max, float current) {"
         errorLine2="                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1042"
+            column="23"/>
     </issue>
 
     <issue
@@ -6184,7 +7513,9 @@
         errorLine1="    public static AccessibilityNodeInfoCompat wrap(@NonNull AccessibilityNodeInfo info) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1712"
+            column="19"/>
     </issue>
 
     <issue
@@ -6193,7 +7524,9 @@
         errorLine1="    public AccessibilityNodeInfo unwrap() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1719"
+            column="12"/>
     </issue>
 
     <issue
@@ -6202,7 +7535,9 @@
         errorLine1="    public static AccessibilityNodeInfoCompat obtain(View source) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1740"
+            column="19"/>
     </issue>
 
     <issue
@@ -6211,7 +7546,9 @@
         errorLine1="    public static AccessibilityNodeInfoCompat obtain(View source) {"
         errorLine2="                                                     ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1740"
+            column="54"/>
     </issue>
 
     <issue
@@ -6220,7 +7557,9 @@
         errorLine1="    public static AccessibilityNodeInfoCompat obtain(View root, int virtualDescendantId) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1754"
+            column="19"/>
     </issue>
 
     <issue
@@ -6229,7 +7568,9 @@
         errorLine1="    public static AccessibilityNodeInfoCompat obtain(View root, int virtualDescendantId) {"
         errorLine2="                                                     ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1754"
+            column="54"/>
     </issue>
 
     <issue
@@ -6238,7 +7579,9 @@
         errorLine1="    public static AccessibilityNodeInfoCompat obtain() {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1768"
+            column="19"/>
     </issue>
 
     <issue
@@ -6247,7 +7590,9 @@
         errorLine1="    public static AccessibilityNodeInfoCompat obtain(AccessibilityNodeInfoCompat info) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1779"
+            column="19"/>
     </issue>
 
     <issue
@@ -6256,7 +7601,9 @@
         errorLine1="    public static AccessibilityNodeInfoCompat obtain(AccessibilityNodeInfoCompat info) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1779"
+            column="54"/>
     </issue>
 
     <issue
@@ -6265,7 +7612,9 @@
         errorLine1="    public void setSource(View source) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1788"
+            column="27"/>
     </issue>
 
     <issue
@@ -6274,7 +7623,9 @@
         errorLine1="    public void setSource(View root, int virtualDescendantId) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1814"
+            column="27"/>
     </issue>
 
     <issue
@@ -6283,7 +7634,9 @@
         errorLine1="    public AccessibilityNodeInfoCompat findFocus(int focus) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1834"
+            column="12"/>
     </issue>
 
     <issue
@@ -6292,7 +7645,9 @@
         errorLine1="    public AccessibilityNodeInfoCompat focusSearch(int direction) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1856"
+            column="12"/>
     </issue>
 
     <issue
@@ -6301,7 +7656,9 @@
         errorLine1="    public AccessibilityNodeInfoCompat getChild(int index) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1895"
+            column="12"/>
     </issue>
 
     <issue
@@ -6310,7 +7667,9 @@
         errorLine1="    public void addChild(View child) {"
         errorLine2="                         ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1910"
+            column="26"/>
     </issue>
 
     <issue
@@ -6319,7 +7678,9 @@
         errorLine1="    public void addChild(View root, int virtualDescendantId) {"
         errorLine2="                         ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1928"
+            column="26"/>
     </issue>
 
     <issue
@@ -6328,7 +7689,9 @@
         errorLine1="    public boolean removeChild(View child) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1948"
+            column="32"/>
     </issue>
 
     <issue
@@ -6337,7 +7700,9 @@
         errorLine1="    public boolean removeChild(View root, int virtualDescendantId) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="1966"
+            column="32"/>
     </issue>
 
     <issue
@@ -6346,7 +7711,9 @@
         errorLine1="    public void addAction(AccessibilityActionCompat action) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2031"
+            column="27"/>
     </issue>
 
     <issue
@@ -6355,7 +7722,9 @@
         errorLine1="    public boolean removeAction(AccessibilityActionCompat action) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2056"
+            column="33"/>
     </issue>
 
     <issue
@@ -6364,7 +7733,9 @@
         errorLine1="    public boolean performAction(int action, Bundle arguments) {"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2093"
+            column="46"/>
     </issue>
 
     <issue
@@ -6373,7 +7744,9 @@
         errorLine1="    public List&lt;AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(String text) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2145"
+            column="12"/>
     </issue>
 
     <issue
@@ -6382,7 +7755,9 @@
         errorLine1="    public List&lt;AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(String text) {"
         errorLine2="                                                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2145"
+            column="79"/>
     </issue>
 
     <issue
@@ -6391,7 +7766,9 @@
         errorLine1="    public AccessibilityNodeInfoCompat getParent() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2166"
+            column="12"/>
     </issue>
 
     <issue
@@ -6400,7 +7777,9 @@
         errorLine1="    public void setParent(View parent) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2181"
+            column="27"/>
     </issue>
 
     <issue
@@ -6409,7 +7788,9 @@
         errorLine1="    public void setParent(View root, int virtualDescendantId) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2207"
+            column="27"/>
     </issue>
 
     <issue
@@ -6418,7 +7799,9 @@
         errorLine1="    public void getBoundsInScreen(Rect outBounds) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2260"
+            column="35"/>
     </issue>
 
     <issue
@@ -6427,7 +7810,9 @@
         errorLine1="    public void setBoundsInScreen(Rect bounds) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2275"
+            column="35"/>
     </issue>
 
     <issue
@@ -6436,7 +7821,9 @@
         errorLine1="    public CharSequence getPackageName() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2619"
+            column="12"/>
     </issue>
 
     <issue
@@ -6445,7 +7832,9 @@
         errorLine1="    public void setPackageName(CharSequence packageName) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2634"
+            column="32"/>
     </issue>
 
     <issue
@@ -6454,7 +7843,9 @@
         errorLine1="    public CharSequence getClassName() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2643"
+            column="12"/>
     </issue>
 
     <issue
@@ -6463,7 +7854,9 @@
         errorLine1="    public void setClassName(CharSequence className) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2658"
+            column="30"/>
     </issue>
 
     <issue
@@ -6472,7 +7865,9 @@
         errorLine1="    public CharSequence getText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2667"
+            column="12"/>
     </issue>
 
     <issue
@@ -6481,7 +7876,9 @@
         errorLine1="    public void setText(CharSequence text) {"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2697"
+            column="25"/>
     </issue>
 
     <issue
@@ -6490,7 +7887,9 @@
         errorLine1="    public void addSpansToExtras(CharSequence text, View view) {"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2705"
+            column="34"/>
     </issue>
 
     <issue
@@ -6499,7 +7898,9 @@
         errorLine1="    public void addSpansToExtras(CharSequence text, View view) {"
         errorLine2="                                                    ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2705"
+            column="53"/>
     </issue>
 
     <issue
@@ -6508,7 +7909,9 @@
         errorLine1="    public static ClickableSpan[] getClickableSpans(CharSequence text) {"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2742"
+            column="19"/>
     </issue>
 
     <issue
@@ -6517,7 +7920,9 @@
         errorLine1="    public static ClickableSpan[] getClickableSpans(CharSequence text) {"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2742"
+            column="53"/>
     </issue>
 
     <issue
@@ -6526,7 +7931,9 @@
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2803"
+            column="12"/>
     </issue>
 
     <issue
@@ -6535,7 +7942,9 @@
         errorLine1="    public void setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2833"
+            column="39"/>
     </issue>
 
     <issue
@@ -6544,7 +7953,9 @@
         errorLine1="    public void setViewIdResourceName(String viewId) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2878"
+            column="39"/>
     </issue>
 
     <issue
@@ -6553,7 +7964,9 @@
         errorLine1="    public String getViewIdResourceName() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2896"
+            column="12"/>
     </issue>
 
     <issue
@@ -6562,7 +7975,9 @@
         errorLine1="    public CollectionInfoCompat getCollectionInfo() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="2990"
+            column="12"/>
     </issue>
 
     <issue
@@ -6571,7 +7986,9 @@
         errorLine1="    public void setCollectionInfo(Object collectionInfo) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3000"
+            column="35"/>
     </issue>
 
     <issue
@@ -6580,7 +7997,9 @@
         errorLine1="    public void setCollectionItemInfo(Object collectionItemInfo) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3009"
+            column="39"/>
     </issue>
 
     <issue
@@ -6589,7 +8008,9 @@
         errorLine1="    public CollectionItemInfoCompat getCollectionItemInfo() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3023"
+            column="12"/>
     </issue>
 
     <issue
@@ -6598,7 +8019,9 @@
         errorLine1="    public RangeInfoCompat getRangeInfo() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3038"
+            column="12"/>
     </issue>
 
     <issue
@@ -6607,7 +8030,9 @@
         errorLine1="    public void setRangeInfo(RangeInfoCompat rangeInfo) {"
         errorLine2="                             ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3058"
+            column="30"/>
     </issue>
 
     <issue
@@ -6616,7 +8041,9 @@
         errorLine1="    public List&lt;AccessibilityActionCompat> getActionList() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3075"
+            column="12"/>
     </issue>
 
     <issue
@@ -6625,7 +8052,9 @@
         errorLine1="    public void setError(CharSequence error) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3202"
+            column="26"/>
     </issue>
 
     <issue
@@ -6634,7 +8063,9 @@
         errorLine1="    public CharSequence getError() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3213"
+            column="12"/>
     </issue>
 
     <issue
@@ -6643,7 +8074,9 @@
         errorLine1="    public void setLabelFor(View labeled) {"
         errorLine2="                            ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3227"
+            column="29"/>
     </issue>
 
     <issue
@@ -6652,7 +8085,9 @@
         errorLine1="    public void setLabelFor(View root, int virtualDescendantId) {"
         errorLine2="                            ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3247"
+            column="29"/>
     </issue>
 
     <issue
@@ -6661,7 +8096,9 @@
         errorLine1="    public AccessibilityNodeInfoCompat getLabelFor() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3264"
+            column="12"/>
     </issue>
 
     <issue
@@ -6670,7 +8107,9 @@
         errorLine1="    public void setLabeledBy(View label) {"
         errorLine2="                             ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3278"
+            column="30"/>
     </issue>
 
     <issue
@@ -6679,7 +8118,9 @@
         errorLine1="    public void setLabeledBy(View root, int virtualDescendantId) {"
         errorLine2="                             ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3303"
+            column="30"/>
     </issue>
 
     <issue
@@ -6688,7 +8129,9 @@
         errorLine1="    public AccessibilityNodeInfoCompat getLabeledBy() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3320"
+            column="12"/>
     </issue>
 
     <issue
@@ -6697,7 +8140,9 @@
         errorLine1="    public List&lt;AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByViewId(String viewId) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3380"
+            column="12"/>
     </issue>
 
     <issue
@@ -6706,7 +8151,9 @@
         errorLine1="    public List&lt;AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByViewId(String viewId) {"
         errorLine2="                                                                                ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3380"
+            column="81"/>
     </issue>
 
     <issue
@@ -6715,7 +8162,9 @@
         errorLine1="    public Bundle getExtras() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3406"
+            column="12"/>
     </issue>
 
     <issue
@@ -6724,7 +8173,9 @@
         errorLine1="    public AccessibilityNodeInfoCompat getTraversalBefore() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3577"
+            column="12"/>
     </issue>
 
     <issue
@@ -6733,7 +8184,9 @@
         errorLine1="    public void setTraversalBefore(View view) {"
         errorLine2="                                   ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3599"
+            column="36"/>
     </issue>
 
     <issue
@@ -6742,7 +8195,9 @@
         errorLine1="    public void setTraversalBefore(View root, int virtualDescendantId) {"
         errorLine2="                                   ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3626"
+            column="36"/>
     </issue>
 
     <issue
@@ -6751,7 +8206,9 @@
         errorLine1="    public AccessibilityNodeInfoCompat getTraversalAfter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3642"
+            column="12"/>
     </issue>
 
     <issue
@@ -6760,7 +8217,9 @@
         errorLine1="    public void setTraversalAfter(View view) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3664"
+            column="35"/>
     </issue>
 
     <issue
@@ -6769,7 +8228,9 @@
         errorLine1="    public void setTraversalAfter(View root, int virtualDescendantId) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3690"
+            column="35"/>
     </issue>
 
     <issue
@@ -6778,7 +8239,9 @@
         errorLine1="    public AccessibilityWindowInfoCompat getWindow() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+            line="3703"
+            column="12"/>
     </issue>
 
     <issue
@@ -6787,7 +8250,9 @@
         errorLine1="    public AutoScrollHelper setEnabled(boolean enabled) {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/widget/AutoScrollHelper.java"/>
+            file="src/main/java/androidx/core/widget/AutoScrollHelper.java"
+            line="235"
+            column="12"/>
     </issue>
 
     <issue
@@ -6796,7 +8261,9 @@
         errorLine1="    public AutoScrollHelper setExclusive(boolean exclusive) {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/widget/AutoScrollHelper.java"/>
+            file="src/main/java/androidx/core/widget/AutoScrollHelper.java"
+            line="263"
+            column="12"/>
     </issue>
 
     <issue
@@ -6805,7 +8272,9 @@
         errorLine1="    int[] getAutoSizeTextAvailableSizes();"
         errorLine2="    ~~~~~">
         <location
-            file="src/main/java/androidx/core/widget/AutoSizeableTextView.java"/>
+            file="src/main/java/androidx/core/widget/AutoSizeableTextView.java"
+            line="151"
+            column="5"/>
     </issue>
 
     <issue
@@ -6814,7 +8283,9 @@
         errorLine1="        public Builder(Locale locale) {"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="157"
+            column="24"/>
     </issue>
 
     <issue
@@ -6823,7 +8294,9 @@
         errorLine1="        public Builder stereoReset(boolean stereoReset) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="176"
+            column="16"/>
     </issue>
 
     <issue
@@ -6832,7 +8305,9 @@
         errorLine1="        public Builder setTextDirectionHeuristic(TextDirectionHeuristicCompat heuristic) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="192"
+            column="16"/>
     </issue>
 
     <issue
@@ -6841,7 +8316,9 @@
         errorLine1="        public Builder setTextDirectionHeuristic(TextDirectionHeuristicCompat heuristic) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="192"
+            column="50"/>
     </issue>
 
     <issue
@@ -6850,7 +8327,9 @@
         errorLine1="        public BidiFormatter build() {"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="204"
+            column="16"/>
     </issue>
 
     <issue
@@ -6859,7 +8338,9 @@
         errorLine1="    public static BidiFormatter getInstance() {"
         errorLine2="                  ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="235"
+            column="19"/>
     </issue>
 
     <issue
@@ -6868,7 +8349,9 @@
         errorLine1="    public static BidiFormatter getInstance(boolean rtlContext) {"
         errorLine2="                  ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="244"
+            column="19"/>
     </issue>
 
     <issue
@@ -6877,7 +8360,9 @@
         errorLine1="    public static BidiFormatter getInstance(Locale locale) {"
         errorLine2="                  ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="253"
+            column="19"/>
     </issue>
 
     <issue
@@ -6886,7 +8371,9 @@
         errorLine1="    public static BidiFormatter getInstance(Locale locale) {"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="253"
+            column="45"/>
     </issue>
 
     <issue
@@ -6895,7 +8382,9 @@
         errorLine1="    public boolean isRtl(String str) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="346"
+            column="26"/>
     </issue>
 
     <issue
@@ -6904,7 +8393,9 @@
         errorLine1="    public boolean isRtl(CharSequence str) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="357"
+            column="26"/>
     </issue>
 
     <issue
@@ -6913,7 +8404,9 @@
         errorLine1="    public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic, boolean isolate) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="390"
+            column="12"/>
     </issue>
 
     <issue
@@ -6922,7 +8415,9 @@
         errorLine1="    public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic, boolean isolate) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="390"
+            column="31"/>
     </issue>
 
     <issue
@@ -6931,7 +8426,9 @@
         errorLine1="    public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic, boolean isolate) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="390"
+            column="43"/>
     </issue>
 
     <issue
@@ -6940,7 +8437,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic,"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="409"
+            column="12"/>
     </issue>
 
     <issue
@@ -6949,7 +8448,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic,"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="409"
+            column="37"/>
     </issue>
 
     <issue
@@ -6958,7 +8459,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic,"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="409"
+            column="55"/>
     </issue>
 
     <issue
@@ -6967,7 +8470,9 @@
         errorLine1="    public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="440"
+            column="12"/>
     </issue>
 
     <issue
@@ -6976,7 +8481,9 @@
         errorLine1="    public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="440"
+            column="31"/>
     </issue>
 
     <issue
@@ -6985,7 +8492,9 @@
         errorLine1="    public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="440"
+            column="43"/>
     </issue>
 
     <issue
@@ -6994,7 +8503,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="455"
+            column="12"/>
     </issue>
 
     <issue
@@ -7003,7 +8514,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic) {"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="455"
+            column="37"/>
     </issue>
 
     <issue
@@ -7012,7 +8525,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic) {"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="455"
+            column="55"/>
     </issue>
 
     <issue
@@ -7021,7 +8536,9 @@
         errorLine1="    public String unicodeWrap(String str, boolean isolate) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="468"
+            column="12"/>
     </issue>
 
     <issue
@@ -7030,7 +8547,9 @@
         errorLine1="    public String unicodeWrap(String str, boolean isolate) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="468"
+            column="31"/>
     </issue>
 
     <issue
@@ -7039,7 +8558,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str, boolean isolate) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="482"
+            column="12"/>
     </issue>
 
     <issue
@@ -7048,7 +8569,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str, boolean isolate) {"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="482"
+            column="37"/>
     </issue>
 
     <issue
@@ -7057,7 +8580,9 @@
         errorLine1="    public String unicodeWrap(String str) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="493"
+            column="12"/>
     </issue>
 
     <issue
@@ -7066,7 +8591,9 @@
         errorLine1="    public String unicodeWrap(String str) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="493"
+            column="31"/>
     </issue>
 
     <issue
@@ -7075,7 +8602,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="505"
+            column="12"/>
     </issue>
 
     <issue
@@ -7084,7 +8613,9 @@
         errorLine1="    public CharSequence unicodeWrap(CharSequence str) {"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+            file="src/main/java/androidx/core/text/BidiFormatter.java"
+            line="505"
+            column="37"/>
     </issue>
 
     <issue
@@ -7093,7 +8624,9 @@
         errorLine1="    public boolean onStateChanged(int[] stateSet) {"
         errorLine2="                                  ~~~~~">
         <location
-            file="src/main/java/androidx/core/content/res/ComplexColorCompat.java"/>
+            file="src/main/java/androidx/core/content/res/ComplexColorCompat.java"
+            line="107"
+            column="35"/>
     </issue>
 
     <issue
@@ -7102,7 +8635,9 @@
         errorLine1="        Object getWrapper();"
         errorLine2="        ~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/CoreComponentFactory.java"/>
+            file="src/main/java/androidx/core/app/CoreComponentFactory.java"
+            line="118"
+            column="9"/>
     </issue>
 
     <issue
@@ -7111,7 +8646,9 @@
         errorLine1="    public static void buildShortClassTag(Object cls, StringBuilder out) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/core/util/DebugUtils.java"/>
+            file="src/main/java/androidx/core/util/DebugUtils.java"
+            line="31"
+            column="43"/>
     </issue>
 
     <issue
@@ -7120,7 +8657,9 @@
         errorLine1="    public static void buildShortClassTag(Object cls, StringBuilder out) {"
         errorLine2="                                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/util/DebugUtils.java"/>
+            file="src/main/java/androidx/core/util/DebugUtils.java"
+            line="31"
+            column="55"/>
     </issue>
 
     <issue
@@ -7129,7 +8668,9 @@
         errorLine1="    public static Uri getUriForFile(@NonNull Context context, @NonNull String authority,"
         errorLine2="                  ~~~">
         <location
-            file="src/main/java/androidx/core/content/FileProvider.java"/>
+            file="src/main/java/androidx/core/content/FileProvider.java"
+            line="447"
+            column="19"/>
     </issue>
 
     <issue
@@ -7138,7 +8679,9 @@
         errorLine1="    public Uri insert(@NonNull Uri uri, @NonNull ContentValues values) {"
         errorLine2="           ~~~">
         <location
-            file="src/main/java/androidx/core/content/FileProvider.java"/>
+            file="src/main/java/androidx/core/content/FileProvider.java"
+            line="577"
+            column="12"/>
     </issue>
 
     <issue
@@ -7147,7 +8690,9 @@
         errorLine1="        public FontInfo[] getFonts() {"
         errorLine2="               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/provider/FontsContractCompat.java"/>
+            file="src/main/java/androidx/core/provider/FontsContractCompat.java"
+            line="399"
+            column="16"/>
     </issue>
 
     <issue
@@ -7156,7 +8701,9 @@
         errorLine1="        public void onTypefaceRetrieved(Typeface typeface) {}"
         errorLine2="                                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/provider/FontsContractCompat.java"/>
+            file="src/main/java/androidx/core/provider/FontsContractCompat.java"
+            line="486"
+            column="41"/>
     </issue>
 
     <issue
@@ -7165,7 +8712,9 @@
         errorLine1="    protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {"
         errorLine2="                                                           ~~~~">
         <location
-            file="src/main/java/androidx/core/widget/NestedScrollView.java"/>
+            file="src/main/java/androidx/core/widget/NestedScrollView.java"
+            line="1853"
+            column="60"/>
     </issue>
 
     <issue
@@ -7174,7 +8723,9 @@
         errorLine1="    Notification.Builder getBuilder();"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationBuilderWithBuilderAccessor.java"/>
+            file="src/main/java/androidx/core/app/NotificationBuilderWithBuilderAccessor.java"
+            line="34"
+            column="5"/>
     </issue>
 
     <issue
@@ -7183,7 +8734,9 @@
         errorLine1="        public Context mContext;"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="901"
+            column="16"/>
     </issue>
 
     <issue
@@ -7192,7 +8745,9 @@
         errorLine1="        public ArrayList&lt;Action> mActions = new ArrayList&lt;>();"
         errorLine2="               ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="905"
+            column="16"/>
     </issue>
 
     <issue
@@ -7201,7 +8756,9 @@
         errorLine1="        public RemoteViews getContentView() {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2455"
+            column="16"/>
     </issue>
 
     <issue
@@ -7210,7 +8767,9 @@
         errorLine1="        public RemoteViews getBigContentView() {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2463"
+            column="16"/>
     </issue>
 
     <issue
@@ -7219,7 +8778,9 @@
         errorLine1="        public RemoteViews getHeadsUpContentView() {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2471"
+            column="16"/>
     </issue>
 
     <issue
@@ -7228,7 +8789,9 @@
         errorLine1="        protected Builder mBuilder;"
         errorLine2="                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2539"
+            column="19"/>
     </issue>
 
     <issue
@@ -7237,7 +8800,9 @@
         errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2585"
+            column="27"/>
     </issue>
 
     <issue
@@ -7246,7 +8811,9 @@
         errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2601"
+            column="16"/>
     </issue>
 
     <issue
@@ -7255,7 +8822,9 @@
         errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2601"
+            column="44"/>
     </issue>
 
     <issue
@@ -7264,7 +8833,9 @@
         errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2609"
+            column="16"/>
     </issue>
 
     <issue
@@ -7273,7 +8844,9 @@
         errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2609"
+            column="47"/>
     </issue>
 
     <issue
@@ -7282,7 +8855,9 @@
         errorLine1="        public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2617"
+            column="16"/>
     </issue>
 
     <issue
@@ -7291,7 +8866,9 @@
         errorLine1="        public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2617"
+            column="51"/>
     </issue>
 
     <issue
@@ -7300,7 +8877,9 @@
         errorLine1="        public Bitmap createColoredBitmap(int iconId, int color) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2928"
+            column="16"/>
     </issue>
 
     <issue
@@ -7309,7 +8888,9 @@
         errorLine1="        public void buildIntoRemoteViews(RemoteViews outerView,"
         errorLine2="                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2978"
+            column="42"/>
     </issue>
 
     <issue
@@ -7318,7 +8899,9 @@
         errorLine1="                RemoteViews innerView) {"
         errorLine2="                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="2979"
+            column="17"/>
     </issue>
 
     <issue
@@ -7327,7 +8910,9 @@
         errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3128"
+            column="27"/>
     </issue>
 
     <issue
@@ -7336,7 +8921,9 @@
         errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3359"
+            column="27"/>
     </issue>
 
     <issue
@@ -7345,7 +8932,9 @@
         errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="3703"
+            column="27"/>
     </issue>
 
     <issue
@@ -7354,7 +8943,9 @@
         errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4265"
+            column="27"/>
     </issue>
 
     <issue
@@ -7363,7 +8954,9 @@
         errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4366"
+            column="27"/>
     </issue>
 
     <issue
@@ -7372,7 +8965,9 @@
         errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4377"
+            column="16"/>
     </issue>
 
     <issue
@@ -7381,7 +8976,9 @@
         errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4377"
+            column="44"/>
     </issue>
 
     <issue
@@ -7390,7 +8987,9 @@
         errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4394"
+            column="16"/>
     </issue>
 
     <issue
@@ -7399,7 +8998,9 @@
         errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4394"
+            column="47"/>
     </issue>
 
     <issue
@@ -7408,7 +9009,9 @@
         errorLine1="        public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4415"
+            column="16"/>
     </issue>
 
     <issue
@@ -7417,7 +9020,9 @@
         errorLine1="        public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4415"
+            column="51"/>
     </issue>
 
     <issue
@@ -7426,7 +9031,9 @@
         errorLine1="        public CharSequence title;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4599"
+            column="16"/>
     </issue>
 
     <issue
@@ -7435,7 +9042,9 @@
         errorLine1="        public PendingIntent actionIntent;"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4604"
+            column="16"/>
     </issue>
 
     <issue
@@ -7444,7 +9053,9 @@
         errorLine1="    public IBinder onBind(Intent intent) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+            line="47"
+            column="12"/>
     </issue>
 
     <issue
@@ -7453,7 +9064,9 @@
         errorLine1="    public abstract void notify(String packageName, int id, String tag, Notification notification);"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+            line="62"
+            column="33"/>
     </issue>
 
     <issue
@@ -7462,7 +9075,9 @@
         errorLine1="    public abstract void notify(String packageName, int id, String tag, Notification notification);"
         errorLine2="                                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+            line="62"
+            column="61"/>
     </issue>
 
     <issue
@@ -7471,7 +9086,9 @@
         errorLine1="    public abstract void notify(String packageName, int id, String tag, Notification notification);"
         errorLine2="                                                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+            line="62"
+            column="73"/>
     </issue>
 
     <issue
@@ -7480,7 +9097,9 @@
         errorLine1="    public abstract void cancel(String packageName, int id, String tag);"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+            line="67"
+            column="33"/>
     </issue>
 
     <issue
@@ -7489,7 +9108,9 @@
         errorLine1="    public abstract void cancel(String packageName, int id, String tag);"
         errorLine2="                                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+            line="67"
+            column="61"/>
     </issue>
 
     <issue
@@ -7498,7 +9119,9 @@
         errorLine1="    public abstract void cancelAll(String packageName);"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+            file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+            line="72"
+            column="36"/>
     </issue>
 
     <issue
@@ -7507,7 +9130,9 @@
         errorLine1="    public static Path createPathFromPathData(String pathData) {"
         errorLine2="                  ~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="72"
+            column="19"/>
     </issue>
 
     <issue
@@ -7516,7 +9141,9 @@
         errorLine1="    public static Path createPathFromPathData(String pathData) {"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="72"
+            column="47"/>
     </issue>
 
     <issue
@@ -7525,7 +9152,9 @@
         errorLine1="    public static PathDataNode[] createNodesFromPathData(String pathData) {"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="90"
+            column="19"/>
     </issue>
 
     <issue
@@ -7534,7 +9163,9 @@
         errorLine1="    public static PathDataNode[] createNodesFromPathData(String pathData) {"
         errorLine2="                                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="90"
+            column="58"/>
     </issue>
 
     <issue
@@ -7543,7 +9174,9 @@
         errorLine1="    public static PathDataNode[] deepCopyNodes(PathDataNode[] source) {"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="119"
+            column="19"/>
     </issue>
 
     <issue
@@ -7552,7 +9185,9 @@
         errorLine1="    public static PathDataNode[] deepCopyNodes(PathDataNode[] source) {"
         errorLine2="                                               ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="119"
+            column="48"/>
     </issue>
 
     <issue
@@ -7561,7 +9196,9 @@
         errorLine1="    public static void updateNodes(PathDataNode[] target, PathDataNode[] source) {"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="162"
+            column="36"/>
     </issue>
 
     <issue
@@ -7570,7 +9207,9 @@
         errorLine1="    public static void updateNodes(PathDataNode[] target, PathDataNode[] source) {"
         errorLine2="                                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="162"
+            column="59"/>
     </issue>
 
     <issue
@@ -7579,7 +9218,9 @@
         errorLine1="    public static boolean interpolatePathDataNodes(PathDataNode[] target, PathDataNode[] from,"
         errorLine2="                                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="313"
+            column="52"/>
     </issue>
 
     <issue
@@ -7588,7 +9229,9 @@
         errorLine1="    public static boolean interpolatePathDataNodes(PathDataNode[] target, PathDataNode[] from,"
         errorLine2="                                                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="313"
+            column="75"/>
     </issue>
 
     <issue
@@ -7597,7 +9240,9 @@
         errorLine1="            PathDataNode[] to, float fraction) {"
         errorLine2="            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="314"
+            column="13"/>
     </issue>
 
     <issue
@@ -7606,7 +9251,9 @@
         errorLine1="        public float[] mParams;"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="350"
+            column="16"/>
     </issue>
 
     <issue
@@ -7615,7 +9262,9 @@
         errorLine1="        public static void nodesToPath(PathDataNode[] node, Path path) {"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="368"
+            column="40"/>
     </issue>
 
     <issue
@@ -7624,7 +9273,9 @@
         errorLine1="        public static void nodesToPath(PathDataNode[] node, Path path) {"
         errorLine2="                                                            ~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="368"
+            column="61"/>
     </issue>
 
     <issue
@@ -7633,7 +9284,9 @@
         errorLine1="        public void interpolatePathDataNode(PathDataNode nodeFrom, PathDataNode nodeTo,"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="386"
+            column="45"/>
     </issue>
 
     <issue
@@ -7642,7 +9295,9 @@
         errorLine1="        public void interpolatePathDataNode(PathDataNode nodeFrom, PathDataNode nodeTo,"
         errorLine2="                                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/PathParser.java"/>
+            file="src/main/java/androidx/core/graphics/PathParser.java"
+            line="386"
+            column="68"/>
     </issue>
 
     <issue
@@ -7651,7 +9306,9 @@
         errorLine1="            public Builder setBreakStrategy(int strategy) {"
         errorLine2="                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="144"
+            column="20"/>
     </issue>
 
     <issue
@@ -7660,7 +9317,9 @@
         errorLine1="            public Builder setHyphenationFrequency(int frequency) {"
         errorLine2="                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="162"
+            column="20"/>
     </issue>
 
     <issue
@@ -7669,7 +9328,9 @@
         errorLine1="            public Builder setTextDirection(@NonNull TextDirectionHeuristic textDir) {"
         errorLine2="                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="180"
+            column="20"/>
     </issue>
 
     <issue
@@ -7678,7 +9339,9 @@
         errorLine1="    public static PrecomputedTextCompat create(@NonNull CharSequence text, @NonNull Params params) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="430"
+            column="19"/>
     </issue>
 
     <issue
@@ -7687,7 +9350,9 @@
         errorLine1="    public static Future&lt;PrecomputedTextCompat> getTextFuture("
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="646"
+            column="19"/>
     </issue>
 
     <issue
@@ -7696,7 +9361,9 @@
         errorLine1="    public CharSequence subSequence(int start, int end) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="751"
+            column="12"/>
     </issue>
 
     <issue
@@ -7705,7 +9372,9 @@
         errorLine1="    public ResultReceiver(Handler handler) {"
         errorLine2="                          ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/os/ResultReceiver.java"/>
+            file="src/main/java/android/support/v4/os/ResultReceiver.java"
+            line="84"
+            column="27"/>
     </issue>
 
     <issue
@@ -7714,7 +9383,9 @@
         errorLine1="    public void send(int resultCode, Bundle resultData) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/os/ResultReceiver.java"/>
+            file="src/main/java/android/support/v4/os/ResultReceiver.java"
+            line="96"
+            column="38"/>
     </issue>
 
     <issue
@@ -7723,7 +9394,9 @@
         errorLine1="    protected void onReceiveResult(int resultCode, Bundle resultData) {"
         errorLine2="                                                   ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/os/ResultReceiver.java"/>
+            file="src/main/java/android/support/v4/os/ResultReceiver.java"
+            line="121"
+            column="52"/>
     </issue>
 
     <issue
@@ -7732,7 +9405,9 @@
         errorLine1="    public void setColorFilter(ColorFilter cf) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"/>
+            file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"
+            line="288"
+            column="32"/>
     </issue>
 
     <issue
@@ -7741,7 +9416,9 @@
         errorLine1="    public ColorFilter getColorFilter() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"/>
+            file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"
+            line="294"
+            column="12"/>
     </issue>
 
     <issue
@@ -7750,7 +9427,9 @@
         errorLine1="    public void onSharedElementStart(List&lt;String> sharedElementNames,"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="77"
+            column="38"/>
     </issue>
 
     <issue
@@ -7759,7 +9438,9 @@
         errorLine1="            List&lt;View> sharedElements, List&lt;View> sharedElementSnapshots) {}"
         errorLine2="            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="78"
+            column="13"/>
     </issue>
 
     <issue
@@ -7768,7 +9449,9 @@
         errorLine1="            List&lt;View> sharedElements, List&lt;View> sharedElementSnapshots) {}"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="78"
+            column="40"/>
     </issue>
 
     <issue
@@ -7777,7 +9460,9 @@
         errorLine1="    public void onSharedElementEnd(List&lt;String> sharedElementNames,"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="108"
+            column="36"/>
     </issue>
 
     <issue
@@ -7786,7 +9471,9 @@
         errorLine1="            List&lt;View> sharedElements, List&lt;View> sharedElementSnapshots) {}"
         errorLine2="            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="109"
+            column="13"/>
     </issue>
 
     <issue
@@ -7795,7 +9482,9 @@
         errorLine1="            List&lt;View> sharedElements, List&lt;View> sharedElementSnapshots) {}"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="109"
+            column="40"/>
     </issue>
 
     <issue
@@ -7804,7 +9493,9 @@
         errorLine1="    public void onRejectSharedElements(List&lt;View> rejectedSharedElements) {}"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="133"
+            column="40"/>
     </issue>
 
     <issue
@@ -7813,7 +9504,9 @@
         errorLine1="    public void onMapSharedElements(List&lt;String> names, Map&lt;String, View> sharedElements) {}"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="144"
+            column="37"/>
     </issue>
 
     <issue
@@ -7822,7 +9515,9 @@
         errorLine1="    public void onMapSharedElements(List&lt;String> names, Map&lt;String, View> sharedElements) {}"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="144"
+            column="57"/>
     </issue>
 
     <issue
@@ -7831,7 +9526,9 @@
         errorLine1="    public Parcelable onCaptureSharedElementSnapshot(View sharedElement, Matrix viewToGlobalMatrix,"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="166"
+            column="12"/>
     </issue>
 
     <issue
@@ -7840,7 +9537,9 @@
         errorLine1="    public Parcelable onCaptureSharedElementSnapshot(View sharedElement, Matrix viewToGlobalMatrix,"
         errorLine2="                                                     ~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="166"
+            column="54"/>
     </issue>
 
     <issue
@@ -7849,7 +9548,9 @@
         errorLine1="    public Parcelable onCaptureSharedElementSnapshot(View sharedElement, Matrix viewToGlobalMatrix,"
         errorLine2="                                                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="166"
+            column="74"/>
     </issue>
 
     <issue
@@ -7858,7 +9559,9 @@
         errorLine1="            RectF screenBounds) {"
         errorLine2="            ~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="167"
+            column="13"/>
     </issue>
 
     <issue
@@ -7867,7 +9570,9 @@
         errorLine1="    public View onCreateSnapshotView(Context context, Parcelable snapshot) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="257"
+            column="12"/>
     </issue>
 
     <issue
@@ -7876,7 +9581,9 @@
         errorLine1="    public View onCreateSnapshotView(Context context, Parcelable snapshot) {"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="257"
+            column="38"/>
     </issue>
 
     <issue
@@ -7885,7 +9592,9 @@
         errorLine1="    public View onCreateSnapshotView(Context context, Parcelable snapshot) {"
         errorLine2="                                                      ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="257"
+            column="55"/>
     </issue>
 
     <issue
@@ -7894,7 +9603,9 @@
         errorLine1="    public void onSharedElementsArrived(List&lt;String> sharedElementNames,"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="300"
+            column="41"/>
     </issue>
 
     <issue
@@ -7903,7 +9614,9 @@
         errorLine1="            List&lt;View> sharedElements, OnSharedElementsReadyListener listener) {"
         errorLine2="            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="301"
+            column="13"/>
     </issue>
 
     <issue
@@ -7912,7 +9625,9 @@
         errorLine1="            List&lt;View> sharedElements, OnSharedElementsReadyListener listener) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+            file="src/main/java/androidx/core/app/SharedElementCallback.java"
+            line="301"
+            column="40"/>
     </issue>
 
     <issue
@@ -7921,7 +9636,9 @@
         errorLine1="    public ShortcutInfo toShortcutInfo() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="125"
+            column="12"/>
     </issue>
 
     <issue
@@ -7930,7 +9647,9 @@
         errorLine1="    public IconCompat getIcon() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="343"
+            column="12"/>
     </issue>
 
     <issue
@@ -7939,7 +9658,9 @@
         errorLine1="        public Builder setIcon(IconCompat icon) {"
         errorLine2="                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+            line="709"
+            column="32"/>
     </issue>
 
     <issue
@@ -7948,7 +9669,9 @@
         errorLine1="    public abstract T addShortcuts(List&lt;ShortcutInfoCompat> shortcuts);"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+            line="38"
+            column="36"/>
     </issue>
 
     <issue
@@ -7957,7 +9680,9 @@
         errorLine1="    public abstract T removeShortcuts(List&lt;String> shortcutIds);"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+            line="41"
+            column="39"/>
     </issue>
 
     <issue
@@ -7966,7 +9691,9 @@
         errorLine1="    public List&lt;ShortcutInfoCompat> getShortcuts() throws Exception {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+            line="47"
+            column="12"/>
     </issue>
 
     <issue
@@ -7975,7 +9702,9 @@
         errorLine1="        public Void addShortcuts(List&lt;ShortcutInfoCompat> shortcuts) {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+            line="59"
+            column="16"/>
     </issue>
 
     <issue
@@ -7984,7 +9713,9 @@
         errorLine1="        public Void addShortcuts(List&lt;ShortcutInfoCompat> shortcuts) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+            line="59"
+            column="34"/>
     </issue>
 
     <issue
@@ -7993,7 +9724,9 @@
         errorLine1="        public Void removeShortcuts(List&lt;String> shortcutIds) {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+            line="64"
+            column="16"/>
     </issue>
 
     <issue
@@ -8002,7 +9735,9 @@
         errorLine1="        public Void removeShortcuts(List&lt;String> shortcutIds) {"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+            line="64"
+            column="37"/>
     </issue>
 
     <issue
@@ -8011,7 +9746,9 @@
         errorLine1="        public Void removeAllShortcuts() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+            file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+            line="69"
+            column="16"/>
     </issue>
 
     <issue
@@ -8020,7 +9757,9 @@
         errorLine1="    boolean isRtl(char[] array, int start, int count);"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/TextDirectionHeuristicCompat.java"/>
+            file="src/main/java/androidx/core/text/TextDirectionHeuristicCompat.java"
+            line="33"
+            column="19"/>
     </issue>
 
     <issue
@@ -8029,7 +9768,9 @@
         errorLine1="    boolean isRtl(CharSequence cs, int start, int count);"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/text/TextDirectionHeuristicCompat.java"/>
+            file="src/main/java/androidx/core/text/TextDirectionHeuristicCompat.java"
+            line="45"
+            column="19"/>
     </issue>
 
     <issue
@@ -8038,7 +9779,9 @@
         errorLine1="    public static void formatDuration(long duration, StringBuilder builder) {"
         errorLine2="                                                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/util/TimeUtils.java"/>
+            file="src/main/java/androidx/core/util/TimeUtils.java"
+            line="153"
+            column="54"/>
     </issue>
 
     <issue
@@ -8047,7 +9790,9 @@
         errorLine1="    public static void formatDuration(long duration, PrintWriter pw, int fieldLen) {"
         errorLine2="                                                     ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/util/TimeUtils.java"/>
+            file="src/main/java/androidx/core/util/TimeUtils.java"
+            line="162"
+            column="54"/>
     </issue>
 
     <issue
@@ -8056,7 +9801,9 @@
         errorLine1="    public static void formatDuration(long duration, PrintWriter pw) {"
         errorLine2="                                                     ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/util/TimeUtils.java"/>
+            file="src/main/java/androidx/core/util/TimeUtils.java"
+            line="171"
+            column="54"/>
     </issue>
 
     <issue
@@ -8065,7 +9812,9 @@
         errorLine1="    public static void formatDuration(long time, long now, PrintWriter pw) {"
         errorLine2="                                                           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/util/TimeUtils.java"/>
+            file="src/main/java/androidx/core/util/TimeUtils.java"
+            line="177"
+            column="60"/>
     </issue>
 
     <issue
@@ -8074,7 +9823,9 @@
         errorLine1="    void setTintList(ColorStateList tint);"
         errorLine2="                     ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/drawable/TintAwareDrawable.java"/>
+            file="src/main/java/androidx/core/graphics/drawable/TintAwareDrawable.java"
+            line="36"
+            column="22"/>
     </issue>
 
     <issue
@@ -8083,7 +9834,9 @@
         errorLine1="    void setTintMode(PorterDuff.Mode tintMode);"
         errorLine2="                     ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/drawable/TintAwareDrawable.java"/>
+            file="src/main/java/androidx/core/graphics/drawable/TintAwareDrawable.java"
+            line="37"
+            column="22"/>
     </issue>
 
     <issue
@@ -8092,7 +9845,9 @@
         errorLine1="    public static ComplexColorCompat getNamedComplexColor(@NonNull TypedArray a,"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/content/res/TypedArrayUtils.java"/>
+            file="src/main/java/androidx/core/content/res/TypedArrayUtils.java"
+            line="137"
+            column="19"/>
     </issue>
 
     <issue
@@ -8101,7 +9856,9 @@
         errorLine1="            @NonNull Context context, @NonNull Resources resources, int id, String path, int cookie,"
         errorLine2="                                                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompat.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompat.java"
+            line="219"
+            column="77"/>
     </issue>
 
     <issue
@@ -8110,7 +9867,9 @@
         errorLine1="    protected Typeface createFromFamiliesWithDefault(Object family) {"
         errorLine2="                                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="167"
+            column="54"/>
     </issue>
 
     <issue
@@ -8119,7 +9878,9 @@
         errorLine1="    public Typeface createFromFontFamilyFilesResourceEntry(Context context,"
         errorLine2="                                                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="200"
+            column="60"/>
     </issue>
 
     <issue
@@ -8128,7 +9889,9 @@
         errorLine1="            FontResourcesParserCompat.FontFamilyFilesResourceEntry entry, Resources resources,"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="201"
+            column="13"/>
     </issue>
 
     <issue
@@ -8137,7 +9900,9 @@
         errorLine1="            FontResourcesParserCompat.FontFamilyFilesResourceEntry entry, Resources resources,"
         errorLine2="                                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="201"
+            column="75"/>
     </issue>
 
     <issue
@@ -8146,7 +9911,9 @@
         errorLine1="    public Typeface createFromFontInfo(Context context,"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="226"
+            column="40"/>
     </issue>
 
     <issue
@@ -8155,7 +9922,9 @@
         errorLine1="            Context context, Resources resources, int id, String path, int style) {"
         errorLine2="            ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="290"
+            column="13"/>
     </issue>
 
     <issue
@@ -8164,7 +9933,9 @@
         errorLine1="            Context context, Resources resources, int id, String path, int style) {"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="290"
+            column="30"/>
     </issue>
 
     <issue
@@ -8173,7 +9944,9 @@
         errorLine1="            Context context, Resources resources, int id, String path, int style) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="290"
+            column="59"/>
     </issue>
 
     <issue
@@ -8182,7 +9955,9 @@
         errorLine1="    protected Class&lt;?> obtainFontFamily() throws ClassNotFoundException {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="315"
+            column="15"/>
     </issue>
 
     <issue
@@ -8191,7 +9966,9 @@
         errorLine1="    protected Constructor&lt;?> obtainFontFamilyCtor(Class&lt;?> fontFamily)"
         errorLine2="              ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="319"
+            column="15"/>
     </issue>
 
     <issue
@@ -8200,7 +9977,9 @@
         errorLine1="    protected Constructor&lt;?> obtainFontFamilyCtor(Class&lt;?> fontFamily)"
         errorLine2="                                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="319"
+            column="51"/>
     </issue>
 
     <issue
@@ -8209,7 +9988,9 @@
         errorLine1="    protected Method obtainAddFontFromAssetManagerMethod(Class&lt;?> fontFamily)"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="324"
+            column="15"/>
     </issue>
 
     <issue
@@ -8218,7 +9999,9 @@
         errorLine1="    protected Method obtainAddFontFromAssetManagerMethod(Class&lt;?> fontFamily)"
         errorLine2="                                                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="324"
+            column="58"/>
     </issue>
 
     <issue
@@ -8227,7 +10010,9 @@
         errorLine1="    protected Method obtainAddFontFromBufferMethod(Class&lt;?> fontFamily)"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="331"
+            column="15"/>
     </issue>
 
     <issue
@@ -8236,7 +10021,9 @@
         errorLine1="    protected Method obtainAddFontFromBufferMethod(Class&lt;?> fontFamily)"
         errorLine2="                                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="331"
+            column="52"/>
     </issue>
 
     <issue
@@ -8245,7 +10032,9 @@
         errorLine1="    protected Method obtainFreezeMethod(Class&lt;?> fontFamily) throws NoSuchMethodException {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="338"
+            column="15"/>
     </issue>
 
     <issue
@@ -8254,7 +10043,9 @@
         errorLine1="    protected Method obtainFreezeMethod(Class&lt;?> fontFamily) throws NoSuchMethodException {"
         errorLine2="                                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="338"
+            column="41"/>
     </issue>
 
     <issue
@@ -8263,7 +10054,9 @@
         errorLine1="    protected Method obtainAbortCreationMethod(Class&lt;?> fontFamily) throws NoSuchMethodException {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="342"
+            column="15"/>
     </issue>
 
     <issue
@@ -8272,7 +10065,9 @@
         errorLine1="    protected Method obtainAbortCreationMethod(Class&lt;?> fontFamily) throws NoSuchMethodException {"
         errorLine2="                                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="342"
+            column="48"/>
     </issue>
 
     <issue
@@ -8281,7 +10076,9 @@
         errorLine1="    protected Method obtainCreateFromFamiliesWithDefaultMethod(Class&lt;?> fontFamily)"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="346"
+            column="15"/>
     </issue>
 
     <issue
@@ -8290,7 +10087,9 @@
         errorLine1="    protected Method obtainCreateFromFamiliesWithDefaultMethod(Class&lt;?> fontFamily)"
         errorLine2="                                                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+            line="346"
+            column="64"/>
     </issue>
 
     <issue
@@ -8299,7 +10098,9 @@
         errorLine1="    protected Typeface createFromFamiliesWithDefault(Object family) {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+            line="47"
+            column="15"/>
     </issue>
 
     <issue
@@ -8308,7 +10109,9 @@
         errorLine1="    protected Typeface createFromFamiliesWithDefault(Object family) {"
         errorLine2="                                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+            line="47"
+            column="54"/>
     </issue>
 
     <issue
@@ -8317,7 +10120,9 @@
         errorLine1="    protected Method obtainCreateFromFamiliesWithDefaultMethod(Class&lt;?> fontFamily)"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+            line="59"
+            column="15"/>
     </issue>
 
     <issue
@@ -8326,7 +10131,9 @@
         errorLine1="    protected Method obtainCreateFromFamiliesWithDefaultMethod(Class&lt;?> fontFamily)"
         errorLine2="                                                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+            line="59"
+            column="64"/>
     </issue>
 
     <issue
@@ -8335,7 +10142,9 @@
         errorLine1="    protected FontsContractCompat.FontInfo findBestInfo(FontsContractCompat.FontInfo[] fonts,"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="73"
+            column="15"/>
     </issue>
 
     <issue
@@ -8344,7 +10153,9 @@
         errorLine1="    protected FontsContractCompat.FontInfo findBestInfo(FontsContractCompat.FontInfo[] fonts,"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="73"
+            column="57"/>
     </issue>
 
     <issue
@@ -8353,7 +10164,9 @@
         errorLine1="    protected Typeface createFromInputStream(Context context, InputStream is) {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="80"
+            column="15"/>
     </issue>
 
     <issue
@@ -8362,7 +10175,9 @@
         errorLine1="    protected Typeface createFromInputStream(Context context, InputStream is) {"
         errorLine2="                                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="80"
+            column="46"/>
     </issue>
 
     <issue
@@ -8371,7 +10186,9 @@
         errorLine1="    protected Typeface createFromInputStream(Context context, InputStream is) {"
         errorLine2="                                                              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="80"
+            column="63"/>
     </issue>
 
     <issue
@@ -8380,7 +10197,9 @@
         errorLine1="    public Typeface createFromFontInfo(Context context,"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="86"
+            column="40"/>
     </issue>
 
     <issue
@@ -8389,7 +10208,9 @@
         errorLine1="    public Typeface createFromFontFamilyFilesResourceEntry(Context context,"
         errorLine2="                                                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="127"
+            column="60"/>
     </issue>
 
     <issue
@@ -8398,7 +10219,9 @@
         errorLine1="            FontResourcesParserCompat.FontFamilyFilesResourceEntry familyEntry, Resources resources,"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="128"
+            column="13"/>
     </issue>
 
     <issue
@@ -8407,7 +10230,9 @@
         errorLine1="            FontResourcesParserCompat.FontFamilyFilesResourceEntry familyEntry, Resources resources,"
         errorLine2="                                                                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="128"
+            column="81"/>
     </issue>
 
     <issue
@@ -8416,7 +10241,9 @@
         errorLine1="            Context context, Resources resources, int id, String path, int style) {"
         errorLine2="            ~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="168"
+            column="13"/>
     </issue>
 
     <issue
@@ -8425,7 +10252,9 @@
         errorLine1="            Context context, Resources resources, int id, String path, int style) {"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="168"
+            column="30"/>
     </issue>
 
     <issue
@@ -8434,7 +10263,9 @@
         errorLine1="            Context context, Resources resources, int id, String path, int style) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+            file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+            line="168"
+            column="59"/>
     </issue>
 
     <issue
@@ -8443,7 +10274,9 @@
         errorLine1="    Drawable getWrappedDrawable();"
         errorLine2="    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/drawable/WrappedDrawable.java"/>
+            file="src/main/java/androidx/core/graphics/drawable/WrappedDrawable.java"
+            line="33"
+            column="5"/>
     </issue>
 
     <issue
@@ -8452,7 +10285,9 @@
         errorLine1="    void setWrappedDrawable(Drawable drawable);"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/core/graphics/drawable/WrappedDrawable.java"/>
+            file="src/main/java/androidx/core/graphics/drawable/WrappedDrawable.java"
+            line="34"
+            column="29"/>
     </issue>
 
 </issues>
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 dd22f6e..349fcc15 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;
@@ -148,6 +151,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 0ee4d9a..6efc56f 100644
--- a/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
@@ -59,6 +59,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..275e727 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() {
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..08343a4 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java
@@ -794,6 +794,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..5ba77b5 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;
@@ -42,6 +43,7 @@
 import androidx.annotation.IntRange;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
 import androidx.annotation.RestrictTo;
 import androidx.core.R;
 import androidx.core.accessibilityservice.AccessibilityServiceInfoCompat;
@@ -591,6 +593,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 +1285,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;
@@ -2898,6 +2951,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.
@@ -4075,7 +4164,7 @@
      */
     public @Nullable CharSequence getRoleDescription() {
         if (Build.VERSION.SDK_INT >= 19) {
-            return mInfo.getExtras().getCharSequence(ROLE_DESCRIPTION_KEY);
+            return getExtras().getCharSequence(ROLE_DESCRIPTION_KEY);
         } else {
             return null;
         }
@@ -4107,7 +4196,7 @@
      */
     public void setRoleDescription(@Nullable CharSequence roleDescription) {
         if (Build.VERSION.SDK_INT >= 19) {
-            mInfo.getExtras().putCharSequence(ROLE_DESCRIPTION_KEY, roleDescription);
+            getExtras().putCharSequence(ROLE_DESCRIPTION_KEY, roleDescription);
         }
     }
 
@@ -4213,6 +4302,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 +4438,14 @@
                 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";
         }
     }
 }
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
index bd47b27..a676e5e 100644
--- a/cursoradapter/cursoradapter/lint-baseline.xml
+++ b/cursoradapter/cursoradapter/lint-baseline.xml
@@ -133,7 +133,8 @@
         errorLine1="    public abstract void bindView(View view, Context context, Cursor cursor);"
         errorLine2="                                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            column="46"/>
     </issue>
 
     <issue
@@ -142,7 +143,9 @@
         errorLine1="    public abstract void bindView(View view, Context context, Cursor cursor);"
         errorLine2="                                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="281"
+            column="63"/>
     </issue>
 
     <issue
@@ -151,7 +154,9 @@
         errorLine1="    public void changeCursor(Cursor cursor) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="290"
+            column="30"/>
     </issue>
 
     <issue
@@ -160,7 +165,9 @@
         errorLine1="    public Cursor swapCursor(Cursor newCursor) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="307"
+            column="12"/>
     </issue>
 
     <issue
@@ -169,7 +176,9 @@
         errorLine1="    public Cursor swapCursor(Cursor newCursor) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="307"
+            column="30"/>
     </issue>
 
     <issue
@@ -178,7 +187,9 @@
         errorLine1="    public CharSequence convertToString(Cursor cursor) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="343"
+            column="12"/>
     </issue>
 
     <issue
@@ -187,7 +198,9 @@
         errorLine1="    public CharSequence convertToString(Cursor cursor) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="343"
+            column="41"/>
     </issue>
 
     <issue
@@ -196,7 +209,9 @@
         errorLine1="    public Cursor runQueryOnBackgroundThread(CharSequence constraint) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="373"
+            column="12"/>
     </issue>
 
     <issue
@@ -205,7 +220,9 @@
         errorLine1="    public Cursor runQueryOnBackgroundThread(CharSequence constraint) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="373"
+            column="46"/>
     </issue>
 
     <issue
@@ -214,7 +231,9 @@
         errorLine1="    public FilterQueryProvider getFilterQueryProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="398"
+            column="12"/>
     </issue>
 
     <issue
@@ -223,7 +242,9 @@
         errorLine1="    public void setFilterQueryProvider(FilterQueryProvider filterQueryProvider) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+            line="414"
+            column="40"/>
     </issue>
 
     <issue
@@ -232,7 +253,9 @@
         errorLine1="    public ResourceCursorAdapter(Context context, int layout, Cursor c, int flags) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="98"
+            column="34"/>
     </issue>
 
     <issue
@@ -241,7 +264,9 @@
         errorLine1="    public ResourceCursorAdapter(Context context, int layout, Cursor c, int flags) {"
         errorLine2="                                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="98"
+            column="63"/>
     </issue>
 
     <issue
@@ -250,7 +275,9 @@
         errorLine1="    public View newView(Context context, Cursor cursor, ViewGroup parent) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="111"
+            column="12"/>
     </issue>
 
     <issue
@@ -259,7 +286,9 @@
         errorLine1="    public View newView(Context context, Cursor cursor, ViewGroup parent) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="111"
+            column="25"/>
     </issue>
 
     <issue
@@ -268,7 +297,9 @@
         errorLine1="    public View newView(Context context, Cursor cursor, ViewGroup parent) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="111"
+            column="42"/>
     </issue>
 
     <issue
@@ -277,7 +308,9 @@
         errorLine1="    public View newView(Context context, Cursor cursor, ViewGroup parent) {"
         errorLine2="                                                        ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="111"
+            column="57"/>
     </issue>
 
     <issue
@@ -286,7 +319,9 @@
         errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="116"
+            column="12"/>
     </issue>
 
     <issue
@@ -295,7 +330,9 @@
         errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="116"
+            column="33"/>
     </issue>
 
     <issue
@@ -304,7 +341,9 @@
         errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
         errorLine2="                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="116"
+            column="50"/>
     </issue>
 
     <issue
@@ -313,7 +352,9 @@
         errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
         errorLine2="                                                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+            line="116"
+            column="65"/>
     </issue>
 
     <issue
@@ -322,7 +363,9 @@
         errorLine1="    protected int[] mFrom;"
         errorLine2="              ~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="44"
+            column="15"/>
     </issue>
 
     <issue
@@ -331,7 +374,9 @@
         errorLine1="    protected int[] mTo;"
         errorLine2="              ~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="51"
+            column="15"/>
     </issue>
 
     <issue
@@ -340,7 +385,9 @@
         errorLine1="    public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="93"
+            column="32"/>
     </issue>
 
     <issue
@@ -349,7 +396,9 @@
         errorLine1="    public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,"
         errorLine2="                                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="93"
+            column="61"/>
     </issue>
 
     <issue
@@ -358,7 +407,9 @@
         errorLine1="    public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,"
         errorLine2="                                                                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="93"
+            column="71"/>
     </issue>
 
     <issue
@@ -367,7 +418,9 @@
         errorLine1="            int[] to, int flags) {"
         errorLine2="            ~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="94"
+            column="13"/>
     </issue>
 
     <issue
@@ -376,7 +429,9 @@
         errorLine1="    public void bindView(View view, Context context, Cursor cursor) {"
         errorLine2="                         ~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="125"
+            column="26"/>
     </issue>
 
     <issue
@@ -385,7 +440,9 @@
         errorLine1="    public void bindView(View view, Context context, Cursor cursor) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="125"
+            column="37"/>
     </issue>
 
     <issue
@@ -394,7 +451,9 @@
         errorLine1="    public void bindView(View view, Context context, Cursor cursor) {"
         errorLine2="                                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="125"
+            column="54"/>
     </issue>
 
     <issue
@@ -403,7 +462,9 @@
         errorLine1="    public ViewBinder getViewBinder() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="166"
+            column="12"/>
     </issue>
 
     <issue
@@ -412,7 +473,9 @@
         errorLine1="    public void setViewBinder(ViewBinder viewBinder) {"
         errorLine2="                              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="179"
+            column="31"/>
     </issue>
 
     <issue
@@ -421,7 +484,9 @@
         errorLine1="    public void setViewImage(ImageView v, String value) {"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="198"
+            column="30"/>
     </issue>
 
     <issue
@@ -430,7 +495,9 @@
         errorLine1="    public void setViewImage(ImageView v, String value) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="198"
+            column="43"/>
     </issue>
 
     <issue
@@ -439,7 +506,9 @@
         errorLine1="    public void setViewText(TextView v, String text) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="217"
+            column="29"/>
     </issue>
 
     <issue
@@ -448,7 +517,9 @@
         errorLine1="    public void setViewText(TextView v, String text) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="217"
+            column="41"/>
     </issue>
 
     <issue
@@ -457,7 +528,9 @@
         errorLine1="    public CursorToStringConverter getCursorToStringConverter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="266"
+            column="12"/>
     </issue>
 
     <issue
@@ -466,7 +539,9 @@
         errorLine1="    public void setCursorToStringConverter(CursorToStringConverter cursorToStringConverter) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="282"
+            column="44"/>
     </issue>
 
     <issue
@@ -475,7 +550,9 @@
         errorLine1="    public CharSequence convertToString(Cursor cursor) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="298"
+            column="12"/>
     </issue>
 
     <issue
@@ -484,7 +561,9 @@
         errorLine1="    public CharSequence convertToString(Cursor cursor) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="298"
+            column="41"/>
     </issue>
 
     <issue
@@ -493,7 +572,9 @@
         errorLine1="    public Cursor swapCursor(Cursor newCursor) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="331"
+            column="12"/>
     </issue>
 
     <issue
@@ -502,7 +583,9 @@
         errorLine1="    public Cursor swapCursor(Cursor newCursor) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="331"
+            column="30"/>
     </issue>
 
     <issue
@@ -511,7 +594,9 @@
         errorLine1="    public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="350"
+            column="40"/>
     </issue>
 
     <issue
@@ -520,7 +605,9 @@
         errorLine1="    public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {"
         errorLine2="                                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="350"
+            column="50"/>
     </issue>
 
     <issue
@@ -529,7 +616,9 @@
         errorLine1="    public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {"
         errorLine2="                                                                ~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="350"
+            column="65"/>
     </issue>
 
     <issue
@@ -538,7 +627,9 @@
         errorLine1="        boolean setViewValue(View view, Cursor cursor, int columnIndex);"
         errorLine2="                             ~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="387"
+            column="30"/>
     </issue>
 
     <issue
@@ -547,7 +638,9 @@
         errorLine1="        boolean setViewValue(View view, Cursor cursor, int columnIndex);"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="387"
+            column="41"/>
     </issue>
 
     <issue
@@ -556,7 +649,9 @@
         errorLine1="        CharSequence convertToString(Cursor cursor);"
         errorLine2="        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="405"
+            column="9"/>
     </issue>
 
     <issue
@@ -565,7 +660,9 @@
         errorLine1="        CharSequence convertToString(Cursor cursor);"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+            line="405"
+            column="38"/>
     </issue>
 
 </issues>
diff --git a/development/studio/idea.properties b/development/studio/idea.properties
index f352237..3cabbbf 100644
--- a/development/studio/idea.properties
+++ b/development/studio/idea.properties
@@ -5,12 +5,12 @@
 #---------------------------------------------------------------------
 # Uncomment this option if you want to customize path to IDE config folder. Make sure you're using forward slashes.
 #---------------------------------------------------------------------
-idea.config.path=${user.home}/.AndroidStudioAndroidX/config
+idea.config.path=${user.home}/.AndroidStudioAndroidXPlatform/config
 
 #---------------------------------------------------------------------
 # Uncomment this option if you want to customize path to IDE system folder. Make sure you're using forward slashes.
 #---------------------------------------------------------------------
-idea.system.path=${user.home}/.AndroidStudioAndroidX/system
+idea.system.path=${user.home}/.AndroidStudioAndroidXPlatform/system
 
 #---------------------------------------------------------------------
 # Uncomment this option if you want to customize path to user installed plugins folder. Make sure you're using forward slashes.
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index f43fd20..8bf4f6e 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -8,20 +8,20 @@
 }
 
 dependencies {
-    docs("androidx.activity:activity:1.5.0")
-    docs("androidx.activity:activity-compose:1.5.0")
-    samples("androidx.activity:activity-compose-samples:1.5.0")
-    docs("androidx.activity:activity-ktx:1.5.0")
+    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-alpha01")
-    docs("androidx.appcompat:appcompat-resources:1.5.0-alpha01")
-    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.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")
@@ -111,8 +111,8 @@
     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:1.9.0-alpha05")
+    docs("androidx.core:core-ktx:1.9.0-alpha05")
     docs("androidx.core:core-splashscreen:1.0.0-rc01")
     docs("androidx.cursoradapter:cursoradapter:1.0.0")
     docs("androidx.customview:customview:1.2.0-alpha01")
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index 581ad2dc..42907dc 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"))
     docs(project(":health:health-services-client"))
diff --git a/draganddrop/draganddrop/lint-baseline.xml b/draganddrop/draganddrop/lint-baseline.xml
index 8dae4d20..9eab8b1 100644
--- a/draganddrop/draganddrop/lint-baseline.xml
+++ b/draganddrop/draganddrop/lint-baseline.xml
@@ -7,7 +7,8 @@
         errorLine1="    public void testDropHelper_startDrag_hasInactiveHighlight() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            column="17"/>
     </issue>
 
     <issue
@@ -16,7 +17,9 @@
         errorLine1="    public void testDropHelper_endDrag_hasNoHighlight() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="135"
+            column="17"/>
     </issue>
 
     <issue
@@ -25,7 +28,9 @@
         errorLine1="    public void testDropHelper_acceptDragsWithLocalState_default_hasNoHighlight() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="156"
+            column="17"/>
     </issue>
 
     <issue
@@ -34,7 +39,9 @@
         errorLine1="    public void testDropHelper_acceptDragsWithLocalState_false_hasNoHighlight() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="173"
+            column="17"/>
     </issue>
 
     <issue
@@ -43,7 +50,9 @@
         errorLine1="    public void testDropHelper_acceptDragsWithLocalState_true_hasHighlight() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="191"
+            column="17"/>
     </issue>
 
     <issue
@@ -52,7 +61,9 @@
         errorLine1="    public void testDropHelper_wrongMimeTypeImage_hasNoHighlight() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="210"
+            column="17"/>
     </issue>
 
     <issue
@@ -61,7 +72,9 @@
         errorLine1="    public void testDropHelper_wrongMimeTypeText_hasNoHighlight() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="226"
+            column="17"/>
     </issue>
 
     <issue
@@ -70,7 +83,9 @@
         errorLine1="    public void testDropHelper_enterAndExit_togglesHighlight() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="241"
+            column="17"/>
     </issue>
 
     <issue
@@ -79,7 +94,9 @@
         errorLine1="    public void testDropHelper_dragToInnerNestedView_retainsActiveHighlight()"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="275"
+            column="17"/>
     </issue>
 
     <issue
@@ -88,7 +105,9 @@
         errorLine1="    public void testDropHelper_usesColorFromSystemAsDefault() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="301"
+            column="17"/>
     </issue>
 
     <issue
@@ -97,7 +116,9 @@
         errorLine1="    public void testDropHelper_usesDefaultCornerRadius() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="325"
+            column="17"/>
     </issue>
 
     <issue
@@ -106,7 +127,9 @@
         errorLine1="    public void testDropHelper_usesCornerRadius() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="345"
+            column="17"/>
     </issue>
 
     <issue
@@ -115,7 +138,9 @@
         errorLine1="    public void testDropHelper_drop_callsListener() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="366"
+            column="17"/>
     </issue>
 
     <issue
@@ -124,7 +149,9 @@
         errorLine1="    public void testDropHelper_nonEditText_drop_callsListener() throws Exception {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+            line="397"
+            column="17"/>
     </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/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/lint-baseline.xml b/emoji/emoji/lint-baseline.xml
index 7d4802c..1182ed3 100644
--- a/emoji/emoji/lint-baseline.xml
+++ b/emoji/emoji/lint-baseline.xml
@@ -160,7 +160,8 @@
         errorLine1="                    if (mResId == -1 || mResId == spans[index].getId()) {"
         errorLine2="                                                               ~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/util/EmojiMatcher.java"/>
+            file="src/androidTest/java/androidx/emoji/util/EmojiMatcher.java"
+            column="64"/>
     </issue>
 
     <issue
@@ -169,7 +170,9 @@
         errorLine1="        mTextWatcher = new EmojiTextWatcher(editText);"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="54"
+            column="24"/>
     </issue>
 
     <issue
@@ -178,7 +181,9 @@
         errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="62"
+            column="22"/>
     </issue>
 
     <issue
@@ -187,7 +192,9 @@
         errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="74"
+            column="22"/>
     </issue>
 
     <issue
@@ -196,7 +203,9 @@
         errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="86"
+            column="22"/>
     </issue>
 
     <issue
@@ -205,7 +214,9 @@
         errorLine1="        assertEquals(EmojiCompat.REPLACE_STRATEGY_DEFAULT, mTextWatcher.getEmojiReplaceStrategy());"
         errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="98"
+            column="73"/>
     </issue>
 
     <issue
@@ -214,7 +225,9 @@
         errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="100"
+            column="22"/>
     </issue>
 
     <issue
@@ -223,7 +236,9 @@
         errorLine1="        mTextWatcher.setEmojiReplaceStrategy(EmojiCompat.REPLACE_STRATEGY_ALL);"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="105"
+            column="22"/>
     </issue>
 
     <issue
@@ -232,7 +247,9 @@
         errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="107"
+            column="22"/>
     </issue>
 
     <issue
@@ -241,7 +258,9 @@
         errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="118"
+            column="22"/>
     </issue>
 
     <issue
@@ -250,7 +269,9 @@
         errorLine1="        mTransformationMethod = new EmojiTransformationMethod(mWrappedTransformationMethod);"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="84"
+            column="33"/>
     </issue>
 
     <issue
@@ -259,7 +280,9 @@
         errorLine1="        assertNull(mTransformationMethod.getTransformation(null, mView));"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="89"
+            column="42"/>
     </issue>
 
     <issue
@@ -268,7 +291,9 @@
         errorLine1="        mTransformationMethod.getTransformation(&quot;&quot;, null);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="95"
+            column="31"/>
     </issue>
 
     <issue
@@ -277,7 +302,9 @@
         errorLine1="        mTransformationMethod = new EmojiTransformationMethod(null);"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="100"
+            column="33"/>
     </issue>
 
     <issue
@@ -286,7 +313,9 @@
         errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="102"
+            column="59"/>
     </issue>
 
     <issue
@@ -295,7 +324,9 @@
         errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="110"
+            column="59"/>
     </issue>
 
     <issue
@@ -304,7 +335,9 @@
         errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="124"
+            column="59"/>
     </issue>
 
     <issue
@@ -313,7 +346,9 @@
         errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="137"
+            column="59"/>
     </issue>
 
     <issue
@@ -322,7 +357,9 @@
         errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="150"
+            column="59"/>
     </issue>
 
     <issue
@@ -331,7 +368,9 @@
         errorLine1="        final EmojiSpan span = mock(EmojiSpan.class);"
         errorLine2="                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"
+            line="124"
+            column="37"/>
     </issue>
 
     <issue
@@ -340,7 +379,9 @@
         errorLine1="        EmojiSpan[] spans = spannable.getSpans(0, spannable.length(), EmojiSpan.class);"
         errorLine2="                                                                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"
+            line="135"
+            column="71"/>
     </issue>
 
     <issue
@@ -349,7 +390,9 @@
         errorLine1="        final EmojiSpan span = mock(EmojiSpan.class);"
         errorLine2="                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"
+            line="188"
+            column="37"/>
     </issue>
 
     <issue
@@ -358,7 +401,9 @@
         errorLine1="        EmojiSpan[] spans = spannable.getSpans(0, spannable.length(), EmojiSpan.class);"
         errorLine2="                                                                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"/>
+            file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"
+            line="200"
+            column="71"/>
     </issue>
 
     <issue
@@ -367,7 +412,9 @@
         errorLine1="                            loaderCallback.onLoaded(new MetadataRepo());"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"/>
+            file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"
+            line="88"
+            column="53"/>
     </issue>
 
     <issue
@@ -376,7 +423,9 @@
         errorLine1="                            sMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
         errorLine2="                                                         ~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"/>
+            file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"
+            line="119"
+            column="58"/>
     </issue>
 
     <issue
@@ -385,7 +434,9 @@
         errorLine1="                    mMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
         errorLine2="                                                 ~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"/>
+            file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"
+            line="144"
+            column="50"/>
     </issue>
 
     <issue
@@ -394,7 +445,9 @@
         errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
         errorLine2="        ~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+            line="58"
+            column="9"/>
     </issue>
 
     <issue
@@ -403,7 +456,9 @@
         errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
         errorLine2="        ~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+            line="65"
+            column="9"/>
     </issue>
 
     <issue
@@ -412,7 +467,9 @@
         errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
         errorLine2="        ~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+            line="74"
+            column="9"/>
     </issue>
 
     <issue
@@ -421,7 +478,9 @@
         errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
         errorLine2="        ~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+            line="99"
+            column="9"/>
     </issue>
 
     <issue
@@ -430,7 +489,9 @@
         errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
         errorLine2="        ~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+            line="58"
+            column="9"/>
     </issue>
 
     <issue
@@ -439,7 +500,9 @@
         errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
         errorLine2="        ~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+            line="53"
+            column="9"/>
     </issue>
 
     <issue
@@ -448,9 +511,13 @@
         errorLine1="    public int getHasGlyph() {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiMetadata.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiMetadata.java"
+            line="184"
+            column="16"/>
         <location
             file="src/main/java/androidx/emoji/text/EmojiMetadata.java"
+            line="193"
+            column="17"
             message="Setter here"/>
     </issue>
 
@@ -460,7 +527,9 @@
         errorLine1="    public EditTextAttributeHelper(@NonNull View view, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EditTextAttributeHelper.java"/>
+            file="src/main/java/androidx/emoji/widget/EditTextAttributeHelper.java"
+            line="40"
+            column="56"/>
     </issue>
 
     <issue
@@ -469,7 +538,9 @@
         errorLine1="    public EmojiButton(Context context) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+            line="41"
+            column="24"/>
     </issue>
 
     <issue
@@ -478,7 +549,9 @@
         errorLine1="    public EmojiButton(Context context, AttributeSet attrs) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+            line="46"
+            column="24"/>
     </issue>
 
     <issue
@@ -487,7 +560,9 @@
         errorLine1="    public EmojiButton(Context context, AttributeSet attrs) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+            line="46"
+            column="41"/>
     </issue>
 
     <issue
@@ -496,7 +571,9 @@
         errorLine1="    public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+            line="51"
+            column="24"/>
     </issue>
 
     <issue
@@ -505,7 +582,9 @@
         errorLine1="    public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+            line="51"
+            column="41"/>
     </issue>
 
     <issue
@@ -514,7 +593,9 @@
         errorLine1="    public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+            line="57"
+            column="24"/>
     </issue>
 
     <issue
@@ -523,7 +604,9 @@
         errorLine1="    public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+            line="57"
+            column="41"/>
     </issue>
 
     <issue
@@ -532,7 +615,9 @@
         errorLine1="    public static EmojiCompat init(@NonNull final Config config) {"
         errorLine2="                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="303"
+            column="19"/>
     </issue>
 
     <issue
@@ -541,7 +626,9 @@
         errorLine1="    public static EmojiCompat reset(@NonNull final Config config) {"
         errorLine2="                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="323"
+            column="19"/>
     </issue>
 
     <issue
@@ -550,7 +637,9 @@
         errorLine1="    public static EmojiCompat reset(final EmojiCompat emojiCompat) {"
         errorLine2="                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="338"
+            column="19"/>
     </issue>
 
     <issue
@@ -559,7 +648,9 @@
         errorLine1="    public static EmojiCompat reset(final EmojiCompat emojiCompat) {"
         errorLine2="                                          ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="338"
+            column="43"/>
     </issue>
 
     <issue
@@ -568,7 +659,9 @@
         errorLine1="    public static EmojiCompat get() {"
         errorLine2="                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="353"
+            column="19"/>
     </issue>
 
     <issue
@@ -577,7 +670,9 @@
         errorLine1="            final KeyEvent event) {"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="542"
+            column="19"/>
     </issue>
 
     <issue
@@ -586,7 +681,9 @@
         errorLine1="    public CharSequence process(@NonNull final CharSequence charSequence) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="626"
+            column="12"/>
     </issue>
 
     <issue
@@ -595,7 +692,9 @@
         errorLine1="    public CharSequence process(@NonNull final CharSequence charSequence,"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="662"
+            column="12"/>
     </issue>
 
     <issue
@@ -604,7 +703,9 @@
         errorLine1="    public CharSequence process(@NonNull final CharSequence charSequence,"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="697"
+            column="12"/>
     </issue>
 
     <issue
@@ -613,7 +714,9 @@
         errorLine1="    public CharSequence process(@NonNull final CharSequence charSequence,"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="737"
+            column="12"/>
     </issue>
 
     <issue
@@ -622,7 +725,9 @@
         errorLine1="        public Config registerInitCallback(@NonNull InitCallback initCallback) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="990"
+            column="16"/>
     </issue>
 
     <issue
@@ -631,7 +736,9 @@
         errorLine1="        public Config unregisterInitCallback(@NonNull InitCallback initCallback) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="1008"
+            column="16"/>
     </issue>
 
     <issue
@@ -640,7 +747,9 @@
         errorLine1="        public Config setReplaceAll(final boolean replaceAll) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="1025"
+            column="16"/>
     </issue>
 
     <issue
@@ -649,7 +758,9 @@
         errorLine1="        public Config setUseEmojiAsDefaultStyle(final boolean useEmojiAsDefaultStyle) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="1045"
+            column="16"/>
     </issue>
 
     <issue
@@ -658,7 +769,9 @@
         errorLine1="        public Config setUseEmojiAsDefaultStyle(final boolean useEmojiAsDefaultStyle,"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="1064"
+            column="16"/>
     </issue>
 
     <issue
@@ -667,7 +780,9 @@
         errorLine1="        public Config setEmojiSpanIndicatorEnabled(boolean emojiSpanIndicatorEnabled) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="1088"
+            column="16"/>
     </issue>
 
     <issue
@@ -676,7 +791,9 @@
         errorLine1="        public Config setEmojiSpanIndicatorColor(@ColorInt int color) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="1099"
+            column="16"/>
     </issue>
 
     <issue
@@ -685,7 +802,9 @@
         errorLine1="        public Config setMetadataLoadStrategy(@LoadStrategy int strategy) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="1140"
+            column="16"/>
     </issue>
 
     <issue
@@ -694,7 +813,9 @@
         errorLine1="        protected final MetadataRepoLoader getMetadataRepoLoader() {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+            line="1161"
+            column="25"/>
     </issue>
 
     <issue
@@ -703,7 +824,9 @@
         errorLine1="    public EmojiEditText(Context context) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+            line="48"
+            column="26"/>
     </issue>
 
     <issue
@@ -712,7 +835,9 @@
         errorLine1="    public EmojiEditText(Context context, AttributeSet attrs) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+            line="53"
+            column="26"/>
     </issue>
 
     <issue
@@ -721,7 +846,9 @@
         errorLine1="    public EmojiEditText(Context context, AttributeSet attrs) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+            line="53"
+            column="43"/>
     </issue>
 
     <issue
@@ -730,7 +857,9 @@
         errorLine1="    public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+            line="58"
+            column="26"/>
     </issue>
 
     <issue
@@ -739,7 +868,9 @@
         errorLine1="    public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+            line="58"
+            column="43"/>
     </issue>
 
     <issue
@@ -748,7 +879,9 @@
         errorLine1="    public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+            line="64"
+            column="26"/>
     </issue>
 
     <issue
@@ -757,7 +890,9 @@
         errorLine1="    public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+            line="64"
+            column="43"/>
     </issue>
 
     <issue
@@ -766,7 +901,9 @@
         errorLine1="    public EmojiExtractEditText(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+            line="56"
+            column="33"/>
     </issue>
 
     <issue
@@ -775,7 +912,9 @@
         errorLine1="    public EmojiExtractEditText(Context context, AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+            line="61"
+            column="33"/>
     </issue>
 
     <issue
@@ -784,7 +923,9 @@
         errorLine1="    public EmojiExtractEditText(Context context, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+            line="61"
+            column="50"/>
     </issue>
 
     <issue
@@ -793,7 +934,9 @@
         errorLine1="    public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+            line="66"
+            column="33"/>
     </issue>
 
     <issue
@@ -802,7 +945,9 @@
         errorLine1="    public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+            line="66"
+            column="50"/>
     </issue>
 
     <issue
@@ -811,7 +956,9 @@
         errorLine1="    public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+            line="72"
+            column="33"/>
     </issue>
 
     <issue
@@ -820,7 +967,9 @@
         errorLine1="    public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+            line="72"
+            column="50"/>
     </issue>
 
     <issue
@@ -829,7 +978,9 @@
         errorLine1="    public EmojiExtractTextLayout(Context context) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+            line="79"
+            column="35"/>
     </issue>
 
     <issue
@@ -838,7 +989,9 @@
         errorLine1="    public EmojiExtractTextLayout(Context context,"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+            line="84"
+            column="35"/>
     </issue>
 
     <issue
@@ -847,7 +1000,9 @@
         errorLine1="    public EmojiExtractTextLayout(Context context,"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+            line="90"
+            column="35"/>
     </issue>
 
     <issue
@@ -856,7 +1011,9 @@
         errorLine1="    public EmojiExtractTextLayout(Context context, AttributeSet attrs,"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+            line="97"
+            column="35"/>
     </issue>
 
     <issue
@@ -865,7 +1022,9 @@
         errorLine1="    public EmojiExtractTextLayout(Context context, AttributeSet attrs,"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+            line="97"
+            column="52"/>
     </issue>
 
     <issue
@@ -874,7 +1033,9 @@
         errorLine1="    public void onUpdateExtractingViews(InputMethodService inputMethodService, EditorInfo ei) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+            line="163"
+            column="41"/>
     </issue>
 
     <issue
@@ -883,7 +1044,9 @@
         errorLine1="    public void onUpdateExtractingViews(InputMethodService inputMethodService, EditorInfo ei) {"
         errorLine2="                                                                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+            line="163"
+            column="80"/>
     </issue>
 
     <issue
@@ -892,7 +1055,9 @@
         errorLine1="    public Typeface getTypeface() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiMetadata.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiMetadata.java"
+            line="120"
+            column="12"/>
     </issue>
 
     <issue
@@ -901,7 +1066,9 @@
         errorLine1="            final int end, final Paint.FontMetricsInt fm) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/EmojiSpan.java"/>
+            file="src/main/java/androidx/emoji/text/EmojiSpan.java"
+            line="78"
+            column="34"/>
     </issue>
 
     <issue
@@ -910,7 +1077,9 @@
         errorLine1="    public EmojiTextView(Context context) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+            line="41"
+            column="26"/>
     </issue>
 
     <issue
@@ -919,7 +1088,9 @@
         errorLine1="    public EmojiTextView(Context context, AttributeSet attrs) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+            line="46"
+            column="26"/>
     </issue>
 
     <issue
@@ -928,7 +1099,9 @@
         errorLine1="    public EmojiTextView(Context context, AttributeSet attrs) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+            line="46"
+            column="43"/>
     </issue>
 
     <issue
@@ -937,7 +1110,9 @@
         errorLine1="    public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+            line="51"
+            column="26"/>
     </issue>
 
     <issue
@@ -946,7 +1121,9 @@
         errorLine1="    public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+            line="51"
+            column="43"/>
     </issue>
 
     <issue
@@ -955,7 +1132,9 @@
         errorLine1="    public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+            line="57"
+            column="26"/>
     </issue>
 
     <issue
@@ -964,7 +1143,9 @@
         errorLine1="    public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+            file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+            line="57"
+            column="43"/>
     </issue>
 
     <issue
@@ -973,7 +1154,9 @@
         errorLine1="    public ExtractButtonCompat(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+            line="38"
+            column="32"/>
     </issue>
 
     <issue
@@ -982,7 +1165,9 @@
         errorLine1="    public ExtractButtonCompat(Context context, AttributeSet attrs) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+            line="42"
+            column="32"/>
     </issue>
 
     <issue
@@ -991,7 +1176,9 @@
         errorLine1="    public ExtractButtonCompat(Context context, AttributeSet attrs) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+            line="42"
+            column="49"/>
     </issue>
 
     <issue
@@ -1000,7 +1187,9 @@
         errorLine1="    public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+            line="46"
+            column="32"/>
     </issue>
 
     <issue
@@ -1009,7 +1198,9 @@
         errorLine1="    public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+            line="46"
+            column="49"/>
     </issue>
 
     <issue
@@ -1018,7 +1209,9 @@
         errorLine1="    public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+            line="51"
+            column="32"/>
     </issue>
 
     <issue
@@ -1027,7 +1220,9 @@
         errorLine1="    public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+            file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+            line="51"
+            column="49"/>
     </issue>
 
     <issue
@@ -1036,7 +1231,9 @@
         errorLine1="    public FontRequestEmojiCompatConfig setHandler(Handler handler) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+            line="143"
+            column="12"/>
     </issue>
 
     <issue
@@ -1045,7 +1242,9 @@
         errorLine1="    public FontRequestEmojiCompatConfig setHandler(Handler handler) {"
         errorLine2="                                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+            line="143"
+            column="52"/>
     </issue>
 
     <issue
@@ -1054,7 +1253,9 @@
         errorLine1="    public FontRequestEmojiCompatConfig setRetryPolicy(RetryPolicy policy) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+            line="156"
+            column="12"/>
     </issue>
 
     <issue
@@ -1063,7 +1264,9 @@
         errorLine1="    public FontRequestEmojiCompatConfig setRetryPolicy(RetryPolicy policy) {"
         errorLine2="                                                       ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+            line="156"
+            column="56"/>
     </issue>
 
     <issue
@@ -1072,7 +1275,9 @@
         errorLine1="        public FontFamilyResult fetchFonts(@NonNull Context context,"
         errorLine2="               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+            line="335"
+            column="16"/>
     </issue>
 
     <issue
@@ -1081,7 +1286,9 @@
         errorLine1="        public Typeface buildTypeface(@NonNull Context context,"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+            file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+            line="341"
+            column="16"/>
     </issue>
 
     <issue
@@ -1090,7 +1297,9 @@
         errorLine1="    public static MetadataRepo create(@NonNull final Typeface typeface,"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+            file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+            line="103"
+            column="19"/>
     </issue>
 
     <issue
@@ -1099,7 +1308,9 @@
         errorLine1="    public static MetadataRepo create(@NonNull final Typeface typeface,"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+            file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+            line="115"
+            column="19"/>
     </issue>
 
     <issue
@@ -1108,7 +1319,9 @@
         errorLine1="    public static MetadataRepo create(@NonNull final AssetManager assetManager,"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+            file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+            line="127"
+            column="19"/>
     </issue>
 
     <issue
@@ -1117,7 +1330,9 @@
         errorLine1="            final String assetPath) throws IOException {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+            file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+            line="128"
+            column="19"/>
     </issue>
 
     <issue
@@ -1126,7 +1341,9 @@
         errorLine1="    public char[] getEmojiCharArray() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+            file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+            line="176"
+            column="12"/>
     </issue>
 
     <issue
@@ -1135,7 +1352,9 @@
         errorLine1="    public MetadataList getMetadataList() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+            file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+            line="184"
+            column="12"/>
     </issue>
 
     <issue
@@ -1144,7 +1363,9 @@
         errorLine1="    public CharSequence subSequence(int start, int end) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+            line="124"
+            column="12"/>
     </issue>
 
     <issue
@@ -1153,7 +1374,9 @@
         errorLine1="    public SpannableStringBuilder append(CharSequence text) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+            line="336"
+            column="12"/>
     </issue>
 
     <issue
@@ -1162,7 +1385,9 @@
         errorLine1="    public SpannableStringBuilder append(CharSequence text) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+            line="336"
+            column="42"/>
     </issue>
 
     <issue
@@ -1171,7 +1396,9 @@
         errorLine1="    public SpannableStringBuilder append(char text) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+            line="342"
+            column="12"/>
     </issue>
 
     <issue
@@ -1180,7 +1407,9 @@
         errorLine1="    public SpannableStringBuilder append(CharSequence text, int start, int end) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+            line="348"
+            column="12"/>
     </issue>
 
     <issue
@@ -1189,7 +1418,9 @@
         errorLine1="    public SpannableStringBuilder append(CharSequence text, int start, int end) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+            file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+            line="348"
+            column="42"/>
     </issue>
 
     <issue
@@ -1198,7 +1429,9 @@
         errorLine1="    public TypefaceEmojiSpan(final EmojiMetadata metadata) {"
         errorLine2="                                   ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/emoji/text/TypefaceEmojiSpan.java"/>
+            file="src/main/java/androidx/emoji/text/TypefaceEmojiSpan.java"
+            line="48"
+            column="36"/>
     </issue>
 
 </issues>
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..0f674ac 100644
--- a/emoji2/emoji2-bundled/lint-baseline.xml
+++ b/emoji2/emoji2-bundled/lint-baseline.xml
@@ -52,7 +52,9 @@
         errorLine1="                            loaderCallback.onLoaded(MetadataRepo.create(mock(Typeface.class)));"
         errorLine2="                                                                 ~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"/>
+            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"
+            line="92"
+            column="66"/>
     </issue>
 
     <issue
@@ -61,7 +63,9 @@
         errorLine1="                            sMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
         errorLine2="                                                         ~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"/>
+            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"
+            line="123"
+            column="58"/>
     </issue>
 
     <issue
@@ -70,7 +74,9 @@
         errorLine1="                    mMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
         errorLine2="                                                 ~~~~~~">
         <location
-            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"/>
+            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"
+            line="148"
+            column="50"/>
     </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/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java b/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
index 84de192..e661776 100644
--- a/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
+++ b/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
@@ -5970,7 +5970,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/res-1.5.0-beta01.txt b/fragment/fragment-testing/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/fragment/fragment-testing/api/res-1.5.0-beta01.txt
+++ /dev/null
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
index a16c227..8e06b0c 100644
--- a/fragment/fragment/lint-baseline.xml
+++ b/fragment/fragment/lint-baseline.xml
@@ -79,7 +79,9 @@
         errorLine1="    assertThat(fragment.exitTransition.exitingTargets).isEmpty()"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="160"
+            column="40"/>
     </issue>
 
     <issue
@@ -88,7 +90,9 @@
         errorLine1="    assertThat(fragment.reenterTransition.enteringTargets).isEmpty()"
         errorLine2="                                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="162"
+            column="43"/>
     </issue>
 
     <issue
@@ -97,7 +101,9 @@
         errorLine1="    assertThat(fragment.reenterTransition.enteringTargets).isEmpty()"
         errorLine2="                        ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="162"
+            column="25"/>
     </issue>
 
     <issue
@@ -106,7 +112,9 @@
         errorLine1="    assertThat(fragment.reenterTransition.exitingTargets).isEmpty()"
         errorLine2="                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="163"
+            column="43"/>
     </issue>
 
     <issue
@@ -115,7 +123,9 @@
         errorLine1="    assertThat(fragment.reenterTransition.exitingTargets).isEmpty()"
         errorLine2="                        ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="163"
+            column="25"/>
     </issue>
 
     <issue
@@ -124,7 +134,9 @@
         errorLine1="    assertThat(fragment.returnTransition.enteringTargets).isEmpty()"
         errorLine2="                                         ~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="164"
+            column="42"/>
     </issue>
 
     <issue
@@ -133,7 +145,9 @@
         errorLine1="    assertThat(fragment.returnTransition.enteringTargets).isEmpty()"
         errorLine2="                        ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="164"
+            column="25"/>
     </issue>
 
     <issue
@@ -142,7 +156,9 @@
         errorLine1="    assertThat(fragment.returnTransition.exitingTargets).isEmpty()"
         errorLine2="                                         ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="165"
+            column="42"/>
     </issue>
 
     <issue
@@ -151,7 +167,9 @@
         errorLine1="    assertThat(fragment.returnTransition.exitingTargets).isEmpty()"
         errorLine2="                        ~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="165"
+            column="25"/>
     </issue>
 
     <issue
@@ -160,7 +178,9 @@
         errorLine1="    assertThat(fragment.sharedElementEnter.enteringTargets).isEmpty()"
         errorLine2="                                           ~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="167"
+            column="44"/>
     </issue>
 
     <issue
@@ -169,7 +189,9 @@
         errorLine1="    assertThat(fragment.sharedElementEnter.enteringTargets).isEmpty()"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="167"
+            column="25"/>
     </issue>
 
     <issue
@@ -178,7 +200,9 @@
         errorLine1="    assertThat(fragment.sharedElementEnter.exitingTargets).isEmpty()"
         errorLine2="                                           ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="168"
+            column="44"/>
     </issue>
 
     <issue
@@ -187,7 +211,9 @@
         errorLine1="    assertThat(fragment.sharedElementEnter.exitingTargets).isEmpty()"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="168"
+            column="25"/>
     </issue>
 
     <issue
@@ -196,7 +222,9 @@
         errorLine1="    assertThat(fragment.sharedElementReturn.enteringTargets).isEmpty()"
         errorLine2="                                            ~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="169"
+            column="45"/>
     </issue>
 
     <issue
@@ -205,7 +233,9 @@
         errorLine1="    assertThat(fragment.sharedElementReturn.enteringTargets).isEmpty()"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="169"
+            column="25"/>
     </issue>
 
     <issue
@@ -214,7 +244,9 @@
         errorLine1="    assertThat(fragment.sharedElementReturn.exitingTargets).isEmpty()"
         errorLine2="                                            ~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="170"
+            column="45"/>
     </issue>
 
     <issue
@@ -223,7 +255,9 @@
         errorLine1="    assertThat(fragment.sharedElementReturn.exitingTargets).isEmpty()"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+            line="170"
+            column="25"/>
     </issue>
 
     <issue
@@ -232,7 +266,9 @@
         errorLine1="    val fragment = TransitionFragment()"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt"/>
+            file="src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt"
+            line="1683"
+            column="20"/>
     </issue>
 
     <issue
@@ -241,7 +277,9 @@
         errorLine1="    @RequiresApi(19)"
         errorLine2="    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/fragment/app/FragmentTransitionCompat21.java"/>
+            file="src/main/java/androidx/fragment/app/FragmentTransitionCompat21.java"
+            line="361"
+            column="5"/>
     </issue>
 
 </issues>
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/gradle.properties b/gradle.properties
index 465af51..18c3692 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -23,8 +23,11 @@
 android.forceJacocoOutOfProcess=true
 android.experimental.lint.missingBaselineIsEmptyBaseline=true
 
-# Generate versioned API files
-androidx.writeVersionedApiFiles=true
+# Don't generate versioned API files
+androidx.writeVersionedApiFiles=false
+
+# Don't warn about needing to update AGP
+android.suppressUnsupportedCompileSdk=Tiramisu,33
 
 # Disable features we do not use
 android.defaults.buildfeatures.aidl=false
diff --git a/graphics/OWNERS b/graphics/OWNERS
new file mode 100644
index 0000000..db046a2
--- /dev/null
+++ b/graphics/OWNERS
@@ -0,0 +1,5 @@
+# Bug component: 1137062
+sumir@google.com
+jreck@google.com
+xxayedawgxx@google.com
+njawad@google.com
\ No newline at end of file
diff --git a/graphics/graphics-core/api/current.txt b/graphics/graphics-core/api/current.txt
new file mode 100644
index 0000000..f8b29e37
--- /dev/null
+++ b/graphics/graphics-core/api/current.txt
@@ -0,0 +1,325 @@
+// Signature format: 4.0
+package androidx.graphics.lowlatency {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class GLWetDryRenderer {
+    ctor public GLWetDryRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLWetDryRenderer.Callback callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+    ctor public GLWetDryRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLWetDryRenderer.Callback callback);
+    method public void clear();
+    method public void dry();
+    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 renderWetLayer(Object? param);
+    field public static final androidx.graphics.lowlatency.GLWetDryRenderer.Companion Companion;
+  }
+
+  public static interface GLWetDryRenderer.Callback {
+    method @WorkerThread public void onDrawDryLayer(androidx.graphics.opengl.egl.EglManager eglManager, java.util.Collection<?> params);
+    method @WorkerThread public void onDrawWetLayer(androidx.graphics.opengl.egl.EglManager eglManager, Object? param);
+    method @WorkerThread public default void onDryLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat wetLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+    method @WorkerThread public default void onWetLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat wetLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+  }
+
+  public static final class GLWetDryRenderer.Companion {
+  }
+
+}
+
+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 inline class EglConfigAttributes {
+    ctor public EglConfigAttributes();
+  }
+
+  public static final class EglConfigAttributes.Builder {
+    method public void include(int[] attributes);
+    method public infix void to(int, int that);
+  }
+
+  public final class EglConfigAttributesKt {
+    method public static inline int[] EglConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EglConfigAttributes.Builder,kotlin.Unit> block);
+    method public static int[] getEglConfigAttributes1010102();
+    method public static int[] getEglConfigAttributes8888();
+    method public static int[] getEglConfigAttributesF16();
+    property public static final int[] EglConfigAttributes1010102;
+    property public static final int[] EglConfigAttributes8888;
+    property public static final int[] EglConfigAttributesF16;
+    field public static final int EglColorComponentTypeExt = 13113; // 0x3339
+    field public static final int EglColorComponentTypeFixedExt = 13114; // 0x333a
+    field public static final int EglColorComponentTypeFloatExt = 13115; // 0x333b
+  }
+
+  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(int[] 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, int[]? configAttributes);
+    method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(int type, int[]? attributes);
+    method public android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLConfig config, android.view.Surface surface, int[]? 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.SyncFenceCompat 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(int[] configAttributes);
+    field public static final androidx.graphics.opengl.egl.EglSpec.Companion Companion;
+    field public static final androidx.graphics.opengl.egl.EglSpec Egl14;
+  }
+
+  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 {
+    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 kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
+    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 SyncFenceCompat implements java.lang.AutoCloseable {
+    ctor public SyncFenceCompat(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.SyncFenceCompat.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 SyncFenceCompat.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, int[]? 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.SyncFenceCompat 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, int[]? 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.SyncFenceCompat 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..f8b29e37
--- /dev/null
+++ b/graphics/graphics-core/api/public_plus_experimental_current.txt
@@ -0,0 +1,325 @@
+// Signature format: 4.0
+package androidx.graphics.lowlatency {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class GLWetDryRenderer {
+    ctor public GLWetDryRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLWetDryRenderer.Callback callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+    ctor public GLWetDryRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLWetDryRenderer.Callback callback);
+    method public void clear();
+    method public void dry();
+    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 renderWetLayer(Object? param);
+    field public static final androidx.graphics.lowlatency.GLWetDryRenderer.Companion Companion;
+  }
+
+  public static interface GLWetDryRenderer.Callback {
+    method @WorkerThread public void onDrawDryLayer(androidx.graphics.opengl.egl.EglManager eglManager, java.util.Collection<?> params);
+    method @WorkerThread public void onDrawWetLayer(androidx.graphics.opengl.egl.EglManager eglManager, Object? param);
+    method @WorkerThread public default void onDryLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat wetLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+    method @WorkerThread public default void onWetLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat wetLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+  }
+
+  public static final class GLWetDryRenderer.Companion {
+  }
+
+}
+
+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 inline class EglConfigAttributes {
+    ctor public EglConfigAttributes();
+  }
+
+  public static final class EglConfigAttributes.Builder {
+    method public void include(int[] attributes);
+    method public infix void to(int, int that);
+  }
+
+  public final class EglConfigAttributesKt {
+    method public static inline int[] EglConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EglConfigAttributes.Builder,kotlin.Unit> block);
+    method public static int[] getEglConfigAttributes1010102();
+    method public static int[] getEglConfigAttributes8888();
+    method public static int[] getEglConfigAttributesF16();
+    property public static final int[] EglConfigAttributes1010102;
+    property public static final int[] EglConfigAttributes8888;
+    property public static final int[] EglConfigAttributesF16;
+    field public static final int EglColorComponentTypeExt = 13113; // 0x3339
+    field public static final int EglColorComponentTypeFixedExt = 13114; // 0x333a
+    field public static final int EglColorComponentTypeFloatExt = 13115; // 0x333b
+  }
+
+  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(int[] 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, int[]? configAttributes);
+    method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(int type, int[]? attributes);
+    method public android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLConfig config, android.view.Surface surface, int[]? 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.SyncFenceCompat 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(int[] configAttributes);
+    field public static final androidx.graphics.opengl.egl.EglSpec.Companion Companion;
+    field public static final androidx.graphics.opengl.egl.EglSpec Egl14;
+  }
+
+  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 {
+    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 kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
+    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 SyncFenceCompat implements java.lang.AutoCloseable {
+    ctor public SyncFenceCompat(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.SyncFenceCompat.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 SyncFenceCompat.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, int[]? 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.SyncFenceCompat 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, int[]? 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.SyncFenceCompat 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%
rename from core/core-ktx/api/res-1.8.0-beta01.txt
rename 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..73689d7
--- /dev/null
+++ b/graphics/graphics-core/api/restricted_current.txt
@@ -0,0 +1,327 @@
+// Signature format: 4.0
+package androidx.graphics.lowlatency {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class GLWetDryRenderer {
+    ctor public GLWetDryRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLWetDryRenderer.Callback callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+    ctor public GLWetDryRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLWetDryRenderer.Callback callback);
+    method public void clear();
+    method public void dry();
+    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 renderWetLayer(Object? param);
+    field public static final androidx.graphics.lowlatency.GLWetDryRenderer.Companion Companion;
+  }
+
+  public static interface GLWetDryRenderer.Callback {
+    method @WorkerThread public void onDrawDryLayer(androidx.graphics.opengl.egl.EglManager eglManager, java.util.Collection<?> params);
+    method @WorkerThread public void onDrawWetLayer(androidx.graphics.opengl.egl.EglManager eglManager, Object? param);
+    method @WorkerThread public default void onDryLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat wetLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+    method @WorkerThread public default void onWetLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat wetLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+  }
+
+  public static final class GLWetDryRenderer.Companion {
+  }
+
+}
+
+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 inline class EglConfigAttributes {
+    ctor public EglConfigAttributes();
+  }
+
+  public static final class EglConfigAttributes.Builder {
+    ctor @kotlin.PublishedApi internal EglConfigAttributes.Builder();
+    method @kotlin.PublishedApi internal int[] build();
+    method public void include(int[] attributes);
+    method public infix void to(int, int that);
+  }
+
+  public final class EglConfigAttributesKt {
+    method public static inline int[] EglConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EglConfigAttributes.Builder,kotlin.Unit> block);
+    method public static int[] getEglConfigAttributes1010102();
+    method public static int[] getEglConfigAttributes8888();
+    method public static int[] getEglConfigAttributesF16();
+    property public static final int[] EglConfigAttributes1010102;
+    property public static final int[] EglConfigAttributes8888;
+    property public static final int[] EglConfigAttributesF16;
+    field public static final int EglColorComponentTypeExt = 13113; // 0x3339
+    field public static final int EglColorComponentTypeFixedExt = 13114; // 0x333a
+    field public static final int EglColorComponentTypeFloatExt = 13115; // 0x333b
+  }
+
+  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(int[] 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, int[]? configAttributes);
+    method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(int type, int[]? attributes);
+    method public android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLConfig config, android.view.Surface surface, int[]? 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.SyncFenceCompat 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(int[] configAttributes);
+    field public static final androidx.graphics.opengl.egl.EglSpec.Companion Companion;
+    field public static final androidx.graphics.opengl.egl.EglSpec Egl14;
+  }
+
+  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 {
+    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 kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
+    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 SyncFenceCompat implements java.lang.AutoCloseable {
+    ctor public SyncFenceCompat(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.SyncFenceCompat.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 SyncFenceCompat.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, int[]? 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.SyncFenceCompat 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, int[]? 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.SyncFenceCompat 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..e944c2b
--- /dev/null
+++ b/graphics/graphics-core/build.gradle
@@ -0,0 +1,64 @@
+/*
+ * 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'
+    testNamespace 'androidx.graphics.core.test'
+
+    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/lint-baseline.xml b/graphics/graphics-core/lint-baseline.xml
new file mode 100644
index 0000000..47f99e1
--- /dev/null
+++ b/graphics/graphics-core/lint-baseline.xml
@@ -0,0 +1,220 @@
+<?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="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testConfig8888() {"
+        errorLine2="        ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testConfig1010102() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testConfigF16() {"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testInclude() {"
+        errorLine2="        ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testSupportsBufferAge() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testSupportBufferAgeFromPartialUpdate() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testSetDamage() {"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testSwapBuffersWithDamage() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testColorSpace() {"
+        errorLine2="        ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testNoConfigContext() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testPixelFormatFloat() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testScRgb() {"
+        errorLine2="        ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testDisplayP3() {"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testHDR() {"
+        errorLine2="        ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testContextPriority() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testSurfacelessContext() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testFenceSync() {"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testWaitSync() {"
+        errorLine2="        ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testNativeFenceSync() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testExtensionsQueryStringParsing() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testDestructuringComponents() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testEquals() {"
+        errorLine2="        ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testToString() {"
+        errorLine2="        ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt"/>
+    </issue>
+
+    <issue
+        id="MissingTestSizeAnnotation"
+        message="Missing test size annotation"
+        errorLine1="    fun testHashCode() {"
+        errorLine2="        ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt"/>
+    </issue>
+
+</issues>
diff --git a/graphics/graphics-core/src/androidTest/AndroidManifest.xml b/graphics/graphics-core/src/androidTest/AndroidManifest.xml
new file mode 100644
index 0000000..b7256c3
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,48 @@
+<?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"
+    package="androidx.graphics.core.test">
+
+    <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.WetDryRendererTestActivity"
+            android:label="WetDryRendererTest"
+            android:exported="true"/>
+
+    </application>
+</manifest>
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLWetDryRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLWetDryRendererTest.kt
new file mode 100644
index 0000000..f525977
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLWetDryRendererTest.kt
@@ -0,0 +1,215 @@
+/*
+ * 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 androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EglManager
+import androidx.graphics.surface.SurfaceControlCompat
+import androidx.graphics.opengl.egl.deviceSupportsNativeAndroidFence
+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 androidx.test.platform.app.InstrumentationRegistry
+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 GLWetDryRendererTest {
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+    @Test
+    fun testWetLayerRender() {
+        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
+            return
+        }
+        val renderLatch = CountDownLatch(1)
+        val callbacks = object : GLWetDryRenderer.Callback {
+            override fun onDrawWetLayer(eglManager: EglManager, param: Any?) {
+                GLES20.glViewport(
+                    0, 0, WetDryRendererTestActivity.WIDTH, WetDryRendererTestActivity.HEIGHT)
+                GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+
+            override fun onDrawDryLayer(eglManager: EglManager, params: Collection<Any?>) {
+                GLES20.glViewport(
+                    0, 0, WetDryRendererTestActivity.WIDTH, WetDryRendererTestActivity.HEIGHT)
+                GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+
+            override fun onWetLayerRenderComplete(
+                wetLayerSurfaceControl: SurfaceControlCompat,
+                transaction: SurfaceControlCompat.Transaction
+            ) {
+                transaction.addTransactionCommittedListener(
+                    Executors.newSingleThreadExecutor(),
+                    object : SurfaceControlCompat.TransactionCommittedListener {
+                        override fun onTransactionCommitted() {
+                            renderLatch.countDown()
+                        }
+                    }
+                )
+            }
+        }
+        var renderer: GLWetDryRenderer? = null
+        try {
+            val scenario = ActivityScenario.launch(WetDryRendererTestActivity::class.java)
+                .moveToState(Lifecycle.State.CREATED)
+                .onActivity {
+                    val surfaceView = it.getSurfaceView()
+                    renderer = GLWetDryRenderer(surfaceView, callbacks)
+                }
+
+            scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+                renderer?.renderWetLayer(Any())
+                assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+
+                val coords = IntArray(2)
+                val width: Int
+                val height: Int
+                with(it.getSurfaceView()) {
+                    getLocationOnScreen(coords)
+                    width = this.width
+                    height = this.height
+                }
+
+                val automation = InstrumentationRegistry.getInstrumentation().uiAutomation
+                val bitmap = automation.takeScreenshot()
+                assertEquals(
+                    Color.RED,
+                    bitmap.getPixel(coords[0] + width / 2, coords[1] + height / 2)
+                )
+            }
+        } finally {
+            renderer.blockingRelease()
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+    @Test
+    fun testDryLayerRender() {
+        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
+            return
+        }
+
+        val renderLatch = CountDownLatch(1)
+        val callbacks = object : GLWetDryRenderer.Callback {
+            override fun onDrawWetLayer(eglManager: EglManager, param: Any?) {
+                GLES20.glViewport(
+                    0, 0, WetDryRendererTestActivity.WIDTH, WetDryRendererTestActivity.HEIGHT)
+                GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+
+            override fun onDrawDryLayer(eglManager: EglManager, params: Collection<Any?>) {
+                GLES20.glViewport(
+                    0, 0, WetDryRendererTestActivity.WIDTH, WetDryRendererTestActivity.HEIGHT)
+                GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+
+            override fun onDryLayerRenderComplete(
+                wetLayerSurfaceControl: SurfaceControlCompat,
+                transaction: SurfaceControlCompat.Transaction
+            ) {
+                transaction.addTransactionCommittedListener(
+                    Executors.newSingleThreadExecutor(),
+                    object : SurfaceControlCompat.TransactionCommittedListener {
+                        override fun onTransactionCommitted() {
+                            renderLatch.countDown()
+                        }
+                    })
+            }
+        }
+        var renderer: GLWetDryRenderer? = null
+        try {
+            val scenario = ActivityScenario.launch(WetDryRendererTestActivity::class.java)
+                .moveToState(Lifecycle.State.CREATED)
+                .onActivity {
+                    val surfaceView = it.getSurfaceView()
+                    renderer = GLWetDryRenderer(surfaceView, callbacks)
+                }
+
+            scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+                renderer?.renderWetLayer(Any())
+                renderer?.dry()
+                assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+
+                val coords = IntArray(2)
+                val width: Int
+                val height: Int
+                with(it.getSurfaceView()) {
+                    getLocationOnScreen(coords)
+                    width = this.width
+                    height = this.height
+                }
+
+                val automation = InstrumentationRegistry.getInstrumentation().uiAutomation
+                val bitmap = automation.takeScreenshot()
+                assertEquals(
+                    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 = GLWetDryRenderer.obtainHardwareBufferUsageFlags()
+        if (GLWetDryRenderer.supportsFrontBufferUsage()) {
+            assertNotEquals(0, usageFlags and HardwareBuffer.USAGE_FRONT_BUFFER)
+        } else {
+            assertEquals(0, usageFlags and HardwareBuffer.USAGE_FRONT_BUFFER)
+        }
+    }
+
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    private fun GLWetDryRenderer?.blockingRelease() {
+        if (this != null) {
+            val destroyLatch = CountDownLatch(1)
+            release(false) {
+                destroyLatch.countDown()
+            }
+            assertTrue(destroyLatch.await(3000, TimeUnit.MILLISECONDS))
+        } else {
+            fail("GLWetDryRenderer 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..bb5b365
--- /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/lowlatency/WetDryRendererTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/WetDryRendererTestActivity.kt
new file mode 100644
index 0000000..8891408
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/WetDryRendererTestActivity.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 WetDryRendererTestActivity : 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/opengl/GLRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
new file mode 100644
index 0000000..25515bc
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
@@ -0,0 +1,934 @@
+/*
+ * 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.RenderFence
+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 renderFence: RenderFence? = 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()
+                        renderFence = RenderFence(egl)
+                        renderFence.await(TimeUnit.SECONDS.toNanos(3))
+                    } finally {
+                        renderFence?.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/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/EglConfigAttributesTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt
new file mode 100644
index 0000000..5a5ea46
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt
@@ -0,0 +1,109 @@
+/*
+ * 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.test.ext.junit.runners.AndroidJUnit4
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class EglConfigAttributesTest {
+
+    @Test
+    fun testConfig8888() {
+        with(EglConfigAttributes8888.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(EglConfigAttributes1010102.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(EglConfigAttributesF16.attrs) {
+            assertTrue(find(EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT))
+            assertTrue(find(EglColorComponentTypeExt, EglColorComponentTypeFloatExt))
+            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(EglConfigAttributes8888)
+            EGL14.EGL_RED_SIZE to 27
+            EglColorComponentTypeExt to EglColorComponentTypeFloatExt
+            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(EglColorComponentTypeExt, EglColorComponentTypeFloatExt))
+            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/EglManagerTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglManagerTest.kt
new file mode 100644
index 0000000..f64d0bf
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglManagerTest.kt
@@ -0,0 +1,697 @@
+/*
+ * 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
+class EglManagerTest {
+
+    @Test
+    fun testInitializeAndRelease() {
+        testEglManager {
+            initialize()
+            val config = loadConfig(EglConfigAttributes8888)?.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(EglConfigAttributes8888)?.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(EglConfigAttributes8888)?.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(EglConfigAttributes8888)
+
+            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.Egl14 {
+            override fun eglQueryString(nameId: Int): String {
+                val queryString = EglSpec.Egl14.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(EglConfigAttributes8888)
+
+            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(EglConfigAttributes8888)
+
+            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(EglConfigAttributes8888)
+            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(EglConfigAttributes8888)
+            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(EglConfigAttributes8888)
+            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(EglConfigAttributes8888)
+        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.Egl14,
+        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..35c4355
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglTestActivity.kt
@@ -0,0 +1,134 @@
+/*
+ * 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"
+
+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()
+
+        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()
+        }
+
+        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)
+    }
+
+    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..90fd93f
--- /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..87e2208
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.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.graphics.opengl.egl
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@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..254fed8
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
@@ -0,0 +1,999 @@
+/*
+ * 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.os.Build
+import android.os.SystemClock
+import android.view.SurfaceHolder
+import androidx.hardware.SyncFenceCompat
+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 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()
+        }
+    }
+
+    @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 testTransactionIsValid_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 testTransactionIsValid_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 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 = SyncFenceCompat(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 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
+}
\ 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..2f62bf7
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt
@@ -0,0 +1,1019 @@
+/*
+ * 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.SyncFenceCompat
+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(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() {
+        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(executor!!, 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 testTransactionIsValid_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 testTransactionIsValid_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 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(executor!!, 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(executor!!, 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 = SyncFenceCompat(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(executor!!, 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(executor!!, 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(executor!!, 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(executor!!, 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(executor!!, 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(executor!!, 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(executor!!, 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(executor!!, 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(executor!!, 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(executor!!, 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(executor!!, 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(executor!!, 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/AndroidManifest.xml b/graphics/graphics-core/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..0082b69
--- /dev/null
+++ b/graphics/graphics-core/src/main/AndroidManifest.xml
@@ -0,0 +1,20 @@
+<?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"
+    package="androidx.graphics.core">
+
+</manifest>
\ No newline at end of file
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..7b71cb6
--- /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 SyncFenceCompat 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..af0c44d
--- /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_SyncFenceCompat_nClose(JNIEnv *env, jobject thiz, jint fd) {
+    close(fd);
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_hardware_SyncFenceCompat_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_SyncFenceCompat_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/GLWetDryRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLWetDryRenderer.kt
new file mode 100644
index 0000000..7e8b589
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLWetDryRenderer.kt
@@ -0,0 +1,560 @@
+/*
+ * 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 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 "wet"/"dry" 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 wet layer which is simultaneously being presented
+ * to the display. Periodically content is rendered into the "dry" or 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 dry
+ *  content
+ * @param callback Callbacks used to render into wet and dry 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 [GLWetDryRenderer] 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 [GLWetDryRenderer] will create and manage its own
+ *  [GLRenderer] internally and will automatically release its resources within
+ *  [GLWetDryRenderer.release]
+ */
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+@Suppress("AcronymName")
+class GLWetDryRenderer @JvmOverloads constructor(
+    surfaceView: SurfaceView,
+    callback: Callback,
+    @Suppress("ListenerLast")
+    glRenderer: GLRenderer? = null,
+) {
+    /**
+     * [ParentRenderLayer] used to contain both the dry and wet layers
+     */
+    private val mParentRenderLayer: ParentRenderLayer = SurfaceViewRenderLayer(surfaceView)
+
+    /**
+     * Callbacks invoked to render into the wet and dry 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 wet layer as well
+     * as updating dry 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
+     * [GLWetDryRenderer]
+     */
+    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 {
+        override fun onSizeChanged(width: Int, height: Int) {
+            update(width, height)
+        }
+
+        override fun onLayerDestroyed() {
+            release(true)
+        }
+
+        override fun pollWetLayerParams(): Any? =
+            mWetBufferParamQueue.poll()
+
+        override fun obtainDryLayerParams(): MutableCollection<Any?> =
+            mParentBufferParamQueue
+
+        override fun getWetLayerSurfaceControl(): SurfaceControlCompat? =
+            mWetLayerSurfaceControl
+
+        override fun getRenderBufferPool(): RenderBufferPool? =
+            mBufferPool
+    }
+
+    /**
+     * Queue of parameters to be consumed in [Callback.onDrawWetLayer] with the parameter
+     * provided in [renderWetLayer]
+     */
+    private val mWetBufferParamQueue = ConcurrentLinkedQueue<Any?>()
+
+    /**
+     * Collection of parameters to be consumed in [Callback.onDrawDryLayer] with the parameters
+     * defined in consecutive calls to [renderWetLayer]. Once the corresponding
+     * [Callback.onDrawDryLayer] callback is invoked, this collection is cleared and new parameters
+     * are added to it with consecutive calls to [renderWetLayer]
+     */
+    private val mParentBufferParamQueue = Collections.synchronizedList(ArrayList<Any?>())
+
+    /**
+     * [RenderBuffer] used for rendering into the wet 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 mWetLayerBuffer: 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 wet layer
+     */
+    private var mWetLayerRenderer: HardwareBufferRenderer? = null
+
+    /**
+     * [SurfaceControlCompat] used to configure buffers and visibility of the wet layer
+     */
+    private var mWetLayerSurfaceControl: SurfaceControlCompat? = null
+
+    /**
+     * Width of the layers to render. Only if the size changes to we re-initialize the internal
+     * state of the [GLWetDryRenderer]
+     */
+    private var mWidth = -1
+
+    /**
+     * Height of the layers to render. Only if the size changes do we re-initialize the internal
+     * state of the [GLWetDryRenderer]
+     */
+    private var mHeight = -1
+
+    /**
+     * [GLRenderer] used to issue requests to render into wet/dry layers
+     */
+    private val mGLRenderer: GLRenderer
+
+    /**
+     * Flag indicating if the [GLRenderer] being used was created internally within
+     * [GLWetDryRenderer] as opposed to being provided by the consumer. If the former, then the
+     * [GLWetDryRenderer] 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 wet/dry [GLRenderer.RenderTarget]s
+     * are detached.
+     */
+    private val mIsManagingGLRenderer: Boolean
+
+    /**
+     * [GLRenderer.RenderTarget] used to issue requests to render into the wet layer
+     */
+    private var mWetLayerRenderTarget: GLRenderer.RenderTarget? = null
+
+    /**
+     * [GLRenderer.RenderTarget] used to issue requests to render into the dry layer
+     */
+    private var mDryLayerRenderTarget: GLRenderer.RenderTarget? = null
+
+    /**
+     * Flag to determine if the [GLWetDryRenderer] has previously been released. If this flag is
+     * true, then subsequent requests to [renderWetLayer], [dry], 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)
+
+        mDryLayerRenderTarget = mParentRenderLayer.createRenderTarget(renderer, mCallback)
+        mGLRenderer = renderer
+    }
+
+    internal fun update(width: Int, height: Int) {
+        if (mWidth != width || mHeight != height) {
+            mWetLayerSurfaceControl?.release()
+
+            val wetLayerSurfaceControl = SurfaceControlCompat.Builder()
+                .setName("WetLayerSurfaceControl")
+                .build()
+
+            val bufferPool = RenderBufferPool(
+                width,
+                height,
+                format = HardwareBuffer.RGBA_8888,
+                usage = obtainHardwareBufferUsageFlags(),
+                maxPoolSize = 5
+            )
+
+            val previousBufferPool = mBufferPool
+            mWetLayerRenderTarget?.detach(true) {
+                if (previousBufferPool != null) {
+                    releaseBuffers(previousBufferPool)
+                }
+            }
+
+            val wetLayerRenderer = createWetLayerRenderer(wetLayerSurfaceControl)
+            mWetLayerRenderTarget = mGLRenderer.createRenderTarget(
+                width,
+                height,
+                wetLayerRenderer
+            )
+
+            mWetLayerRenderer = wetLayerRenderer
+            mWetLayerSurfaceControl = wetLayerSurfaceControl
+            mBufferPool = bufferPool
+            mWidth = width
+            mHeight = height
+        }
+    }
+
+    /**
+     * Determines whether or not the [GLWetDryRenderer] is in a valid state. That is the [release]
+     * method has not been called.
+     * If this returns false, then subsequent calls to [renderWetLayer], [dry], and [release]
+     * are ignored
+     *
+     * @return `true` if this [GLWetDryRenderer] has been released, `false` otherwise
+     */
+    fun isValid(): Boolean = !mIsReleased
+
+    /**
+     * Render content to the wet layer providing optional parameters to be consumed in
+     * [Callback.onDrawWetLayer].
+     * Additionally the parameter provided here will also be consumed in [Callback.onDrawDryLayer]
+     * when the corresponding [dry] method is invoked, which will include all [param]s in each call
+     * made to this method up to the corresponding [dry] call.
+     *
+     * If this [GLWetDryRenderer] has been released, that is [isValid] returns `false`, this call
+     * is ignored.
+     *
+     * @param param Optional parameter to be consumed when rendering content into the dry layer
+     */
+    fun renderWetLayer(param: Any?) {
+        if (isValid()) {
+            mWetBufferParamQueue.add(param)
+            mParentBufferParamQueue.add(param)
+            mWetLayerRenderTarget?.requestRender()
+        } else {
+            Log.w(TAG, "Attempt to render to wet layer when GLWetDryRenderer has " +
+                "been released")
+        }
+    }
+
+    /**
+     * Clears the contents of both the wet and dry layers. This triggers a call to
+     * [Callback.onDryLayerRenderComplete] and hides the wet layer.
+     */
+    fun clear() {
+        clearParamQueues()
+        mWetLayerRenderer?.clear()
+        mParentRenderLayer.clear()
+    }
+
+    /**
+     * Requests to render the entire scene to the dry layer and schedules a call to
+     * [Callback.onDrawDryLayer]. The parameters provided to [Callback.onDrawDryLayer] will
+     * include each argument provided to every [renderWetLayer] call since the last call to [dry]
+     * has been made.
+     *
+     * If this [GLWetDryRenderer] has been released, that is [isValid] returns `false`, this call
+     * is ignored.
+     */
+    fun dry() {
+        if (isValid()) {
+            mDryLayerRenderTarget?.requestRender()
+            mWetLayerRenderer?.clear()
+        } else {
+            Log.w(TAG, "Attempt to render to dry layer when GLWetDryRenderer has " +
+                "been released")
+        }
+    }
+
+    /**
+     * Releases the [GLWetDryRenderer] and provides an optional callback that is invoked when
+     * the [GLWetDryRenderer] is fully torn down. If the [cancelPending] flag is true, all
+     * pending requests to render into the wet or dry layers will be processed before the
+     * [GLWetDryRenderer] is torn down. Otherwise all in process requests are ignored.
+     * If the [GLWetDryRenderer] 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 [GLWetDryRenderer] is released
+     * @param onReleaseComplete Optional callback invoked when the [GLWetDryRenderer] 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 GLWetDryRenderer that is already released")
+            return
+        }
+        // Wrap the callback into a separate lambda to ensure it is invoked only after
+        // both the wet layer target and dry layer target renderers are detached
+        var callbackCount = 0
+        var expectedCount = 0
+        if (mWetLayerRenderTarget?.isAttached() == true) {
+            expectedCount++
+        }
+
+        if (mDryLayerRenderTarget?.isAttached() == true) {
+            expectedCount++
+        }
+        val wetLayerSurfaceControl = mWetLayerSurfaceControl
+        val wrappedCallback: (GLRenderer.RenderTarget) -> Unit = {
+            callbackCount++
+            if (callbackCount >= expectedCount) {
+                mBufferPool?.let { releaseBuffers(it) }
+                clearParamQueues()
+
+                wetLayerSurfaceControl?.let {
+                    val transaction = SurfaceControlCompat.Transaction().reparent(it, null)
+                    mParentRenderLayer.release(transaction)
+                    transaction.commit()
+                    it.release()
+                }
+
+                onReleaseComplete?.invoke()
+            }
+        }
+        mWetLayerRenderTarget?.detach(cancelPending, wrappedCallback)
+        mDryLayerRenderTarget?.detach(cancelPending, wrappedCallback)
+        mWetLayerRenderTarget = null
+        mDryLayerRenderTarget = 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 wet and dry
+            // render targets instead
+            mGLRenderer.stop(false)
+        }
+
+        mWetLayerSurfaceControl = null
+        mParentRenderLayer.setParentLayerCallbacks(null)
+        mIsReleased = true
+    }
+
+    private fun createWetLayerRenderer(
+        wetLayerSurfaceControl: SurfaceControlCompat
+    ) = HardwareBufferRenderer(
+        object : HardwareBufferRenderer.RenderCallbacks {
+
+            @WorkerThread
+            override fun obtainRenderBuffer(egl: EglSpec): RenderBuffer {
+                var buffer = mWetLayerBuffer
+                if (buffer == null) {
+                    // Allocate and persist a RenderBuffer instance across frames
+                    buffer = mBufferPool?.obtain(egl).also { mWetLayerBuffer = it }
+                       ?: throw IllegalArgumentException("Unable to obtain RenderBuffer")
+                }
+                return buffer
+            }
+
+            @WorkerThread
+            override fun onDraw(eglManager: EglManager) {
+                val params = mParentLayerCallback.pollWetLayerParams()
+                mCallback.onDrawWetLayer(eglManager, params)
+            }
+
+            @WorkerThread
+            override fun onDrawComplete(renderBuffer: RenderBuffer) {
+                val transaction = SurfaceControlCompat.Transaction()
+                    // Make this layer the top most layer
+                    .setLayer(wetLayerSurfaceControl, Integer.MAX_VALUE)
+                    .setBuffer(wetLayerSurfaceControl, renderBuffer.hardwareBuffer, null)
+                    .setVisibility(wetLayerSurfaceControl, true)
+                mParentRenderLayer.buildReparentTransaction(wetLayerSurfaceControl, transaction)
+                mCallback.onWetLayerRenderComplete(wetLayerSurfaceControl, transaction)
+                transaction.commit()
+            }
+        }
+    )
+
+    private fun clearParamQueues() {
+        mWetBufferParamQueue.clear()
+        mParentBufferParamQueue.clear()
+    }
+
+    /**
+     * Release the buffers associated with the wet layer as well as the [RenderBufferPool]
+     */
+    internal fun releaseBuffers(pool: RenderBufferPool) {
+        mWetLayerBuffer?.let {
+            pool.release(it)
+            mWetLayerBuffer = null
+        }
+        pool.close()
+    }
+
+    companion object {
+
+        internal const val TAG = "GLWetDryRenderer"
+
+        /**
+         * Flags that are expected to be supported on all [HardwareBuffer] instances
+         */
+        private const val BaseFlags = HardwareBuffer.USAGE_COMPOSER_OVERLAY or
+            HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE or
+            HardwareBuffer.USAGE_GPU_COLOR_OUTPUT
+
+        internal fun supportsFrontBufferUsage(): Boolean =
+        // Query to determine if the USAGE_FRONT_BUFFER flag is supported
+        // Even though it is introduced in Android T, not all devices may support
+        // this flag so we query a sample HardwareBuffer of 1 x 1 pixels with
+        // the RGBA_8888 format along with the USAGE_FRONT_BUFFER flag to see if it is
+        // compatible
+            HardwareBuffer.isSupported(
+                1, // width
+                1, // height
+                HardwareBuffer.RGBA_8888, // format
+                1, // layers,
+                BaseFlags or
+                    HardwareBuffer.USAGE_FRONT_BUFFER
+            )
+
+        internal fun obtainHardwareBufferUsageFlags(): Long =
+            BaseFlags or
+                // Conditionally introduce the front buffer usage flag if it is supported
+                if (supportsFrontBufferUsage()) HardwareBuffer.USAGE_FRONT_BUFFER else 0
+    }
+
+    /**
+     * Provides callbacks for consumers to draw into the wet and dry layers as well as provide
+     * opportunities to synchronize [SurfaceControlCompat.Transaction]s to submit the layers to the
+     * hardware compositor
+     */
+    interface Callback {
+
+        /**
+         * Callback invoked to render content into the wet layer with the specified parameters.
+         * @param eglManager [EglManager] useful in configuring EGL objects to be used when issuing
+         * OpenGL commands to render into the wet layer
+         * @param param optional parameter provided the corresponding
+         * [GLWetDryRenderer.renderWetLayer] method that triggered this request to render into the
+         * wet layer
+         */
+        @WorkerThread
+        fun onDrawWetLayer(eglManager: EglManager, param: Any?)
+
+        /**
+         * Callback invoked to render content into the dry layer with the specified parameters.
+         * @param eglManager [EglManager] useful in configuring EGL objects to be used when issuing
+         * OpenGL commands to render into the dry layer
+         * @param params optional parameter provided to render the entire scene into the dry layer.
+         * This is a collection of all parameters provided in consecutive invocations to
+         * [GLWetDryRenderer.renderWetLayer] since the last call to [GLWetDryRenderer.dry] has
+         * been made. After [GLWetDryRenderer.dry] is invoked, this collection is cleared and new
+         * parameters are added on each subsequent call to [GLWetDryRenderer.renderWetLayer].
+         *
+         * Consider the following example:
+         *
+         * myWetDryRenderer.renderWetLayer(1)
+         * myWetDryRenderer.renderWetLayer(2)
+         * myWetDryRenderer.renderWetLayer(3)
+         * myWetDryRenderer.dry()
+         *
+         * This will generate a callback to this method with the params collection containing values
+         * [1, 2, 3]
+         *
+         * myWetDryRenderer.renderWetLayer(4)
+         * myWetDryRenderer.renderWetLayer(5)
+         * myWetDryRenderer.dry()
+         *
+         * This will generate a callback to this method with the params collection containing values
+         * [4, 5]
+         */
+        @WorkerThread
+        fun onDrawDryLayer(eglManager: EglManager, params: Collection<Any?>)
+
+        /**
+         * Optional callback invoked when rendering to the wet layer is complete but before
+         * the wet layer 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 wetLayerSurfaceControl Handle to the [SurfaceControlCompat] where the wet 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 wet layer.
+         */
+        @WorkerThread
+        fun onWetLayerRenderComplete(
+            wetLayerSurfaceControl: SurfaceControlCompat,
+            transaction: SurfaceControlCompat.Transaction
+        ) {
+            // Default implementation is a no-op
+        }
+
+        /**
+         * Optional callback invoked when rendering to the dry layer is complete but before
+         * the dry layer 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 wetLayerSurfaceControl Handle to the [SurfaceControl] where the wet 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 dry or double buffered layer.
+         */
+        @WorkerThread
+        fun onDryLayerRenderComplete(
+            wetLayerSurfaceControl: SurfaceControlCompat,
+            transaction: SurfaceControlCompat.Transaction
+        ) {
+            // Default implementation is a no-op
+        }
+    }
+}
\ 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..7b0b078
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/HardwareBufferRenderer.kt
@@ -0,0 +1,102 @@
+/*
+ * 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 renderFence: RenderFence? = 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()
+            renderFence = RenderFence(egl)
+            renderFence.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 {
+            renderFence?.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..65d4ef1
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt
@@ -0,0 +1,117 @@
+/*
+ * 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 dry and wet layers.
+ * This provides the following facilities:
+ *
+ * 1) Specifying a parent [SurfaceControlCompat] for a front buffered wet layer
+ * 2) Creating a [GLRenderer.RenderTarget] for rendering double buffered dry 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 dry/double buffered layers
+ */
+internal interface ParentRenderLayer {
+    /**
+     * 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,
+    )
+
+    /**
+     * Create a [GLRenderer.RenderTarget] instance for the parent rendering layer given
+     * a [GLRenderer] and corresponding [GLRenderer.RenderCallback]
+     */
+    fun createRenderTarget(
+        renderer: GLRenderer,
+        renderLayerCallback: GLWetDryRenderer.Callback
+    ): 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?)
+
+    /**
+     * Clear the contents of the parent buffer.
+     * This triggers a call to [GLWetDryRenderer.Callback.onDryLayerRenderComplete] to update the
+     * buffer shown for the dry layer as well as hides the wet 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 wet/dry layers
+     */
+    interface Callback {
+        /**
+         * Callback invoked whenever the size of the [ParentRenderLayer] changes.
+         * Consumers can leverage this to initialize appropriate buffer sizes and [SurfaceControl]
+         * 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 next parameters to be used
+         * for rendering wet buffer content
+         */
+        fun pollWetLayerParams(): Any?
+
+        /**
+         * 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 wet layer since the last time the dry layer was re-rendered.
+         * This is useful for recreating the entire scene when wet layer contents are to be "dried"
+         */
+        fun obtainDryLayerParams(): MutableCollection<Any?>
+
+        /**
+         * Obtain a handle to the wet layer [SurfaceControlCompat] to be used in transactions to
+         * atomically update dry layer content as well as hiding the visibility of the wet layer
+         */
+        fun getWetLayerSurfaceControl(): SurfaceControlCompat?
+
+        /**
+         * Obtain a handle to the [RenderBufferPool] to get [RenderBuffer] instances for
+         * rendering to wet and dry 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..0f0b589
--- /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..f8f08ce
--- /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.Q)
+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/RenderFence.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderFence.kt
new file mode 100644
index 0000000..c111ddd8
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderFence.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.lowlatency
+
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EglSpec
+import androidx.hardware.SyncFenceCompat
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLSyncKHR
+
+/**
+ * Synchronization mechanism for inserting an [EGLSyncKHR] sync object
+ * within the list of GL Commands and associating it with a native
+ * Android fence represented by [SyncFenceCompat]
+ */
+@RequiresApi(Build.VERSION_CODES.KITKAT)
+internal class RenderFence(private val egl: EglSpec) : AutoCloseable {
+
+    private val eglSync: EGLSyncKHR =
+        egl.eglCreateSyncKHR(EGLExt.EGL_SYNC_NATIVE_FENCE_ANDROID, null)
+            ?: throw IllegalArgumentException("Unable to create sync object")
+
+    private val syncFence: SyncFenceCompat = egl.eglDupNativeFenceFDANDROID(eglSync)
+
+    fun await(timeoutNanos: Long): Boolean =
+        syncFence.await(timeoutNanos)
+
+    fun awaitForever(): Boolean =
+        syncFence.awaitForever()
+
+    override fun close() {
+        egl.eglDestroySyncKHR(eglSync)
+        syncFence.close()
+    }
+}
\ 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..ceea3c7
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt
@@ -0,0 +1,158 @@
+/*
+ * 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 wet and dry layers
+ */
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+internal class SurfaceViewRenderLayer(private val surfaceView: SurfaceView) : ParentRenderLayer {
+
+    private var mLayerCallback: ParentRenderLayer.Callback? = null
+    private var mHardwareBufferRenderer: HardwareBufferRenderer? = null
+    private var mRenderTarget: GLRenderer.RenderTarget? = null
+    private var mParentSurfaceControl: SurfaceControlCompat? = null
+
+    init {
+        surfaceView.hostToken
+    }
+
+    override fun buildReparentTransaction(
+        child: SurfaceControlCompat,
+        transaction: SurfaceControlCompat.Transaction
+    ) {
+        transaction.reparent(child, surfaceView)
+    }
+
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    override fun createRenderTarget(
+        renderer: GLRenderer,
+        renderLayerCallback: GLWetDryRenderer.Callback
+    ): 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?.obtainDryLayerParams() ?: Collections.EMPTY_LIST
+                    renderLayerCallback.onDrawDryLayer(eglManager, params)
+                    params?.clear()
+                }
+
+                @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+                override fun onDrawComplete(renderBuffer: RenderBuffer) {
+                    val wetLayerSurfaceControl = mLayerCallback
+                            ?.getWetLayerSurfaceControl()
+                    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 dry SurfaceControl now and cache it
+                        ?: createDrySurfaceControl().also {
+                            mParentSurfaceControl = it
+                        }
+                    if (wetLayerSurfaceControl != null) {
+                        val transaction = SurfaceControlCompat.Transaction()
+                            .setVisibility(wetLayerSurfaceControl, false)
+                            .setVisibility(sc, true)
+                            .setBuffer(sc, renderBuffer.hardwareBuffer) {
+                                mLayerCallback?.getRenderBufferPool()?.release(renderBuffer)
+                            }
+
+                        renderLayerCallback.onDryLayerRenderComplete(
+                            wetLayerSurfaceControl,
+                            transaction
+                        )
+                        transaction.commit()
+                    } else {
+                        Log.e(TAG, "Error, no wet 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 = createDrySurfaceControl()
+            }
+
+            override fun surfaceDestroyed(p0: SurfaceHolder) {
+                mLayerCallback?.onLayerDestroyed()
+            }
+        })
+        val renderTarget = renderer.attach(surfaceView, hardwareBufferRenderer)
+        mRenderTarget = renderTarget
+        mHardwareBufferRenderer = hardwareBufferRenderer
+        return renderTarget
+    }
+
+    internal fun createDrySurfaceControl(): SurfaceControlCompat =
+        SurfaceControlCompat.Builder()
+            .setParent(surfaceView)
+            .setName("DryLayer")
+            .build()
+
+    override fun setParentLayerCallbacks(callback: ParentRenderLayer.Callback?) {
+        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/opengl/GLRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLRenderer.kt
new file mode 100644
index 0000000..2154a0b
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLRenderer.kt
@@ -0,0 +1,734 @@
+/*
+ * 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.EglConfigAttributes8888
+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.Egl14 },
+    eglConfigFactory: EglManager.() -> EGLConfig = {
+        // 8 bit channels should always be supported
+        loadConfig(EglConfigAttributes8888)
+            ?: 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.
+     */
+    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
+     */
+    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)
+     */
+    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]
+         */
+        @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.
+         */
+        @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..738312b
--- /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..883b2e8
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglConfigAttributes.kt
@@ -0,0 +1,176 @@
+/*
+ * 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
+
+/**
+ * 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 EglColorComponentTypeExt = 0x3339
+
+/**
+ * EGL configuration attribute value that represents fixed point RGBA components
+ */
+const val EglColorComponentTypeFixedExt = 0x333A
+
+/**
+ * EGL configuration attribute value that represents floating point RGBA components
+ */
+const val EglColorComponentTypeFloatExt = 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
+ */
+val EglConfigAttributes8888 = 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 as well as an 8 bit stencil size
+ */
+val EglConfigAttributes1010102 = 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 and blue channels
+ * along with a
+ */
+val EglConfigAttributesF16 = EglConfigAttributes {
+    EGL14.EGL_RENDERABLE_TYPE to EGL14.EGL_OPENGL_ES2_BIT
+    EglColorComponentTypeExt to EglColorComponentTypeFloatExt
+    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
+}
+
+/**
+ * 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 EglConfigAttributes8888
+ */
+inline fun EglConfigAttributes(block: EglConfigAttributes.Builder.() -> Unit): EglConfigAttributes =
+    EglConfigAttributes.Builder().apply { block() }.build()
+
+// klint does not support value classes yet, see b/197692691
+@Suppress("INLINE_CLASS_DEPRECATED")
+inline class EglConfigAttributes internal constructor(
+    @PublishedApi internal val attrs: IntArray
+) {
+
+    /**
+     * 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
+     */
+    // Suppressing build method as EglConfigAttributes is created using Kotlin DSL syntax
+    // via the function constructor defined above
+    @SuppressWarnings("MissingBuildMethod")
+    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")
+        infix fun Int.to(that: Int) {
+            attrs[this] = that
+        }
+
+        /**
+         * 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 [EglConfigAttributes8888] but with a
+         * 16 bit stencil buffer size:
+         *
+         * EglConfigAttributes {
+         *      include(EglConfigAttributes8888)
+         *      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]
+            }
+        }
+
+        @PublishedApi internal 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)
+        }
+    }
+}
\ 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..9b8b0c9
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglManager.kt
@@ -0,0 +1,233 @@
+/*
+ * 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.
+ */
+class EglManager(val eglSpec: EglSpec = EglSpec.Egl14) {
+
+    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 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
+            }
+        }
+    }
+
+    /**
+     * Returns the EGL version that is supported. This parameter is configured
+     * after [initialize] is invoked.
+     */
+    val eglVersion: EglVersion
+        get() = mEglVersion
+
+    /**
+     * Returns the current EGLContext. This parameter is configured after [initialize] is invoked
+     */
+    val eglContext: EGLContext?
+        get() = mEglContext
+
+    /**
+     * Returns the [EGLConfig] used to load the current [EGLContext].
+     * This is configured after [createContext] is invoked.
+     */
+    val eglConfig: EGLConfig?
+        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..459bc76
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglSpec.kt
@@ -0,0 +1,627 @@
+/*
+ * 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.SyncFenceCompat
+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.
+ */
+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 [SyncFenceCompat] from
+     * @return A [SyncFenceCompat] representing the native fence.
+     *  If [sync] is not a valid sync object for display, an invalid [SyncFenceCompat]
+     *  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 [SyncFenceCompat] 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): SyncFenceCompat
+
+    /**
+     * 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 Egl14 = 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): SyncFenceCompat =
+                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
+ */
+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
+ */
+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..abceec7
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt
@@ -0,0 +1,393 @@
+/*
+ * 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 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 construction failed, or 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 {
+
+        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 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,
+            releaseCallback: (() -> Unit)? = null
+        ): Transaction {
+            mImpl.setBuffer(surfaceControl.scImpl, buffer, 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.
+         */
+        fun commit() {
+            mImpl.commit()
+        }
+
+        /**
+         * Release the native transaction object, without applying it.
+         */
+        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..82ac890
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.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.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.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 construction failed, or 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
+    }
+
+    interface Transaction {
+
+        /**
+         * 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 releaseCallback Optional callback invoked when the buffer is ready for re-use
+         * after being presented to the display.
+         */
+        fun setBuffer(
+            surfaceControl: SurfaceControlImpl,
+            buffer: HardwareBuffer,
+            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.
+         */
+        fun commit()
+
+        /**
+         * Release the native transaction object, without applying it.
+         */
+        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..8972f94
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
@@ -0,0 +1,254 @@
+/*
+ * 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 java.util.concurrent.Executor
+import java.util.concurrent.Executors
+
+/**
+ * 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()
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.commit]
+         */
+        override fun commit() {
+            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,
+            releaseCallback: (() -> Unit)?
+        ): SurfaceControlImpl.Transaction {
+            if (releaseCallback != null) {
+                val listener = object : SurfaceControlCompat.TransactionCompletedListener {
+                    override fun onTransactionCompleted() {
+                        releaseCallback()
+                    }
+                }
+
+                transaction.addTransactionCompletedListener(
+                    Executors.newSingleThreadExecutor(
+                        Executors.defaultThreadFactory()
+                    ),
+                    listener
+                )
+            }
+            transaction.setBuffer(surfaceControl.asWrapperSurfaceControl(), buffer)
+            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(
+            executor: Executor,
+            listener: SurfaceControlCompat.TransactionCompletedListener
+        ): SurfaceControlImpl.Transaction {
+            transaction.addTransactionCompletedListener(executor, 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+.")
+            }
+    }
+}
\ 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..fedbe9e
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV33.kt
@@ -0,0 +1,237 @@
+/*
+ * 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.SurfaceControl
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+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,
+            releaseCallback: (() -> Unit)?
+        ): Transaction {
+            mTransaction.setBuffer(surfaceControl.asFrameworkSurfaceControl(), buffer, null) {
+                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")
+            }
+    }
+}
\ 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..de074a4
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt
@@ -0,0 +1,499 @@
+/*
+ * 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.SyncFenceCompat
+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: SyncFenceCompat
+        ): Int
+
+        external fun nSetBuffer(
+            surfaceTransaction: Long,
+            surfaceControl: Long,
+            hardwareBuffer: HardwareBuffer,
+            acquireFieldFd: SyncFenceCompat
+        )
+
+        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 executor The executor that the callback should be invoked on.
+         * This value cannot be null. 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.
+         */
+        @Suppress("PairedRegistration")
+        internal fun addTransactionCompletedListener(
+            executor: Executor,
+            listener: SurfaceControlCompat.TransactionCompletedListener
+        ): Transaction {
+            val listenerWrapper = object : SurfaceControlCompat.TransactionCompletedListener {
+                override fun onTransactionCompleted() {
+                    executor.execute { (listener::onTransactionCompleted)() }
+                }
+            }
+
+            JniBindings.nTransactionSetOnComplete(mNativeSurfaceTransaction, listenerWrapper)
+            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 [SyncFenceCompat] 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: SyncFenceCompat = SyncFenceCompat(-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() {
+        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/SyncFenceCompat.kt b/graphics/graphics-core/src/main/java/androidx/hardware/SyncFenceCompat.kt
new file mode 100644
index 0000000..a9f5a89
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/hardware/SyncFenceCompat.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 SyncFenceCompat(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 [SyncFenceCompat.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 SyncFenceCompat 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..8e5d7e0
--- /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.SyncFenceCompat
+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 [SyncFenceCompat] from
+         * @return A [SyncFenceCompat] representing the native fence.
+         *  If [sync] is not a valid sync object for [display], an invalid [SyncFenceCompat]
+         *  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 [SyncFenceCompat] 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): SyncFenceCompat {
+            val fd = EGLBindings.nDupNativeFenceFDANDROID(
+                display.obtainNativeHandle(),
+                sync.nativeHandle
+            )
+            return if (fd >= 0) {
+                SyncFenceCompat(fd)
+            } else {
+                SyncFenceCompat(-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..6930c1c5 100644
--- a/gridlayout/gridlayout/lint-baseline.xml
+++ b/gridlayout/gridlayout/lint-baseline.xml
@@ -232,7 +232,9 @@
         errorLine1="    public static Spec spec(int start, Alignment alignment) {"
         errorLine2="                  ~~~~">
         <location
-            file="src/main/java/androidx/gridlayout/widget/GridLayout.java"/>
+            file="src/main/java/androidx/gridlayout/widget/GridLayout.java"
+            line="2557"
+            column="19"/>
     </issue>
 
     <issue
@@ -241,7 +243,9 @@
         errorLine1="    public static Spec spec(int start, Alignment alignment) {"
         errorLine2="                                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/gridlayout/widget/GridLayout.java"/>
+            file="src/main/java/androidx/gridlayout/widget/GridLayout.java"
+            line="2557"
+            column="40"/>
     </issue>
 
     <issue
@@ -250,7 +254,9 @@
         errorLine1="    public static Spec spec(int start, int size) {"
         errorLine2="                  ~~~~">
         <location
-            file="src/main/java/androidx/gridlayout/widget/GridLayout.java"/>
+            file="src/main/java/androidx/gridlayout/widget/GridLayout.java"
+            line="2574"
+            column="19"/>
     </issue>
 
     <issue
@@ -259,7 +265,9 @@
         errorLine1="    public static Spec spec(int start) {"
         errorLine2="                  ~~~~">
         <location
-            file="src/main/java/androidx/gridlayout/widget/GridLayout.java"/>
+            file="src/main/java/androidx/gridlayout/widget/GridLayout.java"
+            line="2590"
+            column="19"/>
     </issue>
 
 </issues>
diff --git a/health/health-connect-client/src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissions.kt b/health/health-connect-client/src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissions.kt
index a1e1d2f..6746251 100644
--- a/health/health-connect-client/src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissions.kt
+++ b/health/health-connect-client/src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissions.kt
@@ -54,6 +54,7 @@
         }
     }
 
+    @Suppress("DEPRECATION")
     override fun parseResult(resultCode: Int, intent: Intent?): Set<Permission> {
         return intent
             ?.getParcelableArrayListExtra<ProtoPermission>(KEY_GRANTED_PERMISSIONS_JETPACK)
diff --git a/heifwriter/heifwriter/lint-baseline.xml b/heifwriter/heifwriter/lint-baseline.xml
index 90fe3a3..41978fe 100644
--- a/heifwriter/heifwriter/lint-baseline.xml
+++ b/heifwriter/heifwriter/lint-baseline.xml
@@ -250,7 +250,9 @@
         errorLine1="    public static int loadShader(int shaderType, String source) {"
         errorLine2="                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/heifwriter/Texture2dProgram.java"/>
+            file="src/main/java/androidx/heifwriter/Texture2dProgram.java"
+            line="316"
+            column="50"/>
     </issue>
 
     <issue
@@ -259,7 +261,9 @@
         errorLine1="    public static void checkLocation(int location, String label) {"
         errorLine2="                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/heifwriter/Texture2dProgram.java"/>
+            file="src/main/java/androidx/heifwriter/Texture2dProgram.java"
+            line="338"
+            column="52"/>
     </issue>
 
     <issue
@@ -268,7 +272,9 @@
         errorLine1="    public static void checkGlError(String op) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/heifwriter/Texture2dProgram.java"/>
+            file="src/main/java/androidx/heifwriter/Texture2dProgram.java"
+            line="347"
+            column="37"/>
     </issue>
 
 </issues>
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..7ce750e2 100644
--- a/leanback/leanback-preference/lint-baseline.xml
+++ b/leanback/leanback-preference/lint-baseline.xml
@@ -250,7 +250,9 @@
         errorLine1="    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+            line="49"
+            column="12"/>
     </issue>
 
     <issue
@@ -259,7 +261,9 @@
         errorLine1="    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+            line="49"
+            column="64"/>
     </issue>
 
     <issue
@@ -268,7 +272,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+            line="50"
+            column="13"/>
     </issue>
 
     <issue
@@ -277,7 +283,9 @@
         errorLine1="    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {"
         errorLine2="                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+            line="64"
+            column="51"/>
     </issue>
 
     <issue
@@ -286,7 +294,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+            line="74"
+            column="26"/>
     </issue>
 
     <issue
@@ -295,7 +305,9 @@
         errorLine1="    public static void addTransitions(Fragment f) {"
         errorLine2="                                      ~~~~~~~~">
         <location
-            file="api21/androidx/leanback/preference/LeanbackPreferenceFragmentTransitionHelperApi21.java"/>
+            file="api21/androidx/leanback/preference/LeanbackPreferenceFragmentTransitionHelperApi21.java"
+            line="36"
+            column="39"/>
     </issue>
 
     <issue
@@ -304,7 +316,9 @@
         errorLine1="    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+            line="64"
+            column="12"/>
     </issue>
 
     <issue
@@ -313,7 +327,9 @@
         errorLine1="    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+            line="64"
+            column="64"/>
     </issue>
 
     <issue
@@ -322,7 +338,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+            line="65"
+            column="13"/>
     </issue>
 
     <issue
@@ -331,7 +349,9 @@
         errorLine1="    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {"
         errorLine2="                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+            line="72"
+            column="51"/>
     </issue>
 
     <issue
@@ -340,7 +360,9 @@
         errorLine1="            Preference pref) {"
         errorLine2="            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+            line="100"
+            column="13"/>
     </issue>
 
     <issue
@@ -349,7 +371,9 @@
         errorLine1="    public LeanbackSettingsRootView(Context context) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+            line="37"
+            column="37"/>
     </issue>
 
     <issue
@@ -358,7 +382,9 @@
         errorLine1="    public LeanbackSettingsRootView(Context context, AttributeSet attrs) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+            line="41"
+            column="37"/>
     </issue>
 
     <issue
@@ -367,7 +393,9 @@
         errorLine1="    public LeanbackSettingsRootView(Context context, AttributeSet attrs) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+            line="41"
+            column="54"/>
     </issue>
 
     <issue
@@ -376,7 +404,9 @@
         errorLine1="    public LeanbackSettingsRootView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+            line="45"
+            column="37"/>
     </issue>
 
     <issue
@@ -385,7 +415,9 @@
         errorLine1="    public LeanbackSettingsRootView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+            line="45"
+            column="54"/>
     </issue>
 
     <issue
@@ -394,7 +426,9 @@
         errorLine1="    public void setOnBackKeyListener(OnKeyListener backKeyListener) {"
         errorLine2="                                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+            file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+            line="49"
+            column="38"/>
     </issue>
 
     <issue
@@ -403,7 +437,9 @@
         errorLine1="    public OutlineOnlyWithChildrenFrameLayout(Context context) {"
         errorLine2="                                              ~~~~~~~">
         <location
-            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+            line="42"
+            column="47"/>
     </issue>
 
     <issue
@@ -412,7 +448,9 @@
         errorLine1="    public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                              ~~~~~~~">
         <location
-            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+            line="46"
+            column="47"/>
     </issue>
 
     <issue
@@ -421,7 +459,9 @@
         errorLine1="    public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                               ~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+            line="46"
+            column="64"/>
     </issue>
 
     <issue
@@ -430,7 +470,9 @@
         errorLine1="    public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                                              ~~~~~~~">
         <location
-            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+            line="50"
+            column="47"/>
     </issue>
 
     <issue
@@ -439,7 +481,9 @@
         errorLine1="    public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                                                               ~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+            line="50"
+            column="64"/>
     </issue>
 
     <issue
@@ -448,7 +492,9 @@
         errorLine1="    public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                                              ~~~~~~~">
         <location
-            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+            line="55"
+            column="47"/>
     </issue>
 
     <issue
@@ -457,7 +503,9 @@
         errorLine1="    public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                                                               ~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+            file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+            line="55"
+            column="64"/>
     </issue>
 
 </issues>
diff --git a/leanback/leanback/lint-baseline.xml b/leanback/leanback/lint-baseline.xml
index 6dab066..d652e60 100644
--- a/leanback/leanback/lint-baseline.xml
+++ b/leanback/leanback/lint-baseline.xml
@@ -178,7 +178,9 @@
         errorLine1="                vh.mTitleView.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="725"
+            column="31"/>
     </issue>
 
     <issue
@@ -187,7 +189,9 @@
         errorLine1="                ft.addSharedElement(subView, transitionName);"
         errorLine2="                   ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="569"
+            column="20"/>
     </issue>
 
     <issue
@@ -196,7 +200,9 @@
         errorLine1="                setEnterTransition((android.transition.Transition) enterTransition);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="910"
+            column="17"/>
     </issue>
 
     <issue
@@ -205,7 +211,9 @@
         errorLine1="                setSharedElementEnterTransition((android.transition.Transition) sharedElementTransition);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="919"
+            column="17"/>
     </issue>
 
     <issue
@@ -214,7 +222,9 @@
         errorLine1="                    setEnterTransition((android.transition.Transition) enterTransition);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="932"
+            column="21"/>
     </issue>
 
     <issue
@@ -223,7 +233,9 @@
         errorLine1="                    setEnterTransition((android.transition.Transition) enterTransition);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="939"
+            column="21"/>
     </issue>
 
     <issue
@@ -232,7 +244,9 @@
         errorLine1="                setSharedElementEnterTransition(null);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="942"
+            column="17"/>
     </issue>
 
     <issue
@@ -241,7 +255,9 @@
         errorLine1="                setEnterTransition(null);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="945"
+            column="17"/>
     </issue>
 
     <issue
@@ -250,7 +266,9 @@
         errorLine1="                setSharedElementEnterTransition(null);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="947"
+            column="17"/>
     </issue>
 
     <issue
@@ -259,7 +277,9 @@
         errorLine1="            setExitTransition((android.transition.Transition) exitTransition);"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="954"
+            column="13"/>
     </issue>
 
     <issue
@@ -268,7 +288,9 @@
         errorLine1="        slide.setInterpolator(AnimationUtils.loadInterpolator(context,"
         errorLine2="              ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+            line="40"
+            column="15"/>
     </issue>
 
     <issue
@@ -277,7 +299,9 @@
         errorLine1="        slide.addTarget(R.id.browse_title_group);"
         errorLine2="              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+            line="42"
+            column="15"/>
     </issue>
 
     <issue
@@ -286,7 +310,9 @@
         errorLine1="        slide.setInterpolator(AnimationUtils.loadInterpolator(context,"
         errorLine2="              ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+            line="53"
+            column="15"/>
     </issue>
 
     <issue
@@ -295,7 +321,9 @@
         errorLine1="        slide.addTarget(R.id.browse_title_group);"
         errorLine2="              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+            line="55"
+            column="15"/>
     </issue>
 
     <issue
@@ -304,7 +332,9 @@
         errorLine1="            fragment.requestPermissions(permissions, requestCode);"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PermissionHelper.java"/>
+            file="src/main/java/androidx/leanback/app/PermissionHelper.java"
+            line="33"
+            column="22"/>
     </issue>
 
     <issue
@@ -313,7 +343,9 @@
         errorLine1="                                        ? !mProgressBar.isAccessibilityFocused() : true);"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="320"
+            column="57"/>
     </issue>
 
     <issue
@@ -322,7 +354,9 @@
         errorLine1="            mOutlineClippingDisabled = activityManager.isLowRamDevice();"
         errorLine2="                                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/system/Settings.java"/>
+            file="src/main/java/androidx/leanback/system/Settings.java"
+            line="132"
+            column="56"/>
     </issue>
 
     <issue
@@ -331,7 +365,9 @@
         errorLine1="            parent.setLayoutMode(ViewGroup.LAYOUT_MODE_OPTICAL_BOUNDS);"
         errorLine2="                   ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/StaticShadowHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/StaticShadowHelper.java"
+            line="38"
+            column="20"/>
     </issue>
 
     <issue
@@ -340,7 +376,9 @@
         errorLine1="            shadowContainer.setLayoutMode(ViewGroup.LAYOUT_MODE_OPTICAL_BOUNDS);"
         errorLine2="                            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/StaticShadowHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/StaticShadowHelper.java"
+            line="44"
+            column="29"/>
     </issue>
 
     <issue
@@ -349,7 +387,9 @@
         errorLine1="            hourPattern = DateFormat.getBestDateTimePattern(mConstant.locale, mIs24hFormat ? &quot;Hma&quot;"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"
+            line="159"
+            column="38"/>
     </issue>
 
     <issue
@@ -358,7 +398,9 @@
         errorLine1="            return window.getSharedElementEnterTransition();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="66"
+            column="27"/>
     </issue>
 
     <issue
@@ -367,7 +409,9 @@
         errorLine1="            window.setSharedElementEnterTransition((Transition) transition);"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="73"
+            column="20"/>
     </issue>
 
     <issue
@@ -376,7 +420,9 @@
         errorLine1="            return window.getSharedElementReturnTransition();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="79"
+            column="27"/>
     </issue>
 
     <issue
@@ -385,7 +431,9 @@
         errorLine1="            window.setSharedElementReturnTransition((Transition) transition);"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="86"
+            column="20"/>
     </issue>
 
     <issue
@@ -394,7 +442,9 @@
         errorLine1="            return window.getSharedElementExitTransition();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="92"
+            column="27"/>
     </issue>
 
     <issue
@@ -403,7 +453,9 @@
         errorLine1="            return window.getSharedElementReenterTransition();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="99"
+            column="27"/>
     </issue>
 
     <issue
@@ -412,7 +464,9 @@
         errorLine1="            return window.getEnterTransition();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="106"
+            column="27"/>
     </issue>
 
     <issue
@@ -421,7 +475,9 @@
         errorLine1="            window.setEnterTransition((Transition) transition);"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="113"
+            column="20"/>
     </issue>
 
     <issue
@@ -430,7 +486,9 @@
         errorLine1="            return window.getReturnTransition();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="119"
+            column="27"/>
     </issue>
 
     <issue
@@ -439,7 +497,9 @@
         errorLine1="            window.setReturnTransition((Transition) transition);"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="126"
+            column="20"/>
     </issue>
 
     <issue
@@ -448,7 +508,9 @@
         errorLine1="            return window.getExitTransition();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="132"
+            column="27"/>
     </issue>
 
     <issue
@@ -457,7 +519,9 @@
         errorLine1="            return window.getReenterTransition();"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="139"
+            column="27"/>
     </issue>
 
     <issue
@@ -466,7 +530,9 @@
         errorLine1="            Scene scene = new Scene(sceneRoot);"
         errorLine2="                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="146"
+            column="27"/>
     </issue>
 
     <issue
@@ -475,7 +541,9 @@
         errorLine1="            scene.setEnterAction(r);"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="147"
+            column="19"/>
     </issue>
 
     <issue
@@ -484,7 +552,9 @@
         errorLine1="            changeBounds.setReparent(reparent);"
         errorLine2="                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="156"
+            column="26"/>
     </issue>
 
     <issue
@@ -493,7 +563,9 @@
         errorLine1="            return new ChangeTransform();"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="164"
+            column="20"/>
     </issue>
 
     <issue
@@ -502,7 +574,9 @@
         errorLine1="            TransitionSet set = new TransitionSet();"
         errorLine2="                                ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="196"
+            column="33"/>
     </issue>
 
     <issue
@@ -511,7 +585,9 @@
         errorLine1="            set.setOrdering(sequential ? TransitionSet.ORDERING_SEQUENTIAL"
         errorLine2="                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="197"
+            column="17"/>
     </issue>
 
     <issue
@@ -520,7 +596,9 @@
         errorLine1="            return new ChangeTransform();"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="215"
+            column="20"/>
     </issue>
 
     <issue
@@ -529,7 +607,9 @@
         errorLine1="            ((TransitionSet) transitionSet).addTransition((Transition) transition);"
         errorLine2="                                            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="225"
+            column="45"/>
     </issue>
 
     <issue
@@ -538,7 +618,9 @@
         errorLine1="            ((Transition) transition).excludeTarget(targetId, exclude);"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="231"
+            column="39"/>
     </issue>
 
     <issue
@@ -547,7 +629,9 @@
         errorLine1="            ((Transition) transition).excludeTarget(targetView, exclude);"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="237"
+            column="39"/>
     </issue>
 
     <issue
@@ -556,7 +640,9 @@
         errorLine1="            ((Transition) transition).excludeChildren(targetId, exclude);"
         errorLine2="                                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="243"
+            column="39"/>
     </issue>
 
     <issue
@@ -565,7 +651,9 @@
         errorLine1="            ((Transition) transition).excludeChildren(targetView, exclude);"
         errorLine2="                                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="249"
+            column="39"/>
     </issue>
 
     <issue
@@ -574,7 +662,9 @@
         errorLine1="            ((Transition) transition).addTarget(targetId);"
         errorLine2="                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="255"
+            column="39"/>
     </issue>
 
     <issue
@@ -583,7 +673,9 @@
         errorLine1="            ((Transition) transition).addTarget(targetView);"
         errorLine2="                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="261"
+            column="39"/>
     </issue>
 
     <issue
@@ -592,7 +684,9 @@
         errorLine1="            ((Transition) transition).setStartDelay(startDelay);"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="267"
+            column="39"/>
     </issue>
 
     <issue
@@ -601,7 +695,9 @@
         errorLine1="            ((Transition) transition).setDuration(duration);"
         errorLine2="                                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="273"
+            column="39"/>
     </issue>
 
     <issue
@@ -610,7 +706,9 @@
         errorLine1="            return new AutoTransition();"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="279"
+            column="20"/>
     </issue>
 
     <issue
@@ -619,7 +717,9 @@
         errorLine1="            return new Fade(fadeMode);"
         errorLine2="                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="286"
+            column="20"/>
     </issue>
 
     <issue
@@ -628,7 +728,9 @@
         errorLine1="            t.addListener((Transition.TransitionListener) listener.mImpl);"
         errorLine2="              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="323"
+            column="15"/>
     </issue>
 
     <issue
@@ -637,7 +739,9 @@
         errorLine1="            t.removeListener((Transition.TransitionListener) listener.mImpl);"
         errorLine2="              ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="339"
+            column="15"/>
     </issue>
 
     <issue
@@ -646,7 +750,9 @@
         errorLine1="            TransitionManager.go((Scene) scene, (Transition) transition);"
         errorLine2="                              ~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="351"
+            column="31"/>
     </issue>
 
     <issue
@@ -655,7 +761,9 @@
         errorLine1="            ((Transition) transition).setInterpolator((TimeInterpolator) timeInterpolator);"
         errorLine2="                                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="373"
+            column="39"/>
     </issue>
 
     <issue
@@ -664,7 +772,9 @@
         errorLine1="            ((Transition) transition).addTarget(view);"
         errorLine2="                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="379"
+            column="39"/>
     </issue>
 
     <issue
@@ -673,7 +783,9 @@
         errorLine1="            return TransitionInflater.from(context).inflateTransition(resId);"
         errorLine2="                                      ~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="393"
+            column="39"/>
     </issue>
 
     <issue
@@ -682,7 +794,9 @@
         errorLine1="            return TransitionInflater.from(context).inflateTransition(resId);"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="393"
+            column="53"/>
     </issue>
 
     <issue
@@ -691,7 +805,9 @@
         errorLine1="            fragment.setEnterTransition((Transition) transition);"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="401"
+            column="22"/>
     </issue>
 
     <issue
@@ -700,7 +816,9 @@
         errorLine1="            fragment.setExitTransition((Transition) transition);"
         errorLine2="                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="408"
+            column="22"/>
     </issue>
 
     <issue
@@ -709,7 +827,9 @@
         errorLine1="            fragment.setSharedElementEnterTransition((Transition) transition);"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="416"
+            column="22"/>
     </issue>
 
     <issue
@@ -718,7 +838,9 @@
         errorLine1="            ft.addSharedElement(view, transitionName);"
         errorLine2="               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="424"
+            column="16"/>
     </issue>
 
     <issue
@@ -727,7 +849,9 @@
         errorLine1="            TransitionManager.beginDelayedTransition(sceneRoot, transition);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="447"
+            column="31"/>
     </issue>
 
     <issue
@@ -736,7 +860,9 @@
         errorLine1="            viewGroup.setTransitionGroup(transitionGroup);"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="453"
+            column="23"/>
     </issue>
 
     <issue
@@ -745,7 +871,9 @@
         errorLine1="                ((Transition) transition).setEpicenterCallback(null);"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="461"
+            column="43"/>
     </issue>
 
     <issue
@@ -754,7 +882,9 @@
         errorLine1="                ((Transition) transition).setEpicenterCallback(new Transition.EpicenterCallback() {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+            line="463"
+            column="43"/>
     </issue>
 
     <issue
@@ -763,7 +893,9 @@
         errorLine1="public class FocusHighlightHelper {"
         errorLine2="             ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+            line="39"
+            column="14"/>
     </issue>
 
     <issue
@@ -772,7 +904,9 @@
         errorLine1="    public boolean hasMediaRowSeparator() {"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="495"
+            column="20"/>
     </issue>
 
     <issue
@@ -781,7 +915,9 @@
         errorLine1="    public final boolean hasStableIds() {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="295"
+            column="26"/>
     </issue>
 
     <issue
@@ -790,7 +926,9 @@
         errorLine1="    int getPageCount() {"
         errorLine2="        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+            line="345"
+            column="9"/>
     </issue>
 
     <issue
@@ -799,9 +937,13 @@
         errorLine1="    public final List&lt;Parallax.PropertyMarkerValue> getPropertyRanges() {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="64"
+            column="53"/>
         <location
             file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="87"
+            column="23"
             message="Setter here"/>
     </issue>
 
@@ -811,9 +953,13 @@
         errorLine1="    public final List&lt;Float> getWeights() {"
         errorLine2="                             ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="76"
+            column="30"/>
         <location
             file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="103"
+            column="23"
             message="Setter here"/>
     </issue>
 
@@ -823,7 +969,9 @@
         errorLine1="    public boolean areSecondaryActionsHidden() {"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="288"
+            column="20"/>
     </issue>
 
     <issue
@@ -832,7 +980,9 @@
         errorLine1="    public boolean is24Hour() {"
         errorLine2="                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"
+            line="436"
+            column="20"/>
     </issue>
 
     <issue
@@ -841,7 +991,9 @@
         errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
         errorLine2="                                                              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="220"
+            column="63"/>
     </issue>
 
     <issue
@@ -850,7 +1002,9 @@
         errorLine1="            FocusListener focusListener, GuidedActionsStylist presenter, boolean isSubAdapter) {"
         errorLine2="                                                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="145"
+            column="74"/>
     </issue>
 
     <issue
@@ -859,7 +1013,9 @@
         errorLine1="        public ViewHolder(final View view) {"
         errorLine2="                                ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="57"
+            column="33"/>
     </issue>
 
     <issue
@@ -868,7 +1024,9 @@
         errorLine1="        public TextView getTitle() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="132"
+            column="16"/>
     </issue>
 
     <issue
@@ -877,7 +1035,9 @@
         errorLine1="        public TextView getSubtitle() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="136"
+            column="16"/>
     </issue>
 
     <issue
@@ -886,7 +1046,9 @@
         errorLine1="        public TextView getBody() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="140"
+            column="16"/>
     </issue>
 
     <issue
@@ -895,7 +1057,9 @@
         errorLine1="    public final ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="153"
+            column="18"/>
     </issue>
 
     <issue
@@ -904,7 +1068,9 @@
         errorLine1="    public final ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                                               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="153"
+            column="48"/>
     </issue>
 
     <issue
@@ -913,7 +1079,9 @@
         errorLine1="    public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="160"
+            column="40"/>
     </issue>
 
     <issue
@@ -922,7 +1090,9 @@
         errorLine1="    public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="160"
+            column="73"/>
     </issue>
 
     <issue
@@ -931,7 +1101,9 @@
         errorLine1="    protected abstract void onBindDescription(ViewHolder vh, Object item);"
         errorLine2="                                              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="216"
+            column="47"/>
     </issue>
 
     <issue
@@ -940,7 +1112,9 @@
         errorLine1="    protected abstract void onBindDescription(ViewHolder vh, Object item);"
         errorLine2="                                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="216"
+            column="62"/>
     </issue>
 
     <issue
@@ -949,7 +1123,9 @@
         errorLine1="    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {}"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="219"
+            column="36"/>
     </issue>
 
     <issue
@@ -958,7 +1134,9 @@
         errorLine1="    public void onViewAttachedToWindow(Presenter.ViewHolder holder) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="222"
+            column="40"/>
     </issue>
 
     <issue
@@ -967,7 +1145,9 @@
         errorLine1="    public void onViewDetachedFromWindow(Presenter.ViewHolder holder) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+            line="231"
+            column="42"/>
     </issue>
 
     <issue
@@ -976,7 +1156,9 @@
         errorLine1="    public void setActionPresenter(Presenter actionPresenter) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="137"
+            column="36"/>
     </issue>
 
     <issue
@@ -985,7 +1167,9 @@
         errorLine1="    public Presenter getActionPresenter() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="146"
+            column="12"/>
     </issue>
 
     <issue
@@ -994,7 +1178,9 @@
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="174"
+            column="27"/>
     </issue>
 
     <issue
@@ -1003,7 +1189,9 @@
         errorLine1="        public void notifyActionChanged(MultiActionsProvider.MultiAction action) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="297"
+            column="41"/>
     </issue>
 
     <issue
@@ -1012,7 +1200,9 @@
         errorLine1="        public View getSelectorView() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="336"
+            column="16"/>
     </issue>
 
     <issue
@@ -1021,7 +1211,9 @@
         errorLine1="        public ViewFlipper getMediaItemNumberViewFlipper() {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="344"
+            column="16"/>
     </issue>
 
     <issue
@@ -1030,7 +1222,9 @@
         errorLine1="        public TextView getMediaItemNumberView() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="352"
+            column="16"/>
     </issue>
 
     <issue
@@ -1039,7 +1233,9 @@
         errorLine1="        public View getMediaItemPausedView() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="359"
+            column="16"/>
     </issue>
 
     <issue
@@ -1048,7 +1244,9 @@
         errorLine1="        public View getMediaItemPlayingView() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="366"
+            column="16"/>
     </issue>
 
     <issue
@@ -1057,7 +1255,9 @@
         errorLine1="        public TextView getMediaItemNameView() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="387"
+            column="16"/>
     </issue>
 
     <issue
@@ -1066,7 +1266,9 @@
         errorLine1="        public TextView getMediaItemDurationView() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="394"
+            column="16"/>
     </issue>
 
     <issue
@@ -1075,7 +1277,9 @@
         errorLine1="        public View getMediaItemDetailsView() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="401"
+            column="16"/>
     </issue>
 
     <issue
@@ -1084,7 +1288,9 @@
         errorLine1="        public View getMediaItemRowSeparator() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="408"
+            column="16"/>
     </issue>
 
     <issue
@@ -1093,7 +1299,9 @@
         errorLine1="        public ViewGroup getMediaItemActionsContainer() {"
         errorLine2="               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="415"
+            column="16"/>
     </issue>
 
     <issue
@@ -1102,7 +1310,9 @@
         errorLine1="        public MultiActionsProvider.MultiAction[] getMediaItemRowActions() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="422"
+            column="16"/>
     </issue>
 
     <issue
@@ -1111,7 +1321,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="428"
+            column="15"/>
     </issue>
 
     <issue
@@ -1120,7 +1332,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="428"
+            column="59"/>
     </issue>
 
     <issue
@@ -1129,7 +1343,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="454"
+            column="40"/>
     </issue>
 
     <issue
@@ -1138,7 +1354,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
         errorLine2="                                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="454"
+            column="68"/>
     </issue>
 
     <issue
@@ -1147,7 +1365,9 @@
         errorLine1="    protected void onBindRowActions(ViewHolder vh) {"
         errorLine2="                                    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="472"
+            column="37"/>
     </issue>
 
     <issue
@@ -1156,7 +1376,9 @@
         errorLine1="    protected abstract void onBindMediaDetails(ViewHolder vh, Object item);"
         errorLine2="                                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="511"
+            column="48"/>
     </issue>
 
     <issue
@@ -1165,7 +1387,9 @@
         errorLine1="    protected abstract void onBindMediaDetails(ViewHolder vh, Object item);"
         errorLine2="                                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="511"
+            column="63"/>
     </issue>
 
     <issue
@@ -1174,7 +1398,9 @@
         errorLine1="    protected void onUnbindMediaDetails(ViewHolder vh) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="519"
+            column="41"/>
     </issue>
 
     <issue
@@ -1183,7 +1409,9 @@
         errorLine1="    public void onBindMediaPlayState(ViewHolder vh) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="531"
+            column="38"/>
     </issue>
 
     <issue
@@ -1192,7 +1420,9 @@
         errorLine1="    public void onUnbindMediaPlayState(ViewHolder vh) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="561"
+            column="40"/>
     </issue>
 
     <issue
@@ -1201,7 +1431,9 @@
         errorLine1="    protected int getMediaPlayState(Object item) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+            line="573"
+            column="37"/>
     </issue>
 
     <issue
@@ -1210,7 +1442,9 @@
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+            line="53"
+            column="27"/>
     </issue>
 
     <issue
@@ -1219,7 +1453,9 @@
         errorLine1="        public TextView getHeaderView() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+            line="62"
+            column="16"/>
     </issue>
 
     <issue
@@ -1228,7 +1464,9 @@
         errorLine1="    public AbstractMediaListHeaderPresenter(Context context, int mThemeResId) {"
         errorLine2="                                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+            line="72"
+            column="45"/>
     </issue>
 
     <issue
@@ -1237,7 +1475,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+            line="93"
+            column="15"/>
     </issue>
 
     <issue
@@ -1246,7 +1486,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+            line="93"
+            column="59"/>
     </issue>
 
     <issue
@@ -1255,7 +1497,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+            line="107"
+            column="40"/>
     </issue>
 
     <issue
@@ -1264,7 +1508,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
         errorLine2="                                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+            line="107"
+            column="68"/>
     </issue>
 
     <issue
@@ -1273,7 +1519,9 @@
         errorLine1="    protected abstract void onBindMediaListHeaderViewHolder(ViewHolder vh, Object item);"
         errorLine2="                                                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+            line="133"
+            column="61"/>
     </issue>
 
     <issue
@@ -1282,7 +1530,9 @@
         errorLine1="    protected abstract void onBindMediaListHeaderViewHolder(ViewHolder vh, Object item);"
         errorLine2="                                                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+            line="133"
+            column="76"/>
     </issue>
 
     <issue
@@ -1291,7 +1541,9 @@
         errorLine1="    public Action(long id, CharSequence label) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="51"
+            column="28"/>
     </issue>
 
     <issue
@@ -1300,7 +1552,9 @@
         errorLine1="    public Action(long id, CharSequence label1, CharSequence label2) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="62"
+            column="28"/>
     </issue>
 
     <issue
@@ -1309,7 +1563,9 @@
         errorLine1="    public Action(long id, CharSequence label1, CharSequence label2) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="62"
+            column="49"/>
     </issue>
 
     <issue
@@ -1318,7 +1574,9 @@
         errorLine1="    public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="74"
+            column="28"/>
     </issue>
 
     <issue
@@ -1327,7 +1585,9 @@
         errorLine1="    public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="74"
+            column="49"/>
     </issue>
 
     <issue
@@ -1336,7 +1596,9 @@
         errorLine1="    public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {"
         errorLine2="                                                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="74"
+            column="70"/>
     </issue>
 
     <issue
@@ -1345,7 +1607,9 @@
         errorLine1="    public final void setLabel1(CharSequence label) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="98"
+            column="33"/>
     </issue>
 
     <issue
@@ -1354,7 +1618,9 @@
         errorLine1="    public final CharSequence getLabel1() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="105"
+            column="18"/>
     </issue>
 
     <issue
@@ -1363,7 +1629,9 @@
         errorLine1="    public final void setLabel2(CharSequence label) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="112"
+            column="33"/>
     </issue>
 
     <issue
@@ -1372,7 +1640,9 @@
         errorLine1="    public final CharSequence getLabel2() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="119"
+            column="18"/>
     </issue>
 
     <issue
@@ -1381,7 +1651,9 @@
         errorLine1="    public final void setIcon(Drawable icon) {"
         errorLine2="                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="126"
+            column="31"/>
     </issue>
 
     <issue
@@ -1390,7 +1662,9 @@
         errorLine1="    public final Drawable getIcon() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
+            file="src/main/java/androidx/leanback/widget/Action.java"
+            line="133"
+            column="18"/>
     </issue>
 
     <issue
@@ -1399,7 +1673,9 @@
         errorLine1="    public ArrayObjectAdapter(PresenterSelector presenterSelector) {"
         errorLine2="                              ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="47"
+            column="31"/>
     </issue>
 
     <issue
@@ -1408,7 +1684,9 @@
         errorLine1="    public ArrayObjectAdapter(Presenter presenter) {"
         errorLine2="                              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="54"
+            column="31"/>
     </issue>
 
     <issue
@@ -1417,7 +1695,9 @@
         errorLine1="    public Object get(int index) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="71"
+            column="12"/>
     </issue>
 
     <issue
@@ -1426,7 +1706,9 @@
         errorLine1="    public int indexOf(Object item) {"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="83"
+            column="24"/>
     </issue>
 
     <issue
@@ -1435,7 +1717,9 @@
         errorLine1="    public void add(Object item) {"
         errorLine2="                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="103"
+            column="21"/>
     </issue>
 
     <issue
@@ -1444,7 +1728,9 @@
         errorLine1="    public void add(int index, Object item) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="114"
+            column="32"/>
     </issue>
 
     <issue
@@ -1453,7 +1739,9 @@
         errorLine1="    public void addAll(int index, Collection items) {"
         errorLine2="                                  ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="127"
+            column="35"/>
     </issue>
 
     <issue
@@ -1462,7 +1750,9 @@
         errorLine1="    public boolean remove(Object item) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="142"
+            column="27"/>
     </issue>
 
     <issue
@@ -1471,7 +1761,9 @@
         errorLine1="    public void replace(int position, Object item) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="175"
+            column="39"/>
     </issue>
 
     <issue
@@ -1480,7 +1772,9 @@
         errorLine1="    public &lt;E> List&lt;E> unmodifiableList() {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="217"
+            column="16"/>
     </issue>
 
     <issue
@@ -1489,7 +1783,9 @@
         errorLine1="    public void setItems(final List itemList, final DiffCallback callback) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="243"
+            column="32"/>
     </issue>
 
     <issue
@@ -1498,7 +1794,9 @@
         errorLine1="    public void setItems(final List itemList, final DiffCallback callback) {"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+            line="243"
+            column="53"/>
     </issue>
 
     <issue
@@ -1507,7 +1805,9 @@
         errorLine1="    public static void setBackgroundPreservingAlpha(View view, Drawable drawable) {"
         errorLine2="                                                    ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BackgroundHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/BackgroundHelper.java"
+            line="32"
+            column="53"/>
     </issue>
 
     <issue
@@ -1516,7 +1816,9 @@
         errorLine1="    public static void setBackgroundPreservingAlpha(View view, Drawable drawable) {"
         errorLine2="                                                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BackgroundHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/BackgroundHelper.java"
+            line="32"
+            column="64"/>
     </issue>
 
     <issue
@@ -1525,7 +1827,9 @@
         errorLine1="    public static BackgroundManager getInstance(Activity activity) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="548"
+            column="19"/>
     </issue>
 
     <issue
@@ -1534,7 +1838,9 @@
         errorLine1="    public static BackgroundManager getInstance(Activity activity) {"
         errorLine2="                                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="548"
+            column="49"/>
     </issue>
 
     <issue
@@ -1543,7 +1849,9 @@
         errorLine1="    public void attach(Window window) {"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="651"
+            column="24"/>
     </issue>
 
     <issue
@@ -1552,7 +1860,9 @@
         errorLine1="    public void attachToView(View sceneRoot) {"
         errorLine2="                             ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="667"
+            column="30"/>
     </issue>
 
     <issue
@@ -1561,7 +1871,9 @@
         errorLine1="    public void setDimLayer(Drawable drawable) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="738"
+            column="29"/>
     </issue>
 
     <issue
@@ -1570,7 +1882,9 @@
         errorLine1="    public Drawable getDimLayer() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="746"
+            column="12"/>
     </issue>
 
     <issue
@@ -1579,7 +1893,9 @@
         errorLine1="    public Drawable getDefaultDimLayer() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="755"
+            column="12"/>
     </issue>
 
     <issue
@@ -1588,7 +1904,9 @@
         errorLine1="    public void setDrawable(Drawable drawable) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="835"
+            column="29"/>
     </issue>
 
     <issue
@@ -1597,7 +1915,9 @@
         errorLine1="    public void setBitmap(Bitmap bitmap) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="889"
+            column="27"/>
     </issue>
 
     <issue
@@ -1606,7 +1926,9 @@
         errorLine1="    public Drawable getDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+            file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+            line="964"
+            column="12"/>
     </issue>
 
     <issue
@@ -1615,7 +1937,9 @@
         errorLine1="    public BaseCardView(Context context) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="149"
+            column="25"/>
     </issue>
 
     <issue
@@ -1624,7 +1948,9 @@
         errorLine1="    public BaseCardView(Context context, AttributeSet attrs) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="153"
+            column="25"/>
     </issue>
 
     <issue
@@ -1633,7 +1959,9 @@
         errorLine1="    public BaseCardView(Context context, AttributeSet attrs) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="153"
+            column="42"/>
     </issue>
 
     <issue
@@ -1642,7 +1970,9 @@
         errorLine1="    public BaseCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="158"
+            column="25"/>
     </issue>
 
     <issue
@@ -1651,7 +1981,9 @@
         errorLine1="    public BaseCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="158"
+            column="42"/>
     </issue>
 
     <issue
@@ -1660,7 +1992,9 @@
         errorLine1="    protected int[] onCreateDrawableState(int extraSpace) {"
         errorLine2="              ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="600"
+            column="15"/>
     </issue>
 
     <issue
@@ -1669,7 +2003,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="821"
+            column="12"/>
     </issue>
 
     <issue
@@ -1678,7 +2014,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="821"
+            column="46"/>
     </issue>
 
     <issue
@@ -1687,7 +2025,9 @@
         errorLine1="    protected LayoutParams generateDefaultLayoutParams() {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="826"
+            column="15"/>
     </issue>
 
     <issue
@@ -1696,7 +2036,9 @@
         errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="832"
+            column="15"/>
     </issue>
 
     <issue
@@ -1705,7 +2047,9 @@
         errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="832"
+            column="49"/>
     </issue>
 
     <issue
@@ -1714,7 +2058,9 @@
         errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="841"
+            column="41"/>
     </issue>
 
     <issue
@@ -1723,7 +2069,9 @@
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="867"
+            column="29"/>
     </issue>
 
     <issue
@@ -1732,7 +2080,9 @@
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="867"
+            column="40"/>
     </issue>
 
     <issue
@@ -1741,7 +2091,9 @@
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="887"
+            column="29"/>
     </issue>
 
     <issue
@@ -1750,7 +2102,9 @@
         errorLine1="        public LayoutParams(LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+            line="897"
+            column="29"/>
     </issue>
 
     <issue
@@ -1759,7 +2113,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BaseFragment.java"
+            line="147"
+            column="26"/>
     </issue>
 
     <issue
@@ -1768,7 +2124,9 @@
         errorLine1="    protected Object createEntranceTransition() {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BaseFragment.java"
+            line="237"
+            column="15"/>
     </issue>
 
     <issue
@@ -1777,7 +2135,9 @@
         errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BaseFragment.java"
+            line="246"
+            column="42"/>
     </issue>
 
     <issue
@@ -1786,7 +2146,9 @@
         errorLine1="    public final ProgressBarManager getProgressBarManager() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BaseFragment.java"
+            line="332"
+            column="18"/>
     </issue>
 
     <issue
@@ -1795,7 +2157,9 @@
         errorLine1="    void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"
+            line="28"
+            column="24"/>
     </issue>
 
     <issue
@@ -1804,7 +2168,9 @@
         errorLine1="    void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"
+            line="28"
+            column="61"/>
     </issue>
 
     <issue
@@ -1813,7 +2179,9 @@
         errorLine1="                              RowPresenter.ViewHolder rowViewHolder, T row);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"
+            line="29"
+            column="31"/>
     </issue>
 
     <issue
@@ -1822,7 +2190,9 @@
         errorLine1="    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"
+            line="49"
+            column="32"/>
     </issue>
 
     <issue
@@ -1831,7 +2201,9 @@
         errorLine1="    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                                                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"
+            line="49"
+            column="69"/>
     </issue>
 
     <issue
@@ -1840,7 +2212,9 @@
         errorLine1="                               RowPresenter.ViewHolder rowViewHolder, T row);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"/>
+            file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"
+            line="50"
+            column="32"/>
     </issue>
 
     <issue
@@ -1849,7 +2223,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"
+            line="142"
+            column="26"/>
     </issue>
 
     <issue
@@ -1858,7 +2234,9 @@
         errorLine1="    protected Object createEntranceTransition() {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"
+            line="232"
+            column="15"/>
     </issue>
 
     <issue
@@ -1867,7 +2245,9 @@
         errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"
+            line="241"
+            column="42"/>
     </issue>
 
     <issue
@@ -1876,7 +2256,9 @@
         errorLine1="    public final ProgressBarManager getProgressBarManager() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"
+            line="327"
+            column="18"/>
     </issue>
 
     <issue
@@ -1885,7 +2267,9 @@
         errorLine1="        public static ValueRule inheritFromParent(float fraction) {"
         errorLine2="                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="40"
+            column="23"/>
     </issue>
 
     <issue
@@ -1894,7 +2278,9 @@
         errorLine1="        public static ValueRule absoluteValue(int absoluteValue) {"
         errorLine2="                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="50"
+            column="23"/>
     </issue>
 
     <issue
@@ -1903,7 +2289,9 @@
         errorLine1="        public static ValueRule inheritFromParentWithOffset(float fraction, int value) {"
         errorLine2="                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="61"
+            column="23"/>
     </issue>
 
     <issue
@@ -1912,7 +2300,9 @@
         errorLine1="    public void calculateBounds(Rect rect, Rect result) {"
         errorLine2="                                ~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="116"
+            column="33"/>
     </issue>
 
     <issue
@@ -1921,7 +2311,9 @@
         errorLine1="    public void calculateBounds(Rect rect, Rect result) {"
         errorLine2="                                           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="116"
+            column="44"/>
     </issue>
 
     <issue
@@ -1930,7 +2322,9 @@
         errorLine1="    public BoundsRule(BoundsRule boundsRule) {"
         errorLine2="                      ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="144"
+            column="23"/>
     </issue>
 
     <issue
@@ -1939,7 +2333,9 @@
         errorLine1="    public ValueRule left;"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="156"
+            column="12"/>
     </issue>
 
     <issue
@@ -1948,7 +2344,9 @@
         errorLine1="    public ValueRule top;"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="159"
+            column="12"/>
     </issue>
 
     <issue
@@ -1957,7 +2355,9 @@
         errorLine1="    public ValueRule right;"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="162"
+            column="12"/>
     </issue>
 
     <issue
@@ -1966,7 +2366,9 @@
         errorLine1="    public ValueRule bottom;"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+            line="165"
+            column="12"/>
     </issue>
 
     <issue
@@ -1975,7 +2377,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="70"
+            column="12"/>
     </issue>
 
     <issue
@@ -1984,7 +2388,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="70"
+            column="36"/>
     </issue>
 
     <issue
@@ -1993,7 +2399,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="70"
+            column="61"/>
     </issue>
 
     <issue
@@ -2002,7 +2410,9 @@
         errorLine1="                                Bundle savedInstanceState) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="71"
+            column="33"/>
     </issue>
 
     <issue
@@ -2011,7 +2421,9 @@
         errorLine1="    public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="88"
+            column="34"/>
     </issue>
 
     <issue
@@ -2020,7 +2432,9 @@
         errorLine1="    public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="88"
+            column="59"/>
     </issue>
 
     <issue
@@ -2029,7 +2443,9 @@
         errorLine1="                            Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="89"
+            column="29"/>
     </issue>
 
     <issue
@@ -2038,7 +2454,9 @@
         errorLine1="    public void setTitleView(View titleView) {"
         errorLine2="                             ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="103"
+            column="30"/>
     </issue>
 
     <issue
@@ -2047,7 +2465,9 @@
         errorLine1="    public View getTitleView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="128"
+            column="12"/>
     </issue>
 
     <issue
@@ -2056,7 +2476,9 @@
         errorLine1="    public TitleViewAdapter getTitleViewAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="136"
+            column="12"/>
     </issue>
 
     <issue
@@ -2065,7 +2487,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="148"
+            column="37"/>
     </issue>
 
     <issue
@@ -2074,7 +2498,9 @@
         errorLine1="    public void setBadgeDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="208"
+            column="34"/>
     </issue>
 
     <issue
@@ -2083,7 +2509,9 @@
         errorLine1="    public Drawable getBadgeDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="221"
+            column="12"/>
     </issue>
 
     <issue
@@ -2092,7 +2520,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="230"
+            column="26"/>
     </issue>
 
     <issue
@@ -2101,7 +2531,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="241"
+            column="12"/>
     </issue>
 
     <issue
@@ -2110,7 +2542,9 @@
         errorLine1="    public void setOnSearchClickedListener(View.OnClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="257"
+            column="44"/>
     </issue>
 
     <issue
@@ -2119,7 +2553,9 @@
         errorLine1="    public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="270"
+            column="43"/>
     </issue>
 
     <issue
@@ -2128,7 +2564,9 @@
         errorLine1="    public SearchOrbView.Colors getSearchAffordanceColors() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+            line="282"
+            column="12"/>
     </issue>
 
     <issue
@@ -2137,7 +2575,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="65"
+            column="12"/>
     </issue>
 
     <issue
@@ -2146,7 +2586,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="65"
+            column="36"/>
     </issue>
 
     <issue
@@ -2155,7 +2597,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="65"
+            column="61"/>
     </issue>
 
     <issue
@@ -2164,7 +2608,9 @@
         errorLine1="                                Bundle savedInstanceState) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="66"
+            column="33"/>
     </issue>
 
     <issue
@@ -2173,7 +2619,9 @@
         errorLine1="    public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="83"
+            column="34"/>
     </issue>
 
     <issue
@@ -2182,7 +2630,9 @@
         errorLine1="    public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="83"
+            column="59"/>
     </issue>
 
     <issue
@@ -2191,7 +2641,9 @@
         errorLine1="                            Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="84"
+            column="29"/>
     </issue>
 
     <issue
@@ -2200,7 +2652,9 @@
         errorLine1="    public void setTitleView(View titleView) {"
         errorLine2="                             ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="98"
+            column="30"/>
     </issue>
 
     <issue
@@ -2209,7 +2663,9 @@
         errorLine1="    public View getTitleView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="123"
+            column="12"/>
     </issue>
 
     <issue
@@ -2218,7 +2674,9 @@
         errorLine1="    public TitleViewAdapter getTitleViewAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="131"
+            column="12"/>
     </issue>
 
     <issue
@@ -2227,7 +2685,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="143"
+            column="37"/>
     </issue>
 
     <issue
@@ -2236,7 +2696,9 @@
         errorLine1="    public void setBadgeDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="203"
+            column="34"/>
     </issue>
 
     <issue
@@ -2245,7 +2707,9 @@
         errorLine1="    public Drawable getBadgeDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="216"
+            column="12"/>
     </issue>
 
     <issue
@@ -2254,7 +2718,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="225"
+            column="26"/>
     </issue>
 
     <issue
@@ -2263,7 +2729,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="236"
+            column="12"/>
     </issue>
 
     <issue
@@ -2272,7 +2740,9 @@
         errorLine1="    public void setOnSearchClickedListener(View.OnClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="252"
+            column="44"/>
     </issue>
 
     <issue
@@ -2281,7 +2751,9 @@
         errorLine1="    public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="265"
+            column="43"/>
     </issue>
 
     <issue
@@ -2290,7 +2762,9 @@
         errorLine1="    public SearchOrbView.Colors getSearchAffordanceColors() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+            line="277"
+            column="12"/>
     </issue>
 
     <issue
@@ -2299,7 +2773,9 @@
         errorLine1="        void notifyViewCreated(MainFragmentAdapter fragmentAdapter);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="301"
+            column="32"/>
     </issue>
 
     <issue
@@ -2308,7 +2784,9 @@
         errorLine1="        void notifyDataReady(MainFragmentAdapter fragmentAdapter);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="310"
+            column="30"/>
     </issue>
 
     <issue
@@ -2317,7 +2795,9 @@
         errorLine1="        public final FragmentHost getFragmentHost() {"
         errorLine2="                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="479"
+            column="22"/>
     </issue>
 
     <issue
@@ -2326,7 +2806,9 @@
         errorLine1="        MainFragmentAdapter getMainFragmentAdapter();"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="500"
+            column="9"/>
     </issue>
 
     <issue
@@ -2335,7 +2817,9 @@
         errorLine1="        MainFragmentRowsAdapter getMainFragmentRowsAdapter();"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="514"
+            column="9"/>
     </issue>
 
     <issue
@@ -2344,7 +2828,9 @@
         errorLine1="        public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="540"
+            column="32"/>
     </issue>
 
     <issue
@@ -2353,7 +2839,9 @@
         errorLine1="        public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="546"
+            column="50"/>
     </issue>
 
     <issue
@@ -2362,7 +2850,9 @@
         errorLine1="        public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="552"
+            column="51"/>
     </issue>
 
     <issue
@@ -2371,7 +2861,9 @@
         errorLine1="                                        final Presenter.ViewHolderTask rowHolderTask) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="560"
+            column="47"/>
     </issue>
 
     <issue
@@ -2380,7 +2872,9 @@
         errorLine1="        public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="580"
+            column="16"/>
     </issue>
 
     <issue
@@ -2389,7 +2883,9 @@
         errorLine1="        public abstract T createFragment(Object row);"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="666"
+            column="42"/>
     </issue>
 
     <issue
@@ -2398,7 +2894,9 @@
         errorLine1="        public RowsFragment createFragment(Object row) {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="676"
+            column="16"/>
     </issue>
 
     <issue
@@ -2407,7 +2905,9 @@
         errorLine1="        public RowsFragment createFragment(Object row) {"
         errorLine2="                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="676"
+            column="44"/>
     </issue>
 
     <issue
@@ -2416,7 +2916,9 @@
         errorLine1="        public void registerFragment(Class&lt;?> rowClass, FragmentFactory factory) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="699"
+            column="38"/>
     </issue>
 
     <issue
@@ -2425,7 +2927,9 @@
         errorLine1="        public void registerFragment(Class&lt;?> rowClass, FragmentFactory factory) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="699"
+            column="57"/>
     </issue>
 
     <issue
@@ -2434,7 +2938,9 @@
         errorLine1="        public Fragment createFragment(Object item) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="703"
+            column="16"/>
     </issue>
 
     <issue
@@ -2443,7 +2949,9 @@
         errorLine1="        public Fragment createFragment(Object item) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="703"
+            column="40"/>
     </issue>
 
     <issue
@@ -2452,7 +2960,9 @@
         errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="787"
+            column="19"/>
     </issue>
 
     <issue
@@ -2461,7 +2971,9 @@
         errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="787"
+            column="37"/>
     </issue>
 
     <issue
@@ -2470,7 +2982,9 @@
         errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
         errorLine2="                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="787"
+            column="50"/>
     </issue>
 
     <issue
@@ -2479,7 +2993,9 @@
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="872"
+            column="28"/>
     </issue>
 
     <issue
@@ -2488,7 +3004,9 @@
         errorLine1="    public final MainFragmentAdapterRegistry getMainFragmentRegistry() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="920"
+            column="18"/>
     </issue>
 
     <issue
@@ -2497,7 +3015,9 @@
         errorLine1="    public ObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="927"
+            column="12"/>
     </issue>
 
     <issue
@@ -2506,7 +3026,9 @@
         errorLine1="    public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="934"
+            column="47"/>
     </issue>
 
     <issue
@@ -2515,7 +3037,9 @@
         errorLine1="    public OnItemViewSelectedListener getOnItemViewSelectedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="941"
+            column="12"/>
     </issue>
 
     <issue
@@ -2524,7 +3048,9 @@
         errorLine1="    public RowsFragment getRowsFragment() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="951"
+            column="12"/>
     </issue>
 
     <issue
@@ -2533,7 +3059,9 @@
         errorLine1="    public Fragment getMainFragment() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="962"
+            column="12"/>
     </issue>
 
     <issue
@@ -2542,7 +3070,9 @@
         errorLine1="    public HeadersFragment getHeadersFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="970"
+            column="12"/>
     </issue>
 
     <issue
@@ -2551,7 +3081,9 @@
         errorLine1="    public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="980"
+            column="46"/>
     </issue>
 
     <issue
@@ -2560,7 +3092,9 @@
         errorLine1="    public OnItemViewClickedListener getOnItemViewClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="990"
+            column="12"/>
     </issue>
 
     <issue
@@ -2569,7 +3103,9 @@
         errorLine1="    public void setBrowseTransitionListener(BrowseTransitionListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1034"
+            column="45"/>
     </issue>
 
     <issue
@@ -2578,7 +3114,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1192"
+            column="37"/>
     </issue>
 
     <issue
@@ -2587,7 +3125,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1205"
+            column="26"/>
     </issue>
 
     <issue
@@ -2596,7 +3136,9 @@
         errorLine1="    public HeadersFragment onCreateHeadersFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1265"
+            column="12"/>
     </issue>
 
     <issue
@@ -2605,7 +3147,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1270"
+            column="12"/>
     </issue>
 
     <issue
@@ -2614,7 +3158,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1270"
+            column="30"/>
     </issue>
 
     <issue
@@ -2623,7 +3169,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1270"
+            column="55"/>
     </issue>
 
     <issue
@@ -2632,7 +3180,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1271"
+            column="13"/>
     </issue>
 
     <issue
@@ -2641,7 +3191,9 @@
         errorLine1="    public void setHeaderPresenterSelector(PresenterSelector headerPresenterSelector) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1467"
+            column="44"/>
     </issue>
 
     <issue
@@ -2650,7 +3202,9 @@
         errorLine1="    public RowPresenter.ViewHolder getSelectedRowViewHolder() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1652"
+            column="12"/>
     </issue>
 
     <issue
@@ -2659,7 +3213,9 @@
         errorLine1="            final Presenter.ViewHolderTask rowHolderTask) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1681"
+            column="19"/>
     </issue>
 
     <issue
@@ -2668,7 +3224,9 @@
         errorLine1="    protected Object createEntranceTransition() {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1826"
+            column="15"/>
     </issue>
 
     <issue
@@ -2677,7 +3235,9 @@
         errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+            line="1832"
+            column="42"/>
     </issue>
 
     <issue
@@ -2686,7 +3246,9 @@
         errorLine1="        View onFocusSearch(View focused, int direction);"
         errorLine2="        ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="37"
+            column="9"/>
     </issue>
 
     <issue
@@ -2695,7 +3257,9 @@
         errorLine1="        View onFocusSearch(View focused, int direction);"
         errorLine2="                           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="37"
+            column="28"/>
     </issue>
 
     <issue
@@ -2704,7 +3268,9 @@
         errorLine1="                Rect previouslyFocusedRect);"
         errorLine2="                ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="51"
+            column="17"/>
     </issue>
 
     <issue
@@ -2713,7 +3279,9 @@
         errorLine1="        void onRequestChildFocus(View child, View focused);"
         errorLine2="                                 ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="56"
+            column="34"/>
     </issue>
 
     <issue
@@ -2722,7 +3290,9 @@
         errorLine1="        void onRequestChildFocus(View child, View focused);"
         errorLine2="                                             ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="56"
+            column="46"/>
     </issue>
 
     <issue
@@ -2731,7 +3301,9 @@
         errorLine1="    public BrowseFrameLayout(Context context) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="59"
+            column="30"/>
     </issue>
 
     <issue
@@ -2740,7 +3312,9 @@
         errorLine1="    public BrowseFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="63"
+            column="30"/>
     </issue>
 
     <issue
@@ -2749,7 +3323,9 @@
         errorLine1="    public BrowseFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="63"
+            column="47"/>
     </issue>
 
     <issue
@@ -2758,7 +3334,9 @@
         errorLine1="    public BrowseFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="67"
+            column="30"/>
     </issue>
 
     <issue
@@ -2767,7 +3345,9 @@
         errorLine1="    public BrowseFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="67"
+            column="47"/>
     </issue>
 
     <issue
@@ -2776,7 +3356,9 @@
         errorLine1="    public void setOnFocusSearchListener(OnFocusSearchListener listener) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="78"
+            column="42"/>
     </issue>
 
     <issue
@@ -2785,7 +3367,9 @@
         errorLine1="    public OnFocusSearchListener getOnFocusSearchListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="85"
+            column="12"/>
     </issue>
 
     <issue
@@ -2794,7 +3378,9 @@
         errorLine1="    public void setOnChildFocusListener(OnChildFocusListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="92"
+            column="41"/>
     </issue>
 
     <issue
@@ -2803,7 +3389,9 @@
         errorLine1="    public OnChildFocusListener getOnChildFocusListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="99"
+            column="12"/>
     </issue>
 
     <issue
@@ -2812,7 +3400,9 @@
         errorLine1="            Rect previouslyFocusedRect) {"
         errorLine2="            ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="105"
+            column="13"/>
     </issue>
 
     <issue
@@ -2821,7 +3411,9 @@
         errorLine1="    public View focusSearch(View focused, int direction) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="116"
+            column="12"/>
     </issue>
 
     <issue
@@ -2830,7 +3422,9 @@
         errorLine1="    public View focusSearch(View focused, int direction) {"
         errorLine2="                            ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="116"
+            column="29"/>
     </issue>
 
     <issue
@@ -2839,7 +3433,9 @@
         errorLine1="    public void requestChildFocus(View child, View focused) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="127"
+            column="35"/>
     </issue>
 
     <issue
@@ -2848,7 +3444,9 @@
         errorLine1="    public void requestChildFocus(View child, View focused) {"
         errorLine2="                                              ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="127"
+            column="47"/>
     </issue>
 
     <issue
@@ -2857,7 +3455,9 @@
         errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
         errorLine2="                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="135"
+            column="37"/>
     </issue>
 
     <issue
@@ -2866,7 +3466,9 @@
         errorLine1="    public void setOnDispatchKeyListener(OnKeyListener listener) {"
         errorLine2="                                         ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+            line="151"
+            column="42"/>
     </issue>
 
     <issue
@@ -2875,7 +3477,9 @@
         errorLine1="    public BrowseRowsFrameLayout(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+            line="34"
+            column="34"/>
     </issue>
 
     <issue
@@ -2884,7 +3488,9 @@
         errorLine1="    public BrowseRowsFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+            line="38"
+            column="34"/>
     </issue>
 
     <issue
@@ -2893,7 +3499,9 @@
         errorLine1="    public BrowseRowsFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+            line="38"
+            column="51"/>
     </issue>
 
     <issue
@@ -2902,7 +3510,9 @@
         errorLine1="    public BrowseRowsFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+            line="42"
+            column="34"/>
     </issue>
 
     <issue
@@ -2911,7 +3521,9 @@
         errorLine1="    public BrowseRowsFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+            line="42"
+            column="51"/>
     </issue>
 
     <issue
@@ -2920,7 +3532,9 @@
         errorLine1="    protected void measureChildWithMargins(View child,"
         errorLine2="                                           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+            line="48"
+            column="44"/>
     </issue>
 
     <issue
@@ -2929,7 +3543,9 @@
         errorLine1="        void notifyViewCreated(MainFragmentAdapter fragmentAdapter);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="292"
+            column="32"/>
     </issue>
 
     <issue
@@ -2938,7 +3554,9 @@
         errorLine1="        void notifyDataReady(MainFragmentAdapter fragmentAdapter);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="301"
+            column="30"/>
     </issue>
 
     <issue
@@ -2947,7 +3565,9 @@
         errorLine1="        public final FragmentHost getFragmentHost() {"
         errorLine2="                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="468"
+            column="22"/>
     </issue>
 
     <issue
@@ -2956,7 +3576,9 @@
         errorLine1="        MainFragmentAdapter getMainFragmentAdapter();"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="487"
+            column="9"/>
     </issue>
 
     <issue
@@ -2965,7 +3587,9 @@
         errorLine1="        MainFragmentRowsAdapter getMainFragmentRowsAdapter();"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="499"
+            column="9"/>
     </issue>
 
     <issue
@@ -2974,7 +3598,9 @@
         errorLine1="        public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="523"
+            column="32"/>
     </issue>
 
     <issue
@@ -2983,7 +3609,9 @@
         errorLine1="        public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="529"
+            column="50"/>
     </issue>
 
     <issue
@@ -2992,7 +3620,9 @@
         errorLine1="        public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="535"
+            column="51"/>
     </issue>
 
     <issue
@@ -3001,7 +3631,9 @@
         errorLine1="                                        final Presenter.ViewHolderTask rowHolderTask) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="543"
+            column="47"/>
     </issue>
 
     <issue
@@ -3010,7 +3642,9 @@
         errorLine1="        public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="563"
+            column="16"/>
     </issue>
 
     <issue
@@ -3019,7 +3653,9 @@
         errorLine1="        public abstract T createFragment(Object row);"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="647"
+            column="42"/>
     </issue>
 
     <issue
@@ -3028,7 +3664,9 @@
         errorLine1="        public RowsSupportFragment createFragment(Object row) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="655"
+            column="16"/>
     </issue>
 
     <issue
@@ -3037,7 +3675,9 @@
         errorLine1="        public RowsSupportFragment createFragment(Object row) {"
         errorLine2="                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="655"
+            column="51"/>
     </issue>
 
     <issue
@@ -3046,7 +3686,9 @@
         errorLine1="        public void registerFragment(Class&lt;?> rowClass, FragmentFactory factory) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="676"
+            column="38"/>
     </issue>
 
     <issue
@@ -3055,7 +3697,9 @@
         errorLine1="        public void registerFragment(Class&lt;?> rowClass, FragmentFactory factory) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="676"
+            column="57"/>
     </issue>
 
     <issue
@@ -3064,7 +3708,9 @@
         errorLine1="        public Fragment createFragment(Object item) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="680"
+            column="16"/>
     </issue>
 
     <issue
@@ -3073,7 +3719,9 @@
         errorLine1="        public Fragment createFragment(Object item) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="680"
+            column="40"/>
     </issue>
 
     <issue
@@ -3082,7 +3730,9 @@
         errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="764"
+            column="19"/>
     </issue>
 
     <issue
@@ -3091,7 +3741,9 @@
         errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="764"
+            column="37"/>
     </issue>
 
     <issue
@@ -3100,7 +3752,9 @@
         errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
         errorLine2="                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="764"
+            column="50"/>
     </issue>
 
     <issue
@@ -3109,7 +3763,9 @@
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="849"
+            column="28"/>
     </issue>
 
     <issue
@@ -3118,7 +3774,9 @@
         errorLine1="    public final MainFragmentAdapterRegistry getMainFragmentRegistry() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="897"
+            column="18"/>
     </issue>
 
     <issue
@@ -3127,7 +3785,9 @@
         errorLine1="    public ObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="904"
+            column="12"/>
     </issue>
 
     <issue
@@ -3136,7 +3796,9 @@
         errorLine1="    public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="911"
+            column="47"/>
     </issue>
 
     <issue
@@ -3145,7 +3807,9 @@
         errorLine1="    public OnItemViewSelectedListener getOnItemViewSelectedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="918"
+            column="12"/>
     </issue>
 
     <issue
@@ -3154,7 +3818,9 @@
         errorLine1="    public RowsSupportFragment getRowsSupportFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="928"
+            column="12"/>
     </issue>
 
     <issue
@@ -3163,7 +3829,9 @@
         errorLine1="    public Fragment getMainFragment() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="939"
+            column="12"/>
     </issue>
 
     <issue
@@ -3172,7 +3840,9 @@
         errorLine1="    public HeadersSupportFragment getHeadersSupportFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="947"
+            column="12"/>
     </issue>
 
     <issue
@@ -3181,7 +3851,9 @@
         errorLine1="    public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="957"
+            column="46"/>
     </issue>
 
     <issue
@@ -3190,7 +3862,9 @@
         errorLine1="    public OnItemViewClickedListener getOnItemViewClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="967"
+            column="12"/>
     </issue>
 
     <issue
@@ -3199,7 +3873,9 @@
         errorLine1="    public void setBrowseTransitionListener(BrowseTransitionListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1011"
+            column="45"/>
     </issue>
 
     <issue
@@ -3208,7 +3884,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1169"
+            column="37"/>
     </issue>
 
     <issue
@@ -3217,7 +3895,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1182"
+            column="26"/>
     </issue>
 
     <issue
@@ -3226,7 +3906,9 @@
         errorLine1="    public HeadersSupportFragment onCreateHeadersSupportFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1242"
+            column="12"/>
     </issue>
 
     <issue
@@ -3235,7 +3917,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1247"
+            column="12"/>
     </issue>
 
     <issue
@@ -3244,7 +3928,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1247"
+            column="30"/>
     </issue>
 
     <issue
@@ -3253,7 +3939,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1247"
+            column="55"/>
     </issue>
 
     <issue
@@ -3262,7 +3950,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1248"
+            column="13"/>
     </issue>
 
     <issue
@@ -3271,7 +3961,9 @@
         errorLine1="    public void setHeaderPresenterSelector(PresenterSelector headerPresenterSelector) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1444"
+            column="44"/>
     </issue>
 
     <issue
@@ -3280,7 +3972,9 @@
         errorLine1="    public RowPresenter.ViewHolder getSelectedRowViewHolder() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1629"
+            column="12"/>
     </issue>
 
     <issue
@@ -3289,7 +3983,9 @@
         errorLine1="            final Presenter.ViewHolderTask rowHolderTask) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1658"
+            column="19"/>
     </issue>
 
     <issue
@@ -3298,7 +3994,9 @@
         errorLine1="    protected Object createEntranceTransition() {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1803"
+            column="15"/>
     </issue>
 
     <issue
@@ -3307,7 +4005,9 @@
         errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+            line="1809"
+            column="42"/>
     </issue>
 
     <issue
@@ -3316,7 +4016,9 @@
         errorLine1="    public ClassPresenterSelector addClassPresenter(Class&lt;?> cls, Presenter presenter) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+            line="35"
+            column="12"/>
     </issue>
 
     <issue
@@ -3325,7 +4027,9 @@
         errorLine1="    public ClassPresenterSelector addClassPresenter(Class&lt;?> cls, Presenter presenter) {"
         errorLine2="                                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+            line="35"
+            column="53"/>
     </issue>
 
     <issue
@@ -3334,7 +4038,9 @@
         errorLine1="    public ClassPresenterSelector addClassPresenter(Class&lt;?> cls, Presenter presenter) {"
         errorLine2="                                                                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+            line="35"
+            column="67"/>
     </issue>
 
     <issue
@@ -3343,7 +4049,9 @@
         errorLine1="    public ClassPresenterSelector addClassPresenterSelector(Class&lt;?> cls,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+            line="50"
+            column="12"/>
     </issue>
 
     <issue
@@ -3352,7 +4060,9 @@
         errorLine1="    public ClassPresenterSelector addClassPresenterSelector(Class&lt;?> cls,"
         errorLine2="                                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+            line="50"
+            column="61"/>
     </issue>
 
     <issue
@@ -3361,7 +4071,9 @@
         errorLine1="            PresenterSelector presenterSelector) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+            line="51"
+            column="13"/>
     </issue>
 
     <issue
@@ -3370,7 +4082,9 @@
         errorLine1="    public Presenter getPresenter(Object item) {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+            line="62"
+            column="12"/>
     </issue>
 
     <issue
@@ -3379,7 +4093,9 @@
         errorLine1="    public Presenter getPresenter(Object item) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+            line="62"
+            column="35"/>
     </issue>
 
     <issue
@@ -3388,7 +4104,9 @@
         errorLine1="    public Presenter[] getPresenters() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+            line="81"
+            column="12"/>
     </issue>
 
     <issue
@@ -3397,7 +4115,9 @@
         errorLine1="    public static ColorFilterCache getColorFilterCache(int color) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorFilterCache.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorFilterCache.java"
+            line="40"
+            column="19"/>
     </issue>
 
     <issue
@@ -3406,7 +4126,9 @@
         errorLine1="    public ColorFilter getFilterForLevel(float level) {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorFilterCache.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorFilterCache.java"
+            line="68"
+            column="12"/>
     </issue>
 
     <issue
@@ -3415,7 +4137,9 @@
         errorLine1="    public static ColorFilterDimmer createDefault(Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+            line="46"
+            column="19"/>
     </issue>
 
     <issue
@@ -3424,7 +4148,9 @@
         errorLine1="    public static ColorFilterDimmer createDefault(Context context) {"
         errorLine2="                                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+            line="46"
+            column="51"/>
     </issue>
 
     <issue
@@ -3433,7 +4159,9 @@
         errorLine1="    public static ColorFilterDimmer create(ColorFilterCache dimmer,"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+            line="69"
+            column="19"/>
     </issue>
 
     <issue
@@ -3442,7 +4170,9 @@
         errorLine1="    public static ColorFilterDimmer create(ColorFilterCache dimmer,"
         errorLine2="                                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+            line="69"
+            column="44"/>
     </issue>
 
     <issue
@@ -3451,7 +4181,9 @@
         errorLine1="    public void applyFilterToView(View view) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+            line="92"
+            column="35"/>
     </issue>
 
     <issue
@@ -3460,7 +4192,9 @@
         errorLine1="    public ColorFilter getColorFilter() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+            line="123"
+            column="12"/>
     </issue>
 
     <issue
@@ -3469,7 +4203,9 @@
         errorLine1="    public Paint getPaint() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+            line="132"
+            column="12"/>
     </issue>
 
     <issue
@@ -3478,7 +4214,9 @@
         errorLine1="    public static ColorOverlayDimmer createDefault(Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+            line="42"
+            column="19"/>
     </issue>
 
     <issue
@@ -3487,7 +4225,9 @@
         errorLine1="    public static ColorOverlayDimmer createDefault(Context context) {"
         errorLine2="                                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+            line="42"
+            column="52"/>
     </issue>
 
     <issue
@@ -3496,7 +4236,9 @@
         errorLine1="    public static ColorOverlayDimmer createColorOverlayDimmer(int dimColor, float activeLevel,"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+            line="65"
+            column="19"/>
     </issue>
 
     <issue
@@ -3505,7 +4247,9 @@
         errorLine1="    public Paint getPaint() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+            line="120"
+            column="12"/>
     </issue>
 
     <issue
@@ -3514,7 +4258,9 @@
         errorLine1="    public void drawColorOverlay(Canvas c, View v, boolean includePadding) {"
         errorLine2="                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+            line="149"
+            column="34"/>
     </issue>
 
     <issue
@@ -3523,7 +4269,9 @@
         errorLine1="    public void drawColorOverlay(Canvas c, View v, boolean includePadding) {"
         errorLine2="                                           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+            file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+            line="149"
+            column="44"/>
     </issue>
 
     <issue
@@ -3532,7 +4280,9 @@
         errorLine1="    public ConstantState getConstantState() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="79"
+            column="12"/>
     </issue>
 
     <issue
@@ -3541,7 +4291,9 @@
         errorLine1="    public Drawable mutate() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="84"
+            column="12"/>
     </issue>
 
     <issue
@@ -3550,7 +4302,9 @@
         errorLine1="    public void addChildDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="102"
+            column="34"/>
     </issue>
 
     <issue
@@ -3559,7 +4313,9 @@
         errorLine1="    public void setChildDrawableAt(int index, Drawable drawable) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="109"
+            column="47"/>
     </issue>
 
     <issue
@@ -3568,7 +4324,9 @@
         errorLine1="    public Drawable getDrawable(int index) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="116"
+            column="12"/>
     </issue>
 
     <issue
@@ -3577,7 +4335,9 @@
         errorLine1="    public ChildDrawable getChildAt(int index) {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="123"
+            column="12"/>
     </issue>
 
     <issue
@@ -3586,7 +4346,9 @@
         errorLine1="    public void removeDrawable(Drawable drawable) {"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="137"
+            column="32"/>
     </issue>
 
     <issue
@@ -3595,7 +4357,9 @@
         errorLine1="    public void draw(Canvas canvas) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="156"
+            column="22"/>
     </issue>
 
     <issue
@@ -3604,7 +4368,9 @@
         errorLine1="    protected void onBoundsChange(Rect bounds) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="164"
+            column="35"/>
     </issue>
 
     <issue
@@ -3613,7 +4379,9 @@
         errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="170"
+            column="32"/>
     </issue>
 
     <issue
@@ -3622,7 +4390,9 @@
         errorLine1="    public void invalidateDrawable(Drawable who) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="215"
+            column="36"/>
     </issue>
 
     <issue
@@ -3631,7 +4401,9 @@
         errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="220"
+            column="34"/>
     </issue>
 
     <issue
@@ -3640,7 +4412,9 @@
         errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
         errorLine2="                                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="220"
+            column="48"/>
     </issue>
 
     <issue
@@ -3649,7 +4423,9 @@
         errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="225"
+            column="36"/>
     </issue>
 
     <issue
@@ -3658,7 +4434,9 @@
         errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
         errorLine2="                                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="225"
+            column="50"/>
     </issue>
 
     <issue
@@ -3667,7 +4445,9 @@
         errorLine1="        public ChildDrawable(Drawable drawable, CompositeDrawable parent) {"
         errorLine2="                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="250"
+            column="30"/>
     </issue>
 
     <issue
@@ -3676,7 +4456,9 @@
         errorLine1="        public ChildDrawable(Drawable drawable, CompositeDrawable parent) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="250"
+            column="49"/>
     </issue>
 
     <issue
@@ -3685,7 +4467,9 @@
         errorLine1="        public BoundsRule getBoundsRule() {"
         errorLine2="               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="286"
+            column="16"/>
     </issue>
 
     <issue
@@ -3694,7 +4478,9 @@
         errorLine1="        public Drawable getDrawable() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+            line="293"
+            column="16"/>
     </issue>
 
     <issue
@@ -3703,7 +4489,9 @@
         errorLine1="        public void onChildFocusedListener(View child, View focused);"
         errorLine2="                                           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ControlBar.java"/>
+            file="src/main/java/androidx/leanback/widget/ControlBar.java"
+            line="28"
+            column="44"/>
     </issue>
 
     <issue
@@ -3712,7 +4500,9 @@
         errorLine1="        public void onChildFocusedListener(View child, View focused);"
         errorLine2="                                                       ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ControlBar.java"/>
+            file="src/main/java/androidx/leanback/widget/ControlBar.java"
+            line="28"
+            column="56"/>
     </issue>
 
     <issue
@@ -3721,7 +4511,9 @@
         errorLine1="    public Presenter getPrimaryPresenter() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+            line="42"
+            column="12"/>
     </issue>
 
     <issue
@@ -3730,7 +4522,9 @@
         errorLine1="    public Presenter getSecondaryPresenter() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+            line="49"
+            column="12"/>
     </issue>
 
     <issue
@@ -3739,7 +4533,9 @@
         errorLine1="    public Presenter getPresenter(Object item) {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+            line="57"
+            column="12"/>
     </issue>
 
     <issue
@@ -3748,7 +4544,9 @@
         errorLine1="    public Presenter getPresenter(Object item) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+            line="57"
+            column="35"/>
     </issue>
 
     <issue
@@ -3757,7 +4555,9 @@
         errorLine1="    public Presenter[] getPresenters() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+            line="62"
+            column="12"/>
     </issue>
 
     <issue
@@ -3766,7 +4566,9 @@
         errorLine1="    protected abstract void bindColumns(Cursor cursor);"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+            file="src/main/java/androidx/leanback/database/CursorMapper.java"
+            line="31"
+            column="41"/>
     </issue>
 
     <issue
@@ -3775,7 +4577,9 @@
         errorLine1="    protected abstract Object bind(Cursor cursor);"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+            file="src/main/java/androidx/leanback/database/CursorMapper.java"
+            line="38"
+            column="24"/>
     </issue>
 
     <issue
@@ -3784,7 +4588,9 @@
         errorLine1="    protected abstract Object bind(Cursor cursor);"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+            file="src/main/java/androidx/leanback/database/CursorMapper.java"
+            line="38"
+            column="36"/>
     </issue>
 
     <issue
@@ -3793,7 +4599,9 @@
         errorLine1="    public Object convert(Cursor cursor) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+            file="src/main/java/androidx/leanback/database/CursorMapper.java"
+            line="43"
+            column="12"/>
     </issue>
 
     <issue
@@ -3802,7 +4610,9 @@
         errorLine1="    public Object convert(Cursor cursor) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+            file="src/main/java/androidx/leanback/database/CursorMapper.java"
+            line="43"
+            column="27"/>
     </issue>
 
     <issue
@@ -3811,7 +4621,9 @@
         errorLine1="    public CursorObjectAdapter(PresenterSelector presenterSelector) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+            line="33"
+            column="32"/>
     </issue>
 
     <issue
@@ -3820,7 +4632,9 @@
         errorLine1="    public CursorObjectAdapter(Presenter presenter) {"
         errorLine2="                               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+            line="40"
+            column="32"/>
     </issue>
 
     <issue
@@ -3829,7 +4643,9 @@
         errorLine1="    public void changeCursor(Cursor cursor) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+            line="58"
+            column="30"/>
     </issue>
 
     <issue
@@ -3838,7 +4654,9 @@
         errorLine1="    public Cursor swapCursor(Cursor cursor) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+            line="76"
+            column="12"/>
     </issue>
 
     <issue
@@ -3847,7 +4665,9 @@
         errorLine1="    public Cursor swapCursor(Cursor cursor) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+            line="76"
+            column="30"/>
     </issue>
 
     <issue
@@ -3856,7 +4676,9 @@
         errorLine1="     public final Cursor getCursor() {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+            line="97"
+            column="19"/>
     </issue>
 
     <issue
@@ -3865,7 +4687,9 @@
         errorLine1="    public final void setMapper(CursorMapper mapper) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+            line="105"
+            column="33"/>
     </issue>
 
     <issue
@@ -3874,7 +4698,9 @@
         errorLine1="    public final CursorMapper getMapper() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+            line="125"
+            column="18"/>
     </issue>
 
     <issue
@@ -3883,7 +4709,9 @@
         errorLine1="    public Object get(int index) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+            line="138"
+            column="12"/>
     </issue>
 
     <issue
@@ -3892,7 +4720,9 @@
         errorLine1="    public DatePicker(Context context, AttributeSet attrs) {"
         errorLine2="                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+            line="69"
+            column="23"/>
     </issue>
 
     <issue
@@ -3901,7 +4731,9 @@
         errorLine1="    public DatePicker(Context context, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+            line="69"
+            column="40"/>
     </issue>
 
     <issue
@@ -3910,7 +4742,9 @@
         errorLine1="    public DatePicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+            line="74"
+            column="23"/>
     </issue>
 
     <issue
@@ -3919,7 +4753,9 @@
         errorLine1="    public DatePicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+            line="74"
+            column="40"/>
     </issue>
 
     <issue
@@ -3928,7 +4764,9 @@
         errorLine1="    public void setDatePickerFormat(String datePickerFormat) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+            line="229"
+            column="37"/>
     </issue>
 
     <issue
@@ -3937,7 +4775,9 @@
         errorLine1="    public String getDatePickerFormat() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+            line="287"
+            column="12"/>
     </issue>
 
     <issue
@@ -3946,7 +4786,9 @@
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="410"
+            column="28"/>
     </issue>
 
     <issue
@@ -3955,7 +4797,9 @@
         errorLine1="    public ObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="428"
+            column="12"/>
     </issue>
 
     <issue
@@ -3964,7 +4808,9 @@
         errorLine1="    public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="435"
+            column="47"/>
     </issue>
 
     <issue
@@ -3973,7 +4819,9 @@
         errorLine1="    public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="442"
+            column="46"/>
     </issue>
 
     <issue
@@ -3982,7 +4830,9 @@
         errorLine1="    public BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="454"
+            column="12"/>
     </issue>
 
     <issue
@@ -3991,7 +4841,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="459"
+            column="26"/>
     </issue>
 
     <issue
@@ -4000,7 +4852,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="480"
+            column="12"/>
     </issue>
 
     <issue
@@ -4009,7 +4863,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="480"
+            column="30"/>
     </issue>
 
     <issue
@@ -4018,7 +4874,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="480"
+            column="55"/>
     </issue>
 
     <issue
@@ -4027,7 +4885,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="481"
+            column="13"/>
     </issue>
 
     <issue
@@ -4036,7 +4896,9 @@
         errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="              ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="545"
+            column="15"/>
     </issue>
 
     <issue
@@ -4045,7 +4907,9 @@
         errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="545"
+            column="33"/>
     </issue>
 
     <issue
@@ -4054,7 +4918,9 @@
         errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="545"
+            column="58"/>
     </issue>
 
     <issue
@@ -4063,7 +4929,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="546"
+            column="13"/>
     </issue>
 
     <issue
@@ -4072,7 +4940,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="551"
+            column="12"/>
     </issue>
 
     <issue
@@ -4081,7 +4951,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="551"
+            column="36"/>
     </issue>
 
     <issue
@@ -4090,7 +4962,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="551"
+            column="61"/>
     </issue>
 
     <issue
@@ -4099,7 +4973,9 @@
         errorLine1="                                   Bundle savedInstanceState) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="552"
+            column="36"/>
     </issue>
 
     <issue
@@ -4108,7 +4984,9 @@
         errorLine1="    protected void setupPresenter(Presenter rowPresenter) {"
         errorLine2="                                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="572"
+            column="35"/>
     </issue>
 
     <issue
@@ -4117,7 +4995,9 @@
         errorLine1="    protected void setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter presenter) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="583"
+            column="53"/>
     </issue>
 
     <issue
@@ -4126,7 +5006,9 @@
         errorLine1="    public RowsFragment getRowsFragment() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="613"
+            column="12"/>
     </issue>
 
     <issue
@@ -4135,7 +5017,9 @@
         errorLine1="    protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="775"
+            column="35"/>
     </issue>
 
     <issue
@@ -4144,7 +5028,9 @@
         errorLine1="    protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="775"
+            column="59"/>
     </issue>
 
     <issue
@@ -4153,7 +5039,9 @@
         errorLine1="    protected void onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter presenter,"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="800"
+            column="50"/>
     </issue>
 
     <issue
@@ -4162,7 +5050,9 @@
         errorLine1="            FullWidthDetailsOverviewRowPresenter.ViewHolder viewHolder, int adapterPosition,"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="801"
+            column="13"/>
     </issue>
 
     <issue
@@ -4171,7 +5061,9 @@
         errorLine1="    protected Object createEntranceTransition() {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="832"
+            column="15"/>
     </issue>
 
     <issue
@@ -4180,7 +5072,9 @@
         errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="838"
+            column="42"/>
     </issue>
 
     <issue
@@ -4189,7 +5083,9 @@
         errorLine1="    public DetailsParallax getParallax() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+            line="865"
+            column="12"/>
     </issue>
 
     <issue
@@ -4198,7 +5094,9 @@
         errorLine1="    public DetailsFragmentBackgroundController(DetailsFragment fragment) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+            line="135"
+            column="48"/>
     </issue>
 
     <issue
@@ -4207,7 +5105,9 @@
         errorLine1="    public final PlaybackGlue getPlaybackGlue() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+            line="265"
+            column="18"/>
     </issue>
 
     <issue
@@ -4216,7 +5116,9 @@
         errorLine1="    public final Drawable getCoverDrawable() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+            line="355"
+            column="18"/>
     </issue>
 
     <issue
@@ -4225,7 +5127,9 @@
         errorLine1="    public final Drawable getBottomDrawable() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+            line="368"
+            column="18"/>
     </issue>
 
     <issue
@@ -4234,7 +5138,9 @@
         errorLine1="    public Fragment onCreateVideoFragment() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+            line="384"
+            column="12"/>
     </issue>
 
     <issue
@@ -4243,7 +5149,9 @@
         errorLine1="    public PlaybackGlueHost onCreateGlueHost() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+            line="399"
+            column="12"/>
     </issue>
 
     <issue
@@ -4252,7 +5160,9 @@
         errorLine1="    public final Fragment findOrCreateVideoFragment() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+            line="421"
+            column="18"/>
     </issue>
 
     <issue
@@ -4261,7 +5171,9 @@
         errorLine1="    public final void setCoverBitmap(Bitmap bitmap) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+            line="432"
+            column="38"/>
     </issue>
 
     <issue
@@ -4270,7 +5182,9 @@
         errorLine1="    public final Bitmap getCoverBitmap() {"
         errorLine2="                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+            line="445"
+            column="18"/>
     </issue>
 
     <issue
@@ -4279,7 +5193,9 @@
         errorLine1="        protected FullWidthDetailsOverviewRowPresenter mParentPresenter;"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="32"
+            column="19"/>
     </issue>
 
     <issue
@@ -4288,7 +5204,9 @@
         errorLine1="        protected FullWidthDetailsOverviewRowPresenter.ViewHolder mParentViewHolder;"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="33"
+            column="19"/>
     </issue>
 
     <issue
@@ -4297,7 +5215,9 @@
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="36"
+            column="27"/>
     </issue>
 
     <issue
@@ -4306,7 +5226,9 @@
         errorLine1="        public FullWidthDetailsOverviewRowPresenter getParentPresenter() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="40"
+            column="16"/>
     </issue>
 
     <issue
@@ -4315,7 +5237,9 @@
         errorLine1="        public FullWidthDetailsOverviewRowPresenter.ViewHolder getParentViewHolder() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="44"
+            column="16"/>
     </issue>
 
     <issue
@@ -4324,7 +5248,9 @@
         errorLine1="    public View onCreateView(ViewGroup parent) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="87"
+            column="12"/>
     </issue>
 
     <issue
@@ -4333,7 +5259,9 @@
         errorLine1="    public View onCreateView(ViewGroup parent) {"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="87"
+            column="30"/>
     </issue>
 
     <issue
@@ -4342,7 +5270,9 @@
         errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="93"
+            column="12"/>
     </issue>
 
     <issue
@@ -4351,7 +5281,9 @@
         errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="93"
+            column="52"/>
     </issue>
 
     <issue
@@ -4360,7 +5292,9 @@
         errorLine1="    public void setContext(ViewHolder viewHolder,"
         errorLine2="                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="109"
+            column="28"/>
     </issue>
 
     <issue
@@ -4369,7 +5303,9 @@
         errorLine1="            FullWidthDetailsOverviewRowPresenter.ViewHolder parentViewHolder,"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="110"
+            column="13"/>
     </issue>
 
     <issue
@@ -4378,7 +5314,9 @@
         errorLine1="            FullWidthDetailsOverviewRowPresenter parentPresenter) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="111"
+            column="13"/>
     </issue>
 
     <issue
@@ -4387,7 +5325,9 @@
         errorLine1="    public boolean isBoundToImage(ViewHolder viewHolder, DetailsOverviewRow row) {"
         errorLine2="                                  ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="124"
+            column="35"/>
     </issue>
 
     <issue
@@ -4396,7 +5336,9 @@
         errorLine1="    public boolean isBoundToImage(ViewHolder viewHolder, DetailsOverviewRow row) {"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="124"
+            column="58"/>
     </issue>
 
     <issue
@@ -4405,7 +5347,9 @@
         errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="136"
+            column="34"/>
     </issue>
 
     <issue
@@ -4414,7 +5358,9 @@
         errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="136"
+            column="67"/>
     </issue>
 
     <issue
@@ -4423,7 +5369,9 @@
         errorLine1="    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+            line="170"
+            column="36"/>
     </issue>
 
     <issue
@@ -4432,7 +5380,9 @@
         errorLine1="        public void onImageDrawableChanged(DetailsOverviewRow row) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="55"
+            column="44"/>
     </issue>
 
     <issue
@@ -4441,7 +5391,9 @@
         errorLine1="        public void onItemChanged(DetailsOverviewRow row) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="61"
+            column="35"/>
     </issue>
 
     <issue
@@ -4450,7 +5402,9 @@
         errorLine1="        public void onActionsAdapterChanged(DetailsOverviewRow row) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="67"
+            column="45"/>
     </issue>
 
     <issue
@@ -4459,7 +5413,9 @@
         errorLine1="    public DetailsOverviewRow(Object item) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="83"
+            column="31"/>
     </issue>
 
     <issue
@@ -4468,7 +5424,9 @@
         errorLine1="    public final Object getItem() {"
         errorLine2="                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="185"
+            column="18"/>
     </issue>
 
     <issue
@@ -4477,7 +5435,9 @@
         errorLine1="    public final void setItem(Object item) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="193"
+            column="31"/>
     </issue>
 
     <issue
@@ -4486,7 +5446,9 @@
         errorLine1="    public final void setImageDrawable(Drawable drawable) {"
         errorLine2="                                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="206"
+            column="40"/>
     </issue>
 
     <issue
@@ -4495,7 +5457,9 @@
         errorLine1="    public final void setImageBitmap(Context context, Bitmap bm) {"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="220"
+            column="38"/>
     </issue>
 
     <issue
@@ -4504,7 +5468,9 @@
         errorLine1="    public final void setImageBitmap(Context context, Bitmap bm) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="220"
+            column="55"/>
     </issue>
 
     <issue
@@ -4513,7 +5479,9 @@
         errorLine1="    public final Drawable getImageDrawable() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="231"
+            column="18"/>
     </issue>
 
     <issue
@@ -4522,7 +5490,9 @@
         errorLine1="    public final void addAction(Action action) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="270"
+            column="33"/>
     </issue>
 
     <issue
@@ -4531,7 +5501,9 @@
         errorLine1="    public final void addAction(int pos, Action action) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="284"
+            column="42"/>
     </issue>
 
     <issue
@@ -4540,7 +5512,9 @@
         errorLine1="    public final boolean removeAction(Action action) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="297"
+            column="39"/>
     </issue>
 
     <issue
@@ -4549,7 +5523,9 @@
         errorLine1="    public final List&lt;Action> getActions() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="310"
+            column="18"/>
     </issue>
 
     <issue
@@ -4558,7 +5534,9 @@
         errorLine1="    public final ObjectAdapter getActionsAdapter() {"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="317"
+            column="18"/>
     </issue>
 
     <issue
@@ -4567,7 +5545,9 @@
         errorLine1="    public final void setActionsAdapter(ObjectAdapter adapter) {"
         errorLine2="                                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="327"
+            column="41"/>
     </issue>
 
     <issue
@@ -4576,7 +5556,9 @@
         errorLine1="    public Action getActionForKeyCode(int keyCode) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+            line="340"
+            column="12"/>
     </issue>
 
     <issue
@@ -4585,7 +5567,9 @@
         errorLine1="        public ViewHolder(View rootView, Presenter detailsPresenter) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="268"
+            column="27"/>
     </issue>
 
     <issue
@@ -4594,7 +5578,9 @@
         errorLine1="        public ViewHolder(View rootView, Presenter detailsPresenter) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="268"
+            column="42"/>
     </issue>
 
     <issue
@@ -4603,7 +5589,9 @@
         errorLine1="    public DetailsOverviewRowPresenter(Presenter detailsPresenter) {"
         errorLine2="                                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="308"
+            column="40"/>
     </issue>
 
     <issue
@@ -4612,7 +5600,9 @@
         errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="317"
+            column="44"/>
     </issue>
 
     <issue
@@ -4621,7 +5611,9 @@
         errorLine1="    public OnActionClickedListener getOnActionClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="324"
+            column="12"/>
     </issue>
 
     <issue
@@ -4630,7 +5622,9 @@
         errorLine1="    public final void setSharedElementEnterTransition(Activity activity,"
         errorLine2="                                                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="372"
+            column="55"/>
     </issue>
 
     <issue
@@ -4639,7 +5633,9 @@
         errorLine1="            String sharedElementName, long timeoutMs) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="373"
+            column="13"/>
     </issue>
 
     <issue
@@ -4648,7 +5644,9 @@
         errorLine1="    public final void setSharedElementEnterTransition(Activity activity,"
         errorLine2="                                                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="393"
+            column="55"/>
     </issue>
 
     <issue
@@ -4657,7 +5655,9 @@
         errorLine1="            String sharedElementName) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="394"
+            column="13"/>
     </issue>
 
     <issue
@@ -4666,7 +5666,9 @@
         errorLine1="    protected void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="407"
+            column="38"/>
     </issue>
 
     <issue
@@ -4675,7 +5677,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="415"
+            column="15"/>
     </issue>
 
     <issue
@@ -4684,7 +5688,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="415"
+            column="59"/>
     </issue>
 
     <issue
@@ -4693,7 +5699,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="547"
+            column="40"/>
     </issue>
 
     <issue
@@ -4702,7 +5710,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="547"
+            column="72"/>
     </issue>
 
     <issue
@@ -4711,7 +5721,9 @@
         errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="560"
+            column="42"/>
     </issue>
 
     <issue
@@ -4720,7 +5732,9 @@
         errorLine1="    protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="577"
+            column="41"/>
     </issue>
 
     <issue
@@ -4729,7 +5743,9 @@
         errorLine1="    protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="587"
+            column="46"/>
     </issue>
 
     <issue
@@ -4738,7 +5754,9 @@
         errorLine1="    protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+            line="596"
+            column="48"/>
     </issue>
 
     <issue
@@ -4747,7 +5765,9 @@
         errorLine1="    public Parallax.IntProperty getOverviewRowTop() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallax.java"
+            line="58"
+            column="12"/>
     </issue>
 
     <issue
@@ -4756,7 +5776,9 @@
         errorLine1="    public Parallax.IntProperty getOverviewRowBottom() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallax.java"
+            line="66"
+            column="12"/>
     </issue>
 
     <issue
@@ -4765,7 +5787,9 @@
         errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
         errorLine2="                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="77"
+            column="36"/>
     </issue>
 
     <issue
@@ -4774,7 +5798,9 @@
         errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
         errorLine2="                                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="77"
+            column="53"/>
     </issue>
 
     <issue
@@ -4783,7 +5809,9 @@
         errorLine1="                                   Drawable coverDrawable,"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="78"
+            column="36"/>
     </issue>
 
     <issue
@@ -4792,7 +5820,9 @@
         errorLine1="                                   ParallaxTarget coverDrawableParallaxTarget) {"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="79"
+            column="36"/>
     </issue>
 
     <issue
@@ -4801,7 +5831,9 @@
         errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
         errorLine2="                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="96"
+            column="36"/>
     </issue>
 
     <issue
@@ -4810,7 +5842,9 @@
         errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
         errorLine2="                                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="96"
+            column="53"/>
     </issue>
 
     <issue
@@ -4819,7 +5853,9 @@
         errorLine1="                                   Drawable coverDrawable, Drawable bottomDrawable,"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="97"
+            column="36"/>
     </issue>
 
     <issue
@@ -4828,7 +5864,9 @@
         errorLine1="                                   Drawable coverDrawable, Drawable bottomDrawable,"
         errorLine2="                                                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="97"
+            column="60"/>
     </issue>
 
     <issue
@@ -4837,7 +5875,9 @@
         errorLine1="                                   ParallaxTarget coverDrawableParallaxTarget) {"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="98"
+            column="36"/>
     </issue>
 
     <issue
@@ -4846,7 +5886,9 @@
         errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax) {"
         errorLine2="                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="108"
+            column="36"/>
     </issue>
 
     <issue
@@ -4855,7 +5897,9 @@
         errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="108"
+            column="53"/>
     </issue>
 
     <issue
@@ -4864,7 +5908,9 @@
         errorLine1="    public Drawable getCoverDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="143"
+            column="12"/>
     </issue>
 
     <issue
@@ -4873,7 +5919,9 @@
         errorLine1="    public Drawable getBottomDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+            line="150"
+            column="12"/>
     </issue>
 
     <issue
@@ -4882,7 +5930,9 @@
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="405"
+            column="28"/>
     </issue>
 
     <issue
@@ -4891,7 +5941,9 @@
         errorLine1="    public ObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="423"
+            column="12"/>
     </issue>
 
     <issue
@@ -4900,7 +5952,9 @@
         errorLine1="    public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="430"
+            column="47"/>
     </issue>
 
     <issue
@@ -4909,7 +5963,9 @@
         errorLine1="    public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="437"
+            column="46"/>
     </issue>
 
     <issue
@@ -4918,7 +5974,9 @@
         errorLine1="    public BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="449"
+            column="12"/>
     </issue>
 
     <issue
@@ -4927,7 +5985,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="454"
+            column="26"/>
     </issue>
 
     <issue
@@ -4936,7 +5996,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="475"
+            column="12"/>
     </issue>
 
     <issue
@@ -4945,7 +6007,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="475"
+            column="30"/>
     </issue>
 
     <issue
@@ -4954,7 +6018,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="475"
+            column="55"/>
     </issue>
 
     <issue
@@ -4963,7 +6029,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="476"
+            column="13"/>
     </issue>
 
     <issue
@@ -4972,7 +6040,9 @@
         errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="              ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="540"
+            column="15"/>
     </issue>
 
     <issue
@@ -4981,7 +6051,9 @@
         errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="540"
+            column="33"/>
     </issue>
 
     <issue
@@ -4990,7 +6062,9 @@
         errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="540"
+            column="58"/>
     </issue>
 
     <issue
@@ -4999,7 +6073,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="541"
+            column="13"/>
     </issue>
 
     <issue
@@ -5008,7 +6084,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="546"
+            column="12"/>
     </issue>
 
     <issue
@@ -5017,7 +6095,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="546"
+            column="36"/>
     </issue>
 
     <issue
@@ -5026,7 +6106,9 @@
         errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
         errorLine2="                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="546"
+            column="61"/>
     </issue>
 
     <issue
@@ -5035,7 +6117,9 @@
         errorLine1="                                   Bundle savedInstanceState) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="547"
+            column="36"/>
     </issue>
 
     <issue
@@ -5044,7 +6128,9 @@
         errorLine1="    protected void setupPresenter(Presenter rowPresenter) {"
         errorLine2="                                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="567"
+            column="35"/>
     </issue>
 
     <issue
@@ -5053,7 +6139,9 @@
         errorLine1="    protected void setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter presenter) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="578"
+            column="53"/>
     </issue>
 
     <issue
@@ -5062,7 +6150,9 @@
         errorLine1="    public RowsSupportFragment getRowsSupportFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="608"
+            column="12"/>
     </issue>
 
     <issue
@@ -5071,7 +6161,9 @@
         errorLine1="    protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="770"
+            column="35"/>
     </issue>
 
     <issue
@@ -5080,7 +6172,9 @@
         errorLine1="    protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="770"
+            column="59"/>
     </issue>
 
     <issue
@@ -5089,7 +6183,9 @@
         errorLine1="    protected void onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter presenter,"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="795"
+            column="50"/>
     </issue>
 
     <issue
@@ -5098,7 +6194,9 @@
         errorLine1="            FullWidthDetailsOverviewRowPresenter.ViewHolder viewHolder, int adapterPosition,"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="796"
+            column="13"/>
     </issue>
 
     <issue
@@ -5107,7 +6205,9 @@
         errorLine1="    protected Object createEntranceTransition() {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="827"
+            column="15"/>
     </issue>
 
     <issue
@@ -5116,7 +6216,9 @@
         errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="833"
+            column="42"/>
     </issue>
 
     <issue
@@ -5125,7 +6227,9 @@
         errorLine1="    public DetailsParallax getParallax() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+            line="860"
+            column="12"/>
     </issue>
 
     <issue
@@ -5134,7 +6238,9 @@
         errorLine1="    public DetailsSupportFragmentBackgroundController(DetailsSupportFragment fragment) {"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+            line="130"
+            column="55"/>
     </issue>
 
     <issue
@@ -5143,7 +6249,9 @@
         errorLine1="    public final PlaybackGlue getPlaybackGlue() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+            line="260"
+            column="18"/>
     </issue>
 
     <issue
@@ -5152,7 +6260,9 @@
         errorLine1="    public final Drawable getCoverDrawable() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+            line="350"
+            column="18"/>
     </issue>
 
     <issue
@@ -5161,7 +6271,9 @@
         errorLine1="    public final Drawable getBottomDrawable() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+            line="363"
+            column="18"/>
     </issue>
 
     <issue
@@ -5170,7 +6282,9 @@
         errorLine1="    public Fragment onCreateVideoSupportFragment() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+            line="379"
+            column="12"/>
     </issue>
 
     <issue
@@ -5179,7 +6293,9 @@
         errorLine1="    public PlaybackGlueHost onCreateGlueHost() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+            line="394"
+            column="12"/>
     </issue>
 
     <issue
@@ -5188,7 +6304,9 @@
         errorLine1="    public final Fragment findOrCreateVideoSupportFragment() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+            line="416"
+            column="18"/>
     </issue>
 
     <issue
@@ -5197,7 +6315,9 @@
         errorLine1="    public final void setCoverBitmap(Bitmap bitmap) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+            line="427"
+            column="38"/>
     </issue>
 
     <issue
@@ -5206,7 +6326,9 @@
         errorLine1="    public final Bitmap getCoverBitmap() {"
         errorLine2="                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+            file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+            line="440"
+            column="18"/>
     </issue>
 
     <issue
@@ -5215,7 +6337,9 @@
         errorLine1="    public Object getChangePayload(@NonNull Value oldItem, @NonNull Value newItem) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DiffCallback.java"/>
+            file="src/main/java/androidx/leanback/widget/DiffCallback.java"
+            line="65"
+            column="12"/>
     </issue>
 
     <issue
@@ -5224,7 +6348,9 @@
         errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+            line="45"
+            column="12"/>
     </issue>
 
     <issue
@@ -5233,7 +6359,9 @@
         errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+            line="45"
+            column="52"/>
     </issue>
 
     <issue
@@ -5242,7 +6370,9 @@
         errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+            line="53"
+            column="34"/>
     </issue>
 
     <issue
@@ -5251,7 +6381,9 @@
         errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+            line="53"
+            column="67"/>
     </issue>
 
     <issue
@@ -5260,7 +6392,9 @@
         errorLine1="    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+            line="57"
+            column="36"/>
     </issue>
 
     <issue
@@ -5269,7 +6403,9 @@
         errorLine1="    public void setBackgroundDrawable(Drawable drawable) {"
         errorLine2="                                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="76"
+            column="39"/>
     </issue>
 
     <issue
@@ -5278,7 +6414,9 @@
         errorLine1="    public Drawable getBackgroundDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="90"
+            column="12"/>
     </issue>
 
     <issue
@@ -5287,7 +6425,9 @@
         errorLine1="    public void setImageDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="99"
+            column="34"/>
     </issue>
 
     <issue
@@ -5296,7 +6436,9 @@
         errorLine1="    public Drawable getImageDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="107"
+            column="12"/>
     </issue>
 
     <issue
@@ -5305,7 +6447,9 @@
         errorLine1="    public void setMessage(CharSequence message) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="116"
+            column="28"/>
     </issue>
 
     <issue
@@ -5314,7 +6458,9 @@
         errorLine1="    public CharSequence getMessage() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="124"
+            column="12"/>
     </issue>
 
     <issue
@@ -5323,7 +6469,9 @@
         errorLine1="    public void setButtonText(String text) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="133"
+            column="31"/>
     </issue>
 
     <issue
@@ -5332,7 +6480,9 @@
         errorLine1="    public String getButtonText() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="141"
+            column="12"/>
     </issue>
 
     <issue
@@ -5341,7 +6491,9 @@
         errorLine1="    public void setButtonClickListener(View.OnClickListener clickListener) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="150"
+            column="40"/>
     </issue>
 
     <issue
@@ -5350,7 +6502,9 @@
         errorLine1="    public View.OnClickListener getButtonClickListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="158"
+            column="12"/>
     </issue>
 
     <issue
@@ -5359,7 +6513,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="163"
+            column="12"/>
     </issue>
 
     <issue
@@ -5368,7 +6524,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="163"
+            column="30"/>
     </issue>
 
     <issue
@@ -5377,7 +6535,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="163"
+            column="55"/>
     </issue>
 
     <issue
@@ -5386,7 +6546,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+            line="164"
+            column="13"/>
     </issue>
 
     <issue
@@ -5395,7 +6557,9 @@
         errorLine1="    public void setBackgroundDrawable(Drawable drawable) {"
         errorLine2="                                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="71"
+            column="39"/>
     </issue>
 
     <issue
@@ -5404,7 +6568,9 @@
         errorLine1="    public Drawable getBackgroundDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="85"
+            column="12"/>
     </issue>
 
     <issue
@@ -5413,7 +6579,9 @@
         errorLine1="    public void setImageDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="94"
+            column="34"/>
     </issue>
 
     <issue
@@ -5422,7 +6590,9 @@
         errorLine1="    public Drawable getImageDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="102"
+            column="12"/>
     </issue>
 
     <issue
@@ -5431,7 +6601,9 @@
         errorLine1="    public void setMessage(CharSequence message) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="111"
+            column="28"/>
     </issue>
 
     <issue
@@ -5440,7 +6612,9 @@
         errorLine1="    public CharSequence getMessage() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="119"
+            column="12"/>
     </issue>
 
     <issue
@@ -5449,7 +6623,9 @@
         errorLine1="    public void setButtonText(String text) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="128"
+            column="31"/>
     </issue>
 
     <issue
@@ -5458,7 +6634,9 @@
         errorLine1="    public String getButtonText() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="136"
+            column="12"/>
     </issue>
 
     <issue
@@ -5467,7 +6645,9 @@
         errorLine1="    public void setButtonClickListener(View.OnClickListener clickListener) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="145"
+            column="40"/>
     </issue>
 
     <issue
@@ -5476,7 +6656,9 @@
         errorLine1="    public View.OnClickListener getButtonClickListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="153"
+            column="12"/>
     </issue>
 
     <issue
@@ -5485,7 +6667,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="158"
+            column="12"/>
     </issue>
 
     <issue
@@ -5494,7 +6678,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="158"
+            column="30"/>
     </issue>
 
     <issue
@@ -5503,7 +6689,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="158"
+            column="55"/>
     </issue>
 
     <issue
@@ -5512,7 +6700,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+            line="159"
+            column="13"/>
     </issue>
 
     <issue
@@ -5521,7 +6711,9 @@
         errorLine1="    public FadeAndShortSlide(Context context, AttributeSet attrs) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="163"
+            column="30"/>
     </issue>
 
     <issue
@@ -5530,7 +6722,9 @@
         errorLine1="    public FadeAndShortSlide(Context context, AttributeSet attrs) {"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="163"
+            column="47"/>
     </issue>
 
     <issue
@@ -5539,7 +6733,9 @@
         errorLine1="    public void setEpicenterCallback(EpicenterCallback epicenterCallback) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="172"
+            column="38"/>
     </issue>
 
     <issue
@@ -5548,7 +6744,9 @@
         errorLine1="    public void captureStartValues(TransitionValues transitionValues) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="185"
+            column="36"/>
     </issue>
 
     <issue
@@ -5557,7 +6755,9 @@
         errorLine1="    public void captureEndValues(TransitionValues transitionValues) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="192"
+            column="34"/>
     </issue>
 
     <issue
@@ -5566,7 +6766,9 @@
         errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
         errorLine2="           ~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="224"
+            column="12"/>
     </issue>
 
     <issue
@@ -5575,7 +6777,9 @@
         errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="224"
+            column="30"/>
     </issue>
 
     <issue
@@ -5584,7 +6788,9 @@
         errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
         errorLine2="                                                  ~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="224"
+            column="51"/>
     </issue>
 
     <issue
@@ -5593,7 +6799,9 @@
         errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
         errorLine2="                                                             ~~~~~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="224"
+            column="62"/>
     </issue>
 
     <issue
@@ -5602,7 +6810,9 @@
         errorLine1="            TransitionValues endValues) {"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="225"
+            column="13"/>
     </issue>
 
     <issue
@@ -5611,7 +6821,9 @@
         errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
         errorLine2="           ~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="255"
+            column="12"/>
     </issue>
 
     <issue
@@ -5620,7 +6832,9 @@
         errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="255"
+            column="33"/>
     </issue>
 
     <issue
@@ -5629,7 +6843,9 @@
         errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
         errorLine2="                                                     ~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="255"
+            column="54"/>
     </issue>
 
     <issue
@@ -5638,7 +6854,9 @@
         errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
         errorLine2="                                                                ~~~~~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="255"
+            column="65"/>
     </issue>
 
     <issue
@@ -5647,7 +6865,9 @@
         errorLine1="            TransitionValues endValues) {"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="256"
+            column="13"/>
     </issue>
 
     <issue
@@ -5656,7 +6876,9 @@
         errorLine1="    public Transition addListener(TransitionListener listener) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="287"
+            column="12"/>
     </issue>
 
     <issue
@@ -5665,7 +6887,9 @@
         errorLine1="    public Transition addListener(TransitionListener listener) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="287"
+            column="35"/>
     </issue>
 
     <issue
@@ -5674,7 +6898,9 @@
         errorLine1="    public Transition removeListener(TransitionListener listener) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="293"
+            column="12"/>
     </issue>
 
     <issue
@@ -5683,7 +6909,9 @@
         errorLine1="    public Transition removeListener(TransitionListener listener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="293"
+            column="38"/>
     </issue>
 
     <issue
@@ -5692,7 +6920,9 @@
         errorLine1="    public Transition clone() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+            line="316"
+            column="12"/>
     </issue>
 
     <issue
@@ -5701,7 +6931,9 @@
         errorLine1="    public ConstantState getConstantState() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+            line="85"
+            column="12"/>
     </issue>
 
     <issue
@@ -5710,7 +6942,9 @@
         errorLine1="    public Drawable mutate() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+            line="90"
+            column="12"/>
     </issue>
 
     <issue
@@ -5719,7 +6953,9 @@
         errorLine1="    public void setBitmap(Bitmap bitmap) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+            line="101"
+            column="27"/>
     </issue>
 
     <issue
@@ -5728,7 +6964,9 @@
         errorLine1="    public Bitmap getBitmap() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+            line="114"
+            column="12"/>
     </issue>
 
     <issue
@@ -5737,7 +6975,9 @@
         errorLine1="    public void setSource(Rect source) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+            line="121"
+            column="27"/>
     </issue>
 
     <issue
@@ -5746,7 +6986,9 @@
         errorLine1="    public Rect getSource() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+            line="128"
+            column="12"/>
     </issue>
 
     <issue
@@ -5755,7 +6997,9 @@
         errorLine1="    public void draw(Canvas canvas) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+            line="151"
+            column="22"/>
     </issue>
 
     <issue
@@ -5764,7 +7008,9 @@
         errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+            file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+            line="186"
+            column="32"/>
     </issue>
 
     <issue
@@ -5773,7 +7019,9 @@
         errorLine1="    public static void setupBrowseItemFocusHighlight(ItemBridgeAdapter adapter, int zoomIndex,"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+            line="201"
+            column="54"/>
     </issue>
 
     <issue
@@ -5782,7 +7030,9 @@
         errorLine1="    public static void setupHeaderItemFocusHighlight(VerticalGridView gridView) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+            line="220"
+            column="54"/>
     </issue>
 
     <issue
@@ -5791,7 +7041,9 @@
         errorLine1="    public static void setupHeaderItemFocusHighlight(VerticalGridView gridView,"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+            line="234"
+            column="54"/>
     </issue>
 
     <issue
@@ -5800,7 +7052,9 @@
         errorLine1="    public static void setupHeaderItemFocusHighlight(ItemBridgeAdapter adapter) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+            line="251"
+            column="54"/>
     </issue>
 
     <issue
@@ -5809,7 +7063,9 @@
         errorLine1="    public static void setupHeaderItemFocusHighlight(ItemBridgeAdapter adapter,"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+            line="264"
+            column="54"/>
     </issue>
 
     <issue
@@ -5818,7 +7074,9 @@
         errorLine1="        public void onBindLogo(ViewHolder vh) {"
         errorLine2="                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="104"
+            column="32"/>
     </issue>
 
     <issue
@@ -5827,7 +7085,9 @@
         errorLine1="        protected DetailsOverviewRow.Listener createRowListener() {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="164"
+            column="19"/>
     </issue>
 
     <issue
@@ -5836,7 +7096,9 @@
         errorLine1="            public void onImageDrawableChanged(DetailsOverviewRow row) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="170"
+            column="48"/>
     </issue>
 
     <issue
@@ -5845,7 +7107,9 @@
         errorLine1="            public void onItemChanged(DetailsOverviewRow row) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="176"
+            column="39"/>
     </issue>
 
     <issue
@@ -5854,7 +7118,9 @@
         errorLine1="            public void onActionsAdapterChanged(DetailsOverviewRow row) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="184"
+            column="49"/>
     </issue>
 
     <issue
@@ -5863,7 +7129,9 @@
         errorLine1="        public ViewHolder(View rootView, Presenter detailsPresenter,"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="311"
+            column="27"/>
     </issue>
 
     <issue
@@ -5872,7 +7140,9 @@
         errorLine1="        public ViewHolder(View rootView, Presenter detailsPresenter,"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="311"
+            column="42"/>
     </issue>
 
     <issue
@@ -5881,7 +7151,9 @@
         errorLine1="                DetailsOverviewLogoPresenter logoPresenter) {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="312"
+            column="17"/>
     </issue>
 
     <issue
@@ -5890,7 +7162,9 @@
         errorLine1="        public final ViewGroup getOverviewView() {"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="340"
+            column="22"/>
     </issue>
 
     <issue
@@ -5899,7 +7173,9 @@
         errorLine1="        public final DetailsOverviewLogoPresenter.ViewHolder getLogoViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="347"
+            column="22"/>
     </issue>
 
     <issue
@@ -5908,7 +7184,9 @@
         errorLine1="        public final Presenter.ViewHolder getDetailsDescriptionViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="354"
+            column="22"/>
     </issue>
 
     <issue
@@ -5917,7 +7195,9 @@
         errorLine1="        public final ViewGroup getDetailsDescriptionFrame() {"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="361"
+            column="22"/>
     </issue>
 
     <issue
@@ -5926,7 +7206,9 @@
         errorLine1="        public final ViewGroup getActionsRow() {"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="368"
+            column="22"/>
     </issue>
 
     <issue
@@ -5935,7 +7217,9 @@
         errorLine1="    public FullWidthDetailsOverviewRowPresenter(Presenter detailsPresenter) {"
         errorLine2="                                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="403"
+            column="49"/>
     </issue>
 
     <issue
@@ -5944,7 +7228,9 @@
         errorLine1="    public FullWidthDetailsOverviewRowPresenter(Presenter detailsPresenter,"
         errorLine2="                                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="414"
+            column="49"/>
     </issue>
 
     <issue
@@ -5953,7 +7239,9 @@
         errorLine1="            DetailsOverviewLogoPresenter logoPresenter) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="415"
+            column="13"/>
     </issue>
 
     <issue
@@ -5962,7 +7250,9 @@
         errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="425"
+            column="44"/>
     </issue>
 
     <issue
@@ -5971,7 +7261,9 @@
         errorLine1="    public OnActionClickedListener getOnActionClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="432"
+            column="12"/>
     </issue>
 
     <issue
@@ -5980,7 +7272,9 @@
         errorLine1="    public final void setListener(Listener listener) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="524"
+            column="35"/>
     </issue>
 
     <issue
@@ -5989,7 +7283,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="536"
+            column="15"/>
     </issue>
 
     <issue
@@ -5998,7 +7294,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="536"
+            column="59"/>
     </issue>
 
     <issue
@@ -6007,7 +7305,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="571"
+            column="40"/>
     </issue>
 
     <issue
@@ -6016,7 +7316,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="571"
+            column="72"/>
     </issue>
 
     <issue
@@ -6025,7 +7327,9 @@
         errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="583"
+            column="42"/>
     </issue>
 
     <issue
@@ -6034,7 +7338,9 @@
         errorLine1="    protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="597"
+            column="41"/>
     </issue>
 
     <issue
@@ -6043,7 +7349,9 @@
         errorLine1="    protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="607"
+            column="46"/>
     </issue>
 
     <issue
@@ -6052,7 +7360,9 @@
         errorLine1="    protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="615"
+            column="48"/>
     </issue>
 
     <issue
@@ -6061,7 +7371,9 @@
         errorLine1="    public final void notifyOnBindLogo(ViewHolder viewHolder) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="627"
+            column="40"/>
     </issue>
 
     <issue
@@ -6070,7 +7382,9 @@
         errorLine1="    protected void onLayoutLogo(ViewHolder viewHolder, int oldState, boolean logoChanged) {"
         errorLine2="                                ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="642"
+            column="33"/>
     </issue>
 
     <issue
@@ -6079,7 +7393,9 @@
         errorLine1="    protected void onLayoutOverviewFrame(ViewHolder viewHolder, int oldState, boolean logoChanged) {"
         errorLine2="                                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="686"
+            column="42"/>
     </issue>
 
     <issue
@@ -6088,7 +7404,9 @@
         errorLine1="    public final void setState(ViewHolder viewHolder, int state) {"
         errorLine2="                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="751"
+            column="32"/>
     </issue>
 
     <issue
@@ -6097,7 +7415,9 @@
         errorLine1="    protected void onStateChanged(ViewHolder viewHolder, int oldState) {"
         errorLine2="                                  ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="766"
+            column="35"/>
     </issue>
 
     <issue
@@ -6106,7 +7426,9 @@
         errorLine1="    public void setEntranceTransitionState(RowPresenter.ViewHolder holder,"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+            line="772"
+            column="44"/>
     </issue>
 
     <issue
@@ -6115,7 +7437,9 @@
         errorLine1="    public void setSharedElementEnterTransition(Activity activity, String sharedElementName) {"
         errorLine2="                                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+            line="72"
+            column="49"/>
     </issue>
 
     <issue
@@ -6124,7 +7448,9 @@
         errorLine1="    public void setSharedElementEnterTransition(Activity activity, String sharedElementName) {"
         errorLine2="                                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+            line="72"
+            column="68"/>
     </issue>
 
     <issue
@@ -6133,7 +7459,9 @@
         errorLine1="    public void setSharedElementEnterTransition(Activity activity, String sharedElementName,"
         errorLine2="                                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+            line="76"
+            column="49"/>
     </issue>
 
     <issue
@@ -6142,7 +7470,9 @@
         errorLine1="    public void setSharedElementEnterTransition(Activity activity, String sharedElementName,"
         errorLine2="                                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+            line="76"
+            column="68"/>
     </issue>
 
     <issue
@@ -6151,7 +7481,9 @@
         errorLine1="    public void onBindLogo(ViewHolder vh) {"
         errorLine2="                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+            line="120"
+            column="28"/>
     </issue>
 
     <issue
@@ -6160,7 +7492,9 @@
         errorLine1="        public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
         errorLine2="                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="92"
+            column="25"/>
     </issue>
 
     <issue
@@ -6169,7 +7503,9 @@
         errorLine1="        public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="92"
+            column="39"/>
     </issue>
 
     <issue
@@ -6178,7 +7514,9 @@
         errorLine1="        public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="92"
+            column="59"/>
     </issue>
 
     <issue
@@ -6187,7 +7525,9 @@
         errorLine1="        public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
         errorLine2="                                                                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="92"
+            column="78"/>
     </issue>
 
     <issue
@@ -6196,7 +7536,9 @@
         errorLine1="        public String getTitle() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="103"
+            column="16"/>
     </issue>
 
     <issue
@@ -6205,7 +7547,9 @@
         errorLine1="        public String getDescription() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="111"
+            column="16"/>
     </issue>
 
     <issue
@@ -6214,7 +7558,9 @@
         errorLine1="        public String getBreadcrumb() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="119"
+            column="16"/>
     </issue>
 
     <issue
@@ -6223,7 +7569,9 @@
         errorLine1="        public Drawable getIconDrawable() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="127"
+            column="16"/>
     </issue>
 
     <issue
@@ -6232,7 +7580,9 @@
         errorLine1="    public View onCreateView("
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="150"
+            column="12"/>
     </issue>
 
     <issue
@@ -6241,7 +7591,9 @@
         errorLine1="            final LayoutInflater inflater, ViewGroup container, Guidance guidance) {"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="151"
+            column="19"/>
     </issue>
 
     <issue
@@ -6250,7 +7602,9 @@
         errorLine1="            final LayoutInflater inflater, ViewGroup container, Guidance guidance) {"
         errorLine2="                                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="151"
+            column="44"/>
     </issue>
 
     <issue
@@ -6259,7 +7613,9 @@
         errorLine1="            final LayoutInflater inflater, ViewGroup container, Guidance guidance) {"
         errorLine2="                                                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="151"
+            column="65"/>
     </issue>
 
     <issue
@@ -6268,7 +7624,9 @@
         errorLine1="    public TextView getTitleView() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="229"
+            column="12"/>
     </issue>
 
     <issue
@@ -6277,7 +7635,9 @@
         errorLine1="    public TextView getDescriptionView() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="237"
+            column="12"/>
     </issue>
 
     <issue
@@ -6286,7 +7646,9 @@
         errorLine1="    public TextView getBreadcrumbView() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="245"
+            column="12"/>
     </issue>
 
     <issue
@@ -6295,7 +7657,9 @@
         errorLine1="    public ImageView getIconView() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+            line="253"
+            column="12"/>
     </issue>
 
     <issue
@@ -6304,7 +7668,9 @@
         errorLine1="        public BuilderBase(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="145"
+            column="28"/>
     </issue>
 
     <issue
@@ -6313,7 +7679,9 @@
         errorLine1="        public Context getContext() {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="154"
+            column="16"/>
     </issue>
 
     <issue
@@ -6322,7 +7690,9 @@
         errorLine1="        protected final void applyValues(GuidedAction action) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="166"
+            column="42"/>
     </issue>
 
     <issue
@@ -6331,7 +7701,9 @@
         errorLine1="        public B title(CharSequence title) {"
         errorLine2="                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="234"
+            column="24"/>
     </issue>
 
     <issue
@@ -6340,7 +7712,9 @@
         errorLine1="        public B editTitle(CharSequence editTitle) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="254"
+            column="28"/>
     </issue>
 
     <issue
@@ -6349,7 +7723,9 @@
         errorLine1="        public B description(CharSequence description) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="275"
+            column="30"/>
     </issue>
 
     <issue
@@ -6358,7 +7734,9 @@
         errorLine1="        public B editDescription(CharSequence description) {"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="295"
+            column="34"/>
     </issue>
 
     <issue
@@ -6367,7 +7745,9 @@
         errorLine1="        public B intent(Intent intent) {"
         errorLine2="                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="316"
+            column="25"/>
     </issue>
 
     <issue
@@ -6376,7 +7756,9 @@
         errorLine1="        public B icon(Drawable icon) {"
         errorLine2="                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="325"
+            column="23"/>
     </issue>
 
     <issue
@@ -6385,7 +7767,9 @@
         errorLine1="        public B iconResourceId(@DrawableRes int iconResourceId, Context context) {"
         errorLine2="                                                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="339"
+            column="66"/>
     </issue>
 
     <issue
@@ -6394,7 +7778,9 @@
         errorLine1="        public B subActions(List&lt;GuidedAction> subActions) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="533"
+            column="29"/>
     </issue>
 
     <issue
@@ -6403,7 +7789,9 @@
         errorLine1="        public B autofillHints(String... hints) {"
         errorLine2="                               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="555"
+            column="32"/>
     </issue>
 
     <issue
@@ -6412,7 +7800,9 @@
         errorLine1="        public Builder(Context context) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="578"
+            column="24"/>
     </issue>
 
     <issue
@@ -6421,7 +7811,9 @@
         errorLine1="        public GuidedAction build() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="586"
+            column="16"/>
     </issue>
 
     <issue
@@ -6430,7 +7822,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="630"
+            column="12"/>
     </issue>
 
     <issue
@@ -6439,7 +7833,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="638"
+            column="26"/>
     </issue>
 
     <issue
@@ -6448,7 +7844,9 @@
         errorLine1="    public CharSequence getEditTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="647"
+            column="12"/>
     </issue>
 
     <issue
@@ -6457,7 +7855,9 @@
         errorLine1="    public void setEditTitle(CharSequence editTitle) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="655"
+            column="30"/>
     </issue>
 
     <issue
@@ -6466,7 +7866,9 @@
         errorLine1="    public CharSequence getEditDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="664"
+            column="12"/>
     </issue>
 
     <issue
@@ -6475,7 +7877,9 @@
         errorLine1="    public void setEditDescription(CharSequence editDescription) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="673"
+            column="36"/>
     </issue>
 
     <issue
@@ -6484,7 +7888,9 @@
         errorLine1="    public CharSequence getDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="690"
+            column="12"/>
     </issue>
 
     <issue
@@ -6493,7 +7899,9 @@
         errorLine1="    public void setDescription(CharSequence description) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="698"
+            column="32"/>
     </issue>
 
     <issue
@@ -6502,7 +7910,9 @@
         errorLine1="    public Intent getIntent() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="706"
+            column="12"/>
     </issue>
 
     <issue
@@ -6511,7 +7921,9 @@
         errorLine1="    public void setIntent(Intent intent) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="714"
+            column="27"/>
     </issue>
 
     <issue
@@ -6520,7 +7932,9 @@
         errorLine1="    public String[] getAutofillHints() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="856"
+            column="12"/>
     </issue>
 
     <issue
@@ -6529,7 +7943,9 @@
         errorLine1="    public void setSubActions(List&lt;GuidedAction> actions) {"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="884"
+            column="31"/>
     </issue>
 
     <issue
@@ -6538,7 +7954,9 @@
         errorLine1="    public List&lt;GuidedAction> getSubActions() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="891"
+            column="12"/>
     </issue>
 
     <issue
@@ -6547,7 +7965,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle bundle, String key) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="932"
+            column="37"/>
     </issue>
 
     <issue
@@ -6556,7 +7976,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle bundle, String key) {"
         errorLine2="                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="932"
+            column="52"/>
     </issue>
 
     <issue
@@ -6565,7 +7987,9 @@
         errorLine1="    public void onRestoreInstanceState(Bundle bundle, String key) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="954"
+            column="40"/>
     </issue>
 
     <issue
@@ -6574,7 +7998,9 @@
         errorLine1="    public void onRestoreInstanceState(Bundle bundle, String key) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+            line="954"
+            column="55"/>
     </issue>
 
     <issue
@@ -6583,7 +8009,9 @@
         errorLine1="        void onGuidedActionClicked(GuidedAction action);"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="60"
+            column="36"/>
     </issue>
 
     <issue
@@ -6592,7 +8020,9 @@
         errorLine1="        void onGuidedActionFocused(GuidedAction action);"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="72"
+            column="36"/>
     </issue>
 
     <issue
@@ -6601,7 +8031,9 @@
         errorLine1="        void onGuidedActionEditCanceled(GuidedAction action);"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="83"
+            column="41"/>
     </issue>
 
     <issue
@@ -6610,7 +8042,9 @@
         errorLine1="        long onGuidedActionEditedAndProceed(GuidedAction action);"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="88"
+            column="45"/>
     </issue>
 
     <issue
@@ -6619,7 +8053,9 @@
         errorLine1="    public GuidedActionAdapter(List&lt;GuidedAction> actions, ClickListener clickListener,"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="144"
+            column="32"/>
     </issue>
 
     <issue
@@ -6628,7 +8064,9 @@
         errorLine1="    public GuidedActionAdapter(List&lt;GuidedAction> actions, ClickListener clickListener,"
         errorLine2="                                                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="144"
+            column="60"/>
     </issue>
 
     <issue
@@ -6637,7 +8075,9 @@
         errorLine1="            FocusListener focusListener, GuidedActionsStylist presenter, boolean isSubAdapter) {"
         errorLine2="            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="145"
+            column="13"/>
     </issue>
 
     <issue
@@ -6646,7 +8086,9 @@
         errorLine1="            FocusListener focusListener, GuidedActionsStylist presenter, boolean isSubAdapter) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="145"
+            column="42"/>
     </issue>
 
     <issue
@@ -6655,7 +8097,9 @@
         errorLine1="    public void setDiffCallback(DiffCallback&lt;GuidedAction> diffCallback) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="169"
+            column="33"/>
     </issue>
 
     <issue
@@ -6664,7 +8108,9 @@
         errorLine1="    public void setActions(final List&lt;GuidedAction> actions) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="178"
+            column="34"/>
     </issue>
 
     <issue
@@ -6673,7 +8119,9 @@
         errorLine1="    public GuidedAction getItem(int position) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="245"
+            column="12"/>
     </issue>
 
     <issue
@@ -6682,7 +8130,9 @@
         errorLine1="    public int indexOf(GuidedAction action) {"
         errorLine2="                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="254"
+            column="24"/>
     </issue>
 
     <issue
@@ -6691,7 +8141,9 @@
         errorLine1="    public GuidedActionsStylist getGuidedActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="261"
+            column="12"/>
     </issue>
 
     <issue
@@ -6700,7 +8152,9 @@
         errorLine1="    public void setClickListener(ClickListener clickListener) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="269"
+            column="34"/>
     </issue>
 
     <issue
@@ -6709,7 +8163,9 @@
         errorLine1="    public void setFocusListener(FocusListener focusListener) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="277"
+            column="34"/>
     </issue>
 
     <issue
@@ -6718,7 +8174,9 @@
         errorLine1="    public List&lt;GuidedAction> getActions() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="286"
+            column="12"/>
     </issue>
 
     <issue
@@ -6727,7 +8185,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="302"
+            column="12"/>
     </issue>
 
     <issue
@@ -6736,7 +8196,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="302"
+            column="42"/>
     </issue>
 
     <issue
@@ -6745,7 +8207,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder holder, int position) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="333"
+            column="34"/>
     </issue>
 
     <issue
@@ -6754,7 +8218,9 @@
         errorLine1="    public GuidedActionsStylist.ViewHolder findSubChildViewHolder(View v) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="400"
+            column="12"/>
     </issue>
 
     <issue
@@ -6763,7 +8229,9 @@
         errorLine1="    public GuidedActionsStylist.ViewHolder findSubChildViewHolder(View v) {"
         errorLine2="                                                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="400"
+            column="67"/>
     </issue>
 
     <issue
@@ -6772,7 +8240,9 @@
         errorLine1="    public void handleCheckedActions(GuidedActionsStylist.ViewHolder avh) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="416"
+            column="38"/>
     </issue>
 
     <issue
@@ -6781,7 +8251,9 @@
         errorLine1="    public void performOnActionClick(GuidedActionsStylist.ViewHolder avh) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+            line="449"
+            column="38"/>
     </issue>
 
     <issue
@@ -6790,7 +8262,9 @@
         errorLine1="    public void addAdpter(GuidedActionAdapter adapter1, GuidedActionAdapter adapter2) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="46"
+            column="27"/>
     </issue>
 
     <issue
@@ -6799,7 +8273,9 @@
         errorLine1="    public void addAdpter(GuidedActionAdapter adapter1, GuidedActionAdapter adapter2) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="46"
+            column="57"/>
     </issue>
 
     <issue
@@ -6808,7 +8284,9 @@
         errorLine1="    public GuidedActionAdapter getNextAdapter(GuidedActionAdapter adapter) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="56"
+            column="12"/>
     </issue>
 
     <issue
@@ -6817,7 +8295,9 @@
         errorLine1="    public GuidedActionAdapter getNextAdapter(GuidedActionAdapter adapter) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="56"
+            column="47"/>
     </issue>
 
     <issue
@@ -6826,7 +8306,9 @@
         errorLine1="    public void setEditListener(EditListener listener) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="66"
+            column="33"/>
     </issue>
 
     <issue
@@ -6835,7 +8317,9 @@
         errorLine1="    public void openIme(GuidedActionAdapter adapter, GuidedActionsStylist.ViewHolder avh) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="122"
+            column="25"/>
     </issue>
 
     <issue
@@ -6844,7 +8328,9 @@
         errorLine1="    public void openIme(GuidedActionAdapter adapter, GuidedActionsStylist.ViewHolder avh) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="122"
+            column="54"/>
     </issue>
 
     <issue
@@ -6853,7 +8339,9 @@
         errorLine1="    public void closeIme(View v) {"
         errorLine2="                         ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="141"
+            column="26"/>
     </issue>
 
     <issue
@@ -6862,7 +8350,9 @@
         errorLine1="    public void fillAndStay(GuidedActionAdapter adapter, TextView v) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="151"
+            column="29"/>
     </issue>
 
     <issue
@@ -6871,7 +8361,9 @@
         errorLine1="    public void fillAndStay(GuidedActionAdapter adapter, TextView v) {"
         errorLine2="                                                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="151"
+            column="58"/>
     </issue>
 
     <issue
@@ -6880,7 +8372,9 @@
         errorLine1="    public void fillAndGoNext(GuidedActionAdapter adapter, TextView v) {"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="160"
+            column="31"/>
     </issue>
 
     <issue
@@ -6889,7 +8383,9 @@
         errorLine1="    public void fillAndGoNext(GuidedActionAdapter adapter, TextView v) {"
         errorLine2="                                                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+            line="160"
+            column="60"/>
     </issue>
 
     <issue
@@ -6898,7 +8394,9 @@
         errorLine1="        void onAutofill(View view);"
         errorLine2="                        ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAutofillSupport.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAutofillSupport.java"
+            line="63"
+            column="25"/>
     </issue>
 
     <issue
@@ -6907,7 +8405,9 @@
         errorLine1="    void setOnAutofillListener(OnAutofillListener listener);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAutofillSupport.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionAutofillSupport.java"
+            line="70"
+            column="32"/>
     </issue>
 
     <issue
@@ -6916,7 +8416,9 @@
         errorLine1="    public static GuidedActionDiffCallback getInstance() {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionDiffCallback.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionDiffCallback.java"
+            line="34"
+            column="19"/>
     </issue>
 
     <issue
@@ -6925,7 +8427,9 @@
         errorLine1="    public GuidedActionEditText(Context ctx) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="77"
+            column="33"/>
     </issue>
 
     <issue
@@ -6934,7 +8438,9 @@
         errorLine1="    public GuidedActionEditText(Context ctx, AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="81"
+            column="33"/>
     </issue>
 
     <issue
@@ -6943,7 +8449,9 @@
         errorLine1="    public GuidedActionEditText(Context ctx, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="81"
+            column="46"/>
     </issue>
 
     <issue
@@ -6952,7 +8460,9 @@
         errorLine1="    public GuidedActionEditText(Context ctx, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="85"
+            column="33"/>
     </issue>
 
     <issue
@@ -6961,7 +8471,9 @@
         errorLine1="    public GuidedActionEditText(Context ctx, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="85"
+            column="46"/>
     </issue>
 
     <issue
@@ -6970,7 +8482,9 @@
         errorLine1="    public void setImeKeyListener(ImeKeyListener listener) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="93"
+            column="35"/>
     </issue>
 
     <issue
@@ -6979,7 +8493,9 @@
         errorLine1="    public boolean onKeyPreIme(int keyCode, KeyEvent event) {"
         errorLine2="                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="98"
+            column="45"/>
     </issue>
 
     <issue
@@ -6988,7 +8504,9 @@
         errorLine1="    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="110"
+            column="51"/>
     </issue>
 
     <issue
@@ -6997,7 +8515,9 @@
         errorLine1="    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {"
         errorLine2="                                                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="116"
+            column="67"/>
     </issue>
 
     <issue
@@ -7006,7 +8526,9 @@
         errorLine1="    public void setOnAutofillListener(OnAutofillListener autofillListener) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="139"
+            column="39"/>
     </issue>
 
     <issue
@@ -7015,7 +8537,9 @@
         errorLine1="    public void autofill(AutofillValue values) {"
         errorLine2="                         ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="144"
+            column="26"/>
     </issue>
 
     <issue
@@ -7024,7 +8548,9 @@
         errorLine1="    public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+            line="156"
+            column="54"/>
     </issue>
 
     <issue
@@ -7033,7 +8559,9 @@
         errorLine1="        public ViewHolder(View v) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="215"
+            column="27"/>
     </issue>
 
     <issue
@@ -7042,7 +8570,9 @@
         errorLine1="        public ViewHolder(View v, boolean isSubAction) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="222"
+            column="27"/>
     </issue>
 
     <issue
@@ -7051,7 +8581,9 @@
         errorLine1="        public View getContentView() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="241"
+            column="16"/>
     </issue>
 
     <issue
@@ -7060,7 +8592,9 @@
         errorLine1="        public TextView getTitleView() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="248"
+            column="16"/>
     </issue>
 
     <issue
@@ -7069,7 +8603,9 @@
         errorLine1="        public EditText getEditableTitleView() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="256"
+            column="16"/>
     </issue>
 
     <issue
@@ -7078,7 +8614,9 @@
         errorLine1="        public TextView getDescriptionView() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="263"
+            column="16"/>
     </issue>
 
     <issue
@@ -7087,7 +8625,9 @@
         errorLine1="        public EditText getEditableDescriptionView() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="271"
+            column="16"/>
     </issue>
 
     <issue
@@ -7096,7 +8636,9 @@
         errorLine1="        public ImageView getIconView() {"
         errorLine2="               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="278"
+            column="16"/>
     </issue>
 
     <issue
@@ -7105,7 +8647,9 @@
         errorLine1="        public ImageView getCheckmarkView() {"
         errorLine2="               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="285"
+            column="16"/>
     </issue>
 
     <issue
@@ -7114,7 +8658,9 @@
         errorLine1="        public ImageView getChevronView() {"
         errorLine2="               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="292"
+            column="16"/>
     </issue>
 
     <issue
@@ -7123,7 +8669,9 @@
         errorLine1="        public View getEditingView() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="337"
+            column="16"/>
     </issue>
 
     <issue
@@ -7132,7 +8680,9 @@
         errorLine1="        public GuidedAction getAction() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="362"
+            column="16"/>
     </issue>
 
     <issue
@@ -7141,7 +8691,9 @@
         errorLine1="        public Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="374"
+            column="16"/>
     </issue>
 
     <issue
@@ -7150,7 +8702,9 @@
         errorLine1="        public Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="374"
+            column="32"/>
     </issue>
 
     <issue
@@ -7159,7 +8713,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="448"
+            column="12"/>
     </issue>
 
     <issue
@@ -7168,7 +8724,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container) {"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="448"
+            column="30"/>
     </issue>
 
     <issue
@@ -7177,7 +8735,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container) {"
         errorLine2="                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="448"
+            column="61"/>
     </issue>
 
     <issue
@@ -7186,7 +8746,9 @@
         errorLine1="    public VerticalGridView getActionsGridView() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="558"
+            column="12"/>
     </issue>
 
     <issue
@@ -7195,7 +8757,9 @@
         errorLine1="    public VerticalGridView getSubActionsGridView() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="566"
+            column="12"/>
     </issue>
 
     <issue
@@ -7204,7 +8768,9 @@
         errorLine1="    public int getItemViewType(GuidedAction action) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="592"
+            column="32"/>
     </issue>
 
     <issue
@@ -7213,7 +8779,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="656"
+            column="12"/>
     </issue>
 
     <issue
@@ -7222,7 +8790,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="656"
+            column="42"/>
     </issue>
 
     <issue
@@ -7231,7 +8801,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="672"
+            column="12"/>
     </issue>
 
     <issue
@@ -7240,7 +8812,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="672"
+            column="42"/>
     </issue>
 
     <issue
@@ -7249,7 +8823,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="687"
+            column="34"/>
     </issue>
 
     <issue
@@ -7258,7 +8834,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="687"
+            column="49"/>
     </issue>
 
     <issue
@@ -7267,7 +8845,9 @@
         errorLine1="    public void openInEditMode(GuidedAction action) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="772"
+            column="32"/>
     </issue>
 
     <issue
@@ -7276,7 +8856,9 @@
         errorLine1="    protected void setupImeOptions(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="806"
+            column="36"/>
     </issue>
 
     <issue
@@ -7285,7 +8867,9 @@
         errorLine1="    protected void setupImeOptions(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="806"
+            column="51"/>
     </issue>
 
     <issue
@@ -7294,7 +8878,9 @@
         errorLine1="    public void setEditingMode(ViewHolder vh, GuidedAction action, boolean editing) {"
         errorLine2="                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="822"
+            column="32"/>
     </issue>
 
     <issue
@@ -7303,7 +8889,9 @@
         errorLine1="    public void setEditingMode(ViewHolder vh, GuidedAction action, boolean editing) {"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="822"
+            column="47"/>
     </issue>
 
     <issue
@@ -7312,7 +8900,9 @@
         errorLine1="    protected void onEditingModeChange(ViewHolder vh, GuidedAction action, boolean editing) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="842"
+            column="40"/>
     </issue>
 
     <issue
@@ -7321,7 +8911,9 @@
         errorLine1="    protected void onEditingModeChange(ViewHolder vh, GuidedAction action, boolean editing) {"
         errorLine2="                                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="842"
+            column="55"/>
     </issue>
 
     <issue
@@ -7330,7 +8922,9 @@
         errorLine1="    protected void onEditingModeChange(ViewHolder vh, boolean editing, boolean withTransition) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="854"
+            column="40"/>
     </issue>
 
     <issue
@@ -7339,7 +8933,9 @@
         errorLine1="    public void onAnimateItemFocused(ViewHolder vh, boolean focused) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="918"
+            column="38"/>
     </issue>
 
     <issue
@@ -7348,7 +8944,9 @@
         errorLine1="    public void onAnimateItemPressed(ViewHolder vh, boolean pressed) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="929"
+            column="38"/>
     </issue>
 
     <issue
@@ -7357,7 +8955,9 @@
         errorLine1="    public void onAnimateItemPressedCancelled(ViewHolder vh) {"
         errorLine2="                                              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="937"
+            column="47"/>
     </issue>
 
     <issue
@@ -7366,7 +8966,9 @@
         errorLine1="    public void onAnimateItemChecked(ViewHolder vh, boolean checked) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="950"
+            column="38"/>
     </issue>
 
     <issue
@@ -7375,7 +8977,9 @@
         errorLine1="    public void onBindCheckMarkView(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="971"
+            column="37"/>
     </issue>
 
     <issue
@@ -7384,7 +8988,9 @@
         errorLine1="    public void onBindCheckMarkView(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="971"
+            column="52"/>
     </issue>
 
     <issue
@@ -7393,7 +8999,9 @@
         errorLine1="    public void onBindActivatorView(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="998"
+            column="37"/>
     </issue>
 
     <issue
@@ -7402,7 +9010,9 @@
         errorLine1="    public void onBindActivatorView(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="998"
+            column="52"/>
     </issue>
 
     <issue
@@ -7411,7 +9021,9 @@
         errorLine1="    public boolean onUpdateActivatorView(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1023"
+            column="42"/>
     </issue>
 
     <issue
@@ -7420,7 +9032,9 @@
         errorLine1="    public boolean onUpdateActivatorView(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1023"
+            column="57"/>
     </issue>
 
     <issue
@@ -7429,7 +9043,9 @@
         errorLine1="    public void setEditListener(EditListener listener) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1040"
+            column="33"/>
     </issue>
 
     <issue
@@ -7438,7 +9054,9 @@
         errorLine1="    public void onBindChevronView(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                  ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1079"
+            column="35"/>
     </issue>
 
     <issue
@@ -7447,7 +9065,9 @@
         errorLine1="    public void onBindChevronView(ViewHolder vh, GuidedAction action) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1079"
+            column="50"/>
     </issue>
 
     <issue
@@ -7456,7 +9076,9 @@
         errorLine1="    public void setExpandedViewHolder(ViewHolder avh) {"
         errorLine2="                                      ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1109"
+            column="39"/>
     </issue>
 
     <issue
@@ -7465,7 +9087,9 @@
         errorLine1="    public void startExpandedTransition(ViewHolder avh) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1139"
+            column="41"/>
     </issue>
 
     <issue
@@ -7474,7 +9098,9 @@
         errorLine1="    public void expandAction(GuidedAction action, final boolean withTransition) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1194"
+            column="30"/>
     </issue>
 
     <issue
@@ -7483,7 +9109,9 @@
         errorLine1="    public GuidedAction getExpandedAction() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1391"
+            column="12"/>
     </issue>
 
     <issue
@@ -7492,7 +9120,9 @@
         errorLine1="    public void onUpdateExpandedViewHolder(ViewHolder avh) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+            line="1400"
+            column="44"/>
     </issue>
 
     <issue
@@ -7501,7 +9131,9 @@
         errorLine1="        public BuilderBase(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="45"
+            column="28"/>
     </issue>
 
     <issue
@@ -7510,7 +9142,9 @@
         errorLine1="        public B datePickerFormat(String format) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="59"
+            column="35"/>
     </issue>
 
     <issue
@@ -7519,7 +9153,9 @@
         errorLine1="        protected final void applyDatePickerValues(GuidedDatePickerAction action) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="98"
+            column="52"/>
     </issue>
 
     <issue
@@ -7528,7 +9164,9 @@
         errorLine1="        public Builder(Context context) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="115"
+            column="24"/>
     </issue>
 
     <issue
@@ -7537,7 +9175,9 @@
         errorLine1="        public GuidedDatePickerAction build() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="123"
+            column="16"/>
     </issue>
 
     <issue
@@ -7546,7 +9186,9 @@
         errorLine1="    public String getDatePickerFormat() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="142"
+            column="12"/>
     </issue>
 
     <issue
@@ -7555,7 +9197,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle bundle, String key) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="183"
+            column="37"/>
     </issue>
 
     <issue
@@ -7564,7 +9208,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle bundle, String key) {"
         errorLine2="                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="183"
+            column="52"/>
     </issue>
 
     <issue
@@ -7573,7 +9219,9 @@
         errorLine1="    public void onRestoreInstanceState(Bundle bundle, String key) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="188"
+            column="40"/>
     </issue>
 
     <issue
@@ -7582,7 +9230,9 @@
         errorLine1="    public void onRestoreInstanceState(Bundle bundle, String key) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+            line="188"
+            column="55"/>
     </issue>
 
     <issue
@@ -7591,7 +9241,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="254"
+            column="16"/>
     </issue>
 
     <issue
@@ -7600,7 +9252,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="254"
+            column="34"/>
     </issue>
 
     <issue
@@ -7609,7 +9263,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="254"
+            column="59"/>
     </issue>
 
     <issue
@@ -7618,7 +9274,9 @@
         errorLine1="                Bundle savedInstanceState) {"
         errorLine2="                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="255"
+            column="17"/>
     </issue>
 
     <issue
@@ -7627,7 +9285,9 @@
         errorLine1="    public GuidanceStylist onCreateGuidanceStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="283"
+            column="12"/>
     </issue>
 
     <issue
@@ -7636,7 +9296,9 @@
         errorLine1="    public GuidedActionsStylist onCreateActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="292"
+            column="12"/>
     </issue>
 
     <issue
@@ -7645,7 +9307,9 @@
         errorLine1="    public GuidedActionsStylist onCreateButtonActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="301"
+            column="12"/>
     </issue>
 
     <issue
@@ -7654,7 +9318,9 @@
         errorLine1="    public @NonNull Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="325"
+            column="47"/>
     </issue>
 
     <issue
@@ -7663,7 +9329,9 @@
         errorLine1="    public void onCreateActions(@NonNull List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="335"
+            column="70"/>
     </issue>
 
     <issue
@@ -7672,7 +9340,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="345"
+            column="13"/>
     </issue>
 
     <issue
@@ -7681,7 +9351,9 @@
         errorLine1="    public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="353"
+            column="39"/>
     </issue>
 
     <issue
@@ -7690,7 +9362,9 @@
         errorLine1="    public boolean onSubGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="363"
+            column="45"/>
     </issue>
 
     <issue
@@ -7699,7 +9373,9 @@
         errorLine1="    public void expandSubActions(GuidedAction action) {"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="387"
+            column="34"/>
     </issue>
 
     <issue
@@ -7708,7 +9384,9 @@
         errorLine1="    public void expandAction(GuidedAction action, boolean withTransition) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="402"
+            column="30"/>
     </issue>
 
     <issue
@@ -7717,7 +9395,9 @@
         errorLine1="    public void onGuidedActionFocused(GuidedAction action) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="430"
+            column="39"/>
     </issue>
 
     <issue
@@ -7726,7 +9406,9 @@
         errorLine1="    public void onGuidedActionEdited(GuidedAction action) {"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="440"
+            column="38"/>
     </issue>
 
     <issue
@@ -7735,7 +9417,9 @@
         errorLine1="    public void onGuidedActionEditCanceled(GuidedAction action) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="449"
+            column="44"/>
     </issue>
 
     <issue
@@ -7744,7 +9428,9 @@
         errorLine1="    public long onGuidedActionEditedAndProceed(GuidedAction action) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="462"
+            column="48"/>
     </issue>
 
     <issue
@@ -7753,7 +9439,9 @@
         errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment) {"
         errorLine2="                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="484"
+            column="27"/>
     </issue>
 
     <issue
@@ -7762,7 +9450,9 @@
         errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="484"
+            column="60"/>
     </issue>
 
     <issue
@@ -7771,7 +9461,9 @@
         errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment, int id) {"
         errorLine2="                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="508"
+            column="27"/>
     </issue>
 
     <issue
@@ -7780,7 +9472,9 @@
         errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment, int id) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="508"
+            column="60"/>
     </issue>
 
     <issue
@@ -7789,7 +9483,9 @@
         errorLine1="    protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepFragment"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="541"
+            column="49"/>
     </issue>
 
     <issue
@@ -7798,7 +9494,9 @@
         errorLine1="    protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepFragment"
         errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="541"
+            column="73"/>
     </issue>
 
     <issue
@@ -7807,7 +9505,9 @@
         errorLine1="    public static int addAsRoot(Activity activity, GuidedStepFragment fragment, int id) {"
         errorLine2="                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="648"
+            column="33"/>
     </issue>
 
     <issue
@@ -7816,7 +9516,9 @@
         errorLine1="    public static int addAsRoot(Activity activity, GuidedStepFragment fragment, int id) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="648"
+            column="52"/>
     </issue>
 
     <issue
@@ -7825,7 +9527,9 @@
         errorLine1="    public static GuidedStepFragment getCurrentGuidedStepFragment(FragmentManager fm) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="666"
+            column="19"/>
     </issue>
 
     <issue
@@ -7834,7 +9538,9 @@
         errorLine1="    public static GuidedStepFragment getCurrentGuidedStepFragment(FragmentManager fm) {"
         errorLine2="                                                                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="666"
+            column="67"/>
     </issue>
 
     <issue
@@ -7843,7 +9549,9 @@
         errorLine1="    public GuidanceStylist getGuidanceStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="678"
+            column="12"/>
     </issue>
 
     <issue
@@ -7852,7 +9560,9 @@
         errorLine1="    public GuidedActionsStylist getGuidedActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="686"
+            column="12"/>
     </issue>
 
     <issue
@@ -7861,7 +9571,9 @@
         errorLine1="    public List&lt;GuidedAction> getButtonActions() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="694"
+            column="12"/>
     </issue>
 
     <issue
@@ -7870,7 +9582,9 @@
         errorLine1="    public GuidedAction findButtonActionById(long id) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="703"
+            column="12"/>
     </issue>
 
     <issue
@@ -7879,7 +9593,9 @@
         errorLine1="    public GuidedActionsStylist getGuidedButtonActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="728"
+            column="12"/>
     </issue>
 
     <issue
@@ -7888,7 +9604,9 @@
         errorLine1="    public void setButtonActions(List&lt;GuidedAction> actions) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="736"
+            column="34"/>
     </issue>
 
     <issue
@@ -7897,7 +9615,9 @@
         errorLine1="    public View getButtonActionItemView(int position) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="760"
+            column="12"/>
     </issue>
 
     <issue
@@ -7906,7 +9626,9 @@
         errorLine1="    public List&lt;GuidedAction> getActions() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="786"
+            column="12"/>
     </issue>
 
     <issue
@@ -7915,7 +9637,9 @@
         errorLine1="    public GuidedAction findActionById(long id) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="795"
+            column="12"/>
     </issue>
 
     <issue
@@ -7924,7 +9648,9 @@
         errorLine1="    public void setActions(List&lt;GuidedAction> actions) {"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="822"
+            column="28"/>
     </issue>
 
     <issue
@@ -7933,7 +9659,9 @@
         errorLine1="    public void setActionsDiffCallback(DiffCallback&lt;GuidedAction> diffCallback) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="837"
+            column="40"/>
     </issue>
 
     <issue
@@ -7942,7 +9670,9 @@
         errorLine1="    public View getActionItemView(int position) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="858"
+            column="12"/>
     </issue>
 
     <issue
@@ -7951,7 +9681,9 @@
         errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="967"
+            column="12"/>
     </issue>
 
     <issue
@@ -7960,7 +9692,9 @@
         errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="967"
+            column="40"/>
     </issue>
 
     <issue
@@ -7969,7 +9703,9 @@
         errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="967"
+            column="65"/>
     </issue>
 
     <issue
@@ -7978,7 +9714,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="968"
+            column="13"/>
     </issue>
 
     <issue
@@ -7987,7 +9725,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="1021"
+            column="26"/>
     </issue>
 
     <issue
@@ -7996,7 +9736,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="1066"
+            column="12"/>
     </issue>
 
     <issue
@@ -8005,7 +9747,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="1066"
+            column="30"/>
     </issue>
 
     <issue
@@ -8014,7 +9758,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="1066"
+            column="55"/>
     </issue>
 
     <issue
@@ -8023,7 +9769,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="1067"
+            column="13"/>
     </issue>
 
     <issue
@@ -8032,7 +9780,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="1258"
+            column="37"/>
     </issue>
 
     <issue
@@ -8041,7 +9791,9 @@
         errorLine1="    public void popBackStackToGuidedStepFragment(Class&lt;?> guidedStepFragmentClass,"
         errorLine2="                                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="1304"
+            column="50"/>
     </issue>
 
     <issue
@@ -8050,7 +9802,9 @@
         errorLine1="    public void openInEditMode(GuidedAction action) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+            line="1367"
+            column="32"/>
     </issue>
 
     <issue
@@ -8059,7 +9813,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="249"
+            column="16"/>
     </issue>
 
     <issue
@@ -8068,7 +9824,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="249"
+            column="34"/>
     </issue>
 
     <issue
@@ -8077,7 +9835,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="249"
+            column="59"/>
     </issue>
 
     <issue
@@ -8086,7 +9846,9 @@
         errorLine1="                Bundle savedInstanceState) {"
         errorLine2="                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="250"
+            column="17"/>
     </issue>
 
     <issue
@@ -8095,7 +9857,9 @@
         errorLine1="    public GuidanceStylist onCreateGuidanceStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="278"
+            column="12"/>
     </issue>
 
     <issue
@@ -8104,7 +9868,9 @@
         errorLine1="    public GuidedActionsStylist onCreateActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="287"
+            column="12"/>
     </issue>
 
     <issue
@@ -8113,7 +9879,9 @@
         errorLine1="    public GuidedActionsStylist onCreateButtonActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="296"
+            column="12"/>
     </issue>
 
     <issue
@@ -8122,7 +9890,9 @@
         errorLine1="    public @NonNull Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="320"
+            column="47"/>
     </issue>
 
     <issue
@@ -8131,7 +9901,9 @@
         errorLine1="    public void onCreateActions(@NonNull List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="330"
+            column="70"/>
     </issue>
 
     <issue
@@ -8140,7 +9912,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="340"
+            column="13"/>
     </issue>
 
     <issue
@@ -8149,7 +9923,9 @@
         errorLine1="    public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="348"
+            column="39"/>
     </issue>
 
     <issue
@@ -8158,7 +9934,9 @@
         errorLine1="    public boolean onSubGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="358"
+            column="45"/>
     </issue>
 
     <issue
@@ -8167,7 +9945,9 @@
         errorLine1="    public void expandSubActions(GuidedAction action) {"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="382"
+            column="34"/>
     </issue>
 
     <issue
@@ -8176,7 +9956,9 @@
         errorLine1="    public void expandAction(GuidedAction action, boolean withTransition) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="397"
+            column="30"/>
     </issue>
 
     <issue
@@ -8185,7 +9967,9 @@
         errorLine1="    public void onGuidedActionFocused(GuidedAction action) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="425"
+            column="39"/>
     </issue>
 
     <issue
@@ -8194,7 +9978,9 @@
         errorLine1="    public void onGuidedActionEdited(GuidedAction action) {"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="435"
+            column="38"/>
     </issue>
 
     <issue
@@ -8203,7 +9989,9 @@
         errorLine1="    public void onGuidedActionEditCanceled(GuidedAction action) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="444"
+            column="44"/>
     </issue>
 
     <issue
@@ -8212,7 +10000,9 @@
         errorLine1="    public long onGuidedActionEditedAndProceed(GuidedAction action) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="457"
+            column="48"/>
     </issue>
 
     <issue
@@ -8221,7 +10011,9 @@
         errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment) {"
         errorLine2="                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="484"
+            column="27"/>
     </issue>
 
     <issue
@@ -8230,7 +10022,9 @@
         errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="484"
+            column="60"/>
     </issue>
 
     <issue
@@ -8239,7 +10033,9 @@
         errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment, int id) {"
         errorLine2="                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="513"
+            column="27"/>
     </issue>
 
     <issue
@@ -8248,7 +10044,9 @@
         errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment, int id) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="513"
+            column="60"/>
     </issue>
 
     <issue
@@ -8257,7 +10055,9 @@
         errorLine1="    protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepSupportFragment"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="546"
+            column="49"/>
     </issue>
 
     <issue
@@ -8266,7 +10066,9 @@
         errorLine1="    protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepSupportFragment"
         errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="546"
+            column="73"/>
     </issue>
 
     <issue
@@ -8275,7 +10077,9 @@
         errorLine1="    public static int addAsRoot(FragmentActivity activity, GuidedStepSupportFragment fragment, int id) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="653"
+            column="33"/>
     </issue>
 
     <issue
@@ -8284,7 +10088,9 @@
         errorLine1="    public static int addAsRoot(FragmentActivity activity, GuidedStepSupportFragment fragment, int id) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="653"
+            column="60"/>
     </issue>
 
     <issue
@@ -8293,7 +10099,9 @@
         errorLine1="    public static GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(FragmentManager fm) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="671"
+            column="19"/>
     </issue>
 
     <issue
@@ -8302,7 +10110,9 @@
         errorLine1="    public static GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(FragmentManager fm) {"
         errorLine2="                                                                                ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="671"
+            column="81"/>
     </issue>
 
     <issue
@@ -8311,7 +10121,9 @@
         errorLine1="    public GuidanceStylist getGuidanceStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="683"
+            column="12"/>
     </issue>
 
     <issue
@@ -8320,7 +10132,9 @@
         errorLine1="    public GuidedActionsStylist getGuidedActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="691"
+            column="12"/>
     </issue>
 
     <issue
@@ -8329,7 +10143,9 @@
         errorLine1="    public List&lt;GuidedAction> getButtonActions() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="699"
+            column="12"/>
     </issue>
 
     <issue
@@ -8338,7 +10154,9 @@
         errorLine1="    public GuidedAction findButtonActionById(long id) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="708"
+            column="12"/>
     </issue>
 
     <issue
@@ -8347,7 +10165,9 @@
         errorLine1="    public GuidedActionsStylist getGuidedButtonActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="733"
+            column="12"/>
     </issue>
 
     <issue
@@ -8356,7 +10176,9 @@
         errorLine1="    public void setButtonActions(List&lt;GuidedAction> actions) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="741"
+            column="34"/>
     </issue>
 
     <issue
@@ -8365,7 +10187,9 @@
         errorLine1="    public View getButtonActionItemView(int position) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="765"
+            column="12"/>
     </issue>
 
     <issue
@@ -8374,7 +10198,9 @@
         errorLine1="    public List&lt;GuidedAction> getActions() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="791"
+            column="12"/>
     </issue>
 
     <issue
@@ -8383,7 +10209,9 @@
         errorLine1="    public GuidedAction findActionById(long id) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="800"
+            column="12"/>
     </issue>
 
     <issue
@@ -8392,7 +10220,9 @@
         errorLine1="    public void setActions(List&lt;GuidedAction> actions) {"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="827"
+            column="28"/>
     </issue>
 
     <issue
@@ -8401,7 +10231,9 @@
         errorLine1="    public void setActionsDiffCallback(DiffCallback&lt;GuidedAction> diffCallback) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="842"
+            column="40"/>
     </issue>
 
     <issue
@@ -8410,7 +10242,9 @@
         errorLine1="    public View getActionItemView(int position) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="863"
+            column="12"/>
     </issue>
 
     <issue
@@ -8419,7 +10253,9 @@
         errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="972"
+            column="12"/>
     </issue>
 
     <issue
@@ -8428,7 +10264,9 @@
         errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="972"
+            column="40"/>
     </issue>
 
     <issue
@@ -8437,7 +10275,9 @@
         errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="972"
+            column="65"/>
     </issue>
 
     <issue
@@ -8446,7 +10286,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="973"
+            column="13"/>
     </issue>
 
     <issue
@@ -8455,7 +10297,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="1026"
+            column="26"/>
     </issue>
 
     <issue
@@ -8464,7 +10308,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="1071"
+            column="12"/>
     </issue>
 
     <issue
@@ -8473,7 +10319,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="1071"
+            column="30"/>
     </issue>
 
     <issue
@@ -8482,7 +10330,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="1071"
+            column="55"/>
     </issue>
 
     <issue
@@ -8491,7 +10341,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="1072"
+            column="13"/>
     </issue>
 
     <issue
@@ -8500,7 +10352,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="1263"
+            column="37"/>
     </issue>
 
     <issue
@@ -8509,7 +10363,9 @@
         errorLine1="    public void popBackStackToGuidedStepSupportFragment(Class&lt;?> guidedStepFragmentClass,"
         errorLine2="                                                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="1309"
+            column="57"/>
     </issue>
 
     <issue
@@ -8518,7 +10374,9 @@
         errorLine1="    public void openInEditMode(GuidedAction action) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+            line="1372"
+            column="32"/>
     </issue>
 
     <issue
@@ -8527,7 +10385,9 @@
         errorLine1="    public HeaderItem(long id, String name) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+            file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+            line="32"
+            column="32"/>
     </issue>
 
     <issue
@@ -8536,7 +10396,9 @@
         errorLine1="    public HeaderItem(String name) {"
         errorLine2="                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+            file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+            line="40"
+            column="23"/>
     </issue>
 
     <issue
@@ -8545,7 +10407,9 @@
         errorLine1="    public final String getName() {"
         errorLine2="                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+            file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+            line="54"
+            column="18"/>
     </issue>
 
     <issue
@@ -8554,7 +10418,9 @@
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+            file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+            line="63"
+            column="12"/>
     </issue>
 
     <issue
@@ -8563,7 +10429,9 @@
         errorLine1="    public void setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+            file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+            line="71"
+            column="39"/>
     </issue>
 
     <issue
@@ -8572,7 +10440,9 @@
         errorLine1="    public void setDescription(CharSequence description) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+            file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+            line="79"
+            column="32"/>
     </issue>
 
     <issue
@@ -8581,7 +10451,9 @@
         errorLine1="    public CharSequence getDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+            file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+            line="86"
+            column="12"/>
     </issue>
 
     <issue
@@ -8590,7 +10462,9 @@
         errorLine1="        void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+            line="73"
+            column="30"/>
     </issue>
 
     <issue
@@ -8599,7 +10473,9 @@
         errorLine1="        void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                                                                       ~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+            line="73"
+            column="72"/>
     </issue>
 
     <issue
@@ -8608,7 +10484,9 @@
         errorLine1="        void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+            line="88"
+            column="31"/>
     </issue>
 
     <issue
@@ -8617,7 +10495,9 @@
         errorLine1="        void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                                                                        ~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+            line="88"
+            column="73"/>
     </issue>
 
     <issue
@@ -8626,7 +10506,9 @@
         errorLine1="    public void setOnHeaderClickedListener(OnHeaderClickedListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+            line="109"
+            column="44"/>
     </issue>
 
     <issue
@@ -8635,7 +10517,9 @@
         errorLine1="    public void setOnHeaderViewSelectedListener(OnHeaderViewSelectedListener listener) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+            line="113"
+            column="49"/>
     </issue>
 
     <issue
@@ -8644,7 +10528,9 @@
         errorLine1="        void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+            line="66"
+            column="30"/>
     </issue>
 
     <issue
@@ -8653,7 +10539,9 @@
         errorLine1="        void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                                                                       ~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+            line="66"
+            column="72"/>
     </issue>
 
     <issue
@@ -8662,7 +10550,9 @@
         errorLine1="        void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+            line="79"
+            column="31"/>
     </issue>
 
     <issue
@@ -8671,7 +10561,9 @@
         errorLine1="        void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                                                                        ~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+            line="79"
+            column="73"/>
     </issue>
 
     <issue
@@ -8680,7 +10572,9 @@
         errorLine1="    public void setOnHeaderClickedListener(OnHeaderClickedListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+            line="100"
+            column="44"/>
     </issue>
 
     <issue
@@ -8689,7 +10583,9 @@
         errorLine1="    public void setOnHeaderViewSelectedListener(OnHeaderViewSelectedListener listener) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+            line="104"
+            column="49"/>
     </issue>
 
     <issue
@@ -8698,7 +10594,9 @@
         errorLine1="    protected void insertView(View view) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+            line="38"
+            column="31"/>
     </issue>
 
     <issue
@@ -8707,7 +10605,9 @@
         errorLine1="    protected void onViewSelected(View view) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+            line="44"
+            column="35"/>
     </issue>
 
     <issue
@@ -8716,7 +10616,9 @@
         errorLine1="    public void select(HorizontalGridView gridView, View childView, Object object) {"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+            line="68"
+            column="24"/>
     </issue>
 
     <issue
@@ -8725,7 +10627,9 @@
         errorLine1="    public void select(HorizontalGridView gridView, View childView, Object object) {"
         errorLine2="                                                    ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+            line="68"
+            column="53"/>
     </issue>
 
     <issue
@@ -8734,7 +10638,9 @@
         errorLine1="    public void select(HorizontalGridView gridView, View childView, Object object) {"
         errorLine2="                                                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+            line="68"
+            column="69"/>
     </issue>
 
     <issue
@@ -8743,7 +10649,9 @@
         errorLine1="    public ImageCardView(Context context, int themeResId) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="154"
+            column="26"/>
     </issue>
 
     <issue
@@ -8752,7 +10660,9 @@
         errorLine1="    public ImageCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="161"
+            column="26"/>
     </issue>
 
     <issue
@@ -8761,7 +10671,9 @@
         errorLine1="    public ImageCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="161"
+            column="43"/>
     </issue>
 
     <issue
@@ -8770,7 +10682,9 @@
         errorLine1="    public ImageCardView(Context context) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="289"
+            column="26"/>
     </issue>
 
     <issue
@@ -8779,7 +10693,9 @@
         errorLine1="    public ImageCardView(Context context, AttributeSet attrs) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="296"
+            column="26"/>
     </issue>
 
     <issue
@@ -8788,7 +10704,9 @@
         errorLine1="    public ImageCardView(Context context, AttributeSet attrs) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="296"
+            column="43"/>
     </issue>
 
     <issue
@@ -8797,7 +10715,9 @@
         errorLine1="    public final ImageView getMainImageView() {"
         errorLine2="                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="303"
+            column="18"/>
     </issue>
 
     <issue
@@ -8806,7 +10726,9 @@
         errorLine1="    public void setMainImageScaleType(ScaleType scaleType) {"
         errorLine2="                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="319"
+            column="39"/>
     </issue>
 
     <issue
@@ -8815,7 +10737,9 @@
         errorLine1="    public void setMainImage(Drawable drawable) {"
         errorLine2="                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="328"
+            column="30"/>
     </issue>
 
     <issue
@@ -8824,7 +10748,9 @@
         errorLine1="    public void setMainImage(Drawable drawable, boolean fade) {"
         errorLine2="                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="335"
+            column="30"/>
     </issue>
 
     <issue
@@ -8833,7 +10759,9 @@
         errorLine1="    public Drawable getMainImage() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="369"
+            column="12"/>
     </issue>
 
     <issue
@@ -8842,7 +10770,9 @@
         errorLine1="    public Drawable getInfoAreaBackground() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="380"
+            column="12"/>
     </issue>
 
     <issue
@@ -8851,7 +10781,9 @@
         errorLine1="    public void setInfoAreaBackground(Drawable drawable) {"
         errorLine2="                                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="390"
+            column="39"/>
     </issue>
 
     <issue
@@ -8860,7 +10792,9 @@
         errorLine1="    public void setTitleText(CharSequence text) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="408"
+            column="30"/>
     </issue>
 
     <issue
@@ -8869,7 +10803,9 @@
         errorLine1="    public CharSequence getTitleText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="418"
+            column="12"/>
     </issue>
 
     <issue
@@ -8878,7 +10814,9 @@
         errorLine1="    public void setContentText(CharSequence text) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="429"
+            column="32"/>
     </issue>
 
     <issue
@@ -8887,7 +10825,9 @@
         errorLine1="    public CharSequence getContentText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="439"
+            column="12"/>
     </issue>
 
     <issue
@@ -8896,7 +10836,9 @@
         errorLine1="    public void setBadgeImage(Drawable drawable) {"
         errorLine2="                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="450"
+            column="31"/>
     </issue>
 
     <issue
@@ -8905,7 +10847,9 @@
         errorLine1="    public Drawable getBadgeImage() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+            line="465"
+            column="12"/>
     </issue>
 
     <issue
@@ -8914,7 +10858,9 @@
         errorLine1="        public abstract boolean onKeyPreIme(EditText editText, int keyCode, KeyEvent event);"
         errorLine2="                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"/>
+            file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"
+            line="39"
+            column="45"/>
     </issue>
 
     <issue
@@ -8923,7 +10869,9 @@
         errorLine1="        public abstract boolean onKeyPreIme(EditText editText, int keyCode, KeyEvent event);"
         errorLine2="                                                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"/>
+            file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"
+            line="39"
+            column="77"/>
     </issue>
 
     <issue
@@ -8932,7 +10880,9 @@
         errorLine1="    public void setImeKeyListener(ImeKeyListener listener);"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"/>
+            file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"
+            line="46"
+            column="35"/>
     </issue>
 
     <issue
@@ -8941,7 +10891,9 @@
         errorLine1="    protected ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/InvisibleRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/InvisibleRowPresenter.java"
+            line="34"
+            column="15"/>
     </issue>
 
     <issue
@@ -8950,7 +10902,9 @@
         errorLine1="    protected ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/InvisibleRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/InvisibleRowPresenter.java"
+            line="34"
+            column="46"/>
     </issue>
 
     <issue
@@ -8959,7 +10913,9 @@
         errorLine1="        public void onAddPresenter(Presenter presenter, int type) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="37"
+            column="36"/>
     </issue>
 
     <issue
@@ -8968,7 +10924,9 @@
         errorLine1="        public void onCreate(ViewHolder viewHolder) {"
         errorLine2="                             ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="40"
+            column="30"/>
     </issue>
 
     <issue
@@ -8977,7 +10935,9 @@
         errorLine1="        public void onBind(ViewHolder viewHolder) {"
         errorLine2="                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="43"
+            column="28"/>
     </issue>
 
     <issue
@@ -8986,7 +10946,9 @@
         errorLine1="        public void onBind(ViewHolder viewHolder, List payloads) {"
         errorLine2="                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="46"
+            column="28"/>
     </issue>
 
     <issue
@@ -8995,7 +10957,9 @@
         errorLine1="        public void onBind(ViewHolder viewHolder, List payloads) {"
         errorLine2="                                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="46"
+            column="51"/>
     </issue>
 
     <issue
@@ -9004,7 +10968,9 @@
         errorLine1="        public void onUnbind(ViewHolder viewHolder) {"
         errorLine2="                             ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="50"
+            column="30"/>
     </issue>
 
     <issue
@@ -9013,7 +10979,9 @@
         errorLine1="        public void onAttachedToWindow(ViewHolder viewHolder) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="53"
+            column="40"/>
     </issue>
 
     <issue
@@ -9022,7 +10990,9 @@
         errorLine1="        public void onDetachedFromWindow(ViewHolder viewHolder) {"
         errorLine2="                                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="56"
+            column="42"/>
     </issue>
 
     <issue
@@ -9031,7 +11001,9 @@
         errorLine1="        public abstract View createWrapper(View root);"
         errorLine2="                        ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="65"
+            column="25"/>
     </issue>
 
     <issue
@@ -9040,7 +11012,9 @@
         errorLine1="        public abstract View createWrapper(View root);"
         errorLine2="                                           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="65"
+            column="44"/>
     </issue>
 
     <issue
@@ -9049,7 +11023,9 @@
         errorLine1="        public abstract void wrap(View wrapper, View wrapped);"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="67"
+            column="35"/>
     </issue>
 
     <issue
@@ -9058,7 +11034,9 @@
         errorLine1="        public abstract void wrap(View wrapper, View wrapped);"
         errorLine2="                                                ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="67"
+            column="49"/>
     </issue>
 
     <issue
@@ -9067,7 +11045,9 @@
         errorLine1="        public final Presenter getPresenter() {"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="122"
+            column="22"/>
     </issue>
 
     <issue
@@ -9076,7 +11056,9 @@
         errorLine1="        public final Presenter.ViewHolder getViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="129"
+            column="22"/>
     </issue>
 
     <issue
@@ -9085,7 +11067,9 @@
         errorLine1="        public final Object getItem() {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="136"
+            column="22"/>
     </issue>
 
     <issue
@@ -9094,7 +11078,9 @@
         errorLine1="        public final Object getExtraObject() {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="145"
+            column="22"/>
     </issue>
 
     <issue
@@ -9103,7 +11089,9 @@
         errorLine1="        public void setExtraObject(Object object) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="154"
+            column="36"/>
     </issue>
 
     <issue
@@ -9112,7 +11100,9 @@
         errorLine1="        public Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="159"
+            column="16"/>
     </issue>
 
     <issue
@@ -9121,7 +11111,9 @@
         errorLine1="        public Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="159"
+            column="32"/>
     </issue>
 
     <issue
@@ -9130,7 +11122,9 @@
         errorLine1="    public ItemBridgeAdapter(ObjectAdapter adapter, PresenterSelector presenterSelector) {"
         errorLine2="                             ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="202"
+            column="30"/>
     </issue>
 
     <issue
@@ -9139,7 +11133,9 @@
         errorLine1="    public ItemBridgeAdapter(ObjectAdapter adapter, PresenterSelector presenterSelector) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="202"
+            column="53"/>
     </issue>
 
     <issue
@@ -9148,7 +11144,9 @@
         errorLine1="    public ItemBridgeAdapter(ObjectAdapter adapter) {"
         errorLine2="                             ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="207"
+            column="30"/>
     </issue>
 
     <issue
@@ -9157,7 +11155,9 @@
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="217"
+            column="28"/>
     </issue>
 
     <issue
@@ -9166,7 +11166,9 @@
         errorLine1="    public void setPresenter(PresenterSelector presenterSelector) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="242"
+            column="30"/>
     </issue>
 
     <issue
@@ -9175,7 +11177,9 @@
         errorLine1="    public void setWrapper(Wrapper wrapper) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="250"
+            column="28"/>
     </issue>
 
     <issue
@@ -9184,7 +11188,9 @@
         errorLine1="    public Wrapper getWrapper() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="257"
+            column="12"/>
     </issue>
 
     <issue
@@ -9193,7 +11199,9 @@
         errorLine1="    public void setPresenterMapper(ArrayList&lt;Presenter> presenters) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="276"
+            column="36"/>
     </issue>
 
     <issue
@@ -9202,7 +11210,9 @@
         errorLine1="    public ArrayList&lt;Presenter> getPresenterMapper() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="283"
+            column="12"/>
     </issue>
 
     <issue
@@ -9211,7 +11221,9 @@
         errorLine1="    protected void onAddPresenter(Presenter presenter, int type) {"
         errorLine2="                                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="314"
+            column="35"/>
     </issue>
 
     <issue
@@ -9220,7 +11232,9 @@
         errorLine1="    protected void onCreate(ViewHolder viewHolder) {"
         errorLine2="                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="320"
+            column="29"/>
     </issue>
 
     <issue
@@ -9229,7 +11243,9 @@
         errorLine1="    protected void onBind(ViewHolder viewHolder) {"
         errorLine2="                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="326"
+            column="27"/>
     </issue>
 
     <issue
@@ -9238,7 +11254,9 @@
         errorLine1="    protected void onUnbind(ViewHolder viewHolder) {"
         errorLine2="                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="332"
+            column="29"/>
     </issue>
 
     <issue
@@ -9247,7 +11265,9 @@
         errorLine1="    protected void onAttachedToWindow(ViewHolder viewHolder) {"
         errorLine2="                                      ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="338"
+            column="39"/>
     </issue>
 
     <issue
@@ -9256,7 +11276,9 @@
         errorLine1="    protected void onDetachedFromWindow(ViewHolder viewHolder) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="344"
+            column="41"/>
     </issue>
 
     <issue
@@ -9265,7 +11287,9 @@
         errorLine1="    public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="353"
+            column="18"/>
     </issue>
 
     <issue
@@ -9274,7 +11298,9 @@
         errorLine1="    public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="353"
+            column="61"/>
     </issue>
 
     <issue
@@ -9283,7 +11309,9 @@
         errorLine1="    public void setAdapterListener(AdapterListener listener) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="396"
+            column="36"/>
     </issue>
 
     <issue
@@ -9292,7 +11320,9 @@
         errorLine1="    public final void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="401"
+            column="40"/>
     </issue>
 
     <issue
@@ -9301,7 +11331,9 @@
         errorLine1="    public final  void onBindViewHolder(RecyclerView.ViewHolder holder, int position,"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="416"
+            column="41"/>
     </issue>
 
     <issue
@@ -9310,7 +11342,9 @@
         errorLine1="            List payloads) {"
         errorLine2="            ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="417"
+            column="13"/>
     </issue>
 
     <issue
@@ -9319,7 +11353,9 @@
         errorLine1="    public final void onViewRecycled(RecyclerView.ViewHolder holder) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="431"
+            column="38"/>
     </issue>
 
     <issue
@@ -9328,7 +11364,9 @@
         errorLine1="    public final boolean onFailedToRecycleView(RecyclerView.ViewHolder holder) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="442"
+            column="48"/>
     </issue>
 
     <issue
@@ -9337,7 +11375,9 @@
         errorLine1="    public final void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="448"
+            column="46"/>
     </issue>
 
     <issue
@@ -9346,7 +11386,9 @@
         errorLine1="    public final void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="458"
+            column="48"/>
     </issue>
 
     <issue
@@ -9355,7 +11397,9 @@
         errorLine1="    public FacetProvider getFacetProvider(int type) {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+            line="473"
+            column="12"/>
     </issue>
 
     <issue
@@ -9364,7 +11408,9 @@
         errorLine1="    public ItemBridgeAdapterShadowOverlayWrapper(ShadowOverlayHelper helper) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+            line="28"
+            column="50"/>
     </issue>
 
     <issue
@@ -9373,7 +11419,9 @@
         errorLine1="    public View createWrapper(View root) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+            line="33"
+            column="12"/>
     </issue>
 
     <issue
@@ -9382,7 +11430,9 @@
         errorLine1="    public View createWrapper(View root) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+            line="33"
+            column="31"/>
     </issue>
 
     <issue
@@ -9391,7 +11441,9 @@
         errorLine1="    public void wrap(View wrapper, View wrapped) {"
         errorLine2="                     ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+            line="39"
+            column="22"/>
     </issue>
 
     <issue
@@ -9400,7 +11452,9 @@
         errorLine1="    public void wrap(View wrapper, View wrapped) {"
         errorLine2="                                   ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+            file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+            line="39"
+            column="36"/>
     </issue>
 
     <issue
@@ -9409,7 +11463,9 @@
         errorLine1="    public static Object loadTitleInTransition(Context context) {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+            line="33"
+            column="19"/>
     </issue>
 
     <issue
@@ -9418,7 +11474,9 @@
         errorLine1="    public static Object loadTitleInTransition(Context context) {"
         errorLine2="                                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+            line="33"
+            column="48"/>
     </issue>
 
     <issue
@@ -9427,7 +11485,9 @@
         errorLine1="    public static Object loadTitleOutTransition(Context context) {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+            line="46"
+            column="19"/>
     </issue>
 
     <issue
@@ -9436,7 +11496,9 @@
         errorLine1="    public static Object loadTitleOutTransition(Context context) {"
         errorLine2="                                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+            file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+            line="46"
+            column="49"/>
     </issue>
 
     <issue
@@ -9445,7 +11507,9 @@
         errorLine1="    public final ObjectAdapter getAdapter() {"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRow.java"
+            line="27"
+            column="18"/>
     </issue>
 
     <issue
@@ -9454,7 +11518,9 @@
         errorLine1="    public ListRow(HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRow.java"
+            line="31"
+            column="20"/>
     </issue>
 
     <issue
@@ -9463,7 +11529,9 @@
         errorLine1="    public ListRow(HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRow.java"
+            line="31"
+            column="39"/>
     </issue>
 
     <issue
@@ -9472,7 +11540,9 @@
         errorLine1="    public ListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRow.java"
+            line="37"
+            column="29"/>
     </issue>
 
     <issue
@@ -9481,7 +11551,9 @@
         errorLine1="    public ListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                                               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRow.java"
+            line="37"
+            column="48"/>
     </issue>
 
     <issue
@@ -9490,7 +11562,9 @@
         errorLine1="    public ListRow(ObjectAdapter adapter) {"
         errorLine2="                   ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRow.java"
+            line="43"
+            column="20"/>
     </issue>
 
     <issue
@@ -9499,7 +11573,9 @@
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRow.java"
+            line="62"
+            column="12"/>
     </issue>
 
     <issue
@@ -9508,7 +11584,9 @@
         errorLine1="    public void setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRow.java"
+            line="83"
+            column="39"/>
     </issue>
 
     <issue
@@ -9517,7 +11595,9 @@
         errorLine1="    public ListRowHoverCardView(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+            line="34"
+            column="33"/>
     </issue>
 
     <issue
@@ -9526,7 +11606,9 @@
         errorLine1="    public ListRowHoverCardView(Context context, AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+            line="38"
+            column="33"/>
     </issue>
 
     <issue
@@ -9535,7 +11617,9 @@
         errorLine1="    public ListRowHoverCardView(Context context, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+            line="38"
+            column="50"/>
     </issue>
 
     <issue
@@ -9544,7 +11628,9 @@
         errorLine1="    public ListRowHoverCardView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+            line="42"
+            column="33"/>
     </issue>
 
     <issue
@@ -9553,7 +11639,9 @@
         errorLine1="    public ListRowHoverCardView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+            line="42"
+            column="50"/>
     </issue>
 
     <issue
@@ -9562,7 +11650,9 @@
         errorLine1="    public final CharSequence getTitle() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+            line="53"
+            column="18"/>
     </issue>
 
     <issue
@@ -9571,7 +11661,9 @@
         errorLine1="    public final void setTitle(CharSequence text) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+            line="60"
+            column="32"/>
     </issue>
 
     <issue
@@ -9580,7 +11672,9 @@
         errorLine1="    public final CharSequence getDescription() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+            line="72"
+            column="18"/>
     </issue>
 
     <issue
@@ -9589,7 +11683,9 @@
         errorLine1="    public final void setDescription(CharSequence text) {"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+            line="79"
+            column="38"/>
     </issue>
 
     <issue
@@ -9598,7 +11694,9 @@
         errorLine1="        public ViewHolder(View rootView, HorizontalGridView gridView, ListRowPresenter p) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="70"
+            column="27"/>
     </issue>
 
     <issue
@@ -9607,7 +11705,9 @@
         errorLine1="        public ViewHolder(View rootView, HorizontalGridView gridView, ListRowPresenter p) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="70"
+            column="42"/>
     </issue>
 
     <issue
@@ -9616,7 +11716,9 @@
         errorLine1="        public ViewHolder(View rootView, HorizontalGridView gridView, ListRowPresenter p) {"
         errorLine2="                                                                      ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="70"
+            column="71"/>
     </issue>
 
     <issue
@@ -9625,7 +11727,9 @@
         errorLine1="        public final ListRowPresenter getListRowPresenter() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="84"
+            column="22"/>
     </issue>
 
     <issue
@@ -9634,7 +11738,9 @@
         errorLine1="        public final HorizontalGridView getGridView() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="92"
+            column="22"/>
     </issue>
 
     <issue
@@ -9643,7 +11749,9 @@
         errorLine1="        public final ItemBridgeAdapter getBridgeAdapter() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="100"
+            column="22"/>
     </issue>
 
     <issue
@@ -9652,7 +11760,9 @@
         errorLine1="        public Presenter.ViewHolder getItemViewHolder(int position) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="118"
+            column="16"/>
     </issue>
 
     <issue
@@ -9661,7 +11771,9 @@
         errorLine1="        public Presenter.ViewHolder getSelectedItemViewHolder() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="128"
+            column="16"/>
     </issue>
 
     <issue
@@ -9670,7 +11782,9 @@
         errorLine1="        public Object getSelectedItem() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="133"
+            column="16"/>
     </issue>
 
     <issue
@@ -9679,7 +11793,9 @@
         errorLine1="        public Presenter.ViewHolderTask getItemTask() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="194"
+            column="16"/>
     </issue>
 
     <issue
@@ -9688,7 +11804,9 @@
         errorLine1="        public void setItemTask(Presenter.ViewHolderTask itemTask) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="202"
+            column="33"/>
     </issue>
 
     <issue
@@ -9697,7 +11815,9 @@
         errorLine1="        public void run(Presenter.ViewHolder holder) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="207"
+            column="25"/>
     </issue>
 
     <issue
@@ -9706,7 +11826,9 @@
         errorLine1="    protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="416"
+            column="44"/>
     </issue>
 
     <issue
@@ -9715,7 +11837,9 @@
         errorLine1="    public void setRecycledPoolSize(Presenter presenter, int size) {"
         errorLine2="                                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="470"
+            column="37"/>
     </issue>
 
     <issue
@@ -9724,7 +11848,9 @@
         errorLine1="    public int getRecycledPoolSize(Presenter presenter) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="477"
+            column="36"/>
     </issue>
 
     <issue
@@ -9733,7 +11859,9 @@
         errorLine1="    public final void setHoverCardPresenterSelector(PresenterSelector selector) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="485"
+            column="53"/>
     </issue>
 
     <issue
@@ -9742,7 +11870,9 @@
         errorLine1="    public final PresenterSelector getHoverCardPresenterSelector() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="492"
+            column="18"/>
     </issue>
 
     <issue
@@ -9751,7 +11881,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="570"
+            column="15"/>
     </issue>
 
     <issue
@@ -9760,7 +11892,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="570"
+            column="59"/>
     </issue>
 
     <issue
@@ -9769,7 +11903,9 @@
         errorLine1="    protected void dispatchItemSelectedListener(RowPresenter.ViewHolder holder, boolean selected) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="586"
+            column="49"/>
     </issue>
 
     <issue
@@ -9778,7 +11914,9 @@
         errorLine1="    protected void onRowViewSelected(RowPresenter.ViewHolder holder, boolean selected) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="604"
+            column="38"/>
     </issue>
 
     <issue
@@ -9787,7 +11925,9 @@
         errorLine1="    protected void onRowViewExpanded(RowPresenter.ViewHolder holder, boolean expanded) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="645"
+            column="38"/>
     </issue>
 
     <issue
@@ -9796,7 +11936,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="657"
+            column="40"/>
     </issue>
 
     <issue
@@ -9805,7 +11947,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="657"
+            column="72"/>
     </issue>
 
     <issue
@@ -9814,7 +11958,9 @@
         errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="667"
+            column="42"/>
     </issue>
 
     <issue
@@ -9823,7 +11969,9 @@
         errorLine1="    public boolean isUsingZOrder(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="708"
+            column="34"/>
     </issue>
 
     <issue
@@ -9832,7 +11980,9 @@
         errorLine1="    public boolean isUsingOutlineClipping(Context context) {"
         errorLine2="                                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="720"
+            column="43"/>
     </issue>
 
     <issue
@@ -9841,7 +11991,9 @@
         errorLine1="    protected ShadowOverlayHelper.Options createShadowOverlayOptions() {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="794"
+            column="15"/>
     </issue>
 
     <issue
@@ -9850,7 +12002,9 @@
         errorLine1="    protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="813"
+            column="41"/>
     </issue>
 
     <issue
@@ -9859,7 +12013,9 @@
         errorLine1="    protected void applySelectLevelToChild(ViewHolder rowViewHolder, View childView) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="838"
+            column="44"/>
     </issue>
 
     <issue
@@ -9868,7 +12024,9 @@
         errorLine1="    protected void applySelectLevelToChild(ViewHolder rowViewHolder, View childView) {"
         errorLine2="                                                                     ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="838"
+            column="70"/>
     </issue>
 
     <issue
@@ -9877,7 +12035,9 @@
         errorLine1="    public void freeze(RowPresenter.ViewHolder holder, boolean freeze) {"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="846"
+            column="24"/>
     </issue>
 
     <issue
@@ -9886,7 +12046,9 @@
         errorLine1="    public void setEntranceTransitionState(RowPresenter.ViewHolder holder,"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+            line="853"
+            column="44"/>
     </issue>
 
     <issue
@@ -9895,7 +12057,9 @@
         errorLine1="    public ListRowView(Context context) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowView.java"
+            line="32"
+            column="24"/>
     </issue>
 
     <issue
@@ -9904,7 +12068,9 @@
         errorLine1="    public ListRowView(Context context, AttributeSet attrs) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowView.java"
+            line="36"
+            column="24"/>
     </issue>
 
     <issue
@@ -9913,7 +12079,9 @@
         errorLine1="    public ListRowView(Context context, AttributeSet attrs) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowView.java"
+            line="36"
+            column="41"/>
     </issue>
 
     <issue
@@ -9922,7 +12090,9 @@
         errorLine1="    public ListRowView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowView.java"
+            line="40"
+            column="24"/>
     </issue>
 
     <issue
@@ -9931,7 +12101,9 @@
         errorLine1="    public ListRowView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowView.java"
+            line="40"
+            column="41"/>
     </issue>
 
     <issue
@@ -9940,7 +12112,9 @@
         errorLine1="    public HorizontalGridView getGridView() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/ListRowView.java"
+            line="60"
+            column="12"/>
     </issue>
 
     <issue
@@ -9949,7 +12123,9 @@
         errorLine1="    public MediaControllerAdapter(MediaControllerCompat controller) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+            line="128"
+            column="35"/>
     </issue>
 
     <issue
@@ -9958,7 +12134,9 @@
         errorLine1="    public MediaControllerCompat getMediaController() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+            line="140"
+            column="12"/>
     </issue>
 
     <issue
@@ -9967,7 +12145,9 @@
         errorLine1="    public CharSequence getMediaTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+            line="224"
+            column="12"/>
     </issue>
 
     <issue
@@ -9976,7 +12156,9 @@
         errorLine1="    public CharSequence getMediaSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+            line="236"
+            column="12"/>
     </issue>
 
     <issue
@@ -9985,7 +12167,9 @@
         errorLine1="    public Drawable getMediaArt(Context context) {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+            line="248"
+            column="12"/>
     </issue>
 
     <issue
@@ -9994,7 +12178,9 @@
         errorLine1="    public Drawable getMediaArt(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+            line="248"
+            column="33"/>
     </issue>
 
     <issue
@@ -10003,7 +12189,9 @@
         errorLine1="    public void onAttachedToHost(PlaybackGlueHost host) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+            line="266"
+            column="34"/>
     </issue>
 
     <issue
@@ -10012,7 +12200,9 @@
         errorLine1="    public MediaControllerGlue(Context context,"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+            line="71"
+            column="32"/>
     </issue>
 
     <issue
@@ -10021,7 +12211,9 @@
         errorLine1="                               int[] fastForwardSpeeds,"
         errorLine2="                               ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+            line="72"
+            column="32"/>
     </issue>
 
     <issue
@@ -10030,7 +12222,9 @@
         errorLine1="                               int[] rewindSpeeds) {"
         errorLine2="                               ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+            line="73"
+            column="32"/>
     </issue>
 
     <issue
@@ -10039,7 +12233,9 @@
         errorLine1="    public void attachToMediaController(MediaControllerCompat mediaController) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+            line="80"
+            column="41"/>
     </issue>
 
     <issue
@@ -10048,7 +12244,9 @@
         errorLine1="    public final MediaControllerCompat getMediaController() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+            line="107"
+            column="18"/>
     </issue>
 
     <issue
@@ -10057,7 +12255,9 @@
         errorLine1="    public CharSequence getMediaTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+            line="148"
+            column="12"/>
     </issue>
 
     <issue
@@ -10066,7 +12266,9 @@
         errorLine1="    public CharSequence getMediaSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+            line="153"
+            column="12"/>
     </issue>
 
     <issue
@@ -10075,7 +12277,9 @@
         errorLine1="    public Drawable getMediaArt() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+            line="169"
+            column="12"/>
     </issue>
 
     <issue
@@ -10084,7 +12288,9 @@
         errorLine1="    public MediaNowPlayingView(Context context, AttributeSet attrs) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/MediaNowPlayingView.java"/>
+            file="src/main/java/androidx/leanback/widget/MediaNowPlayingView.java"
+            line="47"
+            column="32"/>
     </issue>
 
     <issue
@@ -10093,7 +12299,9 @@
         errorLine1="    public MediaNowPlayingView(Context context, AttributeSet attrs) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/MediaNowPlayingView.java"/>
+            file="src/main/java/androidx/leanback/widget/MediaNowPlayingView.java"
+            line="47"
+            column="49"/>
     </issue>
 
     <issue
@@ -10102,7 +12310,9 @@
         errorLine1="    public MediaPlayerAdapter(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"
+            line="137"
+            column="31"/>
     </issue>
 
     <issue
@@ -10111,7 +12321,9 @@
         errorLine1="    public void onAttachedToHost(PlaybackGlueHost host) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"
+            line="142"
+            column="34"/>
     </issue>
 
     <issue
@@ -10120,7 +12332,9 @@
         errorLine1="    public boolean setDataSource(Uri uri) {"
         errorLine2="                                 ~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"
+            line="338"
+            column="34"/>
     </issue>
 
     <issue
@@ -10129,7 +12343,9 @@
         errorLine1="    public final MediaPlayer getMediaPlayer() {"
         errorLine2="                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"
+            line="387"
+            column="18"/>
     </issue>
 
     <issue
@@ -10138,7 +12354,9 @@
         errorLine1="    public void setCover(Drawable cover) {"
         errorLine2="                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="91"
+            column="26"/>
     </issue>
 
     <issue
@@ -10147,7 +12365,9 @@
         errorLine1="    public void setArtist(String artist) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="98"
+            column="27"/>
     </issue>
 
     <issue
@@ -10156,7 +12376,9 @@
         errorLine1="    public void setTitle(String title) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="105"
+            column="26"/>
     </issue>
 
     <issue
@@ -10165,7 +12387,9 @@
         errorLine1="    public void setVideoUrl(String videoUrl) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="112"
+            column="29"/>
     </issue>
 
     <issue
@@ -10174,7 +12398,9 @@
         errorLine1="    public MediaPlayerGlue(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="120"
+            column="28"/>
     </issue>
 
     <issue
@@ -10183,7 +12409,9 @@
         errorLine1="            Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {"
         errorLine2="            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="128"
+            column="13"/>
     </issue>
 
     <issue
@@ -10192,7 +12420,9 @@
         errorLine1="            Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {"
         errorLine2="                             ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="128"
+            column="30"/>
     </issue>
 
     <issue
@@ -10201,7 +12431,9 @@
         errorLine1="            Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {"
         errorLine2="                                                      ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="128"
+            column="55"/>
     </issue>
 
     <issue
@@ -10210,7 +12442,9 @@
         errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="140"
+            column="37"/>
     </issue>
 
     <issue
@@ -10219,7 +12453,9 @@
         errorLine1="    protected void onCreateSecondaryActions(ArrayObjectAdapter secondaryActionsAdapter) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="189"
+            column="45"/>
     </issue>
 
     <issue
@@ -10228,7 +12464,9 @@
         errorLine1="    public void setDisplay(SurfaceHolder surfaceHolder) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="198"
+            column="28"/>
     </issue>
 
     <issue
@@ -10237,7 +12475,9 @@
         errorLine1="    public void onActionClicked(Action action) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="221"
+            column="33"/>
     </issue>
 
     <issue
@@ -10246,7 +12486,9 @@
         errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
         errorLine2="                         ~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="246"
+            column="26"/>
     </issue>
 
     <issue
@@ -10255,7 +12497,9 @@
         errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="246"
+            column="47"/>
     </issue>
 
     <issue
@@ -10264,7 +12508,9 @@
         errorLine1="    public CharSequence getMediaTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="291"
+            column="12"/>
     </issue>
 
     <issue
@@ -10273,7 +12519,9 @@
         errorLine1="    public CharSequence getMediaSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="296"
+            column="12"/>
     </issue>
 
     <issue
@@ -10282,7 +12530,9 @@
         errorLine1="    public Drawable getMediaArt() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="306"
+            column="12"/>
     </issue>
 
     <issue
@@ -10291,7 +12541,9 @@
         errorLine1="    public boolean setMediaSource(Uri uri) {"
         errorLine2="                                  ~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="401"
+            column="35"/>
     </issue>
 
     <issue
@@ -10300,7 +12552,9 @@
         errorLine1="    public boolean setMediaSource(String path) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="418"
+            column="35"/>
     </issue>
 
     <issue
@@ -10309,7 +12563,9 @@
         errorLine1="    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="486"
+            column="32"/>
     </issue>
 
     <issue
@@ -10318,7 +12574,9 @@
         errorLine1="    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                                                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="486"
+            column="69"/>
     </issue>
 
     <issue
@@ -10327,7 +12585,9 @@
         errorLine1="                               RowPresenter.ViewHolder rowViewHolder, Row row) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="487"
+            column="32"/>
     </issue>
 
     <issue
@@ -10336,7 +12596,9 @@
         errorLine1="                               RowPresenter.ViewHolder rowViewHolder, Row row) {"
         errorLine2="                                                                      ~~~">
         <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+            line="487"
+            column="71"/>
     </issue>
 
     <issue
@@ -10345,7 +12607,9 @@
         errorLine1="        public void setDrawables(Drawable[] drawables) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"/>
+            file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"
+            line="53"
+            column="34"/>
     </issue>
 
     <issue
@@ -10354,7 +12618,9 @@
         errorLine1="        public Drawable[] getDrawables() {"
         errorLine2="               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"/>
+            file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"
+            line="66"
+            column="16"/>
     </issue>
 
     <issue
@@ -10363,7 +12629,9 @@
         errorLine1="        public Drawable getCurrentDrawable() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"/>
+            file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"
+            line="97"
+            column="16"/>
     </issue>
 
     <issue
@@ -10372,7 +12640,9 @@
         errorLine1="    public MultiAction[] getActions();"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"/>
+            file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"
+            line="113"
+            column="12"/>
     </issue>
 
     <issue
@@ -10381,7 +12651,9 @@
         errorLine1="    public NonOverlappingLinearLayout(Context context) {"
         errorLine2="                                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+            line="38"
+            column="39"/>
     </issue>
 
     <issue
@@ -10390,7 +12662,9 @@
         errorLine1="    public NonOverlappingLinearLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+            line="42"
+            column="39"/>
     </issue>
 
     <issue
@@ -10399,7 +12673,9 @@
         errorLine1="    public NonOverlappingLinearLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+            line="42"
+            column="56"/>
     </issue>
 
     <issue
@@ -10408,7 +12684,9 @@
         errorLine1="    public NonOverlappingLinearLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+            line="46"
+            column="39"/>
     </issue>
 
     <issue
@@ -10417,7 +12695,9 @@
         errorLine1="    public NonOverlappingLinearLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+            line="46"
+            column="56"/>
     </issue>
 
     <issue
@@ -10426,7 +12706,9 @@
         errorLine1="    public void focusableViewAvailable(View v) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+            line="95"
+            column="40"/>
     </issue>
 
     <issue
@@ -10435,7 +12717,9 @@
         errorLine1="        public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {"
         errorLine2="                                                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="64"
+            column="74"/>
     </issue>
 
     <issue
@@ -10444,7 +12728,9 @@
         errorLine1="    public ObjectAdapter(PresenterSelector presenterSelector) {"
         errorLine2="                         ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="152"
+            column="26"/>
     </issue>
 
     <issue
@@ -10453,7 +12739,9 @@
         errorLine1="    public ObjectAdapter(Presenter presenter) {"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="159"
+            column="26"/>
     </issue>
 
     <issue
@@ -10462,7 +12750,9 @@
         errorLine1="    public final void setPresenterSelector(PresenterSelector presenterSelector) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="172"
+            column="44"/>
     </issue>
 
     <issue
@@ -10471,7 +12761,9 @@
         errorLine1="    public final PresenterSelector getPresenterSelector() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="199"
+            column="18"/>
     </issue>
 
     <issue
@@ -10480,7 +12772,9 @@
         errorLine1="    public final void registerObserver(DataObserver observer) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="206"
+            column="40"/>
     </issue>
 
     <issue
@@ -10489,7 +12783,9 @@
         errorLine1="    public final void unregisterObserver(DataObserver observer) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="213"
+            column="42"/>
     </issue>
 
     <issue
@@ -10498,7 +12794,9 @@
         errorLine1="    public final void notifyItemRangeChanged(int positionStart, int itemCount, Object payload) {"
         errorLine2="                                                                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="249"
+            column="80"/>
     </issue>
 
     <issue
@@ -10507,7 +12805,9 @@
         errorLine1="    public final Presenter getPresenter(Object item) {"
         errorLine2="                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="322"
+            column="18"/>
     </issue>
 
     <issue
@@ -10516,7 +12816,9 @@
         errorLine1="    public final Presenter getPresenter(Object item) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="322"
+            column="41"/>
     </issue>
 
     <issue
@@ -10525,7 +12827,9 @@
         errorLine1="    public abstract Object get(int position);"
         errorLine2="                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+            line="337"
+            column="21"/>
     </issue>
 
     <issue
@@ -10534,7 +12838,9 @@
         errorLine1="    void onActionClicked(Action action);"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/OnActionClickedListener.java"/>
+            file="src/main/java/androidx/leanback/widget/OnActionClickedListener.java"
+            line="24"
+            column="26"/>
     </issue>
 
     <issue
@@ -10543,7 +12849,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="313"
+            column="30"/>
     </issue>
 
     <issue
@@ -10552,7 +12860,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
         errorLine2="                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="313"
+            column="61"/>
     </issue>
 
     <issue
@@ -10561,7 +12871,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="314"
+            column="13"/>
     </issue>
 
     <issue
@@ -10570,7 +12882,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="396"
+            column="37"/>
     </issue>
 
     <issue
@@ -10579,7 +12893,9 @@
         errorLine1="    public final CharSequence getStartButtonText() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="518"
+            column="18"/>
     </issue>
 
     <issue
@@ -10588,7 +12904,9 @@
         errorLine1="    public void setStartButtonText(CharSequence text) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="528"
+            column="36"/>
     </issue>
 
     <issue
@@ -10597,7 +12915,9 @@
         errorLine1="    protected Animator onCreateDescriptionAnimator() {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="781"
+            column="15"/>
     </issue>
 
     <issue
@@ -10606,7 +12926,9 @@
         errorLine1="    protected Animator onCreateTitleAnimator() {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="790"
+            column="15"/>
     </issue>
 
     <issue
@@ -10615,7 +12937,9 @@
         errorLine1="    abstract protected CharSequence getPageTitle(int pageIndex);"
         errorLine2="                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="818"
+            column="24"/>
     </issue>
 
     <issue
@@ -10624,7 +12948,9 @@
         errorLine1="    abstract protected CharSequence getPageDescription(int pageIndex);"
         errorLine2="                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="827"
+            column="24"/>
     </issue>
 
     <issue
@@ -10633,7 +12959,9 @@
         errorLine1="    abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="850"
+            column="52"/>
     </issue>
 
     <issue
@@ -10642,7 +12970,9 @@
         errorLine1="    abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="850"
+            column="77"/>
     </issue>
 
     <issue
@@ -10651,7 +12981,9 @@
         errorLine1="    abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="866"
+            column="49"/>
     </issue>
 
     <issue
@@ -10660,7 +12992,9 @@
         errorLine1="    abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="866"
+            column="74"/>
     </issue>
 
     <issue
@@ -10669,7 +13003,9 @@
         errorLine1="    abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="882"
+            column="52"/>
     </issue>
 
     <issue
@@ -10678,7 +13014,9 @@
         errorLine1="    abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+            line="882"
+            column="77"/>
     </issue>
 
     <issue
@@ -10687,7 +13025,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="308"
+            column="30"/>
     </issue>
 
     <issue
@@ -10696,7 +13036,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
         errorLine2="                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="308"
+            column="61"/>
     </issue>
 
     <issue
@@ -10705,7 +13047,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="309"
+            column="13"/>
     </issue>
 
     <issue
@@ -10714,7 +13058,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="391"
+            column="37"/>
     </issue>
 
     <issue
@@ -10723,7 +13069,9 @@
         errorLine1="    public final CharSequence getStartButtonText() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="513"
+            column="18"/>
     </issue>
 
     <issue
@@ -10732,7 +13080,9 @@
         errorLine1="    public void setStartButtonText(CharSequence text) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="523"
+            column="36"/>
     </issue>
 
     <issue
@@ -10741,7 +13091,9 @@
         errorLine1="    protected Animator onCreateDescriptionAnimator() {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="776"
+            column="15"/>
     </issue>
 
     <issue
@@ -10750,7 +13102,9 @@
         errorLine1="    protected Animator onCreateTitleAnimator() {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="785"
+            column="15"/>
     </issue>
 
     <issue
@@ -10759,7 +13113,9 @@
         errorLine1="    abstract protected CharSequence getPageTitle(int pageIndex);"
         errorLine2="                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="813"
+            column="24"/>
     </issue>
 
     <issue
@@ -10768,7 +13124,9 @@
         errorLine1="    abstract protected CharSequence getPageDescription(int pageIndex);"
         errorLine2="                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="822"
+            column="24"/>
     </issue>
 
     <issue
@@ -10777,7 +13135,9 @@
         errorLine1="    abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="845"
+            column="52"/>
     </issue>
 
     <issue
@@ -10786,7 +13146,9 @@
         errorLine1="    abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="845"
+            column="77"/>
     </issue>
 
     <issue
@@ -10795,7 +13157,9 @@
         errorLine1="    abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="861"
+            column="49"/>
     </issue>
 
     <issue
@@ -10804,7 +13168,9 @@
         errorLine1="    abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="861"
+            column="74"/>
     </issue>
 
     <issue
@@ -10813,7 +13179,9 @@
         errorLine1="    abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="877"
+            column="52"/>
     </issue>
 
     <issue
@@ -10822,7 +13190,9 @@
         errorLine1="    abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
         errorLine2="                                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+            line="877"
+            column="77"/>
     </issue>
 
     <issue
@@ -10831,7 +13201,9 @@
         errorLine1="    public PageRow(HeaderItem headerItem) {"
         errorLine2="                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PageRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PageRow.java"
+            line="21"
+            column="20"/>
     </issue>
 
     <issue
@@ -10840,7 +13212,9 @@
         errorLine1="    public PagingIndicator(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+            line="134"
+            column="28"/>
     </issue>
 
     <issue
@@ -10849,7 +13223,9 @@
         errorLine1="    public PagingIndicator(Context context, AttributeSet attrs) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+            line="138"
+            column="28"/>
     </issue>
 
     <issue
@@ -10858,7 +13234,9 @@
         errorLine1="    public PagingIndicator(Context context, AttributeSet attrs) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+            line="138"
+            column="45"/>
     </issue>
 
     <issue
@@ -10867,7 +13245,9 @@
         errorLine1="    public PagingIndicator(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+            line="142"
+            column="28"/>
     </issue>
 
     <issue
@@ -10876,7 +13256,9 @@
         errorLine1="    public PagingIndicator(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+            line="142"
+            column="45"/>
     </issue>
 
     <issue
@@ -10885,7 +13267,9 @@
         errorLine1="    protected void onDraw(Canvas canvas) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+            line="416"
+            column="27"/>
     </issue>
 
     <issue
@@ -10894,7 +13278,9 @@
         errorLine1="        public IntProperty(String name, int index) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="127"
+            column="28"/>
     </issue>
 
     <issue
@@ -10903,7 +13289,9 @@
         errorLine1="        public final Integer get(Parallax object) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="133"
+            column="22"/>
     </issue>
 
     <issue
@@ -10912,7 +13300,9 @@
         errorLine1="        public final Integer get(Parallax object) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="133"
+            column="34"/>
     </issue>
 
     <issue
@@ -10921,7 +13311,9 @@
         errorLine1="        public final void set(Parallax object, Integer value) {"
         errorLine2="                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="138"
+            column="31"/>
     </issue>
 
     <issue
@@ -10930,7 +13322,9 @@
         errorLine1="        public final void set(Parallax object, Integer value) {"
         errorLine2="                                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="138"
+            column="48"/>
     </issue>
 
     <issue
@@ -10939,7 +13333,9 @@
         errorLine1="        public final int getValue(Parallax object) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="154"
+            column="35"/>
     </issue>
 
     <issue
@@ -10948,7 +13344,9 @@
         errorLine1="        public final void setValue(Parallax object, int value) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="164"
+            column="36"/>
     </issue>
 
     <issue
@@ -10957,7 +13355,9 @@
         errorLine1="        public final PropertyMarkerValue atAbsolute(int absoluteValue) {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="174"
+            column="22"/>
     </issue>
 
     <issue
@@ -10966,7 +13366,9 @@
         errorLine1="        public final PropertyMarkerValue atMax() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="184"
+            column="22"/>
     </issue>
 
     <issue
@@ -10975,7 +13377,9 @@
         errorLine1="        public final PropertyMarkerValue atMin() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="193"
+            column="22"/>
     </issue>
 
     <issue
@@ -10984,7 +13388,9 @@
         errorLine1="        public final PropertyMarkerValue atFraction(float fractionOfMaxValue) {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="206"
+            column="22"/>
     </issue>
 
     <issue
@@ -10993,7 +13399,9 @@
         errorLine1="        public final PropertyMarkerValue at(int offsetValue,"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="221"
+            column="22"/>
     </issue>
 
     <issue
@@ -11002,7 +13410,9 @@
         errorLine1="        public FloatProperty(String name, int index) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="280"
+            column="30"/>
     </issue>
 
     <issue
@@ -11011,7 +13421,9 @@
         errorLine1="        public final Float get(Parallax object) {"
         errorLine2="                     ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="286"
+            column="22"/>
     </issue>
 
     <issue
@@ -11020,7 +13432,9 @@
         errorLine1="        public final Float get(Parallax object) {"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="286"
+            column="32"/>
     </issue>
 
     <issue
@@ -11029,7 +13443,9 @@
         errorLine1="        public final void set(Parallax object, Float value) {"
         errorLine2="                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="291"
+            column="31"/>
     </issue>
 
     <issue
@@ -11038,7 +13454,9 @@
         errorLine1="        public final void set(Parallax object, Float value) {"
         errorLine2="                                               ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="291"
+            column="48"/>
     </issue>
 
     <issue
@@ -11047,7 +13465,9 @@
         errorLine1="        public final float getValue(Parallax object) {"
         errorLine2="                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="307"
+            column="37"/>
     </issue>
 
     <issue
@@ -11056,7 +13476,9 @@
         errorLine1="        public final void setValue(Parallax object, float value) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="317"
+            column="36"/>
     </issue>
 
     <issue
@@ -11065,7 +13487,9 @@
         errorLine1="        public final PropertyMarkerValue atAbsolute(float markerValue) {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="327"
+            column="22"/>
     </issue>
 
     <issue
@@ -11074,7 +13498,9 @@
         errorLine1="        public final PropertyMarkerValue atMax() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="337"
+            column="22"/>
     </issue>
 
     <issue
@@ -11083,7 +13509,9 @@
         errorLine1="        public final PropertyMarkerValue atMin() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="346"
+            column="22"/>
     </issue>
 
     <issue
@@ -11092,7 +13520,9 @@
         errorLine1="        public final PropertyMarkerValue atFraction(float fractionOfMaxParentVisibleSize) {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="359"
+            column="22"/>
     </issue>
 
     <issue
@@ -11101,7 +13531,9 @@
         errorLine1="        public final PropertyMarkerValue at(float offsetValue,"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="373"
+            column="22"/>
     </issue>
 
     <issue
@@ -11110,7 +13542,9 @@
         errorLine1="    public final PropertyT addProperty(String name) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="453"
+            column="40"/>
     </issue>
 
     <issue
@@ -11119,7 +13553,9 @@
         errorLine1="    public final List&lt;PropertyT> getProperties() {"
         errorLine2="                 ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="559"
+            column="18"/>
     </issue>
 
     <issue
@@ -11128,7 +13564,9 @@
         errorLine1="    public abstract PropertyT createProperty(String name, int index);"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="570"
+            column="46"/>
     </issue>
 
     <issue
@@ -11137,7 +13575,9 @@
         errorLine1="    public List&lt;ParallaxEffect> getEffects() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="589"
+            column="12"/>
     </issue>
 
     <issue
@@ -11146,7 +13586,9 @@
         errorLine1="    public void removeEffect(ParallaxEffect effect) {"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="598"
+            column="30"/>
     </issue>
 
     <issue
@@ -11155,7 +13597,9 @@
         errorLine1="    public ParallaxEffect addEffect(PropertyMarkerValue... ranges) {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="616"
+            column="12"/>
     </issue>
 
     <issue
@@ -11164,7 +13608,9 @@
         errorLine1="    public ParallaxEffect addEffect(PropertyMarkerValue... ranges) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+            file="src/main/java/androidx/leanback/widget/Parallax.java"
+            line="616"
+            column="37"/>
     </issue>
 
     <issue
@@ -11173,7 +13619,9 @@
         errorLine1="    public final List&lt;Parallax.PropertyMarkerValue> getPropertyRanges() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="64"
+            column="18"/>
     </issue>
 
     <issue
@@ -11182,7 +13630,9 @@
         errorLine1="    public final List&lt;Float> getWeights() {"
         errorLine2="                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="76"
+            column="18"/>
     </issue>
 
     <issue
@@ -11191,7 +13641,9 @@
         errorLine1="    public final void setPropertyRanges(Parallax.PropertyMarkerValue... markerValues) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="87"
+            column="41"/>
     </issue>
 
     <issue
@@ -11200,7 +13652,9 @@
         errorLine1="    public final void setWeights(float... weights) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="103"
+            column="34"/>
     </issue>
 
     <issue
@@ -11209,7 +13663,9 @@
         errorLine1="    public final ParallaxEffect weights(float... weights) {"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="129"
+            column="18"/>
     </issue>
 
     <issue
@@ -11218,7 +13674,9 @@
         errorLine1="    public final ParallaxEffect weights(float... weights) {"
         errorLine2="                                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="129"
+            column="41"/>
     </issue>
 
     <issue
@@ -11227,7 +13685,9 @@
         errorLine1="    public final void addTarget(ParallaxTarget target) {"
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="139"
+            column="33"/>
     </issue>
 
     <issue
@@ -11236,7 +13696,9 @@
         errorLine1="    public final ParallaxEffect target(ParallaxTarget target) {"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="149"
+            column="18"/>
     </issue>
 
     <issue
@@ -11245,7 +13707,9 @@
         errorLine1="    public final ParallaxEffect target(ParallaxTarget target) {"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="149"
+            column="40"/>
     </issue>
 
     <issue
@@ -11254,7 +13718,9 @@
         errorLine1="    public final ParallaxEffect target(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="162"
+            column="18"/>
     </issue>
 
     <issue
@@ -11263,7 +13729,9 @@
         errorLine1="    public final ParallaxEffect target(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="162"
+            column="40"/>
     </issue>
 
     <issue
@@ -11272,7 +13740,9 @@
         errorLine1="    public final ParallaxEffect target(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="162"
+            column="61"/>
     </issue>
 
     <issue
@@ -11281,7 +13751,9 @@
         errorLine1="    public final &lt;T, V extends Number> ParallaxEffect target(T targetObject,"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="179"
+            column="40"/>
     </issue>
 
     <issue
@@ -11290,7 +13762,9 @@
         errorLine1="            Property&lt;T, V> targetProperty) {"
         errorLine2="            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="180"
+            column="13"/>
     </issue>
 
     <issue
@@ -11299,7 +13773,9 @@
         errorLine1="    public final List&lt;ParallaxTarget> getTargets() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="190"
+            column="18"/>
     </issue>
 
     <issue
@@ -11308,7 +13784,9 @@
         errorLine1="    public final void removeTarget(ParallaxTarget target) {"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="198"
+            column="36"/>
     </issue>
 
     <issue
@@ -11317,7 +13795,9 @@
         errorLine1="    public final void performMapping(Parallax source) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+            line="205"
+            column="38"/>
     </issue>
 
     <issue
@@ -11326,7 +13806,9 @@
         errorLine1="    public void directUpdate(Number value) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+            line="64"
+            column="30"/>
     </issue>
 
     <issue
@@ -11335,7 +13817,9 @@
         errorLine1="        public PropertyValuesHolderTarget(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+            line="81"
+            column="43"/>
     </issue>
 
     <issue
@@ -11344,7 +13828,9 @@
         errorLine1="        public PropertyValuesHolderTarget(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+            line="81"
+            column="64"/>
     </issue>
 
     <issue
@@ -11353,7 +13839,9 @@
         errorLine1="        public DirectPropertyTarget(Object targetObject, Property&lt;T, V> property) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+            line="111"
+            column="37"/>
     </issue>
 
     <issue
@@ -11362,7 +13850,9 @@
         errorLine1="        public DirectPropertyTarget(Object targetObject, Property&lt;T, V> property) {"
         errorLine2="                                                         ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+            line="111"
+            column="58"/>
     </issue>
 
     <issue
@@ -11371,7 +13861,9 @@
         errorLine1="        public void directUpdate(Number value) {"
         errorLine2="                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+            file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+            line="127"
+            column="34"/>
     </issue>
 
     <issue
@@ -11380,7 +13872,9 @@
         errorLine1="    public ParallaxTransition(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="54"
+            column="31"/>
     </issue>
 
     <issue
@@ -11389,7 +13883,9 @@
         errorLine1="    public ParallaxTransition(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="54"
+            column="48"/>
     </issue>
 
     <issue
@@ -11398,7 +13894,9 @@
         errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view,"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="75"
+            column="12"/>
     </issue>
 
     <issue
@@ -11407,7 +13905,9 @@
         errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view,"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="75"
+            column="30"/>
     </issue>
 
     <issue
@@ -11416,7 +13916,9 @@
         errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view,"
         errorLine2="                                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="75"
+            column="51"/>
     </issue>
 
     <issue
@@ -11425,7 +13927,9 @@
         errorLine1="                             TransitionValues startValues, TransitionValues endValues) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="76"
+            column="30"/>
     </issue>
 
     <issue
@@ -11434,7 +13938,9 @@
         errorLine1="                             TransitionValues startValues, TransitionValues endValues) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="76"
+            column="60"/>
     </issue>
 
     <issue
@@ -11443,7 +13949,9 @@
         errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view,"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="84"
+            column="12"/>
     </issue>
 
     <issue
@@ -11452,7 +13960,9 @@
         errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view,"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="84"
+            column="33"/>
     </issue>
 
     <issue
@@ -11461,7 +13971,9 @@
         errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view,"
         errorLine2="                                                     ~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="84"
+            column="54"/>
     </issue>
 
     <issue
@@ -11470,7 +13982,9 @@
         errorLine1="                                TransitionValues startValues, TransitionValues endValues) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="85"
+            column="33"/>
     </issue>
 
     <issue
@@ -11479,7 +13993,9 @@
         errorLine1="                                TransitionValues startValues, TransitionValues endValues) {"
         errorLine2="                                                              ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+            line="85"
+            column="63"/>
     </issue>
 
     <issue
@@ -11488,7 +14004,9 @@
         errorLine1="    public static void requestPermissions(android.app.Fragment fragment, String[] permissions,"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PermissionHelper.java"/>
+            file="src/main/java/androidx/leanback/app/PermissionHelper.java"
+            line="30"
+            column="43"/>
     </issue>
 
     <issue
@@ -11497,7 +14015,9 @@
         errorLine1="    public static void requestPermissions(android.app.Fragment fragment, String[] permissions,"
         errorLine2="                                                                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PermissionHelper.java"/>
+            file="src/main/java/androidx/leanback/app/PermissionHelper.java"
+            line="30"
+            column="74"/>
     </issue>
 
     <issue
@@ -11506,7 +14026,9 @@
         errorLine1="        void onValueChanged(Picker picker, int column);"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="76"
+            column="29"/>
     </issue>
 
     <issue
@@ -11515,7 +14037,9 @@
         errorLine1="    public final CharSequence getSeparator() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="105"
+            column="18"/>
     </issue>
 
     <issue
@@ -11524,7 +14048,9 @@
         errorLine1="    public final void setSeparator(CharSequence separator) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="114"
+            column="36"/>
     </issue>
 
     <issue
@@ -11533,7 +14059,9 @@
         errorLine1="    public final List&lt;CharSequence> getSeparators() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="123"
+            column="18"/>
     </issue>
 
     <issue
@@ -11542,7 +14070,9 @@
         errorLine1="    public final void setSeparators(List&lt;CharSequence> separators) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="139"
+            column="37"/>
     </issue>
 
     <issue
@@ -11551,7 +14081,9 @@
         errorLine1="    public Picker(Context context, AttributeSet attributeSet) {"
         errorLine2="                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="189"
+            column="19"/>
     </issue>
 
     <issue
@@ -11560,7 +14092,9 @@
         errorLine1="    public Picker(Context context, AttributeSet attributeSet) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="189"
+            column="36"/>
     </issue>
 
     <issue
@@ -11569,7 +14103,9 @@
         errorLine1="    public Picker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="197"
+            column="19"/>
     </issue>
 
     <issue
@@ -11578,7 +14114,9 @@
         errorLine1="    public Picker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="197"
+            column="36"/>
     </issue>
 
     <issue
@@ -11587,7 +14125,9 @@
         errorLine1="    public PickerColumn getColumnAt(int colIndex) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="232"
+            column="12"/>
     </issue>
 
     <issue
@@ -11596,7 +14136,9 @@
         errorLine1="    public void setColumns(List&lt;PickerColumn> columns) {"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="258"
+            column="28"/>
     </issue>
 
     <issue
@@ -11605,7 +14147,9 @@
         errorLine1="    public void setColumnAt(int columnIndex, PickerColumn column) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="333"
+            column="46"/>
     </issue>
 
     <issue
@@ -11614,7 +14158,9 @@
         errorLine1="    public void addOnValueChangedListener(PickerValueListener listener) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="380"
+            column="43"/>
     </issue>
 
     <issue
@@ -11623,7 +14169,9 @@
         errorLine1="    public void removeOnValueChangedListener(PickerValueListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="392"
+            column="46"/>
     </issue>
 
     <issue
@@ -11632,7 +14180,9 @@
         errorLine1="    public boolean dispatchKeyEvent(android.view.KeyEvent event) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="545"
+            column="37"/>
     </issue>
 
     <issue
@@ -11641,7 +14191,9 @@
         errorLine1="    protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {"
         errorLine2="                                                                 ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="564"
+            column="66"/>
     </issue>
 
     <issue
@@ -11650,7 +14202,9 @@
         errorLine1="    public void requestChildFocus(View child, View focused) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="700"
+            column="35"/>
     </issue>
 
     <issue
@@ -11659,7 +14213,9 @@
         errorLine1="    public void requestChildFocus(View child, View focused) {"
         errorLine2="                                              ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+            line="700"
+            column="47"/>
     </issue>
 
     <issue
@@ -11668,7 +14224,9 @@
         errorLine1="    public void setLabelFormat(String labelFormat) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+            line="41"
+            column="32"/>
     </issue>
 
     <issue
@@ -11677,7 +14235,9 @@
         errorLine1="    public String getLabelFormat() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+            line="50"
+            column="12"/>
     </issue>
 
     <issue
@@ -11686,7 +14246,9 @@
         errorLine1="    public void setStaticLabels(CharSequence[] labels) {"
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+            line="59"
+            column="33"/>
     </issue>
 
     <issue
@@ -11695,7 +14257,9 @@
         errorLine1="    public CharSequence[] getStaticLabels() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+            line="67"
+            column="12"/>
     </issue>
 
     <issue
@@ -11704,7 +14268,9 @@
         errorLine1="    public CharSequence getLabelFor(int value) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+            line="78"
+            column="12"/>
     </issue>
 
     <issue
@@ -11713,7 +14279,9 @@
         errorLine1="    public PinPicker(Context context, AttributeSet attrs) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+            line="41"
+            column="22"/>
     </issue>
 
     <issue
@@ -11722,7 +14290,9 @@
         errorLine1="    public PinPicker(Context context, AttributeSet attrs) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+            line="41"
+            column="39"/>
     </issue>
 
     <issue
@@ -11731,7 +14301,9 @@
         errorLine1="    public PinPicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+            line="46"
+            column="22"/>
     </issue>
 
     <issue
@@ -11740,7 +14312,9 @@
         errorLine1="    public PinPicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+            line="46"
+            column="39"/>
     </issue>
 
     <issue
@@ -11749,7 +14323,9 @@
         errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
         errorLine2="                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+            line="89"
+            column="37"/>
     </issue>
 
     <issue
@@ -11758,7 +14334,9 @@
         errorLine1="    public String getPin() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+            line="106"
+            column="12"/>
     </issue>
 
     <issue
@@ -11767,7 +14345,9 @@
         errorLine1="    public PlaybackBannerControlGlue(Context context,"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="233"
+            column="38"/>
     </issue>
 
     <issue
@@ -11776,7 +14356,9 @@
         errorLine1="            int[] seekSpeeds,"
         errorLine2="            ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="234"
+            column="13"/>
     </issue>
 
     <issue
@@ -11785,7 +14367,9 @@
         errorLine1="    public PlaybackBannerControlGlue(Context context,"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="249"
+            column="38"/>
     </issue>
 
     <issue
@@ -11794,7 +14378,9 @@
         errorLine1="                                    int[] fastForwardSpeeds,"
         errorLine2="                                    ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="250"
+            column="37"/>
     </issue>
 
     <issue
@@ -11803,7 +14389,9 @@
         errorLine1="                                    int[] rewindSpeeds,"
         errorLine2="                                    ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="251"
+            column="37"/>
     </issue>
 
     <issue
@@ -11812,7 +14400,9 @@
         errorLine1="    public void setControlsRow(PlaybackControlsRow controlsRow) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="273"
+            column="32"/>
     </issue>
 
     <issue
@@ -11821,7 +14411,9 @@
         errorLine1="    protected void onCreatePrimaryActions(ArrayObjectAdapter primaryActionsAdapter) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="279"
+            column="43"/>
     </issue>
 
     <issue
@@ -11830,7 +14422,9 @@
         errorLine1="    protected PlaybackRowPresenter onCreateRowPresenter() {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="324"
+            column="15"/>
     </issue>
 
     <issue
@@ -11839,7 +14433,9 @@
         errorLine1="    public void onActionClicked(Action action) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="357"
+            column="33"/>
     </issue>
 
     <issue
@@ -11848,7 +14444,9 @@
         errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
         errorLine2="                         ~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="366"
+            column="26"/>
     </issue>
 
     <issue
@@ -11857,7 +14455,9 @@
         errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+            line="366"
+            column="47"/>
     </issue>
 
     <issue
@@ -11866,7 +14466,9 @@
         errorLine1="    public PlaybackBaseControlGlue(Context context, T impl) {"
         errorLine2="                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="212"
+            column="36"/>
     </issue>
 
     <issue
@@ -11875,7 +14477,9 @@
         errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="223"
+            column="37"/>
     </issue>
 
     <issue
@@ -11884,7 +14488,9 @@
         errorLine1="    protected abstract PlaybackRowPresenter onCreateRowPresenter();"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="290"
+            column="24"/>
     </issue>
 
     <issue
@@ -11893,7 +14499,9 @@
         errorLine1="    public void setControlsRow(PlaybackControlsRow controlsRow) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="323"
+            column="32"/>
     </issue>
 
     <issue
@@ -11902,7 +14510,9 @@
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="347"
+            column="41"/>
     </issue>
 
     <issue
@@ -11911,7 +14521,9 @@
         errorLine1="    public PlaybackControlsRow getControlsRow() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="354"
+            column="12"/>
     </issue>
 
     <issue
@@ -11920,7 +14532,9 @@
         errorLine1="    public PlaybackRowPresenter getPlaybackRowPresenter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="361"
+            column="12"/>
     </issue>
 
     <issue
@@ -11929,7 +14543,9 @@
         errorLine1="    public abstract void onActionClicked(Action action);"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="369"
+            column="42"/>
     </issue>
 
     <issue
@@ -11938,7 +14554,9 @@
         errorLine1="    public abstract boolean onKey(View v, int keyCode, KeyEvent event);"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="376"
+            column="35"/>
     </issue>
 
     <issue
@@ -11947,7 +14565,9 @@
         errorLine1="    public abstract boolean onKey(View v, int keyCode, KeyEvent event);"
         errorLine2="                                                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="376"
+            column="56"/>
     </issue>
 
     <issue
@@ -11956,7 +14576,9 @@
         errorLine1="    protected static void notifyItemChanged(ArrayObjectAdapter adapter, Object object) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="407"
+            column="45"/>
     </issue>
 
     <issue
@@ -11965,7 +14587,9 @@
         errorLine1="    protected static void notifyItemChanged(ArrayObjectAdapter adapter, Object object) {"
         errorLine2="                                                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="407"
+            column="73"/>
     </issue>
 
     <issue
@@ -11974,7 +14598,9 @@
         errorLine1="    protected void onCreatePrimaryActions(ArrayObjectAdapter primaryActionsAdapter) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="420"
+            column="43"/>
     </issue>
 
     <issue
@@ -11983,7 +14609,9 @@
         errorLine1="    protected void onCreateSecondaryActions(ArrayObjectAdapter secondaryActionsAdapter) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="428"
+            column="45"/>
     </issue>
 
     <issue
@@ -11992,7 +14620,9 @@
         errorLine1="    public void setArt(Drawable cover) {"
         errorLine2="                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="500"
+            column="24"/>
     </issue>
 
     <issue
@@ -12001,7 +14631,9 @@
         errorLine1="    public Drawable getArt() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="514"
+            column="12"/>
     </issue>
 
     <issue
@@ -12010,7 +14642,9 @@
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="523"
+            column="29"/>
     </issue>
 
     <issue
@@ -12019,7 +14653,9 @@
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="536"
+            column="12"/>
     </issue>
 
     <issue
@@ -12028,7 +14664,9 @@
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="544"
+            column="26"/>
     </issue>
 
     <issue
@@ -12037,7 +14675,9 @@
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+            line="557"
+            column="12"/>
     </issue>
 
     <issue
@@ -12046,7 +14686,9 @@
         errorLine1="    public PlaybackControlGlue(Context context, int[] seekSpeeds) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="217"
+            column="32"/>
     </issue>
 
     <issue
@@ -12055,7 +14697,9 @@
         errorLine1="    public PlaybackControlGlue(Context context, int[] seekSpeeds) {"
         errorLine2="                                                ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="217"
+            column="49"/>
     </issue>
 
     <issue
@@ -12064,7 +14708,9 @@
         errorLine1="    public PlaybackControlGlue(Context context,"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="228"
+            column="32"/>
     </issue>
 
     <issue
@@ -12073,7 +14719,9 @@
         errorLine1="                               int[] fastForwardSpeeds,"
         errorLine2="                               ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="229"
+            column="32"/>
     </issue>
 
     <issue
@@ -12082,7 +14730,9 @@
         errorLine1="                               int[] rewindSpeeds) {"
         errorLine2="                               ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="230"
+            column="32"/>
     </issue>
 
     <issue
@@ -12091,7 +14741,9 @@
         errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="243"
+            column="37"/>
     </issue>
 
     <issue
@@ -12100,7 +14752,9 @@
         errorLine1="    public int[] getFastForwardSpeeds() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="314"
+            column="12"/>
     </issue>
 
     <issue
@@ -12109,7 +14763,9 @@
         errorLine1="    public int[] getRewindSpeeds() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="321"
+            column="12"/>
     </issue>
 
     <issue
@@ -12118,7 +14774,9 @@
         errorLine1="    public void setControlsRow(PlaybackControlsRow controlsRow) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="347"
+            column="32"/>
     </issue>
 
     <issue
@@ -12127,7 +14785,9 @@
         errorLine1="    protected SparseArrayObjectAdapter createPrimaryActionsAdapter("
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="363"
+            column="15"/>
     </issue>
 
     <issue
@@ -12136,7 +14796,9 @@
         errorLine1="            PresenterSelector presenterSelector) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="364"
+            column="13"/>
     </issue>
 
     <issue
@@ -12145,7 +14807,9 @@
         errorLine1="    public void setControlsRowPresenter(PlaybackControlsRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="376"
+            column="41"/>
     </issue>
 
     <issue
@@ -12154,7 +14818,9 @@
         errorLine1="    public PlaybackControlsRow getControlsRow() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="383"
+            column="12"/>
     </issue>
 
     <issue
@@ -12163,7 +14829,9 @@
         errorLine1="    public PlaybackControlsRowPresenter getControlsRowPresenter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="393"
+            column="12"/>
     </issue>
 
     <issue
@@ -12172,7 +14840,9 @@
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="402"
+            column="41"/>
     </issue>
 
     <issue
@@ -12181,7 +14851,9 @@
         errorLine1="    public PlaybackRowPresenter getPlaybackRowPresenter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="410"
+            column="12"/>
     </issue>
 
     <issue
@@ -12190,7 +14862,9 @@
         errorLine1="    public void onActionClicked(Action action) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="445"
+            column="33"/>
     </issue>
 
     <issue
@@ -12199,7 +14873,9 @@
         errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
         errorLine2="                         ~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="454"
+            column="26"/>
     </issue>
 
     <issue
@@ -12208,7 +14884,9 @@
         errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="454"
+            column="47"/>
     </issue>
 
     <issue
@@ -12217,7 +14895,9 @@
         errorLine1="    public abstract CharSequence getMediaTitle();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="754"
+            column="21"/>
     </issue>
 
     <issue
@@ -12226,7 +14906,9 @@
         errorLine1="    public abstract CharSequence getMediaSubtitle();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="759"
+            column="21"/>
     </issue>
 
     <issue
@@ -12235,7 +14917,9 @@
         errorLine1="    public abstract Drawable getMediaArt();"
         errorLine2="                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="769"
+            column="21"/>
     </issue>
 
     <issue
@@ -12244,7 +14928,9 @@
         errorLine1="    protected void onCreatePrimaryActions(SparseArrayObjectAdapter primaryActionsAdapter) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="792"
+            column="43"/>
     </issue>
 
     <issue
@@ -12253,7 +14939,9 @@
         errorLine1="    protected void onCreateSecondaryActions(ArrayObjectAdapter secondaryActionsAdapter) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+            line="800"
+            column="45"/>
     </issue>
 
     <issue
@@ -12262,7 +14950,9 @@
         errorLine1="        public void onCurrentPositionChanged(PlaybackControlsRow row, long currentTimeMs) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="57"
+            column="46"/>
     </issue>
 
     <issue
@@ -12271,7 +14961,9 @@
         errorLine1="        public void onDurationChanged(PlaybackControlsRow row, long totalTime) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="65"
+            column="39"/>
     </issue>
 
     <issue
@@ -12280,7 +14972,9 @@
         errorLine1="        public void onBufferedPositionChanged(PlaybackControlsRow row, long bufferedProgressMs) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="73"
+            column="47"/>
     </issue>
 
     <issue
@@ -12289,7 +14983,9 @@
         errorLine1="        public void setDrawables(Drawable[] drawables) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="98"
+            column="34"/>
     </issue>
 
     <issue
@@ -12298,7 +14994,9 @@
         errorLine1="        public void setLabels(String[] labels) {"
         errorLine2="                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="108"
+            column="31"/>
     </issue>
 
     <issue
@@ -12307,7 +15005,9 @@
         errorLine1="        public void setSecondaryLabels(String[] labels) {"
         errorLine2="                                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="117"
+            column="40"/>
     </issue>
 
     <issue
@@ -12316,7 +15016,9 @@
         errorLine1="        public Drawable getDrawable(int index) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="138"
+            column="16"/>
     </issue>
 
     <issue
@@ -12325,7 +15027,9 @@
         errorLine1="        public String getLabel(int index) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="145"
+            column="16"/>
     </issue>
 
     <issue
@@ -12334,7 +15038,9 @@
         errorLine1="        public String getSecondaryLabel(int index) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="152"
+            column="16"/>
     </issue>
 
     <issue
@@ -12343,7 +15049,9 @@
         errorLine1="        public PlayPauseAction(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="219"
+            column="32"/>
     </issue>
 
     <issue
@@ -12352,7 +15060,9 @@
         errorLine1="        public FastForwardAction(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="246"
+            column="34"/>
     </issue>
 
     <issue
@@ -12361,7 +15071,9 @@
         errorLine1="        public FastForwardAction(Context context, int numSpeeds) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="255"
+            column="34"/>
     </issue>
 
     <issue
@@ -12370,7 +15082,9 @@
         errorLine1="        public RewindAction(Context context) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="293"
+            column="29"/>
     </issue>
 
     <issue
@@ -12379,7 +15093,9 @@
         errorLine1="        public RewindAction(Context context, int numSpeeds) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="302"
+            column="29"/>
     </issue>
 
     <issue
@@ -12388,7 +15104,9 @@
         errorLine1="        public SkipNextAction(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="340"
+            column="31"/>
     </issue>
 
     <issue
@@ -12397,7 +15115,9 @@
         errorLine1="        public SkipPreviousAction(Context context) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="357"
+            column="35"/>
     </issue>
 
     <issue
@@ -12406,7 +15126,9 @@
         errorLine1="        public PictureInPictureAction(Context context) {"
         errorLine2="                                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="374"
+            column="39"/>
     </issue>
 
     <issue
@@ -12415,7 +15137,9 @@
         errorLine1="        public MoreActions(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="391"
+            column="28"/>
     </issue>
 
     <issue
@@ -12424,7 +15148,9 @@
         errorLine1="        public ThumbsAction(int id, Context context, int solidIconIndex, int outlineIconIndex) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="430"
+            column="37"/>
     </issue>
 
     <issue
@@ -12433,7 +15159,9 @@
         errorLine1="        public ThumbsUpAction(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="443"
+            column="31"/>
     </issue>
 
     <issue
@@ -12442,7 +15170,9 @@
         errorLine1="        public ThumbsDownAction(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="459"
+            column="33"/>
     </issue>
 
     <issue
@@ -12451,7 +15181,9 @@
         errorLine1="        public RepeatAction(Context context) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="515"
+            column="29"/>
     </issue>
 
     <issue
@@ -12460,7 +15192,9 @@
         errorLine1="        public RepeatAction(Context context, int highlightColor) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="524"
+            column="29"/>
     </issue>
 
     <issue
@@ -12469,7 +15203,9 @@
         errorLine1="        public RepeatAction(Context context, int repeatAllColor, int repeatOneColor) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="534"
+            column="29"/>
     </issue>
 
     <issue
@@ -12478,7 +15214,9 @@
         errorLine1="        public ShuffleAction(Context context) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="591"
+            column="30"/>
     </issue>
 
     <issue
@@ -12487,7 +15225,9 @@
         errorLine1="        public ShuffleAction(Context context, int highlightColor) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="600"
+            column="30"/>
     </issue>
 
     <issue
@@ -12496,7 +15236,9 @@
         errorLine1="        public HighQualityAction(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="649"
+            column="34"/>
     </issue>
 
     <issue
@@ -12505,7 +15247,9 @@
         errorLine1="        public HighQualityAction(Context context, int highlightColor) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="658"
+            column="34"/>
     </issue>
 
     <issue
@@ -12514,7 +15258,9 @@
         errorLine1="        public ClosedCaptioningAction(Context context) {"
         errorLine2="                                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="710"
+            column="39"/>
     </issue>
 
     <issue
@@ -12523,7 +15269,9 @@
         errorLine1="        public ClosedCaptioningAction(Context context, int highlightColor) {"
         errorLine2="                                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="719"
+            column="39"/>
     </issue>
 
     <issue
@@ -12532,7 +15280,9 @@
         errorLine1="    public PlaybackControlsRow(Object item) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="784"
+            column="32"/>
     </issue>
 
     <issue
@@ -12541,7 +15291,9 @@
         errorLine1="    public final Object getItem() {"
         errorLine2="                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="797"
+            column="18"/>
     </issue>
 
     <issue
@@ -12550,7 +15302,9 @@
         errorLine1="    public final void setImageDrawable(Drawable drawable) {"
         errorLine2="                                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="808"
+            column="40"/>
     </issue>
 
     <issue
@@ -12559,7 +15313,9 @@
         errorLine1="    public final void setImageBitmap(Context context, Bitmap bm) {"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="820"
+            column="38"/>
     </issue>
 
     <issue
@@ -12568,7 +15324,9 @@
         errorLine1="    public final void setImageBitmap(Context context, Bitmap bm) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="820"
+            column="55"/>
     </issue>
 
     <issue
@@ -12577,7 +15335,9 @@
         errorLine1="    public final Drawable getImageDrawable() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="830"
+            column="18"/>
     </issue>
 
     <issue
@@ -12586,7 +15346,9 @@
         errorLine1="    public final void setPrimaryActionsAdapter(ObjectAdapter adapter) {"
         errorLine2="                                               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="839"
+            column="48"/>
     </issue>
 
     <issue
@@ -12595,7 +15357,9 @@
         errorLine1="    public final void setSecondaryActionsAdapter(ObjectAdapter adapter) {"
         errorLine2="                                                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="848"
+            column="50"/>
     </issue>
 
     <issue
@@ -12604,7 +15368,9 @@
         errorLine1="    public final ObjectAdapter getPrimaryActionsAdapter() {"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="855"
+            column="18"/>
     </issue>
 
     <issue
@@ -12613,7 +15379,9 @@
         errorLine1="    public final ObjectAdapter getSecondaryActionsAdapter() {"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="862"
+            column="18"/>
     </issue>
 
     <issue
@@ -12622,7 +15390,9 @@
         errorLine1="    public Action getActionForKeyCode(int keyCode) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="1054"
+            column="12"/>
     </issue>
 
     <issue
@@ -12631,7 +15401,9 @@
         errorLine1="    public Action getActionForKeyCode(ObjectAdapter adapter, int keyCode) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="1065"
+            column="12"/>
     </issue>
 
     <issue
@@ -12640,7 +15412,9 @@
         errorLine1="    public Action getActionForKeyCode(ObjectAdapter adapter, int keyCode) {"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="1065"
+            column="39"/>
     </issue>
 
     <issue
@@ -12649,7 +15423,9 @@
         errorLine1="    public void setOnPlaybackProgressChangedListener(OnPlaybackProgressCallback listener) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+            line="1081"
+            column="54"/>
     </issue>
 
     <issue
@@ -12658,7 +15434,9 @@
         errorLine1="    public PlaybackControlsRowPresenter(Presenter descriptionPresenter) {"
         errorLine2="                                        ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="206"
+            column="41"/>
     </issue>
 
     <issue
@@ -12667,7 +15445,9 @@
         errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="230"
+            column="44"/>
     </issue>
 
     <issue
@@ -12676,7 +15456,9 @@
         errorLine1="    public OnActionClickedListener getOnActionClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="237"
+            column="12"/>
     </issue>
 
     <issue
@@ -12685,7 +15467,9 @@
         errorLine1="    public void showBottomSpace(ViewHolder vh, boolean show) {"
         errorLine2="                                ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="297"
+            column="33"/>
     </issue>
 
     <issue
@@ -12694,7 +15478,9 @@
         errorLine1="    public void showPrimaryActions(ViewHolder vh) {"
         errorLine2="                                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="305"
+            column="36"/>
     </issue>
 
     <issue
@@ -12703,7 +15489,9 @@
         errorLine1="    public void onReappear(RowPresenter.ViewHolder rowViewHolder) {"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="313"
+            column="28"/>
     </issue>
 
     <issue
@@ -12712,7 +15500,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="335"
+            column="15"/>
     </issue>
 
     <issue
@@ -12721,7 +15511,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="335"
+            column="59"/>
     </issue>
 
     <issue
@@ -12730,7 +15522,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="376"
+            column="40"/>
     </issue>
 
     <issue
@@ -12739,7 +15533,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="376"
+            column="72"/>
     </issue>
 
     <issue
@@ -12748,7 +15544,9 @@
         errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="452"
+            column="42"/>
     </issue>
 
     <issue
@@ -12757,7 +15555,9 @@
         errorLine1="    protected void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="467"
+            column="38"/>
     </issue>
 
     <issue
@@ -12766,7 +15566,9 @@
         errorLine1="    protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="475"
+            column="46"/>
     </issue>
 
     <issue
@@ -12775,7 +15577,9 @@
         errorLine1="    protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+            line="484"
+            column="48"/>
     </issue>
 
     <issue
@@ -12784,7 +15588,9 @@
         errorLine1="        public boolean onUnhandledKey(KeyEvent event);"
         errorLine2="                                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowView.java"
+            line="34"
+            column="39"/>
     </issue>
 
     <issue
@@ -12793,7 +15599,9 @@
         errorLine1="    public ObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="208"
+            column="12"/>
     </issue>
 
     <issue
@@ -12802,7 +15610,9 @@
         errorLine1="    public void setFadeCompleteListener(OnFadeCompleteListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="418"
+            column="41"/>
     </issue>
 
     <issue
@@ -12811,7 +15621,9 @@
         errorLine1="    public OnFadeCompleteListener getFadeCompleteListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="427"
+            column="12"/>
     </issue>
 
     <issue
@@ -12820,7 +15632,9 @@
         errorLine1="    public final void setOnKeyInterceptListener(View.OnKeyListener handler) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="434"
+            column="49"/>
     </issue>
 
     <issue
@@ -12829,7 +15643,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="815"
+            column="26"/>
     </issue>
 
     <issue
@@ -12838,7 +15654,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="922"
+            column="12"/>
     </issue>
 
     <issue
@@ -12847,7 +15665,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="922"
+            column="30"/>
     </issue>
 
     <issue
@@ -12856,7 +15676,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="922"
+            column="55"/>
     </issue>
 
     <issue
@@ -12865,7 +15687,9 @@
         errorLine1="                             Bundle savedInstanceState) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="923"
+            column="30"/>
     </issue>
 
     <issue
@@ -12874,7 +15698,9 @@
         errorLine1="    public void setHostCallback(PlaybackGlueHost.HostCallback hostCallback) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="956"
+            column="33"/>
     </issue>
 
     <issue
@@ -12883,7 +15709,9 @@
         errorLine1="    public void setOnItemViewSelectedListener(final BaseOnItemViewSelectedListener listener) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="996"
+            column="53"/>
     </issue>
 
     <issue
@@ -12892,7 +15720,9 @@
         errorLine1="    public void setOnItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="1004"
+            column="52"/>
     </issue>
 
     <issue
@@ -12901,7 +15731,9 @@
         errorLine1="    public void setOnPlaybackItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="1012"
+            column="60"/>
     </issue>
 
     <issue
@@ -12910,7 +15742,9 @@
         errorLine1="    public void setPlaybackRow(Row row) {"
         errorLine2="                               ~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="1036"
+            column="32"/>
     </issue>
 
     <issue
@@ -12919,7 +15753,9 @@
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="1050"
+            column="41"/>
     </issue>
 
     <issue
@@ -12928,7 +15764,9 @@
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="1095"
+            column="28"/>
     </issue>
 
     <issue
@@ -12937,7 +15775,9 @@
         errorLine1="    public void setPlaybackSeekUiClient(PlaybackSeekUi.Client client) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="1171"
+            column="41"/>
     </issue>
 
     <issue
@@ -12946,7 +15786,9 @@
         errorLine1="    protected void onError(int errorCode, CharSequence errorMessage) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="1228"
+            column="43"/>
     </issue>
 
     <issue
@@ -12955,7 +15797,9 @@
         errorLine1="    public ProgressBarManager getProgressBarManager() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+            line="1237"
+            column="12"/>
     </issue>
 
     <issue
@@ -12964,7 +15808,9 @@
         errorLine1="    public PlaybackFragmentGlueHost(PlaybackFragment fragment) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+            line="40"
+            column="37"/>
     </issue>
 
     <issue
@@ -12973,7 +15819,9 @@
         errorLine1="    public void setOnKeyInterceptListener(View.OnKeyListener onKeyListener) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+            line="55"
+            column="43"/>
     </issue>
 
     <issue
@@ -12982,7 +15830,9 @@
         errorLine1="    public void setOnActionClickedListener(final OnActionClickedListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+            line="60"
+            column="50"/>
     </issue>
 
     <issue
@@ -12991,7 +15841,9 @@
         errorLine1="    public void setHostCallback(HostCallback callback) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+            line="77"
+            column="33"/>
     </issue>
 
     <issue
@@ -13000,7 +15852,9 @@
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+            line="87"
+            column="41"/>
     </issue>
 
     <issue
@@ -13009,7 +15863,9 @@
         errorLine1="    public void setPlaybackRow(Row row) {"
         errorLine2="                               ~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+            line="92"
+            column="32"/>
     </issue>
 
     <issue
@@ -13018,7 +15874,9 @@
         errorLine1="    public void setPlaybackSeekUiClient(Client client) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+            line="117"
+            column="41"/>
     </issue>
 
     <issue
@@ -13027,7 +15885,9 @@
         errorLine1="    public PlayerCallback getPlayerCallback() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+            line="140"
+            column="12"/>
     </issue>
 
     <issue
@@ -13036,7 +15896,9 @@
         errorLine1="        public void onPreparedStateChanged(PlaybackGlue glue) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="56"
+            column="44"/>
     </issue>
 
     <issue
@@ -13045,7 +15907,9 @@
         errorLine1="        public void onPlayStateChanged(PlaybackGlue glue) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="63"
+            column="40"/>
     </issue>
 
     <issue
@@ -13054,7 +15918,9 @@
         errorLine1="        public void onPlayCompleted(PlaybackGlue glue) {"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="70"
+            column="37"/>
     </issue>
 
     <issue
@@ -13063,7 +15929,9 @@
         errorLine1="    public PlaybackGlue(Context context) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="79"
+            column="25"/>
     </issue>
 
     <issue
@@ -13072,7 +15940,9 @@
         errorLine1="    public Context getContext() {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="86"
+            column="12"/>
     </issue>
 
     <issue
@@ -13081,7 +15951,9 @@
         errorLine1="    public void addPlayerCallback(PlayerCallback playerCallback) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="103"
+            column="35"/>
     </issue>
 
     <issue
@@ -13090,7 +15962,9 @@
         errorLine1="    public void removePlayerCallback(PlayerCallback callback) {"
         errorLine2="                                     ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="114"
+            column="38"/>
     </issue>
 
     <issue
@@ -13099,7 +15973,9 @@
         errorLine1="    protected List&lt;PlayerCallback> getPlayerCallbacks() {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="123"
+            column="15"/>
     </issue>
 
     <issue
@@ -13108,7 +15984,9 @@
         errorLine1="    public final void setHost(PlaybackGlueHost host) {"
         errorLine2="                              ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="187"
+            column="31"/>
     </issue>
 
     <issue
@@ -13117,7 +15995,9 @@
         errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="229"
+            column="37"/>
     </issue>
 
     <issue
@@ -13126,7 +16006,9 @@
         errorLine1="    public PlaybackGlueHost getHost() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+            line="276"
+            column="12"/>
     </issue>
 
     <issue
@@ -13135,7 +16017,9 @@
         errorLine1="        public void onError(int errorCode, CharSequence errorMessage) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+            line="116"
+            column="44"/>
     </issue>
 
     <issue
@@ -13144,7 +16028,9 @@
         errorLine1="    public void setOnKeyInterceptListener(View.OnKeyListener onKeyListener) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+            line="186"
+            column="43"/>
     </issue>
 
     <issue
@@ -13153,7 +16039,9 @@
         errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {}"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+            line="192"
+            column="44"/>
     </issue>
 
     <issue
@@ -13162,7 +16050,9 @@
         errorLine1="    public void setHostCallback(HostCallback callback) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+            line="199"
+            column="33"/>
     </issue>
 
     <issue
@@ -13171,7 +16061,9 @@
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {}"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+            line="210"
+            column="41"/>
     </issue>
 
     <issue
@@ -13180,7 +16072,9 @@
         errorLine1="    public void setPlaybackRow(Row row) {}"
         errorLine2="                               ~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+            line="216"
+            column="32"/>
     </issue>
 
     <issue
@@ -13189,7 +16083,9 @@
         errorLine1="    public PlayerCallback getPlayerCallback() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+            line="233"
+            column="12"/>
     </issue>
 
     <issue
@@ -13198,7 +16094,9 @@
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackRowPresenter.java"
+            line="17"
+            column="27"/>
     </issue>
 
     <issue
@@ -13207,7 +16105,9 @@
         errorLine1="    public void onReappear(RowPresenter.ViewHolder rowViewHolder) {"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackRowPresenter.java"
+            line="25"
+            column="28"/>
     </issue>
 
     <issue
@@ -13216,7 +16116,9 @@
         errorLine1="        public void onThumbnailLoaded(Bitmap bitmap, int index) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"
+            line="39"
+            column="39"/>
     </issue>
 
     <issue
@@ -13225,7 +16127,9 @@
         errorLine1="    public long[] getSeekPositions() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"
+            line="49"
+            column="12"/>
     </issue>
 
     <issue
@@ -13234,7 +16138,9 @@
         errorLine1="    public void getThumbnail(int index, ResultCallback callback) {"
         errorLine2="                                        ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"
+            line="68"
+            column="41"/>
     </issue>
 
     <issue
@@ -13243,7 +16149,9 @@
         errorLine1="        public PlaybackSeekDataProvider getPlaybackSeekDataProvider() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackSeekUi.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackSeekUi.java"
+            line="57"
+            column="16"/>
     </issue>
 
     <issue
@@ -13252,7 +16160,9 @@
         errorLine1="    void setPlaybackSeekUiClient(Client client);"
         errorLine2="                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackSeekUi.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackSeekUi.java"
+            line="82"
+            column="34"/>
     </issue>
 
     <issue
@@ -13261,7 +16171,9 @@
         errorLine1="    public ObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="203"
+            column="12"/>
     </issue>
 
     <issue
@@ -13270,7 +16182,9 @@
         errorLine1="    public void setFadeCompleteListener(OnFadeCompleteListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="413"
+            column="41"/>
     </issue>
 
     <issue
@@ -13279,7 +16193,9 @@
         errorLine1="    public OnFadeCompleteListener getFadeCompleteListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="422"
+            column="12"/>
     </issue>
 
     <issue
@@ -13288,7 +16204,9 @@
         errorLine1="    public final void setOnKeyInterceptListener(View.OnKeyListener handler) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="429"
+            column="49"/>
     </issue>
 
     <issue
@@ -13297,7 +16215,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="810"
+            column="26"/>
     </issue>
 
     <issue
@@ -13306,7 +16226,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="917"
+            column="12"/>
     </issue>
 
     <issue
@@ -13315,7 +16237,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="917"
+            column="30"/>
     </issue>
 
     <issue
@@ -13324,7 +16248,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="917"
+            column="55"/>
     </issue>
 
     <issue
@@ -13333,7 +16259,9 @@
         errorLine1="                             Bundle savedInstanceState) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="918"
+            column="30"/>
     </issue>
 
     <issue
@@ -13342,7 +16270,9 @@
         errorLine1="    public void setHostCallback(PlaybackGlueHost.HostCallback hostCallback) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="951"
+            column="33"/>
     </issue>
 
     <issue
@@ -13351,7 +16281,9 @@
         errorLine1="    public void setOnItemViewSelectedListener(final BaseOnItemViewSelectedListener listener) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="991"
+            column="53"/>
     </issue>
 
     <issue
@@ -13360,7 +16292,9 @@
         errorLine1="    public void setOnItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="999"
+            column="52"/>
     </issue>
 
     <issue
@@ -13369,7 +16303,9 @@
         errorLine1="    public void setOnPlaybackItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="1007"
+            column="60"/>
     </issue>
 
     <issue
@@ -13378,7 +16314,9 @@
         errorLine1="    public void setPlaybackRow(Row row) {"
         errorLine2="                               ~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="1031"
+            column="32"/>
     </issue>
 
     <issue
@@ -13387,7 +16325,9 @@
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="1045"
+            column="41"/>
     </issue>
 
     <issue
@@ -13396,7 +16336,9 @@
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="1090"
+            column="28"/>
     </issue>
 
     <issue
@@ -13405,7 +16347,9 @@
         errorLine1="    public void setPlaybackSeekUiClient(PlaybackSeekUi.Client client) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="1166"
+            column="41"/>
     </issue>
 
     <issue
@@ -13414,7 +16358,9 @@
         errorLine1="    protected void onError(int errorCode, CharSequence errorMessage) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="1223"
+            column="43"/>
     </issue>
 
     <issue
@@ -13423,7 +16369,9 @@
         errorLine1="    public ProgressBarManager getProgressBarManager() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+            line="1232"
+            column="12"/>
     </issue>
 
     <issue
@@ -13432,7 +16380,9 @@
         errorLine1="    public PlaybackSupportFragmentGlueHost(PlaybackSupportFragment fragment) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+            line="35"
+            column="44"/>
     </issue>
 
     <issue
@@ -13441,7 +16391,9 @@
         errorLine1="    public void setOnKeyInterceptListener(View.OnKeyListener onKeyListener) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+            line="50"
+            column="43"/>
     </issue>
 
     <issue
@@ -13450,7 +16402,9 @@
         errorLine1="    public void setOnActionClickedListener(final OnActionClickedListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+            line="55"
+            column="50"/>
     </issue>
 
     <issue
@@ -13459,7 +16413,9 @@
         errorLine1="    public void setHostCallback(HostCallback callback) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+            line="72"
+            column="33"/>
     </issue>
 
     <issue
@@ -13468,7 +16424,9 @@
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+            line="82"
+            column="41"/>
     </issue>
 
     <issue
@@ -13477,7 +16435,9 @@
         errorLine1="    public void setPlaybackRow(Row row) {"
         errorLine2="                               ~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+            line="87"
+            column="32"/>
     </issue>
 
     <issue
@@ -13486,7 +16446,9 @@
         errorLine1="    public void setPlaybackSeekUiClient(Client client) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+            line="112"
+            column="41"/>
     </issue>
 
     <issue
@@ -13495,7 +16457,9 @@
         errorLine1="    public PlayerCallback getPlayerCallback() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+            file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+            line="135"
+            column="12"/>
     </issue>
 
     <issue
@@ -13504,7 +16468,9 @@
         errorLine1="    public PlaybackTransportControlGlue(Context context, T impl) {"
         errorLine2="                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="123"
+            column="41"/>
     </issue>
 
     <issue
@@ -13513,7 +16479,9 @@
         errorLine1="    public void setControlsRow(PlaybackControlsRow controlsRow) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="128"
+            column="32"/>
     </issue>
 
     <issue
@@ -13522,7 +16490,9 @@
         errorLine1="    protected void onCreatePrimaryActions(ArrayObjectAdapter primaryActionsAdapter) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="135"
+            column="43"/>
     </issue>
 
     <issue
@@ -13531,7 +16501,9 @@
         errorLine1="    protected PlaybackRowPresenter onCreateRowPresenter() {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="141"
+            column="15"/>
     </issue>
 
     <issue
@@ -13540,7 +16512,9 @@
         errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="170"
+            column="37"/>
     </issue>
 
     <issue
@@ -13549,7 +16523,9 @@
         errorLine1="    public void onActionClicked(Action action) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="195"
+            column="33"/>
     </issue>
 
     <issue
@@ -13558,7 +16534,9 @@
         errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
         errorLine2="                         ~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="200"
+            column="26"/>
     </issue>
 
     <issue
@@ -13567,7 +16545,9 @@
         errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
         errorLine2="                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="200"
+            column="47"/>
     </issue>
 
     <issue
@@ -13576,7 +16556,9 @@
         errorLine1="    public final void setSeekProvider(PlaybackSeekDataProvider seekProvider) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="394"
+            column="39"/>
     </issue>
 
     <issue
@@ -13585,7 +16567,9 @@
         errorLine1="    public final PlaybackSeekDataProvider getSeekProvider() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+            line="402"
+            column="18"/>
     </issue>
 
     <issue
@@ -13594,7 +16578,9 @@
         errorLine1="        public ViewHolder(View rootView, Presenter descriptionPresenter) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="265"
+            column="27"/>
     </issue>
 
     <issue
@@ -13603,7 +16589,9 @@
         errorLine1="        public ViewHolder(View rootView, Presenter descriptionPresenter) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="265"
+            column="42"/>
     </issue>
 
     <issue
@@ -13612,7 +16600,9 @@
         errorLine1="        public final Presenter.ViewHolder getDescriptionViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="353"
+            column="22"/>
     </issue>
 
     <issue
@@ -13621,7 +16611,9 @@
         errorLine1="        public void setPlaybackSeekUiClient(Client client) {"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="358"
+            column="45"/>
     </issue>
 
     <issue
@@ -13630,7 +16622,9 @@
         errorLine1="        public final TextView getDurationView() {"
         errorLine2="                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="449"
+            column="22"/>
     </issue>
 
     <issue
@@ -13639,7 +16633,9 @@
         errorLine1="        public final TextView getCurrentPositionView() {"
         errorLine2="                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="477"
+            column="22"/>
     </issue>
 
     <issue
@@ -13648,7 +16644,9 @@
         errorLine1="    public void setDescriptionPresenter(Presenter descriptionPresenter) {"
         errorLine2="                                        ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="602"
+            column="41"/>
     </issue>
 
     <issue
@@ -13657,7 +16655,9 @@
         errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="609"
+            column="44"/>
     </issue>
 
     <issue
@@ -13666,7 +16666,9 @@
         errorLine1="    public OnActionClickedListener getOnActionClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="616"
+            column="12"/>
     </issue>
 
     <issue
@@ -13675,7 +16677,9 @@
         errorLine1="    public void onReappear(RowPresenter.ViewHolder rowViewHolder) {"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="658"
+            column="28"/>
     </issue>
 
     <issue
@@ -13684,7 +16688,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="685"
+            column="15"/>
     </issue>
 
     <issue
@@ -13693,7 +16699,9 @@
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="685"
+            column="59"/>
     </issue>
 
     <issue
@@ -13702,7 +16710,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="719"
+            column="40"/>
     </issue>
 
     <issue
@@ -13711,7 +16721,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="719"
+            column="72"/>
     </issue>
 
     <issue
@@ -13720,7 +16732,9 @@
         errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="759"
+            column="42"/>
     </issue>
 
     <issue
@@ -13729,7 +16743,9 @@
         errorLine1="    protected void onProgressBarClicked(ViewHolder vh) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="780"
+            column="41"/>
     </issue>
 
     <issue
@@ -13738,7 +16754,9 @@
         errorLine1="    protected void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="812"
+            column="38"/>
     </issue>
 
     <issue
@@ -13747,7 +16765,9 @@
         errorLine1="    protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="820"
+            column="46"/>
     </issue>
 
     <issue
@@ -13756,7 +16776,9 @@
         errorLine1="    protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+            line="829"
+            column="48"/>
     </issue>
 
     <issue
@@ -13765,7 +16787,9 @@
         errorLine1="        boolean onUnhandledKey(KeyEvent event);"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+            line="48"
+            column="32"/>
     </issue>
 
     <issue
@@ -13774,7 +16798,9 @@
         errorLine1="    public PlaybackTransportRowView(Context context, AttributeSet attrs) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+            line="53"
+            column="37"/>
     </issue>
 
     <issue
@@ -13783,7 +16809,9 @@
         errorLine1="    public PlaybackTransportRowView(Context context, AttributeSet attrs) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+            line="53"
+            column="54"/>
     </issue>
 
     <issue
@@ -13792,7 +16820,9 @@
         errorLine1="    public PlaybackTransportRowView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+            line="57"
+            column="37"/>
     </issue>
 
     <issue
@@ -13801,7 +16831,9 @@
         errorLine1="    public PlaybackTransportRowView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+            line="57"
+            column="54"/>
     </issue>
 
     <issue
@@ -13810,7 +16842,9 @@
         errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
         errorLine2="                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+            line="70"
+            column="37"/>
     </issue>
 
     <issue
@@ -13819,7 +16853,9 @@
         errorLine1="    protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {"
         errorLine2="                                                                 ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+            line="78"
+            column="66"/>
     </issue>
 
     <issue
@@ -13828,7 +16864,9 @@
         errorLine1="    public View focusSearch(View focused, int direction) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+            line="93"
+            column="12"/>
     </issue>
 
     <issue
@@ -13837,7 +16875,9 @@
         errorLine1="    public View focusSearch(View focused, int direction) {"
         errorLine2="                            ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+            line="93"
+            column="29"/>
     </issue>
 
     <issue
@@ -13846,7 +16886,9 @@
         errorLine1="        public void onPlayStateChanged(PlayerAdapter adapter) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="38"
+            column="40"/>
     </issue>
 
     <issue
@@ -13855,7 +16897,9 @@
         errorLine1="        public void onPreparedStateChanged(PlayerAdapter adapter) {"
         errorLine2="                                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="45"
+            column="44"/>
     </issue>
 
     <issue
@@ -13864,7 +16908,9 @@
         errorLine1="        public void onPlayCompleted(PlayerAdapter adapter) {"
         errorLine2="                                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="52"
+            column="37"/>
     </issue>
 
     <issue
@@ -13873,7 +16919,9 @@
         errorLine1="        public void onCurrentPositionChanged(PlayerAdapter adapter) {"
         errorLine2="                                             ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="59"
+            column="46"/>
     </issue>
 
     <issue
@@ -13882,7 +16930,9 @@
         errorLine1="        public void onBufferedPositionChanged(PlayerAdapter adapter) {"
         errorLine2="                                              ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="66"
+            column="47"/>
     </issue>
 
     <issue
@@ -13891,7 +16941,9 @@
         errorLine1="        public void onDurationChanged(PlayerAdapter adapter) {"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="74"
+            column="39"/>
     </issue>
 
     <issue
@@ -13900,7 +16952,9 @@
         errorLine1="        public void onVideoSizeChanged(PlayerAdapter adapter, int width, int height) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="83"
+            column="40"/>
     </issue>
 
     <issue
@@ -13909,7 +16963,9 @@
         errorLine1="        public void onError(PlayerAdapter adapter, int errorCode, String errorMessage) {"
         errorLine2="                            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="92"
+            column="29"/>
     </issue>
 
     <issue
@@ -13918,7 +16974,9 @@
         errorLine1="        public void onError(PlayerAdapter adapter, int errorCode, String errorMessage) {"
         errorLine2="                                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="92"
+            column="67"/>
     </issue>
 
     <issue
@@ -13927,7 +16985,9 @@
         errorLine1="        public void onBufferingStateChanged(PlayerAdapter adapter, boolean start) {"
         errorLine2="                                            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="100"
+            column="45"/>
     </issue>
 
     <issue
@@ -13936,7 +16996,9 @@
         errorLine1="        public void onMetadataChanged(PlayerAdapter adapter) {"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="107"
+            column="39"/>
     </issue>
 
     <issue
@@ -13945,7 +17007,9 @@
         errorLine1="    public final void setCallback(Callback callback) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="117"
+            column="35"/>
     </issue>
 
     <issue
@@ -13954,7 +17018,9 @@
         errorLine1="    public final Callback getCallback() {"
         errorLine2="                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="125"
+            column="18"/>
     </issue>
 
     <issue
@@ -13963,7 +17029,9 @@
         errorLine1="    public void onAttachedToHost(PlaybackGlueHost host) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+            line="255"
+            column="34"/>
     </issue>
 
     <issue
@@ -13972,7 +17040,9 @@
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="82"
+            column="27"/>
     </issue>
 
     <issue
@@ -13981,7 +17051,9 @@
         errorLine1="        public final Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="87"
+            column="22"/>
     </issue>
 
     <issue
@@ -13990,7 +17062,9 @@
         errorLine1="        public final Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="87"
+            column="38"/>
     </issue>
 
     <issue
@@ -13999,7 +17073,9 @@
         errorLine1="        public final void setFacet(Class&lt;?> facetClass, Object facetImpl) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="99"
+            column="36"/>
     </issue>
 
     <issue
@@ -14008,7 +17084,9 @@
         errorLine1="        public final void setFacet(Class&lt;?> facetClass, Object facetImpl) {"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="99"
+            column="57"/>
     </issue>
 
     <issue
@@ -14017,7 +17095,9 @@
         errorLine1="        public void run(Presenter.ViewHolder holder) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="115"
+            column="25"/>
     </issue>
 
     <issue
@@ -14026,7 +17106,9 @@
         errorLine1="    public abstract ViewHolder onCreateViewHolder(ViewGroup parent);"
         errorLine2="                    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="124"
+            column="21"/>
     </issue>
 
     <issue
@@ -14035,7 +17117,9 @@
         errorLine1="    public abstract ViewHolder onCreateViewHolder(ViewGroup parent);"
         errorLine2="                                                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="124"
+            column="51"/>
     </issue>
 
     <issue
@@ -14044,7 +17128,9 @@
         errorLine1="    public abstract void onBindViewHolder(ViewHolder viewHolder, Object item);"
         errorLine2="                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="129"
+            column="43"/>
     </issue>
 
     <issue
@@ -14053,7 +17139,9 @@
         errorLine1="    public abstract void onBindViewHolder(ViewHolder viewHolder, Object item);"
         errorLine2="                                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="129"
+            column="66"/>
     </issue>
 
     <issue
@@ -14062,7 +17150,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item, List&lt;Object> payloads) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="139"
+            column="34"/>
     </issue>
 
     <issue
@@ -14071,7 +17161,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item, List&lt;Object> payloads) {"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="139"
+            column="57"/>
     </issue>
 
     <issue
@@ -14080,7 +17172,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item, List&lt;Object> payloads) {"
         errorLine2="                                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="139"
+            column="70"/>
     </issue>
 
     <issue
@@ -14089,7 +17183,9 @@
         errorLine1="    public abstract void onUnbindViewHolder(ViewHolder viewHolder);"
         errorLine2="                                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="148"
+            column="45"/>
     </issue>
 
     <issue
@@ -14098,7 +17194,9 @@
         errorLine1="    public void onViewAttachedToWindow(ViewHolder holder) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="160"
+            column="40"/>
     </issue>
 
     <issue
@@ -14107,7 +17205,9 @@
         errorLine1="    public void onViewDetachedFromWindow(ViewHolder holder) {"
         errorLine2="                                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="175"
+            column="42"/>
     </issue>
 
     <issue
@@ -14116,7 +17216,9 @@
         errorLine1="    protected static void cancelAnimationsRecursive(View view) {"
         errorLine2="                                                    ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="183"
+            column="53"/>
     </issue>
 
     <issue
@@ -14125,7 +17227,9 @@
         errorLine1="    public void setOnClickListener(ViewHolder holder, View.OnClickListener listener) {"
         errorLine2="                                   ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="205"
+            column="36"/>
     </issue>
 
     <issue
@@ -14134,7 +17238,9 @@
         errorLine1="    public void setOnClickListener(ViewHolder holder, View.OnClickListener listener) {"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="205"
+            column="55"/>
     </issue>
 
     <issue
@@ -14143,7 +17249,9 @@
         errorLine1="    public final Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="210"
+            column="18"/>
     </issue>
 
     <issue
@@ -14152,7 +17260,9 @@
         errorLine1="    public final Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="210"
+            column="34"/>
     </issue>
 
     <issue
@@ -14161,7 +17271,9 @@
         errorLine1="    public final void setFacet(Class&lt;?> facetClass, Object facetImpl) {"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="222"
+            column="32"/>
     </issue>
 
     <issue
@@ -14170,7 +17282,9 @@
         errorLine1="    public final void setFacet(Class&lt;?> facetClass, Object facetImpl) {"
         errorLine2="                                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+            file="src/main/java/androidx/leanback/widget/Presenter.java"
+            line="222"
+            column="53"/>
     </issue>
 
     <issue
@@ -14179,7 +17293,9 @@
         errorLine1="    public abstract Presenter getPresenter(Object item);"
         errorLine2="                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSelector.java"
+            line="24"
+            column="21"/>
     </issue>
 
     <issue
@@ -14188,7 +17304,9 @@
         errorLine1="    public abstract Presenter getPresenter(Object item);"
         errorLine2="                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSelector.java"
+            line="24"
+            column="44"/>
     </issue>
 
     <issue
@@ -14197,7 +17315,9 @@
         errorLine1="    public Presenter[] getPresenters() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSelector.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSelector.java"
+            line="30"
+            column="12"/>
     </issue>
 
     <issue
@@ -14206,7 +17326,9 @@
         errorLine1="    public void init(ViewGroup parent, PresenterSelector presenterSelector) {"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+            line="36"
+            column="22"/>
     </issue>
 
     <issue
@@ -14215,7 +17337,9 @@
         errorLine1="    public void init(ViewGroup parent, PresenterSelector presenterSelector) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+            line="36"
+            column="40"/>
     </issue>
 
     <issue
@@ -14224,7 +17348,9 @@
         errorLine1="    public void select(Object object) {"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+            line="45"
+            column="24"/>
     </issue>
 
     <issue
@@ -14233,7 +17359,9 @@
         errorLine1="    public final ViewGroup getParentViewGroup() {"
         errorLine2="                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+            line="60"
+            column="18"/>
     </issue>
 
     <issue
@@ -14242,7 +17370,9 @@
         errorLine1="    protected abstract void insertView(View view);"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+            line="91"
+            column="40"/>
     </issue>
 
     <issue
@@ -14251,7 +17381,9 @@
         errorLine1="    protected void onViewSelected(View view) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+            line="96"
+            column="35"/>
     </issue>
 
     <issue
@@ -14260,7 +17392,9 @@
         errorLine1="    protected void showView(View view, boolean visible) {"
         errorLine2="                            ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+            file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+            line="99"
+            column="29"/>
     </issue>
 
     <issue
@@ -14269,7 +17403,9 @@
         errorLine1="    public void setRootView(ViewGroup rootView) {"
         errorLine2="                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ProgressBarManager.java"/>
+            file="src/main/java/androidx/leanback/app/ProgressBarManager.java"
+            line="58"
+            column="29"/>
     </issue>
 
     <issue
@@ -14278,7 +17414,9 @@
         errorLine1="    public void setProgressBarView(View progressBarView) {"
         errorLine2="                                   ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/ProgressBarManager.java"/>
+            file="src/main/java/androidx/leanback/app/ProgressBarManager.java"
+            line="93"
+            column="36"/>
     </issue>
 
     <issue
@@ -14287,7 +17425,9 @@
         errorLine1="        public ChildPositionProperty adapterPosition(int adapterPosition) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+            line="77"
+            column="16"/>
     </issue>
 
     <issue
@@ -14296,7 +17436,9 @@
         errorLine1="        public ChildPositionProperty viewId(int viewId) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+            line="88"
+            column="16"/>
     </issue>
 
     <issue
@@ -14305,7 +17447,9 @@
         errorLine1="        public ChildPositionProperty offset(int offset) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+            line="99"
+            column="16"/>
     </issue>
 
     <issue
@@ -14314,7 +17458,9 @@
         errorLine1="        public ChildPositionProperty fraction(float fraction) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+            line="112"
+            column="16"/>
     </issue>
 
     <issue
@@ -14323,7 +17469,9 @@
         errorLine1="    public ChildPositionProperty createProperty(String name, int index) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+            line="201"
+            column="12"/>
     </issue>
 
     <issue
@@ -14332,7 +17480,9 @@
         errorLine1="    public ChildPositionProperty createProperty(String name, int index) {"
         errorLine2="                                                ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+            line="201"
+            column="49"/>
     </issue>
 
     <issue
@@ -14341,7 +17491,9 @@
         errorLine1="    public void setRecyclerView(RecyclerView recyclerView) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+            line="217"
+            column="33"/>
     </issue>
 
     <issue
@@ -14350,7 +17502,9 @@
         errorLine1="    public RecyclerView getRecyclerView() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+            file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+            line="250"
+            column="12"/>
     </issue>
 
     <issue
@@ -14359,7 +17513,9 @@
         errorLine1="    public Row(long id, HeaderItem headerItem) {"
         errorLine2="                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Row.java"/>
+            file="src/main/java/androidx/leanback/widget/Row.java"
+            line="39"
+            column="25"/>
     </issue>
 
     <issue
@@ -14368,7 +17524,9 @@
         errorLine1="    public Row(HeaderItem headerItem) {"
         errorLine2="               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Row.java"/>
+            file="src/main/java/androidx/leanback/widget/Row.java"
+            line="50"
+            column="16"/>
     </issue>
 
     <issue
@@ -14377,7 +17535,9 @@
         errorLine1="    public final HeaderItem getHeaderItem() {"
         errorLine2="                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Row.java"/>
+            file="src/main/java/androidx/leanback/widget/Row.java"
+            line="65"
+            column="18"/>
     </issue>
 
     <issue
@@ -14386,7 +17546,9 @@
         errorLine1="    public final void setHeaderItem(HeaderItem headerItem) {"
         errorLine2="                                    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Row.java"/>
+            file="src/main/java/androidx/leanback/widget/Row.java"
+            line="75"
+            column="37"/>
     </issue>
 
     <issue
@@ -14395,7 +17557,9 @@
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="94"
+            column="27"/>
     </issue>
 
     <issue
@@ -14404,7 +17568,9 @@
         errorLine1="        public ViewHolder(RowHeaderView view) {"
         errorLine2="                          ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="107"
+            column="27"/>
     </issue>
 
     <issue
@@ -14413,7 +17579,9 @@
         errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="128"
+            column="12"/>
     </issue>
 
     <issue
@@ -14422,7 +17590,9 @@
         errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="128"
+            column="52"/>
     </issue>
 
     <issue
@@ -14431,7 +17601,9 @@
         errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="140"
+            column="34"/>
     </issue>
 
     <issue
@@ -14440,7 +17612,9 @@
         errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="140"
+            column="67"/>
     </issue>
 
     <issue
@@ -14449,7 +17623,9 @@
         errorLine1="    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="173"
+            column="36"/>
     </issue>
 
     <issue
@@ -14458,7 +17634,9 @@
         errorLine1="    public final void setSelectLevel(ViewHolder holder, float selectLevel) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="190"
+            column="38"/>
     </issue>
 
     <issue
@@ -14467,7 +17645,9 @@
         errorLine1="    protected void onSelectLevelChanged(ViewHolder holder) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="198"
+            column="41"/>
     </issue>
 
     <issue
@@ -14476,7 +17656,9 @@
         errorLine1="    public int getSpaceUnderBaseline(ViewHolder holder) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="209"
+            column="38"/>
     </issue>
 
     <issue
@@ -14485,7 +17667,9 @@
         errorLine1="    protected static float getFontDescent(TextView textView, Paint fontMeasurePaint) {"
         errorLine2="                                          ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="218"
+            column="43"/>
     </issue>
 
     <issue
@@ -14494,7 +17678,9 @@
         errorLine1="    protected static float getFontDescent(TextView textView, Paint fontMeasurePaint) {"
         errorLine2="                                                             ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+            line="218"
+            column="62"/>
     </issue>
 
     <issue
@@ -14503,7 +17689,9 @@
         errorLine1="    public RowHeaderView(Context context) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+            line="31"
+            column="26"/>
     </issue>
 
     <issue
@@ -14512,7 +17700,9 @@
         errorLine1="    public RowHeaderView(Context context, AttributeSet attrs) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+            line="35"
+            column="26"/>
     </issue>
 
     <issue
@@ -14521,7 +17711,9 @@
         errorLine1="    public RowHeaderView(Context context, AttributeSet attrs) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+            line="35"
+            column="43"/>
     </issue>
 
     <issue
@@ -14530,7 +17722,9 @@
         errorLine1="    public RowHeaderView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+            line="39"
+            column="26"/>
     </issue>
 
     <issue
@@ -14539,7 +17733,9 @@
         errorLine1="    public RowHeaderView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+            line="39"
+            column="43"/>
     </issue>
 
     <issue
@@ -14548,7 +17744,9 @@
         errorLine1="    public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+            line="48"
+            column="54"/>
     </issue>
 
     <issue
@@ -14557,7 +17755,9 @@
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="165"
+            column="27"/>
     </issue>
 
     <issue
@@ -14566,7 +17766,9 @@
         errorLine1="        public final Row getRow() {"
         errorLine2="                     ~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="176"
+            column="22"/>
     </issue>
 
     <issue
@@ -14575,7 +17777,9 @@
         errorLine1="        public final Object getRowObject() {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="184"
+            column="22"/>
     </issue>
 
     <issue
@@ -14584,7 +17788,9 @@
         errorLine1="        public final RowHeaderPresenter.ViewHolder getHeaderViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="216"
+            column="22"/>
     </issue>
 
     <issue
@@ -14593,7 +17799,9 @@
         errorLine1="        public final void syncActivatedStatus(View view) {"
         errorLine2="                                              ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="240"
+            column="47"/>
     </issue>
 
     <issue
@@ -14602,7 +17810,9 @@
         errorLine1="        public void setOnKeyListener(View.OnKeyListener keyListener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="251"
+            column="38"/>
     </issue>
 
     <issue
@@ -14611,7 +17821,9 @@
         errorLine1="        public View.OnKeyListener getOnKeyListener() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="258"
+            column="16"/>
     </issue>
 
     <issue
@@ -14620,7 +17832,9 @@
         errorLine1="        public final void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="267"
+            column="57"/>
     </issue>
 
     <issue
@@ -14629,7 +17843,9 @@
         errorLine1="        public final BaseOnItemViewSelectedListener getOnItemViewSelectedListener() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="274"
+            column="22"/>
     </issue>
 
     <issue
@@ -14638,7 +17854,9 @@
         errorLine1="        public final void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="284"
+            column="56"/>
     </issue>
 
     <issue
@@ -14647,7 +17865,9 @@
         errorLine1="        public final BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="291"
+            column="22"/>
     </issue>
 
     <issue
@@ -14656,7 +17876,9 @@
         errorLine1="        public Presenter.ViewHolder getSelectedItemViewHolder() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="298"
+            column="16"/>
     </issue>
 
     <issue
@@ -14665,7 +17887,9 @@
         errorLine1="        public Object getSelectedItem() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="306"
+            column="16"/>
     </issue>
 
     <issue
@@ -14674,7 +17898,9 @@
         errorLine1="    public final Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="325"
+            column="18"/>
     </issue>
 
     <issue
@@ -14683,7 +17909,9 @@
         errorLine1="    public final Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="325"
+            column="58"/>
     </issue>
 
     <issue
@@ -14692,7 +17920,9 @@
         errorLine1="    protected abstract ViewHolder createRowViewHolder(ViewGroup parent);"
         errorLine2="                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="353"
+            column="24"/>
     </issue>
 
     <issue
@@ -14701,7 +17931,9 @@
         errorLine1="    protected abstract ViewHolder createRowViewHolder(ViewGroup parent);"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="353"
+            column="55"/>
     </issue>
 
     <issue
@@ -14710,7 +17942,9 @@
         errorLine1="    protected void initializeRowViewHolder(ViewHolder vh) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="372"
+            column="44"/>
     </issue>
 
     <issue
@@ -14719,7 +17953,9 @@
         errorLine1="    public final void setHeaderPresenter(RowHeaderPresenter headerPresenter) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="389"
+            column="42"/>
     </issue>
 
     <issue
@@ -14728,7 +17964,9 @@
         errorLine1="    public final RowHeaderPresenter getHeaderPresenter() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="397"
+            column="18"/>
     </issue>
 
     <issue
@@ -14737,7 +17975,9 @@
         errorLine1="    public final ViewHolder getRowViewHolder(Presenter.ViewHolder holder) {"
         errorLine2="                 ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="405"
+            column="18"/>
     </issue>
 
     <issue
@@ -14746,7 +17986,9 @@
         errorLine1="    public final ViewHolder getRowViewHolder(Presenter.ViewHolder holder) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="405"
+            column="46"/>
     </issue>
 
     <issue
@@ -14755,7 +17997,9 @@
         errorLine1="    public final void setRowViewExpanded(Presenter.ViewHolder holder, boolean expanded) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="419"
+            column="42"/>
     </issue>
 
     <issue
@@ -14764,7 +18008,9 @@
         errorLine1="    public final void setRowViewSelected(Presenter.ViewHolder holder, boolean selected) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="431"
+            column="42"/>
     </issue>
 
     <issue
@@ -14773,7 +18019,9 @@
         errorLine1="    protected void onRowViewExpanded(ViewHolder vh, boolean expanded) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="444"
+            column="38"/>
     </issue>
 
     <issue
@@ -14782,7 +18030,9 @@
         errorLine1="    protected void dispatchItemSelectedListener(ViewHolder vh, boolean selected) {"
         errorLine2="                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="502"
+            column="49"/>
     </issue>
 
     <issue
@@ -14791,7 +18041,9 @@
         errorLine1="    protected void onRowViewSelected(ViewHolder vh, boolean selected) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="515"
+            column="38"/>
     </issue>
 
     <issue
@@ -14800,7 +18052,9 @@
         errorLine1="    public final void setSelectLevel(Presenter.ViewHolder vh, float level) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="533"
+            column="38"/>
     </issue>
 
     <issue
@@ -14809,7 +18063,9 @@
         errorLine1="    public final float getSelectLevel(Presenter.ViewHolder vh) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="543"
+            column="39"/>
     </issue>
 
     <issue
@@ -14818,7 +18074,9 @@
         errorLine1="    protected void onSelectLevelChanged(ViewHolder vh) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="555"
+            column="41"/>
     </issue>
 
     <issue
@@ -14827,7 +18085,9 @@
         errorLine1="    public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="604"
+            column="40"/>
     </issue>
 
     <issue
@@ -14836,7 +18096,9 @@
         errorLine1="    public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
         errorLine2="                                                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="604"
+            column="73"/>
     </issue>
 
     <issue
@@ -14845,7 +18107,9 @@
         errorLine1="    protected void onBindRowViewHolder(ViewHolder vh, Object item) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="614"
+            column="40"/>
     </issue>
 
     <issue
@@ -14854,7 +18118,9 @@
         errorLine1="    protected void onBindRowViewHolder(ViewHolder vh, Object item) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="614"
+            column="55"/>
     </issue>
 
     <issue
@@ -14863,7 +18129,9 @@
         errorLine1="    public final void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="623"
+            column="42"/>
     </issue>
 
     <issue
@@ -14872,7 +18140,9 @@
         errorLine1="    protected void onUnbindRowViewHolder(ViewHolder vh) {"
         errorLine2="                                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="632"
+            column="42"/>
     </issue>
 
     <issue
@@ -14881,7 +18151,9 @@
         errorLine1="    public final void onViewAttachedToWindow(Presenter.ViewHolder holder) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="641"
+            column="46"/>
     </issue>
 
     <issue
@@ -14890,7 +18162,9 @@
         errorLine1="    protected void onRowViewAttachedToWindow(ViewHolder vh) {"
         errorLine2="                                             ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="648"
+            column="46"/>
     </issue>
 
     <issue
@@ -14899,7 +18173,9 @@
         errorLine1="    public final void onViewDetachedFromWindow(Presenter.ViewHolder holder) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="655"
+            column="48"/>
     </issue>
 
     <issue
@@ -14908,7 +18184,9 @@
         errorLine1="    protected void onRowViewDetachedFromWindow(ViewHolder vh) {"
         errorLine2="                                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="662"
+            column="48"/>
     </issue>
 
     <issue
@@ -14917,7 +18195,9 @@
         errorLine1="    public void freeze(ViewHolder holder, boolean freeze) {"
         errorLine2="                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="673"
+            column="24"/>
     </issue>
 
     <issue
@@ -14926,7 +18206,9 @@
         errorLine1="    public void setEntranceTransitionState(ViewHolder holder, boolean afterEntrance) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+            file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+            line="686"
+            column="44"/>
     </issue>
 
     <issue
@@ -14935,7 +18217,9 @@
         errorLine1="    public BrowseFragment.MainFragmentAdapter getMainFragmentAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/RowsFragment.java"
+            line="68"
+            column="12"/>
     </issue>
 
     <issue
@@ -14944,7 +18228,9 @@
         errorLine1="    public BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/RowsFragment.java"
+            line="76"
+            column="12"/>
     </issue>
 
     <issue
@@ -14953,7 +18239,9 @@
         errorLine1="    protected VerticalGridView findGridViewFromRoot(View view) {"
         errorLine2="              ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/RowsFragment.java"
+            line="169"
+            column="15"/>
     </issue>
 
     <issue
@@ -14962,7 +18250,9 @@
         errorLine1="    protected VerticalGridView findGridViewFromRoot(View view) {"
         errorLine2="                                                    ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/RowsFragment.java"
+            line="169"
+            column="53"/>
     </issue>
 
     <issue
@@ -14971,7 +18261,9 @@
         errorLine1="    public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+            file="src/main/java/androidx/leanback/app/RowsFragment.java"
+            line="179"
+            column="46"/>
     </issue>
 
     <issue
diff --git a/libraryversions.toml b/libraryversions.toml
index f81a131..154ca76 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -1,10 +1,10 @@
 [versions]
-ACTIVITY = "1.7.0-alpha01"
+ACTIVITY = "1.6.0-alpha05"
 ADS_IDENTIFIER = "1.0.0-alpha05"
 ANNOTATION = "1.4.0-rc01"
 ANNOTATION_EXPERIMENTAL = "1.3.0-alpha01"
-APPCOMPAT = "1.5.0-alpha02"
-APPSEARCH = "1.0.0-alpha05"
+APPCOMPAT = "1.6.0-alpha05"
+APPSEARCH = "1.1.0-alpha01"
 ARCH_CORE = "2.2.0-alpha01"
 ASYNCLAYOUTINFLATER = "1.1.0-alpha01"
 AUTOFILL = "1.2.0-beta02"
@@ -24,7 +24,7 @@
 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"
@@ -52,6 +52,7 @@
 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_SERVICES_CLIENT = "1.0.0-beta01"
@@ -132,7 +133,7 @@
 WINDOW = "1.1.0-alpha03"
 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" }
@@ -179,6 +180,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-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-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/lint-demos/lint-demo-appcompat/lint-baseline.xml b/lint-demos/lint-demo-appcompat/lint-baseline.xml
index 9776c1c..a4b89aa 100644
--- a/lint-demos/lint-demo-appcompat/lint-baseline.xml
+++ b/lint-demos/lint-demo-appcompat/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/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 16acd88..717e9c1 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/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/res-2.5.0-beta01.txt b/navigation/navigation-compose/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-compose/api/res-2.5.0-beta01.txt
+++ /dev/null
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..e7829c9 100644
--- a/preference/preference/lint-baseline.xml
+++ b/preference/preference/lint-baseline.xml
@@ -196,7 +196,8 @@
         errorLine1="    public CharSequence[] getEntryValues() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+            file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+            column="12"/>
     </issue>
 
     <issue
@@ -205,7 +206,9 @@
         errorLine1="    public void setValues(Set&lt;String> values) {"
         errorLine2="                          ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+            file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+            line="147"
+            column="27"/>
     </issue>
 
     <issue
@@ -214,7 +217,9 @@
         errorLine1="    public Set&lt;String> getValues() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+            file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+            line="160"
+            column="12"/>
     </issue>
 
     <issue
@@ -223,7 +228,9 @@
         errorLine1="    public int findIndexOfValue(String value) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+            file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+            line="170"
+            column="33"/>
     </issue>
 
     <issue
@@ -232,7 +239,9 @@
         errorLine1="    protected boolean[] getSelectedItems() {"
         errorLine2="              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+            file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+            line="181"
+            column="15"/>
     </issue>
 
     <issue
@@ -241,7 +250,9 @@
         errorLine1="    protected void onSetInitialValue(Object defaultValue) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+            file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+            line="208"
+            column="38"/>
     </issue>
 
     <issue
@@ -250,7 +261,9 @@
         errorLine1="    public static MultiSelectListPreferenceDialogFragmentCompat newInstance(String key) {"
         errorLine2="                                                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/MultiSelectListPreferenceDialogFragmentCompat.java"/>
+            file="src/main/java/androidx/preference/MultiSelectListPreferenceDialogFragmentCompat.java"
+            line="51"
+            column="77"/>
     </issue>
 
     <issue
@@ -259,7 +272,9 @@
         errorLine1="    public void setKey(String key) {"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="950"
+            column="24"/>
     </issue>
 
     <issue
@@ -268,7 +283,9 @@
         errorLine1="    public String getKey() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="964"
+            column="12"/>
     </issue>
 
     <issue
@@ -277,7 +294,9 @@
         errorLine1="    public boolean callChangeListener(Object newValue) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="1130"
+            column="39"/>
     </issue>
 
     <issue
@@ -286,7 +305,9 @@
         errorLine1="    public PreferenceManager getPreferenceManager() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="1313"
+            column="12"/>
     </issue>
 
     <issue
@@ -295,7 +316,9 @@
         errorLine1="    public void setDefaultValue(Object defaultValue) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="1590"
+            column="33"/>
     </issue>
 
     <issue
@@ -304,7 +327,9 @@
         errorLine1="    protected boolean persistString(String value) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="1666"
+            column="37"/>
     </issue>
 
     <issue
@@ -313,7 +338,9 @@
         errorLine1="    protected String getPersistedString(String defaultReturnValue) {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="1696"
+            column="15"/>
     </issue>
 
     <issue
@@ -322,7 +349,9 @@
         errorLine1="    protected String getPersistedString(String defaultReturnValue) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="1696"
+            column="41"/>
     </issue>
 
     <issue
@@ -331,7 +360,9 @@
         errorLine1="    public boolean persistStringSet(Set&lt;String> values) {"
         errorLine2="                                    ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="1719"
+            column="37"/>
     </issue>
 
     <issue
@@ -340,7 +371,9 @@
         errorLine1="    public Set&lt;String> getPersistedStringSet(Set&lt;String> defaultReturnValue) {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="1749"
+            column="12"/>
     </issue>
 
     <issue
@@ -349,7 +382,9 @@
         errorLine1="    public Set&lt;String> getPersistedStringSet(Set&lt;String> defaultReturnValue) {"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="1749"
+            column="46"/>
     </issue>
 
     <issue
@@ -358,7 +393,9 @@
         errorLine1="        boolean onPreferenceChange(@NonNull Preference preference, Object newValue);"
         errorLine2="                                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="2141"
+            column="68"/>
     </issue>
 
     <issue
@@ -367,7 +404,9 @@
         errorLine1="        public BaseSavedState(Parcel source) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="2233"
+            column="31"/>
     </issue>
 
     <issue
@@ -376,7 +415,9 @@
         errorLine1="        public BaseSavedState(Parcelable superState) {"
         errorLine2="                              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/Preference.java"/>
+            file="src/main/java/androidx/preference/Preference.java"
+            line="2237"
+            column="31"/>
     </issue>
 
     <issue
@@ -385,7 +426,9 @@
         errorLine1="    public void putString(String key, @Nullable String value) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="55"
+            column="27"/>
     </issue>
 
     <issue
@@ -394,7 +437,9 @@
         errorLine1="    public void putStringSet(String key, @Nullable Set&lt;String> values) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="68"
+            column="30"/>
     </issue>
 
     <issue
@@ -403,7 +448,9 @@
         errorLine1="    public void putInt(String key, int value) {"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="81"
+            column="24"/>
     </issue>
 
     <issue
@@ -412,7 +459,9 @@
         errorLine1="    public void putLong(String key, long value) {"
         errorLine2="                        ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="94"
+            column="25"/>
     </issue>
 
     <issue
@@ -421,7 +470,9 @@
         errorLine1="    public void putFloat(String key, float value) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="107"
+            column="26"/>
     </issue>
 
     <issue
@@ -430,7 +481,9 @@
         errorLine1="    public void putBoolean(String key, boolean value) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="120"
+            column="28"/>
     </issue>
 
     <issue
@@ -439,7 +492,9 @@
         errorLine1="    public String getString(String key, @Nullable String defValue) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="133"
+            column="29"/>
     </issue>
 
     <issue
@@ -448,7 +503,9 @@
         errorLine1="    public Set&lt;String> getStringSet(String key, @Nullable Set&lt;String> defValues) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="146"
+            column="37"/>
     </issue>
 
     <issue
@@ -457,7 +514,9 @@
         errorLine1="    public int getInt(String key, int defValue) {"
         errorLine2="                      ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="158"
+            column="23"/>
     </issue>
 
     <issue
@@ -466,7 +525,9 @@
         errorLine1="    public long getLong(String key, long defValue) {"
         errorLine2="                        ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="170"
+            column="25"/>
     </issue>
 
     <issue
@@ -475,7 +536,9 @@
         errorLine1="    public float getFloat(String key, float defValue) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="182"
+            column="27"/>
     </issue>
 
     <issue
@@ -484,7 +547,9 @@
         errorLine1="    public boolean getBoolean(String key, boolean defValue) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+            file="src/main/java/androidx/preference/PreferenceDataStore.java"
+            line="194"
+            column="31"/>
     </issue>
 
     <issue
@@ -493,7 +558,9 @@
         errorLine1="    public DialogPreference getPreference() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceDialogFragmentCompat.java"/>
+            file="src/main/java/androidx/preference/PreferenceDialogFragmentCompat.java"
+            line="176"
+            column="12"/>
     </issue>
 
     <issue
@@ -502,7 +569,9 @@
         errorLine1="    public PreferenceManager getPreferenceManager() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
+            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"
+            line="327"
+            column="12"/>
     </issue>
 
     <issue
@@ -511,7 +580,9 @@
         errorLine1="    public PreferenceScreen getPreferenceScreen() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
+            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"
+            line="336"
+            column="12"/>
     </issue>
 
     <issue
@@ -520,7 +591,9 @@
         errorLine1="    public void setPreferenceScreen(PreferenceScreen preferenceScreen) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
+            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"
+            line="345"
+            column="37"/>
     </issue>
 
     <issue
@@ -529,7 +602,9 @@
         errorLine1="    public final RecyclerView getListView() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
+            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"
+            line="549"
+            column="18"/>
     </issue>
 
     <issue
@@ -538,7 +613,9 @@
         errorLine1="    public static SharedPreferences getDefaultSharedPreferences(@NonNull Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceManager.java"/>
+            file="src/main/java/androidx/preference/PreferenceManager.java"
+            line="118"
+            column="19"/>
     </issue>
 
     <issue
@@ -547,7 +624,9 @@
         errorLine1="    public static void setDefaultValues(@NonNull Context context, String sharedPreferencesName,"
         errorLine2="                                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceManager.java"/>
+            file="src/main/java/androidx/preference/PreferenceManager.java"
+            line="179"
+            column="67"/>
     </issue>
 
     <issue
@@ -556,7 +635,9 @@
         errorLine1="    public String getSharedPreferencesName() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceManager.java"/>
+            file="src/main/java/androidx/preference/PreferenceManager.java"
+            line="251"
+            column="12"/>
     </issue>
 
     <issue
@@ -565,7 +646,9 @@
         errorLine1="    public void setSharedPreferencesName(String sharedPreferencesName) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceManager.java"/>
+            file="src/main/java/androidx/preference/PreferenceManager.java"
+            line="265"
+            column="42"/>
     </issue>
 
     <issue
@@ -574,7 +657,9 @@
         errorLine1="    public PreferenceScreen getPreferenceScreen() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceManager.java"/>
+            file="src/main/java/androidx/preference/PreferenceManager.java"
+            line="421"
+            column="12"/>
     </issue>
 
     <issue
@@ -583,7 +668,9 @@
         errorLine1="    public boolean setPreferences(PreferenceScreen preferenceScreen) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceManager.java"/>
+            file="src/main/java/androidx/preference/PreferenceManager.java"
+            line="431"
+            column="35"/>
     </issue>
 
     <issue
@@ -592,7 +679,9 @@
         errorLine1="    public View findViewById(@IdRes int id) {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/preference/PreferenceViewHolder.java"/>
+            file="src/main/java/androidx/preference/PreferenceViewHolder.java"
+            line="77"
+            column="12"/>
     </issue>
 
     <issue
@@ -601,7 +690,9 @@
         errorLine1="    protected void onSetInitialValue(Object defaultValue) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/SeekBarPreference.java"/>
+            file="src/main/java/androidx/preference/SeekBarPreference.java"
+            line="203"
+            column="38"/>
     </issue>
 
     <issue
@@ -610,7 +701,9 @@
         errorLine1="    protected void onSetInitialValue(Object defaultValue) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/preference/TwoStatePreference.java"/>
+            file="src/main/java/androidx/preference/TwoStatePreference.java"
+            line="203"
+            column="38"/>
     </issue>
 
     <issue
@@ -619,7 +712,9 @@
         errorLine1="    protected void syncSummaryView(View view) {"
         errorLine2="                                   ~~~~">
         <location
-            file="src/main/java/androidx/preference/TwoStatePreference.java"/>
+            file="src/main/java/androidx/preference/TwoStatePreference.java"
+            line="225"
+            column="36"/>
     </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
index 64de3a4..4f280a4 100644
--- a/print/print/lint-baseline.xml
+++ b/print/print/lint-baseline.xml
@@ -115,7 +115,9 @@
         errorLine1="                .setMediaSize(other.getMediaSize())"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="561"
+            column="18"/>
     </issue>
 
     <issue
@@ -124,7 +126,9 @@
         errorLine1="                .setMediaSize(other.getMediaSize())"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="561"
+            column="37"/>
     </issue>
 
     <issue
@@ -133,7 +137,9 @@
         errorLine1="                .setResolution(other.getResolution())"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="562"
+            column="18"/>
     </issue>
 
     <issue
@@ -142,7 +148,9 @@
         errorLine1="                .setResolution(other.getResolution())"
         errorLine2="                                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="562"
+            column="38"/>
     </issue>
 
     <issue
@@ -151,7 +159,9 @@
         errorLine1="                .setMinMargins(other.getMinMargins());"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="563"
+            column="18"/>
     </issue>
 
     <issue
@@ -160,7 +170,9 @@
         errorLine1="                .setMinMargins(other.getMinMargins());"
         errorLine2="                                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="563"
+            column="38"/>
     </issue>
 
     <issue
@@ -169,7 +181,9 @@
         errorLine1="        if (other.getColorMode() != 0) {"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="565"
+            column="19"/>
     </issue>
 
     <issue
@@ -178,7 +192,9 @@
         errorLine1="            b.setColorMode(other.getColorMode());"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="566"
+            column="15"/>
     </issue>
 
     <issue
@@ -187,7 +203,9 @@
         errorLine1="            b.setColorMode(other.getColorMode());"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="566"
+            column="34"/>
     </issue>
 
     <issue
@@ -196,7 +214,9 @@
         errorLine1="            if (other.getDuplexMode() != 0) {"
         errorLine2="                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="570"
+            column="23"/>
     </issue>
 
     <issue
@@ -205,7 +225,9 @@
         errorLine1="                b.setDuplexMode(other.getDuplexMode());"
         errorLine2="                  ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="571"
+            column="19"/>
     </issue>
 
     <issue
@@ -214,7 +236,9 @@
         errorLine1="                b.setDuplexMode(other.getDuplexMode());"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="571"
+            column="39"/>
     </issue>
 
     <issue
@@ -223,7 +247,9 @@
         errorLine1="                    .setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build();"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="634"
+            column="22"/>
     </issue>
 
     <issue
@@ -232,7 +258,9 @@
         errorLine1="                    .setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build();"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="634"
+            column="36"/>
     </issue>
 
     <issue
@@ -241,7 +269,9 @@
         errorLine1="                    .setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build();"
         errorLine2="                                                                            ~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="634"
+            column="77"/>
     </issue>
 
     <issue
@@ -250,7 +280,9 @@
         errorLine1="                    if (cancellationSignal.isCanceled()) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="641"
+            column="44"/>
     </issue>
 
     <issue
@@ -259,7 +291,9 @@
         errorLine1="                    PrintedPdfDocument pdfDocument = new PrintedPdfDocument(mContext,"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="645"
+            column="54"/>
     </issue>
 
     <issue
@@ -268,7 +302,9 @@
         errorLine1="                            pdfAttributes.getColorMode());"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="649"
+            column="43"/>
     </issue>
 
     <issue
@@ -277,7 +313,9 @@
         errorLine1="                    if (cancellationSignal.isCanceled()) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="651"
+            column="44"/>
     </issue>
 
     <issue
@@ -286,7 +324,9 @@
         errorLine1="                        PdfDocument.Page page = pdfDocument.startPage(1);"
         errorLine2="                                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="656"
+            column="61"/>
     </issue>
 
     <issue
@@ -295,7 +335,9 @@
         errorLine1="                            contentRect = new RectF(page.getInfo().getContentRect());"
         errorLine2="                                                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="660"
+            column="58"/>
     </issue>
 
     <issue
@@ -304,7 +346,9 @@
         errorLine1="                            contentRect = new RectF(page.getInfo().getContentRect());"
         errorLine2="                                                                   ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="660"
+            column="68"/>
     </issue>
 
     <issue
@@ -313,7 +357,9 @@
         errorLine1="                            PrintedPdfDocument dummyDocument = new PrintedPdfDocument(mContext,"
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="664"
+            column="64"/>
     </issue>
 
     <issue
@@ -322,7 +368,9 @@
         errorLine1="                            PdfDocument.Page dummyPage = dummyDocument.startPage(1);"
         errorLine2="                                                                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="666"
+            column="72"/>
     </issue>
 
     <issue
@@ -331,7 +379,9 @@
         errorLine1="                            contentRect = new RectF(dummyPage.getInfo().getContentRect());"
         errorLine2="                                                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="667"
+            column="63"/>
     </issue>
 
     <issue
@@ -340,7 +390,9 @@
         errorLine1="                            contentRect = new RectF(dummyPage.getInfo().getContentRect());"
         errorLine2="                                                                        ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="667"
+            column="73"/>
     </issue>
 
     <issue
@@ -349,7 +401,9 @@
         errorLine1="                            dummyDocument.finishPage(dummyPage);"
         errorLine2="                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="668"
+            column="43"/>
     </issue>
 
     <issue
@@ -358,7 +412,9 @@
         errorLine1="                            dummyDocument.close();"
         errorLine2="                                          ~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="669"
+            column="43"/>
     </issue>
 
     <issue
@@ -367,7 +423,9 @@
         errorLine1="                            page.getCanvas().clipRect(contentRect);"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="684"
+            column="34"/>
     </issue>
 
     <issue
@@ -376,7 +434,9 @@
         errorLine1="                        page.getCanvas().drawBitmap(maybeGrayscale, matrix, null);"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="688"
+            column="30"/>
     </issue>
 
     <issue
@@ -385,7 +445,9 @@
         errorLine1="                        pdfDocument.finishPage(page);"
         errorLine2="                                    ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="691"
+            column="37"/>
     </issue>
 
     <issue
@@ -394,7 +456,9 @@
         errorLine1="                        if (cancellationSignal.isCanceled()) {"
         errorLine2="                                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="693"
+            column="48"/>
     </issue>
 
     <issue
@@ -403,7 +467,9 @@
         errorLine1="                        pdfDocument.writeTo("
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="698"
+            column="37"/>
     </issue>
 
     <issue
@@ -412,7 +478,9 @@
         errorLine1="                        pdfDocument.close();"
         errorLine2="                                    ~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="702"
+            column="37"/>
     </issue>
 
     <issue
@@ -421,7 +489,9 @@
         errorLine1="                if (cancellationSignal.isCanceled()) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="723"
+            column="40"/>
     </issue>
 
     <issue
@@ -430,7 +500,9 @@
         errorLine1="                    writeResultCallback.onWriteCancelled();"
         errorLine2="                                        ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="725"
+            column="41"/>
     </issue>
 
     <issue
@@ -439,7 +511,9 @@
         errorLine1="                    writeResultCallback.onWriteFinished("
         errorLine2="                                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="728"
+            column="41"/>
     </issue>
 
     <issue
@@ -448,7 +522,9 @@
         errorLine1="                    writeResultCallback.onWriteFailed(null);"
         errorLine2="                                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="733"
+            column="41"/>
     </issue>
 
     <issue
@@ -457,7 +533,9 @@
         errorLine1="                mDecodeOptions.inPreferredColorSpace = ColorSpace.get(ColorSpace.Named.SRGB);"
         errorLine2="                                                                  ~~~">
         <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
+            file="src/main/java/androidx/print/PrintHelper.java"
+            line="783"
+            column="67"/>
     </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
index f8813c0..8b3d44e 100644
--- a/recommendation/recommendation/lint-baseline.xml
+++ b/recommendation/recommendation/lint-baseline.xml
@@ -259,7 +259,9 @@
         errorLine1="        public Builder setColor(@ColorInt int color) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="836"
+            column="16"/>
     </issue>
 
     <issue
@@ -268,7 +270,9 @@
         errorLine1="        public Builder setGroup(@Nullable String groupTag) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="853"
+            column="16"/>
     </issue>
 
     <issue
@@ -277,7 +281,9 @@
         errorLine1="        public Builder setSortKey(@Nullable String sortKey) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="869"
+            column="16"/>
     </issue>
 
     <issue
@@ -286,7 +292,9 @@
         errorLine1="        public Builder setProgress(int max, int progress) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="881"
+            column="16"/>
     </issue>
 
     <issue
@@ -295,7 +303,9 @@
         errorLine1="        public Builder setAutoDismiss(boolean autoDismiss) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="900"
+            column="16"/>
     </issue>
 
     <issue
@@ -304,7 +314,9 @@
         errorLine1="        public Builder setContentIntentData(@IntentType int intentType, Intent intent,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="923"
+            column="16"/>
     </issue>
 
     <issue
@@ -313,7 +325,9 @@
         errorLine1="        public Builder setContentIntentData(@IntentType int intentType, Intent intent,"
         errorLine2="                                                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="923"
+            column="73"/>
     </issue>
 
     <issue
@@ -322,7 +336,9 @@
         errorLine1="        public Builder setDismissIntentData(@IntentType int intentType, @Nullable Intent intent,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="959"
+            column="16"/>
     </issue>
 
     <issue
@@ -331,7 +347,9 @@
         errorLine1="        public Builder setContentTypes(String[] types) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="988"
+            column="16"/>
     </issue>
 
     <issue
@@ -340,7 +358,9 @@
         errorLine1="        public Builder setContentTypes(String[] types) {"
         errorLine2="                                       ~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="988"
+            column="40"/>
     </issue>
 
     <issue
@@ -349,7 +369,9 @@
         errorLine1="        public Builder setGenres(String[] genres) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1001"
+            column="16"/>
     </issue>
 
     <issue
@@ -358,7 +380,9 @@
         errorLine1="        public Builder setGenres(String[] genres) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1001"
+            column="34"/>
     </issue>
 
     <issue
@@ -367,7 +391,9 @@
         errorLine1="        public Builder setPricingInformation(@ContentPricing String priceType,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1016"
+            column="16"/>
     </issue>
 
     <issue
@@ -376,7 +402,9 @@
         errorLine1="        public Builder setPricingInformation(@ContentPricing String priceType,"
         errorLine2="                                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1016"
+            column="62"/>
     </issue>
 
     <issue
@@ -385,7 +413,9 @@
         errorLine1="        public Builder setStatus(@ContentStatus int contentStatus) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1031"
+            column="16"/>
     </issue>
 
     <issue
@@ -394,7 +424,9 @@
         errorLine1="        public Builder setMaturityRating(@ContentMaturity String maturityRating) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1043"
+            column="16"/>
     </issue>
 
     <issue
@@ -403,7 +435,9 @@
         errorLine1="        public Builder setMaturityRating(@ContentMaturity String maturityRating) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1043"
+            column="59"/>
     </issue>
 
     <issue
@@ -412,7 +446,9 @@
         errorLine1="        public Builder setRunningTime(long length) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1053"
+            column="16"/>
     </issue>
 
     <issue
@@ -421,7 +457,9 @@
         errorLine1="        public ContentRecommendation build() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1065"
+            column="16"/>
     </issue>
 
     <issue
@@ -430,7 +468,9 @@
         errorLine1="    public Notification getNotificationObject(Context context) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1081"
+            column="12"/>
     </issue>
 
     <issue
@@ -439,7 +479,9 @@
         errorLine1="    public Notification getNotificationObject(Context context) {"
         errorLine2="                                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+            line="1081"
+            column="47"/>
     </issue>
 
     <issue
@@ -448,7 +490,9 @@
         errorLine1="    public RecommendationExtender(Notification notif) {"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="83"
+            column="35"/>
     </issue>
 
     <issue
@@ -457,7 +501,9 @@
         errorLine1="    public RecommendationExtender setContentTypes(String[] types) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="140"
+            column="12"/>
     </issue>
 
     <issue
@@ -466,7 +512,9 @@
         errorLine1="    public RecommendationExtender setContentTypes(String[] types) {"
         errorLine2="                                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="140"
+            column="51"/>
     </issue>
 
     <issue
@@ -475,7 +523,9 @@
         errorLine1="    public String[] getContentTypes() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="154"
+            column="12"/>
     </issue>
 
     <issue
@@ -484,7 +534,9 @@
         errorLine1="    public String getPrimaryContentType() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="165"
+            column="12"/>
     </issue>
 
     <issue
@@ -493,7 +545,9 @@
         errorLine1="    public RecommendationExtender setGenres(String[] genres) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="181"
+            column="12"/>
     </issue>
 
     <issue
@@ -502,7 +556,9 @@
         errorLine1="    public RecommendationExtender setGenres(String[] genres) {"
         errorLine2="                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="181"
+            column="45"/>
     </issue>
 
     <issue
@@ -511,7 +567,9 @@
         errorLine1="    public String[] getGenres() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="193"
+            column="12"/>
     </issue>
 
     <issue
@@ -520,7 +578,9 @@
         errorLine1="    public RecommendationExtender setPricingInformation("
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="208"
+            column="12"/>
     </issue>
 
     <issue
@@ -529,7 +589,9 @@
         errorLine1="            @ContentRecommendation.ContentPricing String priceType, String priceValue) {"
         errorLine2="                                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="209"
+            column="51"/>
     </issue>
 
     <issue
@@ -538,7 +600,9 @@
         errorLine1="            @ContentRecommendation.ContentPricing String priceType, String priceValue) {"
         errorLine2="                                                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="209"
+            column="69"/>
     </issue>
 
     <issue
@@ -547,7 +611,9 @@
         errorLine1="    public String getPricingType() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="222"
+            column="12"/>
     </issue>
 
     <issue
@@ -556,7 +622,9 @@
         errorLine1="    public String getPricingValue() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="235"
+            column="12"/>
     </issue>
 
     <issue
@@ -565,7 +633,9 @@
         errorLine1="    public RecommendationExtender setStatus("
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="250"
+            column="12"/>
     </issue>
 
     <issue
@@ -574,7 +644,9 @@
         errorLine1="    public RecommendationExtender setMaturityRating("
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="276"
+            column="12"/>
     </issue>
 
     <issue
@@ -583,7 +655,9 @@
         errorLine1="            @ContentRecommendation.ContentMaturity String maturityRating) {"
         errorLine2="                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="277"
+            column="52"/>
     </issue>
 
     <issue
@@ -592,7 +666,9 @@
         errorLine1="    public String getMaturityRating() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="289"
+            column="12"/>
     </issue>
 
     <issue
@@ -601,7 +677,9 @@
         errorLine1="    public RecommendationExtender setRunningTime(long length) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+            line="298"
+            column="12"/>
     </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/room/room-rxjava2/lint-baseline.xml b/room/room-rxjava2/lint-baseline.xml
index beacd64..334fe31 100644
--- a/room/room-rxjava2/lint-baseline.xml
+++ b/room/room-rxjava2/lint-baseline.xml
@@ -25,7 +25,9 @@
         errorLine1="    public static Flowable&lt;Object> createFlowable(final RoomDatabase database,"
         errorLine2="                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="68"
+            column="19"/>
     </issue>
 
     <issue
@@ -34,7 +36,9 @@
         errorLine1="    public static Flowable&lt;Object> createFlowable(final RoomDatabase database,"
         errorLine2="                                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="68"
+            column="57"/>
     </issue>
 
     <issue
@@ -43,7 +47,9 @@
         errorLine1="            final String... tableNames) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="69"
+            column="19"/>
     </issue>
 
     <issue
@@ -52,7 +58,9 @@
         errorLine1="    public static &lt;T> Flowable&lt;T> createFlowable(final RoomDatabase database,"
         errorLine2="                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="122"
+            column="23"/>
     </issue>
 
     <issue
@@ -61,7 +69,9 @@
         errorLine1="    public static &lt;T> Flowable&lt;T> createFlowable(final RoomDatabase database,"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="122"
+            column="56"/>
     </issue>
 
     <issue
@@ -70,7 +80,9 @@
         errorLine1="            final boolean inTransaction, final String[] tableNames, final Callable&lt;T> callable) {"
         errorLine2="                                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="123"
+            column="48"/>
     </issue>
 
     <issue
@@ -79,7 +91,9 @@
         errorLine1="            final boolean inTransaction, final String[] tableNames, final Callable&lt;T> callable) {"
         errorLine2="                                                                          ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="123"
+            column="75"/>
     </issue>
 
     <issue
@@ -88,7 +102,9 @@
         errorLine1="    public static Observable&lt;Object> createObservable(final RoomDatabase database,"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="153"
+            column="19"/>
     </issue>
 
     <issue
@@ -97,7 +113,9 @@
         errorLine1="    public static Observable&lt;Object> createObservable(final RoomDatabase database,"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="153"
+            column="61"/>
     </issue>
 
     <issue
@@ -106,7 +124,9 @@
         errorLine1="            final String... tableNames) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="154"
+            column="19"/>
     </issue>
 
     <issue
@@ -115,7 +135,9 @@
         errorLine1="    public static &lt;T> Observable&lt;T> createObservable(final RoomDatabase database,"
         errorLine2="                      ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="201"
+            column="23"/>
     </issue>
 
     <issue
@@ -124,7 +146,9 @@
         errorLine1="    public static &lt;T> Observable&lt;T> createObservable(final RoomDatabase database,"
         errorLine2="                                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="201"
+            column="60"/>
     </issue>
 
     <issue
@@ -133,7 +157,9 @@
         errorLine1="            final boolean inTransaction, final String[] tableNames, final Callable&lt;T> callable) {"
         errorLine2="                                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="202"
+            column="48"/>
     </issue>
 
     <issue
@@ -142,7 +168,9 @@
         errorLine1="            final boolean inTransaction, final String[] tableNames, final Callable&lt;T> callable) {"
         errorLine2="                                                                          ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="202"
+            column="75"/>
     </issue>
 
     <issue
@@ -151,7 +179,9 @@
         errorLine1="    public static &lt;T> Single&lt;T> createSingle(final Callable&lt;T> callable) {"
         errorLine2="                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="224"
+            column="23"/>
     </issue>
 
     <issue
@@ -160,7 +190,9 @@
         errorLine1="    public static &lt;T> Single&lt;T> createSingle(final Callable&lt;T> callable) {"
         errorLine2="                                                   ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/room/RxRoom.java"/>
+            file="src/main/java/androidx/room/RxRoom.java"
+            line="224"
+            column="52"/>
     </issue>
 
 </issues>
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/settings.gradle b/settings.gradle
index 54378e6..d0486ef 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -90,8 +90,9 @@
         value("androidx.projects", getRequestedProjectSubsetName() ?: "Unset")
         value("androidx.useMaxDepVersions", providers.gradleProperty("androidx.useMaxDepVersions").isPresent().toString())
 
-        publishAlways()
-        publishIfAuthenticated()
+        // Do not publish scan for androidx-platform-dev
+        // publishAlways()
+        // publishIfAuthenticated()
     }
 }
 
@@ -613,6 +614,7 @@
 includeProject(":health:health-connect-client-proto", [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])
@@ -865,7 +867,7 @@
 includeProject(":window:extensions:extensions", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN])
 includeProject(":window:integration-tests:configuration-change-tests", [BuildType.MAIN])
 includeProject(":window:sidecar:sidecar", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN])
-includeProject(":window:window-java", [BuildType.MAIN])
+includeProject(":window:window-java", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN])
 includeProject(":window:window-rxjava2", [BuildType.MAIN])
 includeProject(":window:window-rxjava3", [BuildType.MAIN])
 includeProject(":window:window-samples", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN])
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/slice/slice-core/lint-baseline.xml b/slice/slice-core/lint-baseline.xml
index 3d75719..6b16971 100644
--- a/slice/slice-core/lint-baseline.xml
+++ b/slice/slice-core/lint-baseline.xml
@@ -187,7 +187,9 @@
         errorLine1="    /**"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="160"
+            column="5"/>
     </issue>
 
     <issue
@@ -196,7 +198,9 @@
         errorLine1="            return (int) h.getClass().getDeclaredMethod(&quot;getIdentifier&quot;).invoke(h);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceManagerWrapper.java"/>
+            file="src/main/java/androidx/slice/SliceManagerWrapper.java"
+            line="93"
+            column="26"/>
     </issue>
 
     <issue
@@ -205,7 +209,9 @@
         errorLine1="        return SliceConvert.wrap(context.getSystemService(SliceManager.class)"
         errorLine2="                                         ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="644"
+            column="42"/>
     </issue>
 
     <issue
@@ -214,7 +220,9 @@
         errorLine1="                .bindSlice(uri, unwrap(supportedSpecs)), context);"
         errorLine2="                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="645"
+            column="18"/>
     </issue>
 
     <issue
@@ -223,7 +231,9 @@
         errorLine1="                mProvider.close();"
         errorLine2="                          ~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderCompat.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderCompat.java"
+            line="714"
+            column="27"/>
     </issue>
 
     <issue
@@ -232,7 +242,9 @@
         errorLine1="                @NonNull Slice s, @Nullable String subType) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="403"
+            column="35"/>
     </issue>
 
     <issue
@@ -241,7 +253,9 @@
         errorLine1="            @Slice.SliceHint String[] hints) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="171"
+            column="13"/>
     </issue>
 
     <issue
@@ -250,7 +264,9 @@
         errorLine1="    public CompatPermissionManager(Context context, String prefsName, int myUid,"
         errorLine2="                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="53"
+            column="36"/>
     </issue>
 
     <issue
@@ -259,7 +275,9 @@
         errorLine1="    public CompatPermissionManager(Context context, String prefsName, int myUid,"
         errorLine2="                                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="53"
+            column="53"/>
     </issue>
 
     <issue
@@ -268,7 +286,9 @@
         errorLine1="            String[] autoGrantPermissions) {"
         errorLine2="            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="54"
+            column="13"/>
     </issue>
 
     <issue
@@ -277,7 +297,9 @@
         errorLine1="    public int checkSlicePermission(Uri uri, int pid, int uid) {"
         errorLine2="                                    ~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="66"
+            column="37"/>
     </issue>
 
     <issue
@@ -286,7 +308,9 @@
         errorLine1="    public void grantSlicePermission(Uri uri, String toPkg) {"
         errorLine2="                                     ~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="93"
+            column="38"/>
     </issue>
 
     <issue
@@ -295,7 +319,9 @@
         errorLine1="    public void grantSlicePermission(Uri uri, String toPkg) {"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="93"
+            column="47"/>
     </issue>
 
     <issue
@@ -304,7 +330,9 @@
         errorLine1="    public void revokeSlicePermission(Uri uri, String toPkg) {"
         errorLine2="                                      ~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="100"
+            column="39"/>
     </issue>
 
     <issue
@@ -313,7 +341,9 @@
         errorLine1="    public void revokeSlicePermission(Uri uri, String toPkg) {"
         errorLine2="                                               ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="100"
+            column="48"/>
     </issue>
 
     <issue
@@ -322,7 +352,9 @@
         errorLine1="        public String getKey() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="141"
+            column="16"/>
     </issue>
 
     <issue
@@ -331,7 +363,9 @@
         errorLine1="        public Set&lt;String> toPersistable() {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="145"
+            column="16"/>
     </issue>
 
     <issue
@@ -340,7 +374,9 @@
         errorLine1="        public boolean hasAccess(List&lt;String> path) {"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+            line="153"
+            column="34"/>
     </issue>
 
     <issue
@@ -349,7 +385,9 @@
         errorLine1="    public CompatPinnedList(Context context, String prefsName) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="59"
+            column="29"/>
     </issue>
 
     <issue
@@ -358,7 +396,9 @@
         errorLine1="    public CompatPinnedList(Context context, String prefsName) {"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="59"
+            column="46"/>
     </issue>
 
     <issue
@@ -367,7 +407,9 @@
         errorLine1="    public List&lt;Uri> getPinnedSlices() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="80"
+            column="12"/>
     </issue>
 
     <issue
@@ -376,7 +418,9 @@
         errorLine1="    public synchronized ArraySet&lt;SliceSpec> getSpecs(Uri uri) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="100"
+            column="25"/>
     </issue>
 
     <issue
@@ -385,7 +429,9 @@
         errorLine1="    public synchronized ArraySet&lt;SliceSpec> getSpecs(Uri uri) {"
         errorLine2="                                                     ~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="100"
+            column="54"/>
     </issue>
 
     <issue
@@ -394,7 +440,9 @@
         errorLine1="    public synchronized boolean addPin(Uri uri, String pkg, Set&lt;SliceSpec> specs) {"
         errorLine2="                                       ~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="147"
+            column="40"/>
     </issue>
 
     <issue
@@ -403,7 +451,9 @@
         errorLine1="    public synchronized boolean addPin(Uri uri, String pkg, Set&lt;SliceSpec> specs) {"
         errorLine2="                                                ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="147"
+            column="49"/>
     </issue>
 
     <issue
@@ -412,7 +462,9 @@
         errorLine1="    public synchronized boolean addPin(Uri uri, String pkg, Set&lt;SliceSpec> specs) {"
         errorLine2="                                                            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="147"
+            column="61"/>
     </issue>
 
     <issue
@@ -421,7 +473,9 @@
         errorLine1="    public synchronized boolean removePin(Uri uri, String pkg) {"
         errorLine2="                                          ~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="164"
+            column="43"/>
     </issue>
 
     <issue
@@ -430,7 +484,9 @@
         errorLine1="    public synchronized boolean removePin(Uri uri, String pkg) {"
         errorLine2="                                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+            line="164"
+            column="52"/>
     </issue>
 
     <issue
@@ -439,7 +495,9 @@
         errorLine1="    public Slice(Bundle in) {"
         errorLine2="                 ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="189"
+            column="18"/>
     </issue>
 
     <issue
@@ -448,7 +506,9 @@
         errorLine1="    public Bundle toBundle() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="208"
+            column="12"/>
     </issue>
 
     <issue
@@ -457,7 +517,9 @@
         errorLine1="    public Uri getUri() {"
         errorLine2="           ~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="236"
+            column="12"/>
     </issue>
 
     <issue
@@ -466,7 +528,9 @@
         errorLine1="    public List&lt;SliceItem> getItems() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="243"
+            column="12"/>
     </issue>
 
     <issue
@@ -475,7 +539,9 @@
         errorLine1="    public SliceItem[] getItemArray() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="252"
+            column="12"/>
     </issue>
 
     <issue
@@ -484,7 +550,9 @@
         errorLine1="    public @SliceHint List&lt;String> getHints() {"
         errorLine2="                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="259"
+            column="23"/>
     </issue>
 
     <issue
@@ -493,7 +561,9 @@
         errorLine1="    public @SliceHint String[] getHintArray() {"
         errorLine2="                      ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="267"
+            column="23"/>
     </issue>
 
     <issue
@@ -502,7 +572,9 @@
         errorLine1="    public boolean hasHint(@SliceHint String hint) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="275"
+            column="39"/>
     </issue>
 
     <issue
@@ -511,7 +583,9 @@
         errorLine1="        public Builder setSpec(SliceSpec spec) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="343"
+            column="16"/>
     </issue>
 
     <issue
@@ -520,7 +594,9 @@
         errorLine1="        public Builder setSpec(SliceSpec spec) {"
         errorLine2="                               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="343"
+            column="32"/>
     </issue>
 
     <issue
@@ -529,7 +605,9 @@
         errorLine1="        public Builder addHints(@SliceHint String... hints) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="351"
+            column="16"/>
     </issue>
 
     <issue
@@ -538,7 +616,9 @@
         errorLine1="        public Builder addHints(@SliceHint String... hints) {"
         errorLine2="                                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="351"
+            column="44"/>
     </issue>
 
     <issue
@@ -547,7 +627,9 @@
         errorLine1="        public Builder addHints(@SliceHint List&lt;String> hints) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="359"
+            column="16"/>
     </issue>
 
     <issue
@@ -556,7 +638,9 @@
         errorLine1="        public Builder addHints(@SliceHint List&lt;String> hints) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="359"
+            column="44"/>
     </issue>
 
     <issue
@@ -565,7 +649,9 @@
         errorLine1="        public Builder addSubSlice(@NonNull Slice slice) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="366"
+            column="16"/>
     </issue>
 
     <issue
@@ -574,7 +660,9 @@
         errorLine1="        public Builder addSubSlice(@NonNull Slice slice, String subType) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="376"
+            column="16"/>
     </issue>
 
     <issue
@@ -583,7 +671,9 @@
         errorLine1="        public Builder addSubSlice(@NonNull Slice slice, String subType) {"
         errorLine2="                                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="376"
+            column="58"/>
     </issue>
 
     <issue
@@ -592,7 +682,9 @@
         errorLine1="        public Slice.Builder addAction(@NonNull PendingIntent action,"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="387"
+            column="16"/>
     </issue>
 
     <issue
@@ -601,7 +693,9 @@
         errorLine1="        public Slice.Builder addAction(@NonNull SliceItem.ActionHandler action,"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="402"
+            column="16"/>
     </issue>
 
     <issue
@@ -610,7 +704,9 @@
         errorLine1="        public Builder addText(CharSequence text, @Nullable String subType,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="415"
+            column="16"/>
     </issue>
 
     <issue
@@ -619,7 +715,9 @@
         errorLine1="        public Builder addText(CharSequence text, @Nullable String subType,"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="415"
+            column="32"/>
     </issue>
 
     <issue
@@ -628,7 +726,9 @@
         errorLine1="                @SliceHint String... hints) {"
         errorLine2="                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="416"
+            column="28"/>
     </issue>
 
     <issue
@@ -637,7 +737,9 @@
         errorLine1="        public Builder addText(CharSequence text, @Nullable String subType,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="426"
+            column="16"/>
     </issue>
 
     <issue
@@ -646,7 +748,9 @@
         errorLine1="        public Builder addText(CharSequence text, @Nullable String subType,"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="426"
+            column="32"/>
     </issue>
 
     <issue
@@ -655,7 +759,9 @@
         errorLine1="                @SliceHint List&lt;String> hints) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="427"
+            column="28"/>
     </issue>
 
     <issue
@@ -664,7 +770,9 @@
         errorLine1="        public Builder addIcon(IconCompat icon, @Nullable String subType,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="436"
+            column="16"/>
     </issue>
 
     <issue
@@ -673,7 +781,9 @@
         errorLine1="        public Builder addIcon(IconCompat icon, @Nullable String subType,"
         errorLine2="                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="436"
+            column="32"/>
     </issue>
 
     <issue
@@ -682,7 +792,9 @@
         errorLine1="                @SliceHint String... hints) {"
         errorLine2="                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="437"
+            column="28"/>
     </issue>
 
     <issue
@@ -691,7 +803,9 @@
         errorLine1="        public Builder addIcon(IconCompat icon, @Nullable String subType,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="450"
+            column="16"/>
     </issue>
 
     <issue
@@ -700,7 +814,9 @@
         errorLine1="        public Builder addIcon(IconCompat icon, @Nullable String subType,"
         errorLine2="                               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="450"
+            column="32"/>
     </issue>
 
     <issue
@@ -709,7 +825,9 @@
         errorLine1="                @SliceHint List&lt;String> hints) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="451"
+            column="28"/>
     </issue>
 
     <issue
@@ -718,7 +836,9 @@
         errorLine1="        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="466"
+            column="16"/>
     </issue>
 
     <issue
@@ -727,7 +847,9 @@
         errorLine1="        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
         errorLine2="                                            ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="466"
+            column="45"/>
     </issue>
 
     <issue
@@ -736,7 +858,9 @@
         errorLine1="                @SliceHint List&lt;String> hints) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="467"
+            column="28"/>
     </issue>
 
     <issue
@@ -745,7 +869,9 @@
         errorLine1="        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="479"
+            column="16"/>
     </issue>
 
     <issue
@@ -754,7 +880,9 @@
         errorLine1="        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
         errorLine2="                                            ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="479"
+            column="45"/>
     </issue>
 
     <issue
@@ -763,7 +891,9 @@
         errorLine1="                @SliceHint String... hints) {"
         errorLine2="                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="480"
+            column="28"/>
     </issue>
 
     <issue
@@ -772,7 +902,9 @@
         errorLine1="        public Builder addInt(int value, @Nullable String subType,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="491"
+            column="16"/>
     </issue>
 
     <issue
@@ -781,7 +913,9 @@
         errorLine1="                @SliceHint String... hints) {"
         errorLine2="                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="492"
+            column="28"/>
     </issue>
 
     <issue
@@ -790,7 +924,9 @@
         errorLine1="        public Builder addInt(int value, @Nullable String subType,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="503"
+            column="16"/>
     </issue>
 
     <issue
@@ -799,7 +935,9 @@
         errorLine1="                @SliceHint List&lt;String> hints) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="504"
+            column="28"/>
     </issue>
 
     <issue
@@ -808,7 +946,9 @@
         errorLine1="        public Slice.Builder addLong(long time, @Nullable String subType,"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="513"
+            column="16"/>
     </issue>
 
     <issue
@@ -817,7 +957,9 @@
         errorLine1="                @SliceHint String... hints) {"
         errorLine2="                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="514"
+            column="28"/>
     </issue>
 
     <issue
@@ -826,7 +968,9 @@
         errorLine1="        public Slice.Builder addLong(long time, @Nullable String subType,"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="524"
+            column="16"/>
     </issue>
 
     <issue
@@ -835,7 +979,9 @@
         errorLine1="                @SliceHint List&lt;String> hints) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="525"
+            column="28"/>
     </issue>
 
     <issue
@@ -844,7 +990,9 @@
         errorLine1="        public Slice.Builder addTimestamp(long time, @Nullable String subType,"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="547"
+            column="16"/>
     </issue>
 
     <issue
@@ -853,7 +1001,9 @@
         errorLine1="                @SliceHint List&lt;String> hints) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="548"
+            column="28"/>
     </issue>
 
     <issue
@@ -862,7 +1012,9 @@
         errorLine1="        public Slice.Builder addItem(SliceItem item) {"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="557"
+            column="16"/>
     </issue>
 
     <issue
@@ -871,7 +1023,9 @@
         errorLine1="        public Slice.Builder addItem(SliceItem item) {"
         errorLine2="                                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="557"
+            column="38"/>
     </issue>
 
     <issue
@@ -880,7 +1034,9 @@
         errorLine1="        public Slice build() {"
         errorLine2="               ~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="565"
+            column="16"/>
     </issue>
 
     <issue
@@ -889,7 +1045,9 @@
         errorLine1="    public String toString(String indent) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="583"
+            column="12"/>
     </issue>
 
     <issue
@@ -898,7 +1056,9 @@
         errorLine1="    public String toString(String indent) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="583"
+            column="28"/>
     </issue>
 
     <issue
@@ -907,7 +1067,9 @@
         errorLine1="    public static void appendHints(StringBuilder sb, String[] hints) {"
         errorLine2="                                   ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="608"
+            column="36"/>
     </issue>
 
     <issue
@@ -916,7 +1078,9 @@
         errorLine1="    public static void appendHints(StringBuilder sb, String[] hints) {"
         errorLine2="                                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="608"
+            column="54"/>
     </issue>
 
     <issue
@@ -925,7 +1089,9 @@
         errorLine1="    public static Slice bindSlice(Context context, @NonNull Uri uri,"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="632"
+            column="35"/>
     </issue>
 
     <issue
@@ -934,7 +1100,9 @@
         errorLine1="            Set&lt;SliceSpec> supportedSpecs) {"
         errorLine2="            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/Slice.java"/>
+            file="src/main/java/androidx/slice/Slice.java"
+            line="633"
+            column="13"/>
     </issue>
 
     <issue
@@ -943,7 +1111,9 @@
         errorLine1="    SliceAction setChecked(boolean isChecked);"
         errorLine2="    ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceAction.java"/>
+            file="src/main/java/androidx/slice/core/SliceAction.java"
+            line="43"
+            column="5"/>
     </issue>
 
     <issue
@@ -952,7 +1122,9 @@
         errorLine1="    SliceAction setPriority(@IntRange(from = 0) int priority);"
         errorLine2="    ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceAction.java"/>
+            file="src/main/java/androidx/slice/core/SliceAction.java"
+            line="48"
+            column="5"/>
     </issue>
 
     <issue
@@ -961,7 +1133,9 @@
         errorLine1="    public SliceActionImpl(SliceItem slice) {"
         errorLine2="                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
+            file="src/main/java/androidx/slice/core/SliceActionImpl.java"
+            line="188"
+            column="28"/>
     </issue>
 
     <issue
@@ -970,7 +1144,9 @@
         errorLine1="    public SliceActionImpl setChecked(boolean isChecked) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
+            file="src/main/java/androidx/slice/core/SliceActionImpl.java"
+            line="266"
+            column="12"/>
     </issue>
 
     <issue
@@ -979,7 +1155,9 @@
         errorLine1="    public SliceActionImpl setPriority(@IntRange(from = 0) int priority) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
+            file="src/main/java/androidx/slice/core/SliceActionImpl.java"
+            line="275"
+            column="12"/>
     </issue>
 
     <issue
@@ -988,7 +1166,9 @@
         errorLine1="    public SliceItem getActionItem() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
+            file="src/main/java/androidx/slice/core/SliceActionImpl.java"
+            line="303"
+            column="12"/>
     </issue>
 
     <issue
@@ -997,7 +1177,9 @@
         errorLine1="    public static android.app.slice.Slice unwrap(androidx.slice.Slice slice) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="53"
+            column="19"/>
     </issue>
 
     <issue
@@ -1006,7 +1188,9 @@
         errorLine1="    public static android.app.slice.Slice unwrap(androidx.slice.Slice slice) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="53"
+            column="50"/>
     </issue>
 
     <issue
@@ -1015,7 +1199,9 @@
         errorLine1="    public static androidx.slice.Slice wrap(android.app.slice.Slice slice, Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="110"
+            column="19"/>
     </issue>
 
     <issue
@@ -1024,7 +1210,9 @@
         errorLine1="    public static androidx.slice.Slice wrap(android.app.slice.Slice slice, Context context) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="110"
+            column="45"/>
     </issue>
 
     <issue
@@ -1033,7 +1221,9 @@
         errorLine1="    public static androidx.slice.Slice wrap(android.app.slice.Slice slice, Context context) {"
         errorLine2="                                                                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="110"
+            column="76"/>
     </issue>
 
     <issue
@@ -1042,7 +1232,9 @@
         errorLine1="    public static Set&lt;androidx.slice.SliceSpec> wrap("
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="166"
+            column="19"/>
     </issue>
 
     <issue
@@ -1051,7 +1243,9 @@
         errorLine1="            Set&lt;android.app.slice.SliceSpec> supportedSpecs) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="167"
+            column="13"/>
     </issue>
 
     <issue
@@ -1060,7 +1254,9 @@
         errorLine1="    protected @Slice.SliceHint String[] mHints = Slice.NO_HINTS;"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="115"
+            column="32"/>
     </issue>
 
     <issue
@@ -1069,7 +1265,9 @@
         errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="132"
+            column="22"/>
     </issue>
 
     <issue
@@ -1078,7 +1276,9 @@
         errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="132"
+            column="45"/>
     </issue>
 
     <issue
@@ -1087,7 +1287,9 @@
         errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
         errorLine2="                                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="132"
+            column="60"/>
     </issue>
 
     <issue
@@ -1096,7 +1298,9 @@
         errorLine1="            @Slice.SliceHint String[] hints) {"
         errorLine2="                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="133"
+            column="30"/>
     </issue>
 
     <issue
@@ -1105,7 +1309,9 @@
         errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="144"
+            column="22"/>
     </issue>
 
     <issue
@@ -1114,7 +1320,9 @@
         errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="144"
+            column="45"/>
     </issue>
 
     <issue
@@ -1123,7 +1331,9 @@
         errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
         errorLine2="                                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="144"
+            column="60"/>
     </issue>
 
     <issue
@@ -1132,7 +1342,9 @@
         errorLine1="            @Slice.SliceHint List&lt;String> hints) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="145"
+            column="30"/>
     </issue>
 
     <issue
@@ -1141,7 +1353,9 @@
         errorLine1="    public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="161"
+            column="22"/>
     </issue>
 
     <issue
@@ -1150,7 +1364,9 @@
         errorLine1="    public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
         errorLine2="                                           ~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="161"
+            column="44"/>
     </issue>
 
     <issue
@@ -1159,7 +1375,9 @@
         errorLine1="    public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="161"
+            column="57"/>
     </issue>
 
     <issue
@@ -1168,7 +1386,9 @@
         errorLine1="    public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="161"
+            column="72"/>
     </issue>
 
     <issue
@@ -1177,7 +1397,9 @@
         errorLine1="            @Slice.SliceHint String[] hints) {"
         errorLine2="                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="162"
+            column="30"/>
     </issue>
 
     <issue
@@ -1186,7 +1408,9 @@
         errorLine1="    public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
         errorLine2="                     ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="170"
+            column="22"/>
     </issue>
 
     <issue
@@ -1195,7 +1419,9 @@
         errorLine1="    public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
         errorLine2="                                           ~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="170"
+            column="44"/>
     </issue>
 
     <issue
@@ -1204,7 +1430,9 @@
         errorLine1="    public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="170"
+            column="57"/>
     </issue>
 
     <issue
@@ -1213,7 +1441,9 @@
         errorLine1="    public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="170"
+            column="72"/>
     </issue>
 
     <issue
@@ -1222,7 +1452,9 @@
         errorLine1="            @Slice.SliceHint String[] hints) {"
         errorLine2="                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="171"
+            column="30"/>
     </issue>
 
     <issue
@@ -1231,7 +1463,9 @@
         errorLine1="    public void addHint(@Slice.SliceHint String hint) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="196"
+            column="42"/>
     </issue>
 
     <issue
@@ -1240,7 +1474,9 @@
         errorLine1="    public @SliceType String getFormat() {"
         errorLine2="                      ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="215"
+            column="23"/>
     </issue>
 
     <issue
@@ -1249,7 +1485,9 @@
         errorLine1="    public String getSubType() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="228"
+            column="12"/>
     </issue>
 
     <issue
@@ -1258,7 +1496,9 @@
         errorLine1="    public CharSequence getText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="235"
+            column="12"/>
     </issue>
 
     <issue
@@ -1267,7 +1507,9 @@
         errorLine1="    public CharSequence getSanitizedText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="245"
+            column="12"/>
     </issue>
 
     <issue
@@ -1276,7 +1518,9 @@
         errorLine1="    public IconCompat getIcon() {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="264"
+            column="12"/>
     </issue>
 
     <issue
@@ -1285,7 +1529,9 @@
         errorLine1="    public PendingIntent getAction() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="273"
+            column="12"/>
     </issue>
 
     <issue
@@ -1294,7 +1540,9 @@
         errorLine1="    public RemoteInput getRemoteInput() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="315"
+            column="12"/>
     </issue>
 
     <issue
@@ -1303,7 +1551,9 @@
         errorLine1="    public Slice getSlice() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="331"
+            column="12"/>
     </issue>
 
     <issue
@@ -1312,7 +1562,9 @@
         errorLine1="    public boolean hasHint(@Slice.SliceHint String hint) {"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="350"
+            column="45"/>
     </issue>
 
     <issue
@@ -1321,7 +1573,9 @@
         errorLine1="    public SliceItem(Bundle in) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="358"
+            column="22"/>
     </issue>
 
     <issue
@@ -1330,7 +1584,9 @@
         errorLine1="    public Bundle toBundle() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="370"
+            column="12"/>
     </issue>
 
     <issue
@@ -1339,7 +1595,9 @@
         errorLine1="    public boolean hasHints(@Slice.SliceHint String[] hints) {"
         errorLine2="                                             ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="383"
+            column="46"/>
     </issue>
 
     <issue
@@ -1348,7 +1606,9 @@
         errorLine1="    public boolean hasAnyHints(@Slice.SliceHint String... hints) {"
         errorLine2="                                                ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="397"
+            column="49"/>
     </issue>
 
     <issue
@@ -1357,7 +1617,9 @@
         errorLine1="    public static String typeToString(String format) {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="466"
+            column="19"/>
     </issue>
 
     <issue
@@ -1366,7 +1628,9 @@
         errorLine1="    public static String typeToString(String format) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="466"
+            column="39"/>
     </issue>
 
     <issue
@@ -1375,7 +1639,9 @@
         errorLine1="    public String toString(String indent) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="500"
+            column="12"/>
     </issue>
 
     <issue
@@ -1384,7 +1650,9 @@
         errorLine1="    public String toString(String indent) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="500"
+            column="28"/>
     </issue>
 
     <issue
@@ -1393,7 +1661,9 @@
         errorLine1="        void onAction(SliceItem item, Context context, Intent intent);"
         errorLine2="                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="715"
+            column="23"/>
     </issue>
 
     <issue
@@ -1402,7 +1672,9 @@
         errorLine1="        void onAction(SliceItem item, Context context, Intent intent);"
         errorLine2="                                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="715"
+            column="39"/>
     </issue>
 
     <issue
@@ -1411,7 +1683,9 @@
         errorLine1="        void onAction(SliceItem item, Context context, Intent intent);"
         errorLine2="                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
+            file="src/main/java/androidx/slice/SliceItem.java"
+            line="715"
+            column="56"/>
     </issue>
 
     <issue
@@ -1420,7 +1694,9 @@
         errorLine1="    public static HolderHandler sHandler;"
         errorLine2="                  ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="54"
+            column="19"/>
     </issue>
 
     <issue
@@ -1429,7 +1705,9 @@
         errorLine1="    public VersionedParcelable mVersionedParcelable = null;"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="58"
+            column="12"/>
     </issue>
 
     <issue
@@ -1438,7 +1716,9 @@
         errorLine1="    public SliceItemHolder(String format, Object mObj, boolean isStream) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="89"
+            column="28"/>
     </issue>
 
     <issue
@@ -1447,7 +1727,9 @@
         errorLine1="    public SliceItemHolder(String format, Object mObj, boolean isStream) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="89"
+            column="43"/>
     </issue>
 
     <issue
@@ -1456,7 +1738,9 @@
         errorLine1="    public Object getObj(String format) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="128"
+            column="12"/>
     </issue>
 
     <issue
@@ -1465,7 +1749,9 @@
         errorLine1="    public Object getObj(String format) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="128"
+            column="26"/>
     </issue>
 
     <issue
@@ -1474,7 +1760,9 @@
         errorLine1="        void handle(SliceItemHolder holder, String format);"
         errorLine2="                    ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="162"
+            column="21"/>
     </issue>
 
     <issue
@@ -1483,7 +1771,9 @@
         errorLine1="        void handle(SliceItemHolder holder, String format);"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="162"
+            column="45"/>
     </issue>
 
     <issue
@@ -1492,7 +1782,9 @@
         errorLine1="        public SliceItemHolder get() {"
         errorLine2="               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="175"
+            column="16"/>
     </issue>
 
     <issue
@@ -1501,7 +1793,9 @@
         errorLine1="        public void release(SliceItemHolder sliceItemHolder) {"
         errorLine2="                            ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+            file="src/main/java/androidx/slice/SliceItemHolder.java"
+            line="185"
+            column="29"/>
     </issue>
 
     <issue
@@ -1510,7 +1804,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SlicePermissionActivity.java"/>
+            file="src/main/java/androidx/slice/compat/SlicePermissionActivity.java"
+            line="60"
+            column="29"/>
     </issue>
 
     <issue
@@ -1519,7 +1815,9 @@
         errorLine1="        public SliceProviderWrapper(androidx.slice.SliceProvider provider,"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+            line="64"
+            column="37"/>
     </issue>
 
     <issue
@@ -1528,7 +1826,9 @@
         errorLine1="                String[] autoGrantPermissions) {"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+            line="65"
+            column="17"/>
     </issue>
 
     <issue
@@ -1537,7 +1837,9 @@
         errorLine1="        public PendingIntent onCreatePermissionRequest(Uri sliceUri) {"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+            line="85"
+            column="16"/>
     </issue>
 
     <issue
@@ -1546,7 +1848,9 @@
         errorLine1="        public Bundle call(String method, String arg, Bundle extras) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+            line="99"
+            column="16"/>
     </issue>
 
     <issue
@@ -1555,7 +1859,9 @@
         errorLine1="        public Bundle call(String method, String arg, Bundle extras) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+            line="99"
+            column="28"/>
     </issue>
 
     <issue
@@ -1564,7 +1870,9 @@
         errorLine1="        public Bundle call(String method, String arg, Bundle extras) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+            line="99"
+            column="43"/>
     </issue>
 
     <issue
@@ -1573,7 +1881,9 @@
         errorLine1="        public Bundle call(String method, String arg, Bundle extras) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+            line="99"
+            column="55"/>
     </issue>
 
     <issue
@@ -1582,7 +1892,9 @@
         errorLine1="        public Collection&lt;Uri> onGetSliceDescendants(Uri uri) {"
         errorLine2="               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+            line="165"
+            column="16"/>
     </issue>
 
     <issue
@@ -1591,7 +1903,9 @@
         errorLine1="        public Collection&lt;Uri> onGetSliceDescendants(Uri uri) {"
         errorLine2="                                                     ~~~">
         <location
-            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+            file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+            line="165"
+            column="54"/>
     </issue>
 
     <issue
@@ -1600,7 +1914,9 @@
         errorLine1="    public static boolean hasAnyHints(SliceItem item, String... hints) {"
         errorLine2="                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="46"
+            column="39"/>
     </issue>
 
     <issue
@@ -1609,7 +1925,9 @@
         errorLine1="    public static boolean hasAnyHints(SliceItem item, String... hints) {"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="46"
+            column="55"/>
     </issue>
 
     <issue
@@ -1618,7 +1936,9 @@
         errorLine1="    public static boolean hasHints(SliceItem item, String... hints) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="58"
+            column="36"/>
     </issue>
 
     <issue
@@ -1627,7 +1947,9 @@
         errorLine1="    public static boolean hasHints(SliceItem item, String... hints) {"
         errorLine2="                                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="58"
+            column="52"/>
     </issue>
 
     <issue
@@ -1636,7 +1958,9 @@
         errorLine1="    public static boolean hasHints(Slice item, String... hints) {"
         errorLine2="                                   ~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="70"
+            column="36"/>
     </issue>
 
     <issue
@@ -1645,7 +1969,9 @@
         errorLine1="    public static boolean hasHints(Slice item, String... hints) {"
         errorLine2="                                               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="70"
+            column="48"/>
     </issue>
 
     <issue
@@ -1654,7 +1980,9 @@
         errorLine1="    public static SliceItem findNotContaining(SliceItem container, List&lt;SliceItem> list) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="82"
+            column="19"/>
     </issue>
 
     <issue
@@ -1663,7 +1991,9 @@
         errorLine1="    public static SliceItem findNotContaining(SliceItem container, List&lt;SliceItem> list) {"
         errorLine2="                                              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="82"
+            column="47"/>
     </issue>
 
     <issue
@@ -1672,7 +2002,9 @@
         errorLine1="    public static SliceItem findNotContaining(SliceItem container, List&lt;SliceItem> list) {"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="82"
+            column="68"/>
     </issue>
 
     <issue
@@ -1681,7 +2013,9 @@
         errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format) {"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="107"
+            column="19"/>
     </issue>
 
     <issue
@@ -1690,7 +2024,9 @@
         errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format) {"
         errorLine2="                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="107"
+            column="43"/>
     </issue>
 
     <issue
@@ -1699,7 +2035,9 @@
         errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format) {"
         errorLine2="                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="107"
+            column="56"/>
     </issue>
 
     <issue
@@ -1708,7 +2046,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="113"
+            column="19"/>
     </issue>
 
     <issue
@@ -1717,7 +2057,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="113"
+            column="43"/>
     </issue>
 
     <issue
@@ -1726,7 +2068,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="113"
+            column="52"/>
     </issue>
 
     <issue
@@ -1735,7 +2079,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="113"
+            column="67"/>
     </issue>
 
     <issue
@@ -1744,7 +2090,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="113"
+            column="81"/>
     </issue>
 
     <issue
@@ -1753,7 +2101,9 @@
         errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format, String hints,"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="119"
+            column="19"/>
     </issue>
 
     <issue
@@ -1762,7 +2112,9 @@
         errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format, String hints,"
         errorLine2="                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="119"
+            column="43"/>
     </issue>
 
     <issue
@@ -1771,7 +2123,9 @@
         errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format, String hints,"
         errorLine2="                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="119"
+            column="56"/>
     </issue>
 
     <issue
@@ -1780,7 +2134,9 @@
         errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format, String hints,"
         errorLine2="                                                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="119"
+            column="71"/>
     </issue>
 
     <issue
@@ -1789,7 +2145,9 @@
         errorLine1="            String nonHints) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="120"
+            column="13"/>
     </issue>
 
     <issue
@@ -1798,7 +2156,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="126"
+            column="19"/>
     </issue>
 
     <issue
@@ -1807,7 +2167,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="126"
+            column="43"/>
     </issue>
 
     <issue
@@ -1816,7 +2178,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="126"
+            column="58"/>
     </issue>
 
     <issue
@@ -1825,7 +2189,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="126"
+            column="79"/>
     </issue>
 
     <issue
@@ -1834,7 +2200,9 @@
         errorLine1="            final String[] nonHints) {"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="127"
+            column="19"/>
     </issue>
 
     <issue
@@ -1843,7 +2211,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="141"
+            column="19"/>
     </issue>
 
     <issue
@@ -1852,7 +2222,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="141"
+            column="43"/>
     </issue>
 
     <issue
@@ -1861,7 +2233,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="141"
+            column="62"/>
     </issue>
 
     <issue
@@ -1870,7 +2244,9 @@
         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"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="141"
+            column="83"/>
     </issue>
 
     <issue
@@ -1879,7 +2255,9 @@
         errorLine1="            final String[] nonHints) {"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="142"
+            column="19"/>
     </issue>
 
     <issue
@@ -1888,7 +2266,9 @@
         errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="156"
+            column="19"/>
     </issue>
 
     <issue
@@ -1897,7 +2277,9 @@
         errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
         errorLine2="                                 ~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="156"
+            column="34"/>
     </issue>
 
     <issue
@@ -1906,7 +2288,9 @@
         errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="156"
+            column="43"/>
     </issue>
 
     <issue
@@ -1915,7 +2299,9 @@
         errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
         errorLine2="                                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="156"
+            column="58"/>
     </issue>
 
     <issue
@@ -1924,7 +2310,9 @@
         errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="156"
+            column="72"/>
     </issue>
 
     <issue
@@ -1933,7 +2321,9 @@
         errorLine1="    public static SliceItem find(Slice s, String format) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="162"
+            column="19"/>
     </issue>
 
     <issue
@@ -1942,7 +2332,9 @@
         errorLine1="    public static SliceItem find(Slice s, String format) {"
         errorLine2="                                 ~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="162"
+            column="34"/>
     </issue>
 
     <issue
@@ -1951,7 +2343,9 @@
         errorLine1="    public static SliceItem find(Slice s, String format) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="162"
+            column="43"/>
     </issue>
 
     <issue
@@ -1960,7 +2354,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, String format) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="168"
+            column="19"/>
     </issue>
 
     <issue
@@ -1969,7 +2365,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, String format) {"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="168"
+            column="34"/>
     </issue>
 
     <issue
@@ -1978,7 +2376,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, String format) {"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="168"
+            column="47"/>
     </issue>
 
     <issue
@@ -1987,7 +2387,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="174"
+            column="19"/>
     </issue>
 
     <issue
@@ -1996,7 +2398,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="174"
+            column="34"/>
     </issue>
 
     <issue
@@ -2005,7 +2409,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="174"
+            column="47"/>
     </issue>
 
     <issue
@@ -2014,7 +2420,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
         errorLine2="                                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="174"
+            column="62"/>
     </issue>
 
     <issue
@@ -2023,7 +2431,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
         errorLine2="                                                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="174"
+            column="76"/>
     </issue>
 
     <issue
@@ -2032,7 +2442,9 @@
         errorLine1="    public static SliceItem find(Slice s, final String format, final String[] hints,"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="180"
+            column="19"/>
     </issue>
 
     <issue
@@ -2041,7 +2453,9 @@
         errorLine1="    public static SliceItem find(Slice s, final String format, final String[] hints,"
         errorLine2="                                 ~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="180"
+            column="34"/>
     </issue>
 
     <issue
@@ -2050,7 +2464,9 @@
         errorLine1="    public static SliceItem find(Slice s, final String format, final String[] hints,"
         errorLine2="                                                ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="180"
+            column="49"/>
     </issue>
 
     <issue
@@ -2059,7 +2475,9 @@
         errorLine1="    public static SliceItem find(Slice s, final String format, final String[] hints,"
         errorLine2="                                                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="180"
+            column="70"/>
     </issue>
 
     <issue
@@ -2068,7 +2486,9 @@
         errorLine1="            final String[] nonHints) {"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="181"
+            column="19"/>
     </issue>
 
     <issue
@@ -2077,7 +2497,9 @@
         errorLine1="    public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="194"
+            column="19"/>
     </issue>
 
     <issue
@@ -2086,7 +2508,9 @@
         errorLine1="    public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
         errorLine2="                                        ~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="194"
+            column="41"/>
     </issue>
 
     <issue
@@ -2095,7 +2519,9 @@
         errorLine1="    public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
         errorLine2="                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="194"
+            column="56"/>
     </issue>
 
     <issue
@@ -2104,7 +2530,9 @@
         errorLine1="    public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
         errorLine2="                                                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="194"
+            column="77"/>
     </issue>
 
     <issue
@@ -2113,7 +2541,9 @@
         errorLine1="    public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="206"
+            column="19"/>
     </issue>
 
     <issue
@@ -2122,7 +2552,9 @@
         errorLine1="    public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
         errorLine2="                                        ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="206"
+            column="41"/>
     </issue>
 
     <issue
@@ -2131,7 +2563,9 @@
         errorLine1="    public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
         errorLine2="                                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="206"
+            column="60"/>
     </issue>
 
     <issue
@@ -2140,7 +2574,9 @@
         errorLine1="    public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
         errorLine2="                                                                                ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="206"
+            column="81"/>
     </issue>
 
     <issue
@@ -2149,7 +2585,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, final String format, final String[] hints,"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="218"
+            column="19"/>
     </issue>
 
     <issue
@@ -2158,7 +2596,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, final String format, final String[] hints,"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="218"
+            column="34"/>
     </issue>
 
     <issue
@@ -2167,7 +2607,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, final String format, final String[] hints,"
         errorLine2="                                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="218"
+            column="53"/>
     </issue>
 
     <issue
@@ -2176,7 +2618,9 @@
         errorLine1="    public static SliceItem find(SliceItem s, final String format, final String[] hints,"
         errorLine2="                                                                         ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="218"
+            column="74"/>
     </issue>
 
     <issue
@@ -2185,7 +2629,9 @@
         errorLine1="            final String[] nonHints) {"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="219"
+            column="19"/>
     </issue>
 
     <issue
@@ -2194,7 +2640,9 @@
         errorLine1="    public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="283"
+            column="19"/>
     </issue>
 
     <issue
@@ -2203,7 +2651,9 @@
         errorLine1="    public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
         errorLine2="                                             ~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="283"
+            column="46"/>
     </issue>
 
     <issue
@@ -2212,7 +2662,9 @@
         errorLine1="    public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
         errorLine2="                                                            ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="283"
+            column="61"/>
     </issue>
 
     <issue
@@ -2221,7 +2673,9 @@
         errorLine1="    public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
         errorLine2="                                                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="283"
+            column="82"/>
     </issue>
 
     <issue
@@ -2230,7 +2684,9 @@
         errorLine1="            final String[] hints, final String[] nonHints) {"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="284"
+            column="19"/>
     </issue>
 
     <issue
@@ -2239,7 +2695,9 @@
         errorLine1="            final String[] hints, final String[] nonHints) {"
         errorLine2="                                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="284"
+            column="41"/>
     </issue>
 
     <issue
@@ -2248,7 +2706,9 @@
         errorLine1="    public static SliceItem findItem(Slice s, final Uri uri) {"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="302"
+            column="19"/>
     </issue>
 
     <issue
@@ -2257,7 +2717,9 @@
         errorLine1="    public static SliceItem findItem(Slice s, final Uri uri) {"
         errorLine2="                                     ~~~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="302"
+            column="38"/>
     </issue>
 
     <issue
@@ -2266,7 +2728,9 @@
         errorLine1="    public static SliceItem findItem(Slice s, final Uri uri) {"
         errorLine2="                                                    ~~~">
         <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+            file="src/main/java/androidx/slice/core/SliceQuery.java"
+            line="302"
+            column="53"/>
     </issue>
 
     <issue
@@ -2275,7 +2739,9 @@
         errorLine1="    public String getType() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceSpec.java"/>
+            file="src/main/java/androidx/slice/SliceSpec.java"
+            line="72"
+            column="12"/>
     </issue>
 
 </issues>
diff --git a/slice/slice-view/lint-baseline.xml b/slice/slice-view/lint-baseline.xml
index fc94cc9..6a92e7c 100644
--- a/slice/slice-view/lint-baseline.xml
+++ b/slice/slice-view/lint-baseline.xml
@@ -241,7 +241,9 @@
         errorLine1="    public static void trackInputFocused(ViewGroup parent) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
+            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"
+            line="116"
+            column="42"/>
     </issue>
 
     <issue
@@ -250,7 +252,9 @@
         errorLine1="    public static void trackA11yFocus(ViewGroup parent) {"
         errorLine2="                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
+            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"
+            line="128"
+            column="39"/>
     </issue>
 
     <issue
@@ -259,7 +263,9 @@
         errorLine1="    public MessageView(Context context) {"
         errorLine2="                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/MessageView.java"/>
+            file="src/main/java/androidx/slice/widget/MessageView.java"
+            line="49"
+            column="24"/>
     </issue>
 
     <issue
@@ -268,7 +274,9 @@
         errorLine1="    public void setSliceItem(SliceContent content, boolean isHeader, int index,"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/MessageView.java"/>
+            file="src/main/java/androidx/slice/widget/MessageView.java"
+            line="71"
+            column="30"/>
     </issue>
 
     <issue
@@ -277,7 +285,9 @@
         errorLine1="            int rowCount, SliceView.OnSliceActionListener observer) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/MessageView.java"/>
+            file="src/main/java/androidx/slice/widget/MessageView.java"
+            line="72"
+            column="27"/>
     </issue>
 
     <issue
@@ -286,7 +296,9 @@
         errorLine1="    public RemoteInputView(Context context, AttributeSet attrs) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="88"
+            column="28"/>
     </issue>
 
     <issue
@@ -295,7 +307,9 @@
         errorLine1="    public RemoteInputView(Context context, AttributeSet attrs) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="88"
+            column="45"/>
     </issue>
 
     <issue
@@ -304,7 +318,9 @@
         errorLine1="    public static RemoteInputView inflate(Context context, ViewGroup root) {"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="163"
+            column="19"/>
     </issue>
 
     <issue
@@ -313,7 +329,9 @@
         errorLine1="    public static RemoteInputView inflate(Context context, ViewGroup root) {"
         errorLine2="                                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="163"
+            column="43"/>
     </issue>
 
     <issue
@@ -322,7 +340,9 @@
         errorLine1="    public static RemoteInputView inflate(Context context, ViewGroup root) {"
         errorLine2="                                                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="163"
+            column="60"/>
     </issue>
 
     <issue
@@ -331,7 +351,9 @@
         errorLine1="    public void setAction(SliceItem action) {"
         errorLine2="                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="192"
+            column="27"/>
     </issue>
 
     <issue
@@ -340,7 +362,9 @@
         errorLine1="    public void setRemoteInput(RemoteInput[] remoteInputs, RemoteInput remoteInput) {"
         errorLine2="                               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="199"
+            column="32"/>
     </issue>
 
     <issue
@@ -349,7 +373,9 @@
         errorLine1="    public void setRemoteInput(RemoteInput[] remoteInputs, RemoteInput remoteInput) {"
         errorLine2="                                                           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="199"
+            column="60"/>
     </issue>
 
     <issue
@@ -358,7 +384,9 @@
         errorLine1="        public RemoteEditText(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="306"
+            column="31"/>
     </issue>
 
     <issue
@@ -367,7 +395,9 @@
         errorLine1="        public RemoteEditText(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="306"
+            column="48"/>
     </issue>
 
     <issue
@@ -376,7 +406,9 @@
         errorLine1="        protected void onVisibilityChanged(View changedView, int visibility) {"
         errorLine2="                                           ~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="336"
+            column="44"/>
     </issue>
 
     <issue
@@ -385,7 +417,9 @@
         errorLine1="        protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {"
         errorLine2="                                                                      ~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+            file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+            line="345"
+            column="71"/>
     </issue>
 
     <issue
@@ -394,7 +428,9 @@
         errorLine1="    public RowContent(SliceItem rowSlice, int position) {"
         errorLine2="                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowContent.java"/>
+            file="src/main/java/androidx/slice/widget/RowContent.java"
+            line="82"
+            column="23"/>
     </issue>
 
     <issue
@@ -403,7 +439,9 @@
         errorLine1="    public List&lt;SliceItem> getEndItems() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowContent.java"/>
+            file="src/main/java/androidx/slice/widget/RowContent.java"
+            line="337"
+            column="12"/>
     </issue>
 
     <issue
@@ -412,7 +450,9 @@
         errorLine1="    public List&lt;SliceAction> getToggleItems() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowContent.java"/>
+            file="src/main/java/androidx/slice/widget/RowContent.java"
+            line="344"
+            column="12"/>
     </issue>
 
     <issue
@@ -421,7 +461,9 @@
         errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
         errorLine2="                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowContent.java"/>
+            file="src/main/java/androidx/slice/widget/RowContent.java"
+            line="360"
+            column="26"/>
     </issue>
 
     <issue
@@ -430,7 +472,9 @@
         errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowContent.java"/>
+            file="src/main/java/androidx/slice/widget/RowContent.java"
+            line="360"
+            column="44"/>
     </issue>
 
     <issue
@@ -439,7 +483,9 @@
         errorLine1="    public RowStyle(Context context, int resId, @NonNull SliceStyle sliceStyle) {"
         errorLine2="                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowStyle.java"/>
+            file="src/main/java/androidx/slice/widget/RowStyle.java"
+            line="74"
+            column="21"/>
     </issue>
 
     <issue
@@ -448,7 +494,9 @@
         errorLine1="    protected Set&lt;SliceItem> mLoadingActions = new HashSet&lt;>();"
         errorLine2="              ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowView.java"/>
+            file="src/main/java/androidx/slice/widget/RowView.java"
+            line="165"
+            column="15"/>
     </issue>
 
     <issue
@@ -457,7 +505,9 @@
         errorLine1="    public void setStyle(SliceStyle styles, RowStyle rowStyle) {"
         errorLine2="                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowView.java"/>
+            file="src/main/java/androidx/slice/widget/RowView.java"
+            line="243"
+            column="26"/>
     </issue>
 
     <issue
@@ -466,7 +516,9 @@
         errorLine1="    public void setStyle(SliceStyle styles, RowStyle rowStyle) {"
         errorLine2="                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowView.java"/>
+            file="src/main/java/androidx/slice/widget/RowView.java"
+            line="243"
+            column="45"/>
     </issue>
 
     <issue
@@ -475,7 +527,9 @@
         errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowView.java"/>
+            file="src/main/java/androidx/slice/widget/RowView.java"
+            line="409"
+            column="33"/>
     </issue>
 
     <issue
@@ -484,7 +538,9 @@
         errorLine1="    public void setLoadingActions(Set&lt;SliceItem> actions) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/RowView.java"/>
+            file="src/main/java/androidx/slice/widget/RowView.java"
+            line="1155"
+            column="35"/>
     </issue>
 
     <issue
@@ -493,7 +549,9 @@
         errorLine1="    public ShortcutView(Context context) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
+            file="src/main/java/androidx/slice/widget/ShortcutView.java"
+            line="58"
+            column="25"/>
     </issue>
 
     <issue
@@ -502,7 +560,9 @@
         errorLine1="    public void setSliceContent(ListContent sliceContent) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
+            file="src/main/java/androidx/slice/widget/ShortcutView.java"
+            line="66"
+            column="33"/>
     </issue>
 
     <issue
@@ -511,7 +571,9 @@
         errorLine1="    public void setLoadingActions(Set&lt;SliceItem> actions) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
+            file="src/main/java/androidx/slice/widget/ShortcutView.java"
+            line="133"
+            column="35"/>
     </issue>
 
     <issue
@@ -520,7 +582,9 @@
         errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
+            file="src/main/java/androidx/slice/widget/ShortcutView.java"
+            line="138"
+            column="12"/>
     </issue>
 
     <issue
@@ -529,7 +593,9 @@
         errorLine1="    public SliceActionView(Context context, SliceStyle style, RowStyle rowStyle) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceActionView.java"
+            line="86"
+            column="28"/>
     </issue>
 
     <issue
@@ -538,7 +604,9 @@
         errorLine1="    public SliceActionView(Context context, SliceStyle style, RowStyle rowStyle) {"
         errorLine2="                                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceActionView.java"
+            line="86"
+            column="45"/>
     </issue>
 
     <issue
@@ -547,7 +615,9 @@
         errorLine1="    public SliceActionView(Context context, SliceStyle style, RowStyle rowStyle) {"
         errorLine2="                                                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceActionView.java"
+            line="86"
+            column="63"/>
     </issue>
 
     <issue
@@ -556,7 +626,9 @@
         errorLine1="    public void setAction(@NonNull SliceActionImpl action, EventInfo info,"
         errorLine2="                                                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceActionView.java"
+            line="102"
+            column="60"/>
     </issue>
 
     <issue
@@ -565,7 +637,9 @@
         errorLine1="            SliceView.OnSliceActionListener listener, int color,"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceActionView.java"
+            line="103"
+            column="13"/>
     </issue>
 
     <issue
@@ -574,7 +648,9 @@
         errorLine1="            SliceActionLoadingListener loadingListener) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceActionView.java"
+            line="104"
+            column="13"/>
     </issue>
 
     <issue
@@ -583,7 +659,9 @@
         errorLine1="    public void setParents(SliceView parent, TemplateView templateView) {"
         errorLine2="                           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="107"
+            column="28"/>
     </issue>
 
     <issue
@@ -592,7 +670,9 @@
         errorLine1="    public void setParents(SliceView parent, TemplateView templateView) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="107"
+            column="46"/>
     </issue>
 
     <issue
@@ -601,7 +681,9 @@
         errorLine1="    public void setSliceObserver(SliceView.OnSliceActionListener observer) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="129"
+            column="34"/>
     </issue>
 
     <issue
@@ -610,7 +692,9 @@
         errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="137"
+            column="33"/>
     </issue>
 
     <issue
@@ -619,7 +703,9 @@
         errorLine1="    public void setSliceItems(List&lt;SliceContent> slices, int color, int mode) {"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="146"
+            column="31"/>
     </issue>
 
     <issue
@@ -628,7 +714,9 @@
         errorLine1="    public void setStyle(SliceStyle style) {"
         errorLine2="                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="165"
+            column="26"/>
     </issue>
 
     <issue
@@ -637,7 +725,9 @@
         errorLine1="    public void setPolicy(SliceViewPolicy p) {"
         errorLine2="                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="174"
+            column="27"/>
     </issue>
 
     <issue
@@ -646,7 +736,9 @@
         errorLine1="    public void setLoadingActions(Set&lt;SliceItem> actions) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="204"
+            column="35"/>
     </issue>
 
     <issue
@@ -655,7 +747,9 @@
         errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="217"
+            column="12"/>
     </issue>
 
     <issue
@@ -664,7 +758,9 @@
         errorLine1="    public void onSliceActionLoading(SliceItem actionItem, int position) {"
         errorLine2="                                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="225"
+            column="38"/>
     </issue>
 
     <issue
@@ -673,7 +769,9 @@
         errorLine1="        public SliceViewHolder(View itemView) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+            file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+            line="363"
+            column="32"/>
     </issue>
 
     <issue
@@ -682,7 +780,9 @@
         errorLine1="    protected SliceView.OnSliceActionListener mObserver;"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="45"
+            column="15"/>
     </issue>
 
     <issue
@@ -691,7 +791,9 @@
         errorLine1="    protected SliceActionView.SliceActionLoadingListener mLoadingListener;"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="81"
+            column="15"/>
     </issue>
 
     <issue
@@ -700,7 +802,9 @@
         errorLine1="    protected SliceStyle mSliceStyle;"
         errorLine2="              ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="85"
+            column="15"/>
     </issue>
 
     <issue
@@ -709,7 +813,9 @@
         errorLine1="    protected RowStyle mRowStyle;"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="89"
+            column="15"/>
     </issue>
 
     <issue
@@ -718,7 +824,9 @@
         errorLine1="    protected SliceViewPolicy mViewPolicy;"
         errorLine2="              ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="93"
+            column="15"/>
     </issue>
 
     <issue
@@ -727,7 +835,9 @@
         errorLine1="    public void setSliceContent(ListContent content) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="113"
+            column="33"/>
     </issue>
 
     <issue
@@ -736,7 +846,9 @@
         errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="142"
+            column="33"/>
     </issue>
 
     <issue
@@ -745,7 +857,9 @@
         errorLine1="    public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="186"
+            column="40"/>
     </issue>
 
     <issue
@@ -754,7 +868,9 @@
         errorLine1="    public void setSliceActionLoadingListener(SliceActionView.SliceActionLoadingListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="194"
+            column="47"/>
     </issue>
 
     <issue
@@ -763,7 +879,9 @@
         errorLine1="    public void setActionLoading(SliceItem item) {"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="203"
+            column="34"/>
     </issue>
 
     <issue
@@ -772,7 +890,9 @@
         errorLine1="    public void setLoadingActions(Set&lt;SliceItem> loadingActions) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="211"
+            column="35"/>
     </issue>
 
     <issue
@@ -781,7 +901,9 @@
         errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="227"
+            column="12"/>
     </issue>
 
     <issue
@@ -790,7 +912,9 @@
         errorLine1="    public void setStyle(SliceStyle styles, @NonNull RowStyle rowStyle) {"
         errorLine2="                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceChildView.java"
+            line="236"
+            column="26"/>
     </issue>
 
     <issue
@@ -799,7 +923,9 @@
         errorLine1="    protected SliceItem mSliceItem;"
         errorLine2="              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+            file="src/main/java/androidx/slice/widget/SliceContent.java"
+            line="63"
+            column="15"/>
     </issue>
 
     <issue
@@ -808,7 +934,9 @@
         errorLine1="    protected SliceItem mColorItem;"
         errorLine2="              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+            file="src/main/java/androidx/slice/widget/SliceContent.java"
+            line="67"
+            column="15"/>
     </issue>
 
     <issue
@@ -817,7 +945,9 @@
         errorLine1="    protected SliceItem mLayoutDirItem;"
         errorLine2="              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+            file="src/main/java/androidx/slice/widget/SliceContent.java"
+            line="71"
+            column="15"/>
     </issue>
 
     <issue
@@ -826,7 +956,9 @@
         errorLine1="    protected SliceItem mContentDescr;"
         errorLine2="              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+            file="src/main/java/androidx/slice/widget/SliceContent.java"
+            line="75"
+            column="15"/>
     </issue>
 
     <issue
@@ -835,7 +967,9 @@
         errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
         errorLine2="                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+            file="src/main/java/androidx/slice/widget/SliceContent.java"
+            line="154"
+            column="26"/>
     </issue>
 
     <issue
@@ -844,7 +978,9 @@
         errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+            file="src/main/java/androidx/slice/widget/SliceContent.java"
+            line="154"
+            column="44"/>
     </issue>
 
     <issue
@@ -853,7 +989,9 @@
         errorLine1="            @NonNull InputStream input, OnErrorListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
+            file="src/main/java/androidx/slice/widget/SliceLiveData.java"
+            line="127"
+            column="41"/>
     </issue>
 
     <issue
@@ -862,7 +1000,9 @@
         errorLine1="            @NonNull InputStream input, OnErrorListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
+            file="src/main/java/androidx/slice/widget/SliceLiveData.java"
+            line="136"
+            column="41"/>
     </issue>
 
     <issue
@@ -871,7 +1011,9 @@
         errorLine1="            SliceViewManager manager, @NonNull InputStream input, OnErrorListener listener) {"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
+            file="src/main/java/androidx/slice/widget/SliceLiveData.java"
+            line="147"
+            column="13"/>
     </issue>
 
     <issue
@@ -880,7 +1022,9 @@
         errorLine1="            SliceViewManager manager, @NonNull InputStream input, OnErrorListener listener) {"
         errorLine2="                                                                  ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
+            file="src/main/java/androidx/slice/widget/SliceLiveData.java"
+            line="147"
+            column="67"/>
     </issue>
 
     <issue
@@ -889,7 +1033,9 @@
         errorLine1="    public List&lt;SliceAction> getToggles() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceMetadata.java"/>
+            file="src/main/java/androidx/slice/SliceMetadata.java"
+            line="246"
+            column="12"/>
     </issue>
 
     <issue
@@ -898,7 +1044,9 @@
         errorLine1="    public boolean sendToggleAction(SliceAction toggleAction, boolean toggleValue)"
         errorLine2="                                    ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceMetadata.java"/>
+            file="src/main/java/androidx/slice/SliceMetadata.java"
+            line="276"
+            column="37"/>
     </issue>
 
     <issue
@@ -907,7 +1055,9 @@
         errorLine1="    public ListContent getListContent() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceMetadata.java"/>
+            file="src/main/java/androidx/slice/SliceMetadata.java"
+            line="523"
+            column="12"/>
     </issue>
 
     <issue
@@ -916,7 +1066,9 @@
         errorLine1="    public SliceStructure(Slice s) {"
         errorLine2="                          ~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceStructure.java"/>
+            file="src/main/java/androidx/slice/SliceStructure.java"
+            line="50"
+            column="27"/>
     </issue>
 
     <issue
@@ -925,7 +1077,9 @@
         errorLine1="    public SliceStructure(SliceItem s) {"
         errorLine2="                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceStructure.java"/>
+            file="src/main/java/androidx/slice/SliceStructure.java"
+            line="62"
+            column="27"/>
     </issue>
 
     <issue
@@ -934,7 +1088,9 @@
         errorLine1="    public SliceStyle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="96"
+            column="23"/>
     </issue>
 
     <issue
@@ -943,7 +1099,9 @@
         errorLine1="    public SliceStyle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="96"
+            column="40"/>
     </issue>
 
     <issue
@@ -952,7 +1110,9 @@
         errorLine1="    public int getRowHeight(RowContent row, SliceViewPolicy policy) {"
         errorLine2="                            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="323"
+            column="29"/>
     </issue>
 
     <issue
@@ -961,7 +1121,9 @@
         errorLine1="    public int getRowHeight(RowContent row, SliceViewPolicy policy) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="323"
+            column="45"/>
     </issue>
 
     <issue
@@ -970,7 +1132,9 @@
         errorLine1="    public int getGridHeight(GridContent grid, SliceViewPolicy policy) {"
         errorLine2="                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="361"
+            column="30"/>
     </issue>
 
     <issue
@@ -979,7 +1143,9 @@
         errorLine1="    public int getGridHeight(GridContent grid, SliceViewPolicy policy) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="361"
+            column="48"/>
     </issue>
 
     <issue
@@ -988,7 +1154,9 @@
         errorLine1="    public int getListHeight(ListContent list, SliceViewPolicy policy) {"
         errorLine2="                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="401"
+            column="30"/>
     </issue>
 
     <issue
@@ -997,7 +1165,9 @@
         errorLine1="    public int getListHeight(ListContent list, SliceViewPolicy policy) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="401"
+            column="48"/>
     </issue>
 
     <issue
@@ -1006,7 +1176,9 @@
         errorLine1="    public int getListItemsHeight(List&lt;SliceContent> listItems, SliceViewPolicy policy) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="432"
+            column="35"/>
     </issue>
 
     <issue
@@ -1015,7 +1187,9 @@
         errorLine1="    public int getListItemsHeight(List&lt;SliceContent> listItems, SliceViewPolicy policy) {"
         errorLine2="                                                                ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="432"
+            column="65"/>
     </issue>
 
     <issue
@@ -1024,7 +1198,9 @@
         errorLine1="    public DisplayedListItems getListItemsForNonScrollingList(ListContent list,"
         errorLine2="                                                              ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="459"
+            column="63"/>
     </issue>
 
     <issue
@@ -1033,7 +1209,9 @@
         errorLine1="                                                             SliceViewPolicy policy) {"
         errorLine2="                                                             ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+            file="src/main/java/androidx/slice/widget/SliceStyle.java"
+            line="461"
+            column="62"/>
     </issue>
 
     <issue
@@ -1042,7 +1220,9 @@
         errorLine1="    public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
         errorLine2="                  ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="245"
+            column="19"/>
     </issue>
 
     <issue
@@ -1051,7 +1231,9 @@
         errorLine1="    public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="245"
+            column="38"/>
     </issue>
 
     <issue
@@ -1060,7 +1242,9 @@
         errorLine1="    public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
         errorLine2="                                                      ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="245"
+            column="55"/>
     </issue>
 
     <issue
@@ -1069,7 +1253,9 @@
         errorLine1="    public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
         errorLine2="                                                                       ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="245"
+            column="72"/>
     </issue>
 
     <issue
@@ -1078,7 +1264,9 @@
         errorLine1="        public void checkThrow(String format) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="383"
+            column="32"/>
     </issue>
 
     <issue
@@ -1087,7 +1275,9 @@
         errorLine1="        public Bitmap.CompressFormat getFormat() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="434"
+            column="16"/>
     </issue>
 
     <issue
@@ -1096,7 +1286,9 @@
         errorLine1="        public SerializeOptions setActionMode(@FormatMode int mode) {"
         errorLine2="               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="453"
+            column="16"/>
     </issue>
 
     <issue
@@ -1105,7 +1297,9 @@
         errorLine1="        public SerializeOptions setImageMode(@FormatMode int mode) {"
         errorLine2="               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="465"
+            column="16"/>
     </issue>
 
     <issue
@@ -1114,7 +1308,9 @@
         errorLine1="        public SerializeOptions setMaxImageWidth(int width) {"
         errorLine2="               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="477"
+            column="16"/>
     </issue>
 
     <issue
@@ -1123,7 +1319,9 @@
         errorLine1="        public SerializeOptions setMaxImageHeight(int height) {"
         errorLine2="               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="489"
+            column="16"/>
     </issue>
 
     <issue
@@ -1132,7 +1330,9 @@
         errorLine1="        public SerializeOptions setImageConversionFormat(Bitmap.CompressFormat format,"
         errorLine2="               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="502"
+            column="16"/>
     </issue>
 
     <issue
@@ -1141,7 +1341,9 @@
         errorLine1="        public SerializeOptions setImageConversionFormat(Bitmap.CompressFormat format,"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="502"
+            column="58"/>
     </issue>
 
     <issue
@@ -1150,7 +1352,9 @@
         errorLine1="        void onSliceAction(Uri actionUri, Context context, Intent intent);"
         errorLine2="                           ~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="523"
+            column="28"/>
     </issue>
 
     <issue
@@ -1159,7 +1363,9 @@
         errorLine1="        void onSliceAction(Uri actionUri, Context context, Intent intent);"
         errorLine2="                                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="523"
+            column="43"/>
     </issue>
 
     <issue
@@ -1168,7 +1374,9 @@
         errorLine1="        void onSliceAction(Uri actionUri, Context context, Intent intent);"
         errorLine2="                                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="523"
+            column="60"/>
     </issue>
 
     <issue
@@ -1177,7 +1385,9 @@
         errorLine1="        public SliceParseException(String s, Throwable e) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="535"
+            column="36"/>
     </issue>
 
     <issue
@@ -1186,7 +1396,9 @@
         errorLine1="        public SliceParseException(String s, Throwable e) {"
         errorLine2="                                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="535"
+            column="46"/>
     </issue>
 
     <issue
@@ -1195,7 +1407,9 @@
         errorLine1="        public SliceParseException(String s) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/SliceUtils.java"/>
+            file="src/main/java/androidx/slice/SliceUtils.java"
+            line="543"
+            column="36"/>
     </issue>
 
     <issue
@@ -1204,7 +1418,9 @@
         errorLine1="    public SliceView(Context context) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="188"
+            column="22"/>
     </issue>
 
     <issue
@@ -1213,7 +1429,9 @@
         errorLine1="    public SliceView(Context context, @Nullable AttributeSet attrs) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="192"
+            column="22"/>
     </issue>
 
     <issue
@@ -1222,7 +1440,9 @@
         errorLine1="    public SliceView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="196"
+            column="22"/>
     </issue>
 
     <issue
@@ -1231,7 +1451,9 @@
         errorLine1="    public SliceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="202"
+            column="22"/>
     </issue>
 
     <issue
@@ -1240,7 +1462,9 @@
         errorLine1="    public SliceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="202"
+            column="39"/>
     </issue>
 
     <issue
@@ -1249,7 +1473,9 @@
         errorLine1="    public void setClickInfo(int[] info) {"
         errorLine2="                             ~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="269"
+            column="30"/>
     </issue>
 
     <issue
@@ -1258,7 +1484,9 @@
         errorLine1="    public void setOnClickListener(View.OnClickListener listener) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="300"
+            column="36"/>
     </issue>
 
     <issue
@@ -1267,7 +1495,9 @@
         errorLine1="    public void setOnLongClickListener(View.OnLongClickListener listener) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="305"
+            column="40"/>
     </issue>
 
     <issue
@@ -1276,7 +1506,9 @@
         errorLine1="    public static String modeToString(@SliceMode int mode) {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="859"
+            column="19"/>
     </issue>
 
     <issue
@@ -1285,7 +1517,9 @@
         errorLine1="    protected void onVisibilityChanged(View changedView, int visibility) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceView.java"/>
+            file="src/main/java/androidx/slice/widget/SliceView.java"
+            line="900"
+            column="40"/>
     </issue>
 
     <issue
@@ -1294,7 +1528,9 @@
         errorLine1="    public void setListener(PolicyChangeListener listener) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewPolicy.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewPolicy.java"
+            line="64"
+            column="29"/>
     </issue>
 
     <issue
@@ -1303,7 +1539,9 @@
         errorLine1="    public static Drawable getDrawable(@NonNull Context context, @AttrRes int attr) {"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="135"
+            column="19"/>
     </issue>
 
     <issue
@@ -1312,7 +1550,9 @@
         errorLine1="    public static IconCompat createIconFromDrawable(Drawable d) {"
         errorLine2="                  ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="146"
+            column="19"/>
     </issue>
 
     <issue
@@ -1321,7 +1561,9 @@
         errorLine1="    public static IconCompat createIconFromDrawable(Drawable d) {"
         errorLine2="                                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="146"
+            column="53"/>
     </issue>
 
     <issue
@@ -1330,7 +1572,9 @@
         errorLine1="            IconCompat icon, boolean isLarge, ViewGroup parent) {"
         errorLine2="            ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="161"
+            column="13"/>
     </issue>
 
     <issue
@@ -1339,7 +1583,9 @@
         errorLine1="            IconCompat icon, boolean isLarge, ViewGroup parent) {"
         errorLine2="                                              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="161"
+            column="47"/>
     </issue>
 
     <issue
@@ -1348,7 +1594,9 @@
         errorLine1="    public static @NonNull Bitmap getCircularBitmap(Bitmap bitmap) {"
         errorLine2="                                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="185"
+            column="53"/>
     </issue>
 
     <issue
@@ -1357,7 +1605,9 @@
         errorLine1="    public static CharSequence getTimestampString(Context context, long time) {"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="202"
+            column="19"/>
     </issue>
 
     <issue
@@ -1366,7 +1616,9 @@
         errorLine1="    public static CharSequence getTimestampString(Context context, long time) {"
         errorLine2="                                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="202"
+            column="51"/>
     </issue>
 
     <issue
@@ -1375,7 +1627,9 @@
         errorLine1="    public static void tintIndeterminateProgressBar(Context context, ProgressBar bar) {"
         errorLine2="                                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="229"
+            column="53"/>
     </issue>
 
     <issue
@@ -1384,7 +1638,9 @@
         errorLine1="    public static void tintIndeterminateProgressBar(Context context, ProgressBar bar) {"
         errorLine2="                                                                     ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+            line="229"
+            column="70"/>
     </issue>
 
     <issue
@@ -1393,7 +1649,9 @@
         errorLine1="    public void onForegroundActivated(MotionEvent event) {"
         errorLine2="                                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+            file="src/main/java/androidx/slice/widget/TemplateView.java"
+            line="116"
+            column="39"/>
     </issue>
 
     <issue
@@ -1402,7 +1660,9 @@
         errorLine1="    public void setPolicy(SliceViewPolicy policy) {"
         errorLine2="                          ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+            file="src/main/java/androidx/slice/widget/TemplateView.java"
+            line="143"
+            column="27"/>
     </issue>
 
     <issue
@@ -1411,7 +1671,9 @@
         errorLine1="    public void setActionLoading(SliceItem item) {"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+            file="src/main/java/androidx/slice/widget/TemplateView.java"
+            line="154"
+            column="34"/>
     </issue>
 
     <issue
@@ -1420,7 +1682,9 @@
         errorLine1="    public void setLoadingActions(Set&lt;SliceItem> loadingActions) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+            file="src/main/java/androidx/slice/widget/TemplateView.java"
+            line="163"
+            column="35"/>
     </issue>
 
     <issue
@@ -1429,7 +1693,9 @@
         errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+            file="src/main/java/androidx/slice/widget/TemplateView.java"
+            line="172"
+            column="12"/>
     </issue>
 
     <issue
@@ -1438,7 +1704,9 @@
         errorLine1="    public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+            file="src/main/java/androidx/slice/widget/TemplateView.java"
+            line="190"
+            column="40"/>
     </issue>
 
     <issue
@@ -1447,7 +1715,9 @@
         errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+            file="src/main/java/androidx/slice/widget/TemplateView.java"
+            line="202"
+            column="33"/>
     </issue>
 
     <issue
@@ -1456,7 +1726,9 @@
         errorLine1="    public void setSliceContent(ListContent sliceContent) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+            file="src/main/java/androidx/slice/widget/TemplateView.java"
+            line="211"
+            column="33"/>
     </issue>
 
     <issue
@@ -1465,7 +1737,9 @@
         errorLine1="    public void setStyle(SliceStyle style, @NonNull RowStyle rowStyle) {"
         errorLine2="                         ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+            file="src/main/java/androidx/slice/widget/TemplateView.java"
+            line="222"
+            column="26"/>
     </issue>
 
 </issues>
diff --git a/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml b/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
index 47e64c7..1a8c9f9 100644
--- a/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
+++ b/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
@@ -208,7 +208,8 @@
         errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
         errorLine2="                                                               ~~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            column="64"/>
     </issue>
 
     <issue
@@ -217,7 +218,9 @@
         errorLine1="    public void onStopNestedScroll(View target) {"
         errorLine2="                                   ~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1000"
+            column="36"/>
     </issue>
 
     <issue
@@ -226,7 +229,9 @@
         errorLine1="    public void onNestedScroll(final View target, final int dxConsumed, final int dyConsumed,"
         errorLine2="                                     ~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1019"
+            column="38"/>
     </issue>
 
     <issue
@@ -235,7 +240,9 @@
         errorLine1="    public boolean onNestedPreFling(View target, float velocityX,"
         errorLine2="                                    ~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1026"
+            column="37"/>
     </issue>
 
     <issue
@@ -244,7 +251,9 @@
         errorLine1="    public boolean onNestedFling(View target, float velocityX, float velocityY,"
         errorLine2="                                 ~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1032"
+            column="34"/>
     </issue>
 
     <issue
@@ -253,7 +262,9 @@
         errorLine1="            int dyUnconsumed, int[] offsetInWindow, int type) {"
         errorLine2="                              ~~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1070"
+            column="31"/>
     </issue>
 
     <issue
@@ -262,7 +273,9 @@
         errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow,"
         errorLine2="                                                           ~~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1076"
+            column="60"/>
     </issue>
 
     <issue
@@ -271,7 +284,9 @@
         errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow,"
         errorLine2="                                                                           ~~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1076"
+            column="76"/>
     </issue>
 
     <issue
@@ -280,7 +295,9 @@
         errorLine1="            int dyUnconsumed, int[] offsetInWindow) {"
         errorLine2="                              ~~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1111"
+            column="31"/>
     </issue>
 
     <issue
@@ -289,7 +306,9 @@
         errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {"
         errorLine2="                                                           ~~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1117"
+            column="60"/>
     </issue>
 
     <issue
@@ -298,7 +317,9 @@
         errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {"
         errorLine2="                                                                           ~~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1117"
+            column="76"/>
     </issue>
 
     <issue
@@ -307,7 +328,9 @@
         errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+            line="1222"
+            column="33"/>
     </issue>
 
 </issues>
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/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/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/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/viewpager/viewpager/lint-baseline.xml b/viewpager/viewpager/lint-baseline.xml
index 062254e..ff70f907 100644
--- a/viewpager/viewpager/lint-baseline.xml
+++ b/viewpager/viewpager/lint-baseline.xml
@@ -250,7 +250,9 @@
         errorLine1="    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
+            file="src/main/java/androidx/viewpager/widget/ViewPager.java"
+            line="3090"
+            column="56"/>
     </issue>
 
     <issue
@@ -259,7 +261,9 @@
         errorLine1="        public LayoutParams(Context context, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
+            file="src/main/java/androidx/viewpager/widget/ViewPager.java"
+            line="3205"
+            column="29"/>
     </issue>
 
     <issue
@@ -268,7 +272,9 @@
         errorLine1="        public LayoutParams(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
+            file="src/main/java/androidx/viewpager/widget/ViewPager.java"
+            line="3205"
+            column="46"/>
     </issue>
 
 </issues>
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 2e81b76..253728e 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,
@@ -1083,6 +1084,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/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/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/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-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..3ab685b 100644
--- a/wear/wear/lint-baseline.xml
+++ b/wear/wear/lint-baseline.xml
@@ -235,7 +235,9 @@
         errorLine1="    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
         errorLine2="                                                                           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/ambient/AmbientModeSupport.java"/>
+            file="src/main/java/androidx/wear/ambient/AmbientModeSupport.java"
+            line="296"
+            column="76"/>
     </issue>
 
     <issue
@@ -244,7 +246,9 @@
         errorLine1="    public void setForeground(Drawable drawable) {"
         errorLine2="                              ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+            line="114"
+            column="31"/>
     </issue>
 
     <issue
@@ -253,7 +257,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+            line="126"
+            column="12"/>
     </issue>
 
     <issue
@@ -262,7 +268,9 @@
         errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+            line="126"
+            column="46"/>
     </issue>
 
     <issue
@@ -271,7 +279,9 @@
         errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+            line="291"
+            column="41"/>
     </issue>
 
     <issue
@@ -280,7 +290,9 @@
         errorLine1="    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+            line="296"
+            column="15"/>
     </issue>
 
     <issue
@@ -289,7 +301,9 @@
         errorLine1="    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+            line="296"
+            column="59"/>
     </issue>
 
     <issue
@@ -298,7 +312,9 @@
         errorLine1="    public CircledImageView(Context context) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="119"
+            column="29"/>
     </issue>
 
     <issue
@@ -307,7 +323,9 @@
         errorLine1="    public CircledImageView(Context context, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="123"
+            column="29"/>
     </issue>
 
     <issue
@@ -316,7 +334,9 @@
         errorLine1="    public CircledImageView(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="123"
+            column="46"/>
     </issue>
 
     <issue
@@ -325,7 +345,9 @@
         errorLine1="    public CircledImageView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="127"
+            column="29"/>
     </issue>
 
     <issue
@@ -334,7 +356,9 @@
         errorLine1="    public CircledImageView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="127"
+            column="46"/>
     </issue>
 
     <issue
@@ -343,7 +367,9 @@
         errorLine1="    protected void onDraw(Canvas canvas) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="225"
+            column="27"/>
     </issue>
 
     <issue
@@ -352,7 +378,9 @@
         errorLine1="    public ColorStateList getCircleColorStateList() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="530"
+            column="12"/>
     </issue>
 
     <issue
@@ -361,7 +389,9 @@
         errorLine1="    public void setCircleColorStateList(ColorStateList circleColor) {"
         errorLine2="                                        ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="535"
+            column="41"/>
     </issue>
 
     <issue
@@ -370,7 +400,9 @@
         errorLine1="    protected void onVisibilityChanged(View changedView, int visibility) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="566"
+            column="40"/>
     </issue>
 
     <issue
@@ -379,7 +411,9 @@
         errorLine1="    public void setCircleBorderCap(Paint.Cap circleBorderCap) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="625"
+            column="36"/>
     </issue>
 
     <issue
@@ -388,7 +422,9 @@
         errorLine1="    public Drawable getImageDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="665"
+            column="12"/>
     </issue>
 
     <issue
@@ -397,7 +433,9 @@
         errorLine1="    public void setImageDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+            file="src/main/java/androidx/wear/widget/CircledImageView.java"
+            line="670"
+            column="34"/>
     </issue>
 
     <issue
@@ -406,7 +444,9 @@
         errorLine1="        void onTimerFinished(CircularProgressLayout layout);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="95"
+            column="30"/>
     </issue>
 
     <issue
@@ -415,7 +455,9 @@
         errorLine1="    public CircularProgressLayout(Context context) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="98"
+            column="35"/>
     </issue>
 
     <issue
@@ -424,7 +466,9 @@
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="102"
+            column="35"/>
     </issue>
 
     <issue
@@ -433,7 +477,9 @@
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="102"
+            column="52"/>
     </issue>
 
     <issue
@@ -442,7 +488,9 @@
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="106"
+            column="35"/>
     </issue>
 
     <issue
@@ -451,7 +499,9 @@
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="106"
+            column="52"/>
     </issue>
 
     <issue
@@ -460,7 +510,9 @@
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="110"
+            column="35"/>
     </issue>
 
     <issue
@@ -469,7 +521,9 @@
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="110"
+            column="52"/>
     </issue>
 
     <issue
@@ -478,7 +532,9 @@
         errorLine1="    public void setColorSchemeColors(int... colors) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="339"
+            column="38"/>
     </issue>
 
     <issue
@@ -487,7 +543,9 @@
         errorLine1="    public int[] getColorSchemeColors() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+            file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+            line="348"
+            column="12"/>
     </issue>
 
     <issue
@@ -496,7 +554,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/wear/activity/ConfirmationActivity.java"/>
+            file="src/main/java/androidx/wear/activity/ConfirmationActivity.java"
+            line="102"
+            column="26"/>
     </issue>
 
     <issue
@@ -505,7 +565,9 @@
         errorLine1="    public CurvingLayoutCallback(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+            line="52"
+            column="34"/>
     </issue>
 
     <issue
@@ -514,7 +576,9 @@
         errorLine1="    public void onLayoutFinished(View child, RecyclerView parent) {"
         errorLine2="                                 ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+            line="61"
+            column="34"/>
     </issue>
 
     <issue
@@ -523,7 +587,9 @@
         errorLine1="    public void onLayoutFinished(View child, RecyclerView parent) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+            line="61"
+            column="46"/>
     </issue>
 
     <issue
@@ -532,7 +598,9 @@
         errorLine1="    public void adjustAnchorOffsetXY(View child, float[] anchorOffsetXY) {"
         errorLine2="                                     ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+            line="115"
+            column="38"/>
     </issue>
 
     <issue
@@ -541,7 +609,9 @@
         errorLine1="    public void adjustAnchorOffsetXY(View child, float[] anchorOffsetXY) {"
         errorLine2="                                                 ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+            file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+            line="115"
+            column="50"/>
     </issue>
 
     <issue
@@ -550,7 +620,9 @@
         errorLine1="    public static boolean isStandalone(Context context) {"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/utils/MetadataConstants.java"/>
+            file="src/main/java/androidx/wear/utils/MetadataConstants.java"
+            line="133"
+            column="40"/>
     </issue>
 
     <issue
@@ -559,7 +631,9 @@
         errorLine1="    public static boolean isNotificationBridgingEnabled(Context context) {"
         errorLine2="                                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/utils/MetadataConstants.java"/>
+            file="src/main/java/androidx/wear/utils/MetadataConstants.java"
+            line="153"
+            column="57"/>
     </issue>
 
     <issue
@@ -568,7 +642,9 @@
         errorLine1="    public static int getPreviewDrawableResourceId(Context context, boolean circular) {"
         errorLine2="                                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/utils/MetadataConstants.java"/>
+            file="src/main/java/androidx/wear/utils/MetadataConstants.java"
+            line="176"
+            column="52"/>
     </issue>
 
     <issue
@@ -577,7 +653,9 @@
         errorLine1="        void initialize(WearableNavigationDrawerView drawer,"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+            line="47"
+            column="25"/>
     </issue>
 
     <issue
@@ -586,7 +664,9 @@
         errorLine1="                WearableNavigationDrawerPresenter presenter);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+            line="48"
+            column="17"/>
     </issue>
 
     <issue
@@ -595,7 +675,9 @@
         errorLine1="        void setNavigationPagerAdapter(WearableNavigationDrawerAdapter adapter);"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+            line="63"
+            column="40"/>
     </issue>
 
     <issue
@@ -604,7 +686,9 @@
         errorLine1="    public MultiPagePresenter(WearableNavigationDrawerView drawer, Ui ui,"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+            line="71"
+            column="31"/>
     </issue>
 
     <issue
@@ -613,7 +697,9 @@
         errorLine1="    public MultiPagePresenter(WearableNavigationDrawerView drawer, Ui ui,"
         errorLine2="                                                                   ~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+            line="71"
+            column="68"/>
     </issue>
 
     <issue
@@ -622,7 +708,9 @@
         errorLine1="    public void onNewAdapter(WearableNavigationDrawerAdapter adapter) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+            line="92"
+            column="30"/>
     </issue>
 
     <issue
@@ -631,7 +719,9 @@
         errorLine1="            WearableNavigationDrawerView drawer, WearableNavigationDrawerPresenter presenter) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"
+            line="55"
+            column="13"/>
     </issue>
 
     <issue
@@ -640,7 +730,9 @@
         errorLine1="            WearableNavigationDrawerView drawer, WearableNavigationDrawerPresenter presenter) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"
+            line="55"
+            column="50"/>
     </issue>
 
     <issue
@@ -649,7 +741,9 @@
         errorLine1="    public void setNavigationPagerAdapter(final WearableNavigationDrawerAdapter adapter) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"
+            line="75"
+            column="49"/>
     </issue>
 
     <issue
@@ -658,7 +752,9 @@
         errorLine1="    public PageIndicatorView(Context context) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="82"
+            column="30"/>
     </issue>
 
     <issue
@@ -667,7 +763,9 @@
         errorLine1="    public PageIndicatorView(Context context, AttributeSet attrs) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="86"
+            column="30"/>
     </issue>
 
     <issue
@@ -676,7 +774,9 @@
         errorLine1="    public PageIndicatorView(Context context, AttributeSet attrs) {"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="86"
+            column="47"/>
     </issue>
 
     <issue
@@ -685,7 +785,9 @@
         errorLine1="    public PageIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="90"
+            column="30"/>
     </issue>
 
     <issue
@@ -694,7 +796,9 @@
         errorLine1="    public PageIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="90"
+            column="47"/>
     </issue>
 
     <issue
@@ -703,7 +807,9 @@
         errorLine1="    public void setPager(ViewPager pager) {"
         errorLine2="                         ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="194"
+            column="26"/>
     </issue>
 
     <issue
@@ -712,7 +818,9 @@
         errorLine1="    public void setDotFadeOutDuration(int duration, TimeUnit unit) {"
         errorLine2="                                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="345"
+            column="53"/>
     </issue>
 
     <issue
@@ -721,7 +829,9 @@
         errorLine1="    public void setDotFadeInDuration(int duration, TimeUnit unit) {"
         errorLine2="                                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="363"
+            column="52"/>
     </issue>
 
     <issue
@@ -730,7 +840,9 @@
         errorLine1="    public void setPagerAdapter(PagerAdapter adapter) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="558"
+            column="33"/>
     </issue>
 
     <issue
@@ -739,7 +851,9 @@
         errorLine1="    protected void onDraw(Canvas canvas) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+            line="593"
+            column="27"/>
     </issue>
 
     <issue
@@ -748,7 +862,9 @@
         errorLine1="    public static int getScreenWidthPx(Context context) {"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"/>
+            file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"
+            line="36"
+            column="40"/>
     </issue>
 
     <issue
@@ -757,7 +873,9 @@
         errorLine1="    public static int getScreenHeightPx(Context context) {"
         errorLine2="                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"/>
+            file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"
+            line="43"
+            column="41"/>
     </issue>
 
     <issue
@@ -766,7 +884,9 @@
         errorLine1="    public static int getFractionOfScreenPx(Context context, int screenPx, @FractionRes int resId) {"
         errorLine2="                                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"/>
+            file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"
+            line="51"
+            column="45"/>
     </issue>
 
     <issue
@@ -775,7 +895,9 @@
         errorLine1="    protected void onBoundsChange(Rect bounds) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/RoundedDrawable.java"/>
+            file="src/main/java/androidx/wear/widget/RoundedDrawable.java"
+            line="190"
+            column="35"/>
     </issue>
 
     <issue
@@ -784,7 +906,9 @@
         errorLine1="    public void setColorFilter(ColorFilter cf) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/RoundedDrawable.java"/>
+            file="src/main/java/androidx/wear/widget/RoundedDrawable.java"
+            line="248"
+            column="32"/>
     </issue>
 
     <issue
@@ -793,7 +917,9 @@
         errorLine1="    public void onAnimationCancel(Animator animator) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+            line="36"
+            column="35"/>
     </issue>
 
     <issue
@@ -802,7 +928,9 @@
         errorLine1="    public void onAnimationEnd(Animator animator) {"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+            line="41"
+            column="32"/>
     </issue>
 
     <issue
@@ -811,7 +939,9 @@
         errorLine1="    public void onAnimationRepeat(Animator animator) {}"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+            line="48"
+            column="35"/>
     </issue>
 
     <issue
@@ -820,7 +950,9 @@
         errorLine1="    public void onAnimationStart(Animator animator) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+            line="51"
+            column="34"/>
     </issue>
 
     <issue
@@ -829,7 +961,9 @@
         errorLine1="    public void onAnimationComplete(Animator animator) {}"
         errorLine2="                                    ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+            file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+            line="58"
+            column="37"/>
     </issue>
 
     <issue
@@ -838,7 +972,9 @@
         errorLine1="        void setPresenter(WearableNavigationDrawerPresenter presenter);"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+            line="53"
+            column="27"/>
     </issue>
 
     <issue
@@ -847,7 +983,9 @@
         errorLine1="        void setIcon(int index, Drawable drawable, CharSequence contentDescription);"
         errorLine2="                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+            line="63"
+            column="33"/>
     </issue>
 
     <issue
@@ -856,7 +994,9 @@
         errorLine1="        void setIcon(int index, Drawable drawable, CharSequence contentDescription);"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+            line="63"
+            column="52"/>
     </issue>
 
     <issue
@@ -865,7 +1005,9 @@
         errorLine1="        void setText(CharSequence itemText, boolean showToastIfNoTextView);"
         errorLine2="                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+            line="70"
+            column="22"/>
     </issue>
 
     <issue
@@ -874,7 +1016,9 @@
         errorLine1="    public SinglePagePresenter(Ui ui, boolean isAccessibilityEnabled) {"
         errorLine2="                               ~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+            line="93"
+            column="32"/>
     </issue>
 
     <issue
@@ -883,7 +1027,9 @@
         errorLine1="    public void onNewAdapter(WearableNavigationDrawerAdapter adapter) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+            line="124"
+            column="30"/>
     </issue>
 
     <issue
@@ -892,7 +1038,9 @@
         errorLine1="    public SinglePageUi(WearableNavigationDrawerView navigationDrawer) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+            line="88"
+            column="25"/>
     </issue>
 
     <issue
@@ -901,7 +1049,9 @@
         errorLine1="    public void setPresenter(WearableNavigationDrawerPresenter presenter) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+            line="96"
+            column="30"/>
     </issue>
 
     <issue
@@ -910,7 +1060,9 @@
         errorLine1="    public void setIcon(int index, Drawable drawable, CharSequence contentDescription) {"
         errorLine2="                                   ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+            line="129"
+            column="36"/>
     </issue>
 
     <issue
@@ -919,7 +1071,9 @@
         errorLine1="    public void setIcon(int index, Drawable drawable, CharSequence contentDescription) {"
         errorLine2="                                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+            line="129"
+            column="55"/>
     </issue>
 
     <issue
@@ -928,7 +1082,9 @@
         errorLine1="    public void setText(CharSequence itemText, boolean showToastIfNoTextView) {"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+            line="135"
+            column="25"/>
     </issue>
 
     <issue
@@ -937,7 +1093,9 @@
         errorLine1="        public void onSwipeStarted(SwipeDismissFrameLayout layout) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="54"
+            column="36"/>
     </issue>
 
     <issue
@@ -946,7 +1104,9 @@
         errorLine1="        public void onSwipeCanceled(SwipeDismissFrameLayout layout) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="62"
+            column="37"/>
     </issue>
 
     <issue
@@ -955,7 +1115,9 @@
         errorLine1="        public void onDismissed(SwipeDismissFrameLayout layout) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="69"
+            column="33"/>
     </issue>
 
     <issue
@@ -964,7 +1126,9 @@
         errorLine1="    public SwipeDismissFrameLayout(Context context) {"
         errorLine2="                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="81"
+            column="36"/>
     </issue>
 
     <issue
@@ -973,7 +1137,9 @@
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="99"
+            column="36"/>
     </issue>
 
     <issue
@@ -982,7 +1148,9 @@
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="99"
+            column="53"/>
     </issue>
 
     <issue
@@ -991,7 +1159,9 @@
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="114"
+            column="36"/>
     </issue>
 
     <issue
@@ -1000,7 +1170,9 @@
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="114"
+            column="53"/>
     </issue>
 
     <issue
@@ -1009,7 +1181,9 @@
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle,"
         errorLine2="                                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="130"
+            column="36"/>
     </issue>
 
     <issue
@@ -1018,7 +1192,9 @@
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle,"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="130"
+            column="53"/>
     </issue>
 
     <issue
@@ -1027,7 +1203,9 @@
         errorLine1="    public void addCallback(Callback callback) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="136"
+            column="29"/>
     </issue>
 
     <issue
@@ -1036,7 +1214,9 @@
         errorLine1="    public void removeCallback(Callback callback) {"
         errorLine2="                               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+            file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+            line="145"
+            column="32"/>
     </issue>
 
     <issue
@@ -1045,7 +1225,9 @@
         errorLine1="        public MenuItem setTitle(CharSequence title) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="252"
+            column="16"/>
     </issue>
 
     <issue
@@ -1054,7 +1236,9 @@
         errorLine1="        public MenuItem setTitle(CharSequence title) {"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="252"
+            column="34"/>
     </issue>
 
     <issue
@@ -1063,7 +1247,9 @@
         errorLine1="        public MenuItem setTitle(int title) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="261"
+            column="16"/>
     </issue>
 
     <issue
@@ -1072,7 +1258,9 @@
         errorLine1="        public CharSequence getTitle() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="266"
+            column="16"/>
     </issue>
 
     <issue
@@ -1081,7 +1269,9 @@
         errorLine1="        public MenuItem setIcon(Drawable icon) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="271"
+            column="16"/>
     </issue>
 
     <issue
@@ -1090,7 +1280,9 @@
         errorLine1="        public MenuItem setIcon(Drawable icon) {"
         errorLine2="                                ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="271"
+            column="33"/>
     </issue>
 
     <issue
@@ -1099,7 +1291,9 @@
         errorLine1="        public MenuItem setIcon(int iconRes) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="280"
+            column="16"/>
     </issue>
 
     <issue
@@ -1108,7 +1302,9 @@
         errorLine1="        public Drawable getIcon() {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="285"
+            column="16"/>
     </issue>
 
     <issue
@@ -1117,7 +1313,9 @@
         errorLine1="        public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="290"
+            column="16"/>
     </issue>
 
     <issue
@@ -1126,7 +1324,9 @@
         errorLine1="        public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="290"
+            column="52"/>
     </issue>
 
     <issue
@@ -1135,7 +1335,9 @@
         errorLine1="        public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="306"
+            column="16"/>
     </issue>
 
     <issue
@@ -1144,7 +1346,9 @@
         errorLine1="        public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="306"
+            column="43"/>
     </issue>
 
     <issue
@@ -1153,7 +1357,9 @@
         errorLine1="        public CharSequence getTitleCondensed() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="311"
+            column="16"/>
     </issue>
 
     <issue
@@ -1162,7 +1368,9 @@
         errorLine1="        public MenuItem setIntent(Intent intent) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="316"
+            column="16"/>
     </issue>
 
     <issue
@@ -1171,7 +1379,9 @@
         errorLine1="        public MenuItem setIntent(Intent intent) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="316"
+            column="35"/>
     </issue>
 
     <issue
@@ -1180,7 +1390,9 @@
         errorLine1="        public Intent getIntent() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="321"
+            column="16"/>
     </issue>
 
     <issue
@@ -1189,7 +1401,9 @@
         errorLine1="        public MenuItem setShortcut(char numericChar, char alphaChar) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="326"
+            column="16"/>
     </issue>
 
     <issue
@@ -1198,7 +1412,9 @@
         errorLine1="        public MenuItem setNumericShortcut(char numericChar) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="331"
+            column="16"/>
     </issue>
 
     <issue
@@ -1207,7 +1423,9 @@
         errorLine1="        public MenuItem setAlphabeticShortcut(char alphaChar) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="341"
+            column="16"/>
     </issue>
 
     <issue
@@ -1216,7 +1434,9 @@
         errorLine1="        public MenuItem setCheckable(boolean checkable) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="351"
+            column="16"/>
     </issue>
 
     <issue
@@ -1225,7 +1445,9 @@
         errorLine1="        public MenuItem setChecked(boolean checked) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="361"
+            column="16"/>
     </issue>
 
     <issue
@@ -1234,7 +1456,9 @@
         errorLine1="        public MenuItem setVisible(boolean visible) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="371"
+            column="16"/>
     </issue>
 
     <issue
@@ -1243,7 +1467,9 @@
         errorLine1="        public MenuItem setEnabled(boolean enabled) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="381"
+            column="16"/>
     </issue>
 
     <issue
@@ -1252,7 +1478,9 @@
         errorLine1="        public SubMenu getSubMenu() {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="396"
+            column="16"/>
     </issue>
 
     <issue
@@ -1261,7 +1489,9 @@
         errorLine1="        public ContextMenu.ContextMenuInfo getMenuInfo() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="401"
+            column="16"/>
     </issue>
 
     <issue
@@ -1270,7 +1500,9 @@
         errorLine1="        public MenuItem setShowAsActionFlags(int actionEnum) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="411"
+            column="16"/>
     </issue>
 
     <issue
@@ -1279,7 +1511,9 @@
         errorLine1="        public MenuItem setActionView(View view) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="416"
+            column="16"/>
     </issue>
 
     <issue
@@ -1288,7 +1522,9 @@
         errorLine1="        public MenuItem setActionView(View view) {"
         errorLine2="                                      ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="416"
+            column="39"/>
     </issue>
 
     <issue
@@ -1297,7 +1533,9 @@
         errorLine1="        public MenuItem setActionView(int resId) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="421"
+            column="16"/>
     </issue>
 
     <issue
@@ -1306,7 +1544,9 @@
         errorLine1="        public View getActionView() {"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="426"
+            column="16"/>
     </issue>
 
     <issue
@@ -1315,7 +1555,9 @@
         errorLine1="        public MenuItem setActionProvider(ActionProvider actionProvider) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="431"
+            column="16"/>
     </issue>
 
     <issue
@@ -1324,7 +1566,9 @@
         errorLine1="        public MenuItem setActionProvider(ActionProvider actionProvider) {"
         errorLine2="                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="431"
+            column="43"/>
     </issue>
 
     <issue
@@ -1333,7 +1577,9 @@
         errorLine1="        public ActionProvider getActionProvider() {"
         errorLine2="               ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="436"
+            column="16"/>
     </issue>
 
     <issue
@@ -1342,7 +1588,9 @@
         errorLine1="        public MenuItem setOnActionExpandListener(OnActionExpandListener listener) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="456"
+            column="16"/>
     </issue>
 
     <issue
@@ -1351,7 +1599,9 @@
         errorLine1="        public MenuItem setOnActionExpandListener(OnActionExpandListener listener) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+            line="456"
+            column="51"/>
     </issue>
 
     <issue
@@ -1360,7 +1610,9 @@
         errorLine1="    public WearableActionDrawerView(Context context) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="98"
+            column="37"/>
     </issue>
 
     <issue
@@ -1369,7 +1621,9 @@
         errorLine1="    public WearableActionDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="102"
+            column="37"/>
     </issue>
 
     <issue
@@ -1378,7 +1632,9 @@
         errorLine1="    public WearableActionDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="102"
+            column="54"/>
     </issue>
 
     <issue
@@ -1387,7 +1643,9 @@
         errorLine1="    public WearableActionDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="106"
+            column="37"/>
     </issue>
 
     <issue
@@ -1396,7 +1654,9 @@
         errorLine1="    public WearableActionDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="106"
+            column="54"/>
     </issue>
 
     <issue
@@ -1405,7 +1665,9 @@
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="            ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="111"
+            column="13"/>
     </issue>
 
     <issue
@@ -1414,7 +1676,9 @@
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="111"
+            column="30"/>
     </issue>
 
     <issue
@@ -1423,7 +1687,9 @@
         errorLine1="    public void onPeekContainerClicked(View v) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="222"
+            column="40"/>
     </issue>
 
     <issue
@@ -1432,7 +1698,9 @@
         errorLine1="    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="238"
+            column="44"/>
     </issue>
 
     <issue
@@ -1441,7 +1709,9 @@
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+            line="320"
+            column="12"/>
     </issue>
 
     <issue
@@ -1450,7 +1720,9 @@
         errorLine1="    public WearableActivityController getWearableController(Activity activity,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"/>
+            file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"
+            line="46"
+            column="12"/>
     </issue>
 
     <issue
@@ -1459,7 +1731,9 @@
         errorLine1="    public WearableActivityController getWearableController(Activity activity,"
         errorLine2="                                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"/>
+            file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"
+            line="46"
+            column="61"/>
     </issue>
 
     <issue
@@ -1468,7 +1742,9 @@
         errorLine1="            final AmbientDelegate.AmbientCallback callback) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"/>
+            file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"
+            line="47"
+            column="19"/>
     </issue>
 
     <issue
@@ -1477,7 +1753,9 @@
         errorLine1="    public WearableDrawerLayout(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="221"
+            column="33"/>
     </issue>
 
     <issue
@@ -1486,7 +1764,9 @@
         errorLine1="    public WearableDrawerLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="225"
+            column="33"/>
     </issue>
 
     <issue
@@ -1495,7 +1775,9 @@
         errorLine1="    public WearableDrawerLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="225"
+            column="50"/>
     </issue>
 
     <issue
@@ -1504,7 +1786,9 @@
         errorLine1="    public WearableDrawerLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="229"
+            column="33"/>
     </issue>
 
     <issue
@@ -1513,7 +1797,9 @@
         errorLine1="    public WearableDrawerLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="229"
+            column="50"/>
     </issue>
 
     <issue
@@ -1522,7 +1808,9 @@
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="            ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="235"
+            column="13"/>
     </issue>
 
     <issue
@@ -1531,7 +1819,9 @@
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="235"
+            column="30"/>
     </issue>
 
     <issue
@@ -1540,7 +1830,9 @@
         errorLine1="    public WindowInsets onApplyWindowInsets(WindowInsets insets) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="324"
+            column="12"/>
     </issue>
 
     <issue
@@ -1549,7 +1841,9 @@
         errorLine1="    public WindowInsets onApplyWindowInsets(WindowInsets insets) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="324"
+            column="45"/>
     </issue>
 
     <issue
@@ -1558,7 +1852,9 @@
         errorLine1="    public boolean onInterceptTouchEvent(MotionEvent ev) {"
         errorLine2="                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="498"
+            column="42"/>
     </issue>
 
     <issue
@@ -1567,7 +1863,9 @@
         errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="517"
+            column="33"/>
     </issue>
 
     <issue
@@ -1576,7 +1874,9 @@
         errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
         errorLine2="                        ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="540"
+            column="25"/>
     </issue>
 
     <issue
@@ -1585,7 +1885,9 @@
         errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="540"
+            column="48"/>
     </issue>
 
     <issue
@@ -1594,7 +1896,9 @@
         errorLine1="            View v,"
         errorLine2="            ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="574"
+            column="13"/>
     </issue>
 
     <issue
@@ -1603,7 +1907,9 @@
         errorLine1="    public void setDrawerStateCallback(DrawerStateCallback callback) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="601"
+            column="40"/>
     </issue>
 
     <issue
@@ -1612,7 +1918,9 @@
         errorLine1="    public void onFlingComplete(View view) {"
         errorLine2="                                ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="639"
+            column="33"/>
     </issue>
 
     <issue
@@ -1621,7 +1929,9 @@
         errorLine1="        public void onDrawerOpened(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="926"
+            column="36"/>
     </issue>
 
     <issue
@@ -1630,7 +1940,9 @@
         errorLine1="        public void onDrawerOpened(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
         errorLine2="                                                                ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="926"
+            column="65"/>
     </issue>
 
     <issue
@@ -1639,7 +1951,9 @@
         errorLine1="        public void onDrawerClosed(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="932"
+            column="36"/>
     </issue>
 
     <issue
@@ -1648,7 +1962,9 @@
         errorLine1="        public void onDrawerClosed(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
         errorLine2="                                                                ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="932"
+            column="65"/>
     </issue>
 
     <issue
@@ -1657,7 +1973,9 @@
         errorLine1="        public void onDrawerStateChanged(WearableDrawerLayout layout, @DrawerState int newState) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+            line="940"
+            column="42"/>
     </issue>
 
     <issue
@@ -1666,7 +1984,9 @@
         errorLine1="    public WearableDrawerView(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="136"
+            column="31"/>
     </issue>
 
     <issue
@@ -1675,7 +1995,9 @@
         errorLine1="    public WearableDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="140"
+            column="31"/>
     </issue>
 
     <issue
@@ -1684,7 +2006,9 @@
         errorLine1="    public WearableDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="140"
+            column="48"/>
     </issue>
 
     <issue
@@ -1693,7 +2017,9 @@
         errorLine1="    public WearableDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="144"
+            column="31"/>
     </issue>
 
     <issue
@@ -1702,7 +2028,9 @@
         errorLine1="    public WearableDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="144"
+            column="48"/>
     </issue>
 
     <issue
@@ -1711,7 +2039,9 @@
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="            ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="149"
+            column="13"/>
     </issue>
 
     <issue
@@ -1720,7 +2050,9 @@
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="149"
+            column="30"/>
     </issue>
 
     <issue
@@ -1729,7 +2061,9 @@
         errorLine1="    public void onPeekContainerClicked(View v) {"
         errorLine2="                                       ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="198"
+            column="40"/>
     </issue>
 
     <issue
@@ -1738,7 +2072,9 @@
         errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
         errorLine2="                        ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="228"
+            column="25"/>
     </issue>
 
     <issue
@@ -1747,7 +2083,9 @@
         errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="228"
+            column="48"/>
     </issue>
 
     <issue
@@ -1756,7 +2094,9 @@
         errorLine1="    public void setPeekContent(View content) {"
         errorLine2="                               ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="280"
+            column="32"/>
     </issue>
 
     <issue
@@ -1765,7 +2105,9 @@
         errorLine1="    public WearableDrawerController getController() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+            line="435"
+            column="12"/>
     </issue>
 
     <issue
@@ -1774,7 +2116,9 @@
         errorLine1="        public abstract void onLayoutFinished(View child, RecyclerView parent);"
         errorLine2="                                              ~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+            line="52"
+            column="47"/>
     </issue>
 
     <issue
@@ -1783,7 +2127,9 @@
         errorLine1="        public abstract void onLayoutFinished(View child, RecyclerView parent);"
         errorLine2="                                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+            line="52"
+            column="59"/>
     </issue>
 
     <issue
@@ -1792,7 +2138,9 @@
         errorLine1="    public WearableLinearLayoutManager(Context context, LayoutCallback layoutCallback) {"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+            line="61"
+            column="40"/>
     </issue>
 
     <issue
@@ -1801,7 +2149,9 @@
         errorLine1="    public WearableLinearLayoutManager(Context context, LayoutCallback layoutCallback) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+            line="61"
+            column="57"/>
     </issue>
 
     <issue
@@ -1810,7 +2160,9 @@
         errorLine1="    public WearableLinearLayoutManager(Context context) {"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+            line="71"
+            column="40"/>
     </issue>
 
     <issue
@@ -1819,7 +2171,9 @@
         errorLine1="            int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+            line="96"
+            column="21"/>
     </issue>
 
     <issue
@@ -1828,7 +2182,9 @@
         errorLine1="            int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+            line="96"
+            column="53"/>
     </issue>
 
     <issue
@@ -1837,7 +2193,9 @@
         errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+            line="104"
+            column="34"/>
     </issue>
 
     <issue
@@ -1846,7 +2204,9 @@
         errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+            file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+            line="104"
+            column="66"/>
     </issue>
 
     <issue
@@ -1855,7 +2215,9 @@
         errorLine1="    public abstract void onNewAdapter(WearableNavigationDrawerAdapter adapter);"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"
+            line="48"
+            column="39"/>
     </issue>
 
     <issue
@@ -1864,7 +2226,9 @@
         errorLine1="    public void onItemSelectedListenerAdded(OnItemSelectedListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"
+            line="74"
+            column="45"/>
     </issue>
 
     <issue
@@ -1873,7 +2237,9 @@
         errorLine1="    public void onItemSelectedListenerRemoved(OnItemSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"/>
+            file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"
+            line="82"
+            column="47"/>
     </issue>
 
     <issue
@@ -1882,7 +2248,9 @@
         errorLine1="    public WearableNavigationDrawerView(Context context) {"
         errorLine2="                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="122"
+            column="41"/>
     </issue>
 
     <issue
@@ -1891,7 +2259,9 @@
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="125"
+            column="41"/>
     </issue>
 
     <issue
@@ -1900,7 +2270,9 @@
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="125"
+            column="58"/>
     </issue>
 
     <issue
@@ -1909,7 +2281,9 @@
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="129"
+            column="41"/>
     </issue>
 
     <issue
@@ -1918,7 +2292,9 @@
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="129"
+            column="58"/>
     </issue>
 
     <issue
@@ -1927,7 +2303,9 @@
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                        ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="133"
+            column="41"/>
     </issue>
 
     <issue
@@ -1936,7 +2314,9 @@
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="133"
+            column="58"/>
     </issue>
 
     <issue
@@ -1945,7 +2325,9 @@
         errorLine1="    public void setAdapter(final WearableNavigationDrawerAdapter adapter) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="177"
+            column="34"/>
     </issue>
 
     <issue
@@ -1954,7 +2336,9 @@
         errorLine1="    public void addOnItemSelectedListener(OnItemSelectedListener listener) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="184"
+            column="43"/>
     </issue>
 
     <issue
@@ -1963,7 +2347,9 @@
         errorLine1="    public void removeOnItemSelectedListener(OnItemSelectedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="191"
+            column="46"/>
     </issue>
 
     <issue
@@ -1972,7 +2358,9 @@
         errorLine1="    public boolean onInterceptTouchEvent(MotionEvent ev) {"
         errorLine2="                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="213"
+            column="42"/>
     </issue>
 
     <issue
@@ -1981,7 +2369,9 @@
         errorLine1="        public abstract CharSequence getItemText(int pos);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="258"
+            column="25"/>
     </issue>
 
     <issue
@@ -1990,7 +2380,9 @@
         errorLine1="        public abstract Drawable getItemDrawable(int pos);"
         errorLine2="                        ~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="263"
+            column="25"/>
     </issue>
 
     <issue
@@ -1999,7 +2391,9 @@
         errorLine1="        public void setPresenter(WearableNavigationDrawerPresenter presenter) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+            line="289"
+            column="34"/>
     </issue>
 
     <issue
@@ -2008,7 +2402,9 @@
         errorLine1="    public WearableRecyclerView(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+            line="64"
+            column="33"/>
     </issue>
 
     <issue
@@ -2017,7 +2413,9 @@
         errorLine1="    public WearableRecyclerView(Context context, @Nullable AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+            line="68"
+            column="33"/>
     </issue>
 
     <issue
@@ -2026,7 +2424,9 @@
         errorLine1="    public WearableRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+            line="72"
+            column="33"/>
     </issue>
 
     <issue
@@ -2035,7 +2435,9 @@
         errorLine1="    public WearableRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle,"
         errorLine2="                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+            line="76"
+            column="33"/>
     </issue>
 
     <issue
@@ -2044,7 +2446,9 @@
         errorLine1="    public boolean onTouchEvent(MotionEvent event) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+            line="144"
+            column="33"/>
     </issue>
 
     <issue
diff --git a/window/extensions/extensions/api/public_plus_experimental_current.txt b/window/extensions/extensions/api/public_plus_experimental_current.txt
index 6a28e00..ad88a4a 100644
--- a/window/extensions/extensions/api/public_plus_experimental_current.txt
+++ b/window/extensions/extensions/api/public_plus_experimental_current.txt
@@ -7,6 +7,7 @@
   public interface WindowExtensions {
     method @androidx.window.extensions.ExperimentalWindowExtensionsApi public androidx.window.extensions.embedding.ActivityEmbeddingComponent? getActivityEmbeddingComponent();
     method public default int getVendorApiLevel();
+    method @androidx.window.extensions.ExperimentalWindowExtensionsApi public androidx.window.extensions.area.WindowAreaComponent? getWindowAreaComponent();
     method public androidx.window.extensions.layout.WindowLayoutComponent? getWindowLayoutComponent();
   }
 
@@ -16,6 +17,22 @@
 
 }
 
+package androidx.window.extensions.area {
+
+  @androidx.window.extensions.ExperimentalWindowExtensionsApi 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 {
 
   @androidx.window.extensions.ExperimentalWindowExtensionsApi 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 6ac25bd..ca3a882 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;
 
@@ -60,4 +61,14 @@
     @Nullable
     @ExperimentalWindowExtensionsApi
     ActivityEmbeddingComponent getActivityEmbeddingComponent();
+
+    /**
+     * 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
+    @ExperimentalWindowExtensionsApi
+    WindowAreaComponent getWindowAreaComponent();
 }
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..a565eda
--- /dev/null
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java
@@ -0,0 +1,147 @@
+/*
+ * 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.ExperimentalWindowExtensionsApi;
+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()
+ */
+@ExperimentalWindowExtensionsApi
+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/src/main/AndroidManifest.xml b/window/window-samples/src/main/AndroidManifest.xml
index e0fb58b..9deb2f37 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"
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/public_plus_experimental_current.txt b/window/window/api/public_plus_experimental_current.txt
index 2602c31..d0abd6e 100644
--- a/window/window/api/public_plus_experimental_current.txt
+++ b/window/window/api/public_plus_experimental_current.txt
@@ -1,4 +1,36 @@
 // Signature format: 4.0
+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/build.gradle b/window/window/build.gradle
index db48cf5..3f202c45 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/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/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/window/window/src/main/java/androidx/window/area/WindowAreaSession.kt b/window/window/src/main/java/androidx/window/area/WindowAreaSession.kt
new file mode 100644
index 0000000..6cdbd12
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaSession.kt
@@ -0,0 +1,29 @@
+/*
+ * 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
+
+/**
+ * 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/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/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/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);