Merge changes Ic37afd36,I37127a0f into main

* changes:
  Convert DesktopModeWindowDecorViewModelTests to kt
  Use TestableLooper.RunWithLooper in unit tests
diff --git a/Android.bp b/Android.bp
index 57a5a3c..f1a3af2 100644
--- a/Android.bp
+++ b/Android.bp
@@ -621,6 +621,7 @@
     "--api-lint-ignore-prefix org. " +
     "--error NoSettingsProvider " +
     "--error UnhiddenSystemApi " +
+    "--error UnflaggedApi " +
     "--force-convert-to-warning-nullability-annotations +*:-android.*:+android.icu.*:-dalvik.* " +
     "--hide BroadcastBehavior " +
     "--hide CallbackInterface " +
diff --git a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
index 1eaabf5..f252a0b 100644
--- a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
+++ b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
@@ -5318,7 +5318,7 @@
             if (mConstants.USE_MODE_MANAGER) {
                 pw.print("  mModeManagerRequestedQuickDoze=");
                 pw.println(mModeManagerRequestedQuickDoze);
-                pw.print("  mIsOffBody");
+                pw.print("  mIsOffBody=");
                 pw.println(mIsOffBody);
             }
         }
diff --git a/api/StubLibraries.bp b/api/StubLibraries.bp
index 2f84df7..e45ab89 100644
--- a/api/StubLibraries.bp
+++ b/api/StubLibraries.bp
@@ -33,7 +33,7 @@
         "android-non-updatable-stubs-defaults",
         "module-classpath-stubs-defaults",
     ],
-    args: metalava_framework_docs_args + "--error UnflaggedApi ",
+    args: metalava_framework_docs_args,
     check_api: {
         current: {
             api_file: ":non-updatable-current.txt",
@@ -74,8 +74,7 @@
     "client=android.annotation.SystemApi.Client.PRIVILEGED_APPS" +
     "\\)"
 
-test = " --show-annotation android.annotation.TestApi" +
-    " --hide UnflaggedApi" // TODO(b/297362755): TestApi lint doesn't ignore existing APIs.
+test = " --show-annotation android.annotation.TestApi"
 
 module_libs = " --show-annotation android.annotation.SystemApi\\(" +
     "client=android.annotation.SystemApi.Client.MODULE_LIBRARIES" +
@@ -134,6 +133,7 @@
         },
         api_lint: {
             enabled: true,
+            new_since: ":android.api.test.latest",
             baseline_file: ":non-updatable-test-lint-baseline.txt",
         },
     },
diff --git a/core/api/lint-baseline.txt b/core/api/lint-baseline.txt
index 6b7910a..afb10f5 100644
--- a/core/api/lint-baseline.txt
+++ b/core/api/lint-baseline.txt
@@ -265,8 +265,6 @@
     New API must be flagged with @FlaggedApi: method android.database.sqlite.SQLiteRawStatement.reset()
 UnflaggedApi: android.database.sqlite.SQLiteRawStatement#step():
     New API must be flagged with @FlaggedApi: method android.database.sqlite.SQLiteRawStatement.step()
-UnflaggedApi: android.database.sqlite.SQLiteRawStatement#toString():
-    New API must be flagged with @FlaggedApi: method android.database.sqlite.SQLiteRawStatement.toString()
 UnflaggedApi: android.graphics.Gainmap#Gainmap(android.graphics.Gainmap, android.graphics.Bitmap):
     New API must be flagged with @FlaggedApi: constructor android.graphics.Gainmap(android.graphics.Gainmap,android.graphics.Bitmap)
 UnflaggedApi: android.graphics.Path#computeBounds(android.graphics.RectF):
@@ -321,8 +319,6 @@
     New API must be flagged with @FlaggedApi: method android.media.midi.MidiUmpDeviceService.onBind(android.content.Intent)
 UnflaggedApi: android.media.midi.MidiUmpDeviceService#onClose():
     New API must be flagged with @FlaggedApi: method android.media.midi.MidiUmpDeviceService.onClose()
-UnflaggedApi: android.media.midi.MidiUmpDeviceService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.media.midi.MidiUmpDeviceService.onCreate()
 UnflaggedApi: android.media.midi.MidiUmpDeviceService#onDeviceStatusChanged(android.media.midi.MidiDeviceStatus):
     New API must be flagged with @FlaggedApi: method android.media.midi.MidiUmpDeviceService.onDeviceStatusChanged(android.media.midi.MidiDeviceStatus)
 UnflaggedApi: android.media.midi.MidiUmpDeviceService#onGetInputPortReceivers():
@@ -335,8 +331,6 @@
     New API must be flagged with @FlaggedApi: field android.os.UserManager.DISALLOW_NEAR_FIELD_COMMUNICATION_RADIO
 UnflaggedApi: android.provider.Settings#ACTION_CREDENTIAL_PROVIDER:
     New API must be flagged with @FlaggedApi: field android.provider.Settings.ACTION_CREDENTIAL_PROVIDER
-UnflaggedApi: android.telecom.Call.Details#PROPERTY_IS_TRANSACTIONAL:
-    New API must be flagged with @FlaggedApi: field android.telecom.Call.Details.PROPERTY_IS_TRANSACTIONAL
 UnflaggedApi: android.telecom.Call.Details#getId():
     New API must be flagged with @FlaggedApi: method android.telecom.Call.Details.getId()
 UnflaggedApi: android.telephony.CarrierConfigManager#KEY_CARRIER_SUPPORTED_SATELLITE_SERVICES_PER_PROVIDER_BUNDLE:
@@ -355,46 +349,10 @@
     New API must be flagged with @FlaggedApi: field android.telephony.TelephonyManager.EVENT_DISPLAY_SOS_MESSAGE
 UnflaggedApi: android.telephony.TelephonyManager#PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_DISABLED:
     New API must be flagged with @FlaggedApi: field android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_DISABLED
-UnflaggedApi: android.text.BoringLayout#computeDrawingBoundingBox():
-    New API must be flagged with @FlaggedApi: method android.text.BoringLayout.computeDrawingBoundingBox()
-UnflaggedApi: android.text.BoringLayout.Metrics#getDrawingBoundingBox():
-    New API must be flagged with @FlaggedApi: method android.text.BoringLayout.Metrics.getDrawingBoundingBox()
-UnflaggedApi: android.text.DynamicLayout#getLineBreakConfig():
-    New API must be flagged with @FlaggedApi: method android.text.DynamicLayout.getLineBreakConfig()
 UnflaggedApi: android.text.DynamicLayout.Builder#setLineBreakConfig(android.graphics.text.LineBreakConfig):
     New API must be flagged with @FlaggedApi: method android.text.DynamicLayout.Builder.setLineBreakConfig(android.graphics.text.LineBreakConfig)
 UnflaggedApi: android.text.DynamicLayout.Builder#setUseBoundsForWidth(boolean):
     New API must be flagged with @FlaggedApi: method android.text.DynamicLayout.Builder.setUseBoundsForWidth(boolean)
-UnflaggedApi: android.text.Layout#computeDrawingBoundingBox():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.computeDrawingBoundingBox()
-UnflaggedApi: android.text.Layout#getBreakStrategy():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getBreakStrategy()
-UnflaggedApi: android.text.Layout#getEllipsize():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getEllipsize()
-UnflaggedApi: android.text.Layout#getHyphenationFrequency():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getHyphenationFrequency()
-UnflaggedApi: android.text.Layout#getJustificationMode():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getJustificationMode()
-UnflaggedApi: android.text.Layout#getLeftIndents():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getLeftIndents()
-UnflaggedApi: android.text.Layout#getLineBreakConfig():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getLineBreakConfig()
-UnflaggedApi: android.text.Layout#getLineSpacingAmount():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getLineSpacingAmount()
-UnflaggedApi: android.text.Layout#getLineSpacingMultiplier():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getLineSpacingMultiplier()
-UnflaggedApi: android.text.Layout#getMaxLines():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getMaxLines()
-UnflaggedApi: android.text.Layout#getRightIndents():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getRightIndents()
-UnflaggedApi: android.text.Layout#getTextDirectionHeuristic():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getTextDirectionHeuristic()
-UnflaggedApi: android.text.Layout#getUseBoundsForWidth():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.getUseBoundsForWidth()
-UnflaggedApi: android.text.Layout#isFontPaddingIncluded():
-    New API must be flagged with @FlaggedApi: method android.text.Layout.isFontPaddingIncluded()
-UnflaggedApi: android.text.Layout.Builder:
-    New API must be flagged with @FlaggedApi: class android.text.Layout.Builder
 UnflaggedApi: android.text.Layout.Builder#Builder(CharSequence, int, int, android.text.TextPaint, int):
     New API must be flagged with @FlaggedApi: constructor android.text.Layout.Builder(CharSequence,int,int,android.text.TextPaint,int)
 UnflaggedApi: android.text.Layout.Builder#build():
@@ -429,24 +387,12 @@
     New API must be flagged with @FlaggedApi: method android.text.Layout.Builder.setRightIndents(int[])
 UnflaggedApi: android.text.Layout.Builder#setTextDirectionHeuristic(android.text.TextDirectionHeuristic):
     New API must be flagged with @FlaggedApi: method android.text.Layout.Builder.setTextDirectionHeuristic(android.text.TextDirectionHeuristic)
-UnflaggedApi: android.text.Layout.Builder#setUseBoundsForWidth(boolean):
-    New API must be flagged with @FlaggedApi: method android.text.Layout.Builder.setUseBoundsForWidth(boolean)
-UnflaggedApi: android.text.StaticLayout#computeDrawingBoundingBox():
-    New API must be flagged with @FlaggedApi: method android.text.StaticLayout.computeDrawingBoundingBox()
 UnflaggedApi: android.text.StaticLayout.Builder#setUseBoundsForWidth(boolean):
     New API must be flagged with @FlaggedApi: method android.text.StaticLayout.Builder.setUseBoundsForWidth(boolean)
-UnflaggedApi: android.text.style.LineBreakConfigSpan:
-    New API must be flagged with @FlaggedApi: class android.text.style.LineBreakConfigSpan
 UnflaggedApi: android.text.style.LineBreakConfigSpan#LineBreakConfigSpan(android.graphics.text.LineBreakConfig):
     New API must be flagged with @FlaggedApi: constructor android.text.style.LineBreakConfigSpan(android.graphics.text.LineBreakConfig)
-UnflaggedApi: android.text.style.LineBreakConfigSpan#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.text.style.LineBreakConfigSpan.equals(Object)
 UnflaggedApi: android.text.style.LineBreakConfigSpan#getLineBreakConfig():
     New API must be flagged with @FlaggedApi: method android.text.style.LineBreakConfigSpan.getLineBreakConfig()
-UnflaggedApi: android.text.style.LineBreakConfigSpan#hashCode():
-    New API must be flagged with @FlaggedApi: method android.text.style.LineBreakConfigSpan.hashCode()
-UnflaggedApi: android.text.style.LineBreakConfigSpan#toString():
-    New API must be flagged with @FlaggedApi: method android.text.style.LineBreakConfigSpan.toString()
 UnflaggedApi: android.view.HapticScrollFeedbackProvider#HapticScrollFeedbackProvider(android.view.View):
     New API must be flagged with @FlaggedApi: constructor android.view.HapticScrollFeedbackProvider(android.view.View)
 UnflaggedApi: android.view.HapticScrollFeedbackProvider#onScrollLimit(int, int, int, boolean):
@@ -455,16 +401,10 @@
     New API must be flagged with @FlaggedApi: method android.view.HapticScrollFeedbackProvider.onScrollProgress(int,int,int,int)
 UnflaggedApi: android.view.HapticScrollFeedbackProvider#onSnapToItem(int, int, int):
     New API must be flagged with @FlaggedApi: method android.view.HapticScrollFeedbackProvider.onSnapToItem(int,int,int)
-UnflaggedApi: android.view.ScrollFeedbackProvider#onScrollLimit(android.view.MotionEvent, int, boolean):
-    New API must be flagged with @FlaggedApi: method android.view.ScrollFeedbackProvider.onScrollLimit(android.view.MotionEvent,int,boolean)
 UnflaggedApi: android.view.ScrollFeedbackProvider#onScrollLimit(int, int, int, boolean):
     New API must be flagged with @FlaggedApi: method android.view.ScrollFeedbackProvider.onScrollLimit(int,int,int,boolean)
-UnflaggedApi: android.view.ScrollFeedbackProvider#onScrollProgress(android.view.MotionEvent, int, int):
-    New API must be flagged with @FlaggedApi: method android.view.ScrollFeedbackProvider.onScrollProgress(android.view.MotionEvent,int,int)
 UnflaggedApi: android.view.ScrollFeedbackProvider#onScrollProgress(int, int, int, int):
     New API must be flagged with @FlaggedApi: method android.view.ScrollFeedbackProvider.onScrollProgress(int,int,int,int)
-UnflaggedApi: android.view.ScrollFeedbackProvider#onSnapToItem(android.view.MotionEvent, int):
-    New API must be flagged with @FlaggedApi: method android.view.ScrollFeedbackProvider.onSnapToItem(android.view.MotionEvent,int)
 UnflaggedApi: android.view.ScrollFeedbackProvider#onSnapToItem(int, int, int):
     New API must be flagged with @FlaggedApi: method android.view.ScrollFeedbackProvider.onSnapToItem(int,int,int)
 UnflaggedApi: android.view.accessibility.AccessibilityNodeInfo#ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT:
@@ -515,7 +455,3 @@
     New API must be flagged with @FlaggedApi: method android.view.inputmethod.InlineSuggestionsRequest.Builder.setClientSupported(boolean)
 UnflaggedApi: android.view.inputmethod.InlineSuggestionsRequest.Builder#setServiceSupported(boolean):
     New API must be flagged with @FlaggedApi: method android.view.inputmethod.InlineSuggestionsRequest.Builder.setServiceSupported(boolean)
-UnflaggedApi: android.widget.TextView#getUseBoundsForWidth():
-    New API must be flagged with @FlaggedApi: method android.widget.TextView.getUseBoundsForWidth()
-UnflaggedApi: android.widget.TextView#setUseBoundsForWidth(boolean):
-    New API must be flagged with @FlaggedApi: method android.widget.TextView.setUseBoundsForWidth(boolean)
diff --git a/core/api/module-lib-lint-baseline.txt b/core/api/module-lib-lint-baseline.txt
index a0d3858..1633835 100644
--- a/core/api/module-lib-lint-baseline.txt
+++ b/core/api/module-lib-lint-baseline.txt
@@ -35,26 +35,8 @@
     SAM-compatible parameters (such as parameter 1, "listener", in android.media.session.MediaSessionManager.setOnMediaKeyListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 SamShouldBeLast: android.media.session.MediaSessionManager#setOnVolumeKeyLongPressListener(android.media.session.MediaSessionManager.OnVolumeKeyLongPressListener, android.os.Handler):
     SAM-compatible parameters (such as parameter 1, "listener", in android.media.session.MediaSessionManager.setOnVolumeKeyLongPressListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.os.Binder#attachInterface(android.os.IInterface, String):
-    SAM-compatible parameters (such as parameter 1, "owner", in android.os.Binder.attachInterface) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.os.Binder#linkToDeath(android.os.IBinder.DeathRecipient, int):
-    SAM-compatible parameters (such as parameter 1, "recipient", in android.os.Binder.linkToDeath) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.os.Binder#unlinkToDeath(android.os.IBinder.DeathRecipient, int):
-    SAM-compatible parameters (such as parameter 1, "recipient", in android.os.Binder.unlinkToDeath) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.os.IBinder#linkToDeath(android.os.IBinder.DeathRecipient, int):
-    SAM-compatible parameters (such as parameter 1, "recipient", in android.os.IBinder.linkToDeath) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.os.IBinder#unlinkToDeath(android.os.IBinder.DeathRecipient, int):
-    SAM-compatible parameters (such as parameter 1, "recipient", in android.os.IBinder.unlinkToDeath) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 
 
-UnflaggedApi: android.Manifest.permission#BLUETOOTH_STACK:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BLUETOOTH_STACK
-UnflaggedApi: android.Manifest.permission#CONTROL_AUTOMOTIVE_GNSS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONTROL_AUTOMOTIVE_GNSS
-UnflaggedApi: android.Manifest.permission#GET_INTENT_SENDER_INTENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.GET_INTENT_SENDER_INTENT
-UnflaggedApi: android.Manifest.permission#MAKE_UID_VISIBLE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MAKE_UID_VISIBLE
 UnflaggedApi: android.Manifest.permission#MANAGE_REMOTE_AUTH:
     New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_REMOTE_AUTH
 UnflaggedApi: android.Manifest.permission#USE_COMPANION_TRANSPORTS:
@@ -89,13 +71,7 @@
     New API must be flagged with @FlaggedApi: method android.companion.CompanionDeviceManager.OnTransportsChangedListener.onTransportsChanged(java.util.List<android.companion.AssociationInfo>)
 UnflaggedApi: android.content.Context#REMOTE_AUTH_SERVICE:
     New API must be flagged with @FlaggedApi: field android.content.Context.REMOTE_AUTH_SERVICE
-UnflaggedApi: android.content.ContextWrapper#createContextForSdkInSandbox(android.content.pm.ApplicationInfo, int):
-    New API must be flagged with @FlaggedApi: method android.content.ContextWrapper.createContextForSdkInSandbox(android.content.pm.ApplicationInfo,int)
-UnflaggedApi: android.media.session.MediaController.PlaybackInfo#PlaybackInfo(int, int, int, int, android.media.AudioAttributes, String):
-    New API must be flagged with @FlaggedApi: constructor android.media.session.MediaController.PlaybackInfo(int,int,int,int,android.media.AudioAttributes,String)
 UnflaggedApi: android.os.IpcDataCache#MODULE_TELEPHONY:
     New API must be flagged with @FlaggedApi: field android.os.IpcDataCache.MODULE_TELEPHONY
-UnflaggedApi: android.provider.ContactsContract.RawContactsEntity#queryRawContactEntity(android.content.ContentResolver, long):
-    New API must be flagged with @FlaggedApi: method android.provider.ContactsContract.RawContactsEntity.queryRawContactEntity(android.content.ContentResolver,long)
 UnflaggedApi: android.provider.Settings.Config#getAllStrings():
     New API must be flagged with @FlaggedApi: method android.provider.Settings.Config.getAllStrings()
diff --git a/core/api/system-lint-baseline.txt b/core/api/system-lint-baseline.txt
index d62bea8..ee031db 100644
--- a/core/api/system-lint-baseline.txt
+++ b/core/api/system-lint-baseline.txt
@@ -21,28 +21,10 @@
     Listeners should always be at end of argument list (method `stopSatelliteTransmissionUpdates`)
 
 
-MissingGetterMatchingBuilder: android.telecom.CallScreeningService.CallResponse.Builder#setShouldScreenCallViaAudioProcessing(boolean):
-    android.telecom.CallScreeningService.CallResponse does not declare a `shouldScreenCallViaAudioProcessing()` method matching method android.telecom.CallScreeningService.CallResponse.Builder.setShouldScreenCallViaAudioProcessing(boolean)
-MissingGetterMatchingBuilder: android.telephony.mbms.DownloadRequest.Builder#setServiceId(String):
-    android.telephony.mbms.DownloadRequest does not declare a `getServiceId()` method matching method android.telephony.mbms.DownloadRequest.Builder.setServiceId(String)
-
-
 MissingNullability: android.media.soundtrigger.SoundTriggerDetectionService#onUnbind(android.content.Intent) parameter #0:
     Missing nullability on parameter `intent` in method `onUnbind`
-MissingNullability: android.media.tv.TvRecordingClient.RecordingCallback#onEvent(String, String, android.os.Bundle) parameter #0:
-    Missing nullability on parameter `inputId` in method `onEvent`
-MissingNullability: android.media.tv.TvRecordingClient.RecordingCallback#onEvent(String, String, android.os.Bundle) parameter #1:
-    Missing nullability on parameter `eventType` in method `onEvent`
-MissingNullability: android.media.tv.TvRecordingClient.RecordingCallback#onEvent(String, String, android.os.Bundle) parameter #2:
-    Missing nullability on parameter `eventArgs` in method `onEvent`
 MissingNullability: android.printservice.recommendation.RecommendationService#attachBaseContext(android.content.Context) parameter #0:
     Missing nullability on parameter `base` in method `attachBaseContext`
-MissingNullability: android.provider.ContactsContract.MetadataSync#CONTENT_URI:
-    Missing nullability on field `CONTENT_URI` in class `class android.provider.ContactsContract.MetadataSync`
-MissingNullability: android.provider.ContactsContract.MetadataSync#METADATA_AUTHORITY_URI:
-    Missing nullability on field `METADATA_AUTHORITY_URI` in class `class android.provider.ContactsContract.MetadataSync`
-MissingNullability: android.provider.ContactsContract.MetadataSyncState#CONTENT_URI:
-    Missing nullability on field `CONTENT_URI` in class `class android.provider.ContactsContract.MetadataSyncState`
 MissingNullability: android.provider.SearchIndexablesProvider#attachInfo(android.content.Context, android.content.pm.ProviderInfo) parameter #0:
     Missing nullability on parameter `context` in method `attachInfo`
 MissingNullability: android.provider.SearchIndexablesProvider#attachInfo(android.content.Context, android.content.pm.ProviderInfo) parameter #1:
@@ -61,10 +43,6 @@
     Missing nullability on parameter `intent` in method `onUnbind`
 MissingNullability: android.telephony.data.DataService#onUnbind(android.content.Intent) parameter #0:
     Missing nullability on parameter `intent` in method `onUnbind`
-MissingNullability: android.telephony.mbms.DownloadRequest.Builder#setServiceId(String):
-    Missing nullability on method `setServiceId` return
-MissingNullability: android.telephony.mbms.DownloadRequest.Builder#setServiceId(String) parameter #0:
-    Missing nullability on parameter `serviceId` in method `setServiceId`
 
 
 ProtectedMember: android.printservice.recommendation.RecommendationService#attachBaseContext(android.content.Context):
@@ -173,12 +151,6 @@
     SAM-compatible parameters (such as parameter 2, "callback", in android.nfc.NfcAdapter.enableReaderMode) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 SamShouldBeLast: android.nfc.NfcAdapter#ignore(android.nfc.Tag, int, android.nfc.NfcAdapter.OnTagRemovedListener, android.os.Handler):
     SAM-compatible parameters (such as parameter 3, "tagRemovedListener", in android.nfc.NfcAdapter.ignore) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.nfc.NfcAdapter#setBeamPushUrisCallback(android.nfc.NfcAdapter.CreateBeamUrisCallback, android.app.Activity):
-    SAM-compatible parameters (such as parameter 1, "callback", in android.nfc.NfcAdapter.setBeamPushUrisCallback) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.nfc.NfcAdapter#setNdefPushMessageCallback(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...):
-    SAM-compatible parameters (such as parameter 1, "callback", in android.nfc.NfcAdapter.setNdefPushMessageCallback) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.nfc.NfcAdapter#setOnNdefPushCompleteCallback(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...):
-    SAM-compatible parameters (such as parameter 1, "callback", in android.nfc.NfcAdapter.setOnNdefPushCompleteCallback) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 SamShouldBeLast: android.os.Binder#attachInterface(android.os.IInterface, String):
     SAM-compatible parameters (such as parameter 1, "owner", in android.os.Binder.attachInterface) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 SamShouldBeLast: android.os.Binder#linkToDeath(android.os.IBinder.DeathRecipient, int):
@@ -225,1350 +197,32 @@
     SAM-compatible parameters (such as parameter 2, "filePathCallback", in android.webkit.WebChromeClient.onShowFileChooser) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 
 
-UnflaggedApi: android.Manifest.permission#ACCESS_AMBIENT_CONTEXT_EVENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_AMBIENT_CONTEXT_EVENT
-UnflaggedApi: android.Manifest.permission#ACCESS_AMBIENT_LIGHT_STATS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_AMBIENT_LIGHT_STATS
-UnflaggedApi: android.Manifest.permission#ACCESS_BROADCAST_RADIO:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_BROADCAST_RADIO
-UnflaggedApi: android.Manifest.permission#ACCESS_BROADCAST_RESPONSE_STATS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_BROADCAST_RESPONSE_STATS
-UnflaggedApi: android.Manifest.permission#ACCESS_CACHE_FILESYSTEM:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_CACHE_FILESYSTEM
-UnflaggedApi: android.Manifest.permission#ACCESS_CONTEXT_HUB:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_CONTEXT_HUB
-UnflaggedApi: android.Manifest.permission#ACCESS_DRM_CERTIFICATES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_DRM_CERTIFICATES
-UnflaggedApi: android.Manifest.permission#ACCESS_FPS_COUNTER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_FPS_COUNTER
-UnflaggedApi: android.Manifest.permission#ACCESS_INSTANT_APPS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_INSTANT_APPS
-UnflaggedApi: android.Manifest.permission#ACCESS_LOCUS_ID_USAGE_STATS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_LOCUS_ID_USAGE_STATS
-UnflaggedApi: android.Manifest.permission#ACCESS_MOCK_LOCATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_MOCK_LOCATION
-UnflaggedApi: android.Manifest.permission#ACCESS_MTP:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_MTP
-UnflaggedApi: android.Manifest.permission#ACCESS_NETWORK_CONDITIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_NETWORK_CONDITIONS
-UnflaggedApi: android.Manifest.permission#ACCESS_NOTIFICATIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_NOTIFICATIONS
-UnflaggedApi: android.Manifest.permission#ACCESS_PDB_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_PDB_STATE
-UnflaggedApi: android.Manifest.permission#ACCESS_RCS_USER_CAPABILITY_EXCHANGE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE
-UnflaggedApi: android.Manifest.permission#ACCESS_SHARED_LIBRARIES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_SHARED_LIBRARIES
-UnflaggedApi: android.Manifest.permission#ACCESS_SHORTCUTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_SHORTCUTS
 UnflaggedApi: android.Manifest.permission#ACCESS_SMARTSPACE:
     New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_SMARTSPACE
-UnflaggedApi: android.Manifest.permission#ACCESS_SURFACE_FLINGER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_SURFACE_FLINGER
-UnflaggedApi: android.Manifest.permission#ACCESS_TUNED_INFO:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_TUNED_INFO
-UnflaggedApi: android.Manifest.permission#ACCESS_TV_DESCRAMBLER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_TV_DESCRAMBLER
-UnflaggedApi: android.Manifest.permission#ACCESS_TV_SHARED_FILTER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_TV_SHARED_FILTER
-UnflaggedApi: android.Manifest.permission#ACCESS_TV_TUNER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_TV_TUNER
-UnflaggedApi: android.Manifest.permission#ACCESS_ULTRASOUND:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_ULTRASOUND
-UnflaggedApi: android.Manifest.permission#ACCESS_VIBRATOR_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACCESS_VIBRATOR_STATE
-UnflaggedApi: android.Manifest.permission#ACTIVITY_EMBEDDING:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ACTIVITY_EMBEDDING
-UnflaggedApi: android.Manifest.permission#ADD_ALWAYS_UNLOCKED_DISPLAY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ADD_ALWAYS_UNLOCKED_DISPLAY
-UnflaggedApi: android.Manifest.permission#ADD_TRUSTED_DISPLAY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ADD_TRUSTED_DISPLAY
-UnflaggedApi: android.Manifest.permission#ADJUST_RUNTIME_PERMISSIONS_POLICY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY
-UnflaggedApi: android.Manifest.permission#ALLOCATE_AGGRESSIVE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ALLOCATE_AGGRESSIVE
-UnflaggedApi: android.Manifest.permission#ALLOW_ANY_CODEC_FOR_PLAYBACK:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK
-UnflaggedApi: android.Manifest.permission#ALLOW_PLACE_IN_MULTI_PANE_SETTINGS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS
-UnflaggedApi: android.Manifest.permission#ALLOW_SLIPPERY_TOUCHES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ALLOW_SLIPPERY_TOUCHES
 UnflaggedApi: android.Manifest.permission#ALWAYS_UPDATE_WALLPAPER:
     New API must be flagged with @FlaggedApi: field android.Manifest.permission.ALWAYS_UPDATE_WALLPAPER
-UnflaggedApi: android.Manifest.permission#AMBIENT_WALLPAPER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.AMBIENT_WALLPAPER
-UnflaggedApi: android.Manifest.permission#APPROVE_INCIDENT_REPORTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.APPROVE_INCIDENT_REPORTS
-UnflaggedApi: android.Manifest.permission#ASSOCIATE_COMPANION_DEVICES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ASSOCIATE_COMPANION_DEVICES
-UnflaggedApi: android.Manifest.permission#BACKGROUND_CAMERA:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BACKGROUND_CAMERA
-UnflaggedApi: android.Manifest.permission#BACKUP:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BACKUP
-UnflaggedApi: android.Manifest.permission#BATTERY_PREDICTION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BATTERY_PREDICTION
-UnflaggedApi: android.Manifest.permission#BIND_AMBIENT_CONTEXT_DETECTION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_AMBIENT_CONTEXT_DETECTION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_ATTENTION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_ATTENTION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_AUGMENTED_AUTOFILL_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_AUGMENTED_AUTOFILL_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_CALL_DIAGNOSTIC_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_CALL_DIAGNOSTIC_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_CALL_STREAMING_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_CALL_STREAMING_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_CELL_BROADCAST_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_CELL_BROADCAST_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_CONTENT_CAPTURE_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_CONTENT_CAPTURE_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_CONTENT_SUGGESTIONS_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_CONTENT_SUGGESTIONS_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_DIRECTORY_SEARCH:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_DIRECTORY_SEARCH
-UnflaggedApi: android.Manifest.permission#BIND_DISPLAY_HASHING_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_DISPLAY_HASHING_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_DOMAIN_VERIFICATION_AGENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_DOMAIN_VERIFICATION_AGENT
-UnflaggedApi: android.Manifest.permission#BIND_EUICC_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_EUICC_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_EXTERNAL_STORAGE_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_EXTERNAL_STORAGE_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_FIELD_CLASSIFICATION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_FIELD_CLASSIFICATION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_GBA_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_GBA_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_HOTWORD_DETECTION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_HOTWORD_DETECTION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_IMS_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_IMS_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_KEYGUARD_APPWIDGET:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_KEYGUARD_APPWIDGET
-UnflaggedApi: android.Manifest.permission#BIND_MUSIC_RECOGNITION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_MUSIC_RECOGNITION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_NETWORK_RECOMMENDATION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_NETWORK_RECOMMENDATION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_NOTIFICATION_ASSISTANT_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_PRINT_RECOMMENDATION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_PRINT_RECOMMENDATION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_REMOTE_LOCKSCREEN_VALIDATION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_REMOTE_LOCKSCREEN_VALIDATION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_RESOLVER_RANKER_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_RESOLVER_RANKER_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_RESUME_ON_REBOOT_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_RESUME_ON_REBOOT_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_ROTATION_RESOLVER_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_ROTATION_RESOLVER_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_SATELLITE_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_SATELLITE_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_SETTINGS_SUGGESTIONS_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_SOUND_TRIGGER_DETECTION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_TELEPHONY_DATA_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_TELEPHONY_DATA_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_TELEPHONY_NETWORK_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_TELEPHONY_NETWORK_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_TEXTCLASSIFIER_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_TEXTCLASSIFIER_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_TIME_ZONE_PROVIDER_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_TIME_ZONE_PROVIDER_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_TRACE_REPORT_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_TRACE_REPORT_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_TRANSLATION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_TRANSLATION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_TRUST_AGENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_TRUST_AGENT
-UnflaggedApi: android.Manifest.permission#BIND_TV_REMOTE_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_TV_REMOTE_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_VISUAL_QUERY_DETECTION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_VISUAL_QUERY_DETECTION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE
-UnflaggedApi: android.Manifest.permission#BIND_WEARABLE_SENSING_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BIND_WEARABLE_SENSING_SERVICE
-UnflaggedApi: android.Manifest.permission#BLUETOOTH_MAP:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BLUETOOTH_MAP
-UnflaggedApi: android.Manifest.permission#BRICK:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BRICK
-UnflaggedApi: android.Manifest.permission#BRIGHTNESS_SLIDER_USAGE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BRIGHTNESS_SLIDER_USAGE
-UnflaggedApi: android.Manifest.permission#BROADCAST_CLOSE_SYSTEM_DIALOGS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS
-UnflaggedApi: android.Manifest.permission#BYPASS_ROLE_QUALIFICATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.BYPASS_ROLE_QUALIFICATION
-UnflaggedApi: android.Manifest.permission#CALL_AUDIO_INTERCEPTION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CALL_AUDIO_INTERCEPTION
-UnflaggedApi: android.Manifest.permission#CAMERA_DISABLE_TRANSMIT_LED:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CAMERA_DISABLE_TRANSMIT_LED
-UnflaggedApi: android.Manifest.permission#CAMERA_OPEN_CLOSE_LISTENER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER
-UnflaggedApi: android.Manifest.permission#CAPTURE_AUDIO_HOTWORD:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CAPTURE_AUDIO_HOTWORD
-UnflaggedApi: android.Manifest.permission#CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD
-UnflaggedApi: android.Manifest.permission#CAPTURE_MEDIA_OUTPUT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CAPTURE_MEDIA_OUTPUT
-UnflaggedApi: android.Manifest.permission#CAPTURE_TUNER_AUDIO_INPUT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CAPTURE_TUNER_AUDIO_INPUT
-UnflaggedApi: android.Manifest.permission#CAPTURE_TV_INPUT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CAPTURE_TV_INPUT
-UnflaggedApi: android.Manifest.permission#CAPTURE_VOICE_COMMUNICATION_OUTPUT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT
-UnflaggedApi: android.Manifest.permission#CHANGE_APP_IDLE_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CHANGE_APP_IDLE_STATE
-UnflaggedApi: android.Manifest.permission#CHANGE_APP_LAUNCH_TIME_ESTIMATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CHANGE_APP_LAUNCH_TIME_ESTIMATE
-UnflaggedApi: android.Manifest.permission#CHANGE_DEVICE_IDLE_TEMP_WHITELIST:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST
-UnflaggedApi: android.Manifest.permission#CHECK_REMOTE_LOCKSCREEN:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CHECK_REMOTE_LOCKSCREEN
-UnflaggedApi: android.Manifest.permission#CLEAR_APP_USER_DATA:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CLEAR_APP_USER_DATA
-UnflaggedApi: android.Manifest.permission#COMPANION_APPROVE_WIFI_CONNECTIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.COMPANION_APPROVE_WIFI_CONNECTIONS
-UnflaggedApi: android.Manifest.permission#CONFIGURE_DISPLAY_BRIGHTNESS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS
-UnflaggedApi: android.Manifest.permission#CONFIGURE_INTERACT_ACROSS_PROFILES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONFIGURE_INTERACT_ACROSS_PROFILES
-UnflaggedApi: android.Manifest.permission#CONNECTIVITY_USE_RESTRICTED_NETWORKS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS
-UnflaggedApi: android.Manifest.permission#CONTROL_DEVICE_LIGHTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONTROL_DEVICE_LIGHTS
-UnflaggedApi: android.Manifest.permission#CONTROL_DISPLAY_COLOR_TRANSFORMS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS
-UnflaggedApi: android.Manifest.permission#CONTROL_DISPLAY_SATURATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONTROL_DISPLAY_SATURATION
-UnflaggedApi: android.Manifest.permission#CONTROL_INCALL_EXPERIENCE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONTROL_INCALL_EXPERIENCE
-UnflaggedApi: android.Manifest.permission#CONTROL_KEYGUARD_SECURE_NOTIFICATIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS
-UnflaggedApi: android.Manifest.permission#CONTROL_OEM_PAID_NETWORK_PREFERENCE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE
-UnflaggedApi: android.Manifest.permission#CONTROL_VPN:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CONTROL_VPN
-UnflaggedApi: android.Manifest.permission#CREATE_USERS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CREATE_USERS
-UnflaggedApi: android.Manifest.permission#CREATE_VIRTUAL_DEVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CREATE_VIRTUAL_DEVICE
-UnflaggedApi: android.Manifest.permission#CRYPT_KEEPER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CRYPT_KEEPER
-UnflaggedApi: android.Manifest.permission#DEVICE_POWER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.DEVICE_POWER
-UnflaggedApi: android.Manifest.permission#DISABLE_SYSTEM_SOUND_EFFECTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.DISABLE_SYSTEM_SOUND_EFFECTS
-UnflaggedApi: android.Manifest.permission#DISPATCH_PROVISIONING_MESSAGE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.DISPATCH_PROVISIONING_MESSAGE
-UnflaggedApi: android.Manifest.permission#DOMAIN_VERIFICATION_AGENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.DOMAIN_VERIFICATION_AGENT
-UnflaggedApi: android.Manifest.permission#ENTER_CAR_MODE_PRIORITIZED:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ENTER_CAR_MODE_PRIORITIZED
-UnflaggedApi: android.Manifest.permission#EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS
-UnflaggedApi: android.Manifest.permission#FORCE_BACK:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.FORCE_BACK
-UnflaggedApi: android.Manifest.permission#FORCE_STOP_PACKAGES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.FORCE_STOP_PACKAGES
-UnflaggedApi: android.Manifest.permission#GET_APP_METADATA:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.GET_APP_METADATA
-UnflaggedApi: android.Manifest.permission#GET_APP_OPS_STATS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.GET_APP_OPS_STATS
-UnflaggedApi: android.Manifest.permission#GET_HISTORICAL_APP_OPS_STATS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.GET_HISTORICAL_APP_OPS_STATS
-UnflaggedApi: android.Manifest.permission#GET_PROCESS_STATE_AND_OOM_SCORE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.GET_PROCESS_STATE_AND_OOM_SCORE
-UnflaggedApi: android.Manifest.permission#GET_RUNTIME_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.GET_RUNTIME_PERMISSIONS
-UnflaggedApi: android.Manifest.permission#GET_TOP_ACTIVITY_INFO:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.GET_TOP_ACTIVITY_INFO
-UnflaggedApi: android.Manifest.permission#GRANT_RUNTIME_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS
-UnflaggedApi: android.Manifest.permission#GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS
-UnflaggedApi: android.Manifest.permission#HANDLE_CAR_MODE_CHANGES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.HANDLE_CAR_MODE_CHANGES
-UnflaggedApi: android.Manifest.permission#HARDWARE_TEST:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.HARDWARE_TEST
-UnflaggedApi: android.Manifest.permission#HDMI_CEC:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.HDMI_CEC
-UnflaggedApi: android.Manifest.permission#INJECT_EVENTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INJECT_EVENTS
-UnflaggedApi: android.Manifest.permission#INSTALL_DPC_PACKAGES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INSTALL_DPC_PACKAGES
-UnflaggedApi: android.Manifest.permission#INSTALL_DYNAMIC_SYSTEM:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM
-UnflaggedApi: android.Manifest.permission#INSTALL_EXISTING_PACKAGES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INSTALL_EXISTING_PACKAGES
-UnflaggedApi: android.Manifest.permission#INSTALL_GRANT_RUNTIME_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS
-UnflaggedApi: android.Manifest.permission#INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE
-UnflaggedApi: android.Manifest.permission#INSTALL_PACKAGE_UPDATES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INSTALL_PACKAGE_UPDATES
-UnflaggedApi: android.Manifest.permission#INSTALL_SELF_UPDATES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INSTALL_SELF_UPDATES
-UnflaggedApi: android.Manifest.permission#INTENT_FILTER_VERIFICATION_AGENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INTENT_FILTER_VERIFICATION_AGENT
-UnflaggedApi: android.Manifest.permission#INTERACT_ACROSS_USERS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INTERACT_ACROSS_USERS
-UnflaggedApi: android.Manifest.permission#INTERACT_ACROSS_USERS_FULL:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INTERACT_ACROSS_USERS_FULL
-UnflaggedApi: android.Manifest.permission#INTERNAL_SYSTEM_WINDOW:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INTERNAL_SYSTEM_WINDOW
-UnflaggedApi: android.Manifest.permission#INVOKE_CARRIER_SETUP:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.INVOKE_CARRIER_SETUP
-UnflaggedApi: android.Manifest.permission#KILL_ALL_BACKGROUND_PROCESSES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.KILL_ALL_BACKGROUND_PROCESSES
-UnflaggedApi: android.Manifest.permission#KILL_UID:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.KILL_UID
-UnflaggedApi: android.Manifest.permission#LAUNCH_DEVICE_MANAGER_SETUP:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.LAUNCH_DEVICE_MANAGER_SETUP
+UnflaggedApi: android.Manifest.permission#CAMERA_HEADLESS_SYSTEM_USER:
+    New API must be flagged with @FlaggedApi: field android.Manifest.permission.CAMERA_HEADLESS_SYSTEM_USER
 UnflaggedApi: android.Manifest.permission#LAUNCH_PERMISSION_SETTINGS:
     New API must be flagged with @FlaggedApi: field android.Manifest.permission.LAUNCH_PERMISSION_SETTINGS
-UnflaggedApi: android.Manifest.permission#LOCAL_MAC_ADDRESS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.LOCAL_MAC_ADDRESS
-UnflaggedApi: android.Manifest.permission#LOCATION_BYPASS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.LOCATION_BYPASS
-UnflaggedApi: android.Manifest.permission#LOCK_DEVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.LOCK_DEVICE
-UnflaggedApi: android.Manifest.permission#LOG_FOREGROUND_RESOURCE_USE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.LOG_FOREGROUND_RESOURCE_USE
-UnflaggedApi: android.Manifest.permission#LOOP_RADIO:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.LOOP_RADIO
-UnflaggedApi: android.Manifest.permission#MANAGE_ACCESSIBILITY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_ACCESSIBILITY
-UnflaggedApi: android.Manifest.permission#MANAGE_ACTIVITY_TASKS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_ACTIVITY_TASKS
-UnflaggedApi: android.Manifest.permission#MANAGE_APP_HIBERNATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_APP_HIBERNATION
-UnflaggedApi: android.Manifest.permission#MANAGE_APP_OPS_RESTRICTIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_APP_OPS_RESTRICTIONS
-UnflaggedApi: android.Manifest.permission#MANAGE_APP_PREDICTIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_APP_PREDICTIONS
-UnflaggedApi: android.Manifest.permission#MANAGE_APP_TOKENS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_APP_TOKENS
-UnflaggedApi: android.Manifest.permission#MANAGE_AUTO_FILL:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_AUTO_FILL
-UnflaggedApi: android.Manifest.permission#MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED
-UnflaggedApi: android.Manifest.permission#MANAGE_CARRIER_OEM_UNLOCK_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE
-UnflaggedApi: android.Manifest.permission#MANAGE_CA_CERTIFICATES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_CA_CERTIFICATES
-UnflaggedApi: android.Manifest.permission#MANAGE_CLIPBOARD_ACCESS_NOTIFICATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_CLIPBOARD_ACCESS_NOTIFICATION
-UnflaggedApi: android.Manifest.permission#MANAGE_CLOUDSEARCH:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_CLOUDSEARCH
-UnflaggedApi: android.Manifest.permission#MANAGE_CONTENT_CAPTURE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_CONTENT_CAPTURE
-UnflaggedApi: android.Manifest.permission#MANAGE_CONTENT_SUGGESTIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS
-UnflaggedApi: android.Manifest.permission#MANAGE_DEBUGGING:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_DEBUGGING
-UnflaggedApi: android.Manifest.permission#MANAGE_DEFAULT_APPLICATIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_DEFAULT_APPLICATIONS
-UnflaggedApi: android.Manifest.permission#MANAGE_DEVICE_ADMINS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_DEVICE_ADMINS
-UnflaggedApi: android.Manifest.permission#MANAGE_DEVICE_POLICY_APP_EXEMPTIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_DEVICE_POLICY_APP_EXEMPTIONS
-UnflaggedApi: android.Manifest.permission#MANAGE_ETHERNET_NETWORKS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_ETHERNET_NETWORKS
-UnflaggedApi: android.Manifest.permission#MANAGE_FACTORY_RESET_PROTECTION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION
-UnflaggedApi: android.Manifest.permission#MANAGE_GAME_ACTIVITY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_GAME_ACTIVITY
-UnflaggedApi: android.Manifest.permission#MANAGE_GAME_MODE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_GAME_MODE
-UnflaggedApi: android.Manifest.permission#MANAGE_HOTWORD_DETECTION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_HOTWORD_DETECTION
-UnflaggedApi: android.Manifest.permission#MANAGE_IPSEC_TUNNELS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_IPSEC_TUNNELS
-UnflaggedApi: android.Manifest.permission#MANAGE_LOW_POWER_STANDBY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_LOW_POWER_STANDBY
-UnflaggedApi: android.Manifest.permission#MANAGE_MUSIC_RECOGNITION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_MUSIC_RECOGNITION
-UnflaggedApi: android.Manifest.permission#MANAGE_NOTIFICATION_LISTENERS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS
-UnflaggedApi: android.Manifest.permission#MANAGE_ONE_TIME_PERMISSION_SESSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS
-UnflaggedApi: android.Manifest.permission#MANAGE_PROFILE_AND_DEVICE_OWNERS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS
-UnflaggedApi: android.Manifest.permission#MANAGE_ROLE_HOLDERS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_ROLE_HOLDERS
-UnflaggedApi: android.Manifest.permission#MANAGE_ROLLBACKS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_ROLLBACKS
-UnflaggedApi: android.Manifest.permission#MANAGE_ROTATION_RESOLVER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_ROTATION_RESOLVER
-UnflaggedApi: android.Manifest.permission#MANAGE_SAFETY_CENTER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_SAFETY_CENTER
-UnflaggedApi: android.Manifest.permission#MANAGE_SEARCH_UI:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_SEARCH_UI
-UnflaggedApi: android.Manifest.permission#MANAGE_SENSOR_PRIVACY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_SENSOR_PRIVACY
-UnflaggedApi: android.Manifest.permission#MANAGE_SMARTSPACE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_SMARTSPACE
-UnflaggedApi: android.Manifest.permission#MANAGE_SOUND_TRIGGER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_SOUND_TRIGGER
-UnflaggedApi: android.Manifest.permission#MANAGE_SPEECH_RECOGNITION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_SPEECH_RECOGNITION
-UnflaggedApi: android.Manifest.permission#MANAGE_SUBSCRIPTION_PLANS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_SUBSCRIPTION_PLANS
-UnflaggedApi: android.Manifest.permission#MANAGE_SUBSCRIPTION_USER_ASSOCIATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION
-UnflaggedApi: android.Manifest.permission#MANAGE_TEST_NETWORKS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_TEST_NETWORKS
-UnflaggedApi: android.Manifest.permission#MANAGE_TIME_AND_ZONE_DETECTION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION
-UnflaggedApi: android.Manifest.permission#MANAGE_UI_TRANSLATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_UI_TRANSLATION
-UnflaggedApi: android.Manifest.permission#MANAGE_USB:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_USB
-UnflaggedApi: android.Manifest.permission#MANAGE_USERS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_USERS
-UnflaggedApi: android.Manifest.permission#MANAGE_USER_OEM_UNLOCK_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_USER_OEM_UNLOCK_STATE
-UnflaggedApi: android.Manifest.permission#MANAGE_WALLPAPER_EFFECTS_GENERATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION
-UnflaggedApi: android.Manifest.permission#MANAGE_WEAK_ESCROW_TOKEN:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_WEAK_ESCROW_TOKEN
-UnflaggedApi: android.Manifest.permission#MANAGE_WEARABLE_SENSING_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_WEARABLE_SENSING_SERVICE
-UnflaggedApi: android.Manifest.permission#MANAGE_WIFI_COUNTRY_CODE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_WIFI_COUNTRY_CODE
-UnflaggedApi: android.Manifest.permission#MARK_DEVICE_ORGANIZATION_OWNED:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MARK_DEVICE_ORGANIZATION_OWNED
-UnflaggedApi: android.Manifest.permission#MEDIA_RESOURCE_OVERRIDE_PID:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MEDIA_RESOURCE_OVERRIDE_PID
-UnflaggedApi: android.Manifest.permission#MIGRATE_HEALTH_CONNECT_DATA:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MIGRATE_HEALTH_CONNECT_DATA
-UnflaggedApi: android.Manifest.permission#MODIFY_APPWIDGET_BIND_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS
-UnflaggedApi: android.Manifest.permission#MODIFY_AUDIO_ROUTING:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MODIFY_AUDIO_ROUTING
-UnflaggedApi: android.Manifest.permission#MODIFY_AUDIO_SETTINGS_PRIVILEGED:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED
-UnflaggedApi: android.Manifest.permission#MODIFY_CELL_BROADCASTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MODIFY_CELL_BROADCASTS
-UnflaggedApi: android.Manifest.permission#MODIFY_DAY_NIGHT_MODE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MODIFY_DAY_NIGHT_MODE
-UnflaggedApi: android.Manifest.permission#MODIFY_PARENTAL_CONTROLS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MODIFY_PARENTAL_CONTROLS
-UnflaggedApi: android.Manifest.permission#MODIFY_QUIET_MODE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MODIFY_QUIET_MODE
-UnflaggedApi: android.Manifest.permission#MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE
-UnflaggedApi: android.Manifest.permission#MONITOR_DEVICE_CONFIG_ACCESS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MONITOR_DEVICE_CONFIG_ACCESS
-UnflaggedApi: android.Manifest.permission#MOVE_PACKAGE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MOVE_PACKAGE
-UnflaggedApi: android.Manifest.permission#NETWORK_AIRPLANE_MODE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_AIRPLANE_MODE
-UnflaggedApi: android.Manifest.permission#NETWORK_CARRIER_PROVISIONING:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_CARRIER_PROVISIONING
-UnflaggedApi: android.Manifest.permission#NETWORK_FACTORY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_FACTORY
-UnflaggedApi: android.Manifest.permission#NETWORK_MANAGED_PROVISIONING:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_MANAGED_PROVISIONING
-UnflaggedApi: android.Manifest.permission#NETWORK_SCAN:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_SCAN
-UnflaggedApi: android.Manifest.permission#NETWORK_SETTINGS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_SETTINGS
-UnflaggedApi: android.Manifest.permission#NETWORK_SETUP_WIZARD:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_SETUP_WIZARD
-UnflaggedApi: android.Manifest.permission#NETWORK_SIGNAL_STRENGTH_WAKEUP:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP
-UnflaggedApi: android.Manifest.permission#NETWORK_STACK:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_STACK
-UnflaggedApi: android.Manifest.permission#NETWORK_STATS_PROVIDER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NETWORK_STATS_PROVIDER
-UnflaggedApi: android.Manifest.permission#NFC_SET_CONTROLLER_ALWAYS_ON:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON
-UnflaggedApi: android.Manifest.permission#NOTIFICATION_DURING_SETUP:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NOTIFICATION_DURING_SETUP
-UnflaggedApi: android.Manifest.permission#NOTIFY_TV_INPUTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.NOTIFY_TV_INPUTS
-UnflaggedApi: android.Manifest.permission#OBSERVE_APP_USAGE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.OBSERVE_APP_USAGE
-UnflaggedApi: android.Manifest.permission#OBSERVE_NETWORK_POLICY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.OBSERVE_NETWORK_POLICY
-UnflaggedApi: android.Manifest.permission#OBSERVE_ROLE_HOLDERS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.OBSERVE_ROLE_HOLDERS
-UnflaggedApi: android.Manifest.permission#OBSERVE_SENSOR_PRIVACY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.OBSERVE_SENSOR_PRIVACY
-UnflaggedApi: android.Manifest.permission#OPEN_ACCESSIBILITY_DETAILS_SETTINGS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS
-UnflaggedApi: android.Manifest.permission#OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD
-UnflaggedApi: android.Manifest.permission#PACKAGE_VERIFICATION_AGENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PACKAGE_VERIFICATION_AGENT
-UnflaggedApi: android.Manifest.permission#PACKET_KEEPALIVE_OFFLOAD:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD
-UnflaggedApi: android.Manifest.permission#PEERS_MAC_ADDRESS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PEERS_MAC_ADDRESS
-UnflaggedApi: android.Manifest.permission#PERFORM_CDMA_PROVISIONING:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PERFORM_CDMA_PROVISIONING
-UnflaggedApi: android.Manifest.permission#PERFORM_IMS_SINGLE_REGISTRATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION
-UnflaggedApi: android.Manifest.permission#PERFORM_SIM_ACTIVATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PERFORM_SIM_ACTIVATION
-UnflaggedApi: android.Manifest.permission#POWER_SAVER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.POWER_SAVER
-UnflaggedApi: android.Manifest.permission#PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE
-UnflaggedApi: android.Manifest.permission#PROVIDE_RESOLVER_RANKER_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PROVIDE_RESOLVER_RANKER_SERVICE
-UnflaggedApi: android.Manifest.permission#PROVIDE_TRUST_AGENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PROVIDE_TRUST_AGENT
-UnflaggedApi: android.Manifest.permission#PROVISION_DEMO_DEVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.PROVISION_DEMO_DEVICE
-UnflaggedApi: android.Manifest.permission#QUERY_ADMIN_POLICY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.QUERY_ADMIN_POLICY
-UnflaggedApi: android.Manifest.permission#QUERY_CLONED_APPS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.QUERY_CLONED_APPS
-UnflaggedApi: android.Manifest.permission#QUERY_USERS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.QUERY_USERS
-UnflaggedApi: android.Manifest.permission#RADIO_SCAN_WITHOUT_LOCATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RADIO_SCAN_WITHOUT_LOCATION
-UnflaggedApi: android.Manifest.permission#READ_ACTIVE_EMERGENCY_SESSION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION
-UnflaggedApi: android.Manifest.permission#READ_APP_SPECIFIC_LOCALES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_APP_SPECIFIC_LOCALES
-UnflaggedApi: android.Manifest.permission#READ_CARRIER_APP_INFO:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_CARRIER_APP_INFO
-UnflaggedApi: android.Manifest.permission#READ_CELL_BROADCASTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_CELL_BROADCASTS
-UnflaggedApi: android.Manifest.permission#READ_CLIPBOARD_IN_BACKGROUND:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_CLIPBOARD_IN_BACKGROUND
-UnflaggedApi: android.Manifest.permission#READ_CONTENT_RATING_SYSTEMS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_CONTENT_RATING_SYSTEMS
-UnflaggedApi: android.Manifest.permission#READ_DEVICE_CONFIG:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_DEVICE_CONFIG
-UnflaggedApi: android.Manifest.permission#READ_DREAM_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_DREAM_STATE
-UnflaggedApi: android.Manifest.permission#READ_GLOBAL_APP_SEARCH_DATA:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_GLOBAL_APP_SEARCH_DATA
 UnflaggedApi: android.Manifest.permission#READ_INSTALLED_SESSION_PATHS:
     New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_INSTALLED_SESSION_PATHS
-UnflaggedApi: android.Manifest.permission#READ_INSTALL_SESSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_INSTALL_SESSIONS
-UnflaggedApi: android.Manifest.permission#READ_NETWORK_USAGE_HISTORY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_NETWORK_USAGE_HISTORY
-UnflaggedApi: android.Manifest.permission#READ_OEM_UNLOCK_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_OEM_UNLOCK_STATE
-UnflaggedApi: android.Manifest.permission#READ_PEOPLE_DATA:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_PEOPLE_DATA
-UnflaggedApi: android.Manifest.permission#READ_PRINT_SERVICES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_PRINT_SERVICES
-UnflaggedApi: android.Manifest.permission#READ_PRINT_SERVICE_RECOMMENDATIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS
-UnflaggedApi: android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
-UnflaggedApi: android.Manifest.permission#READ_PROJECTION_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_PROJECTION_STATE
-UnflaggedApi: android.Manifest.permission#READ_RESTRICTED_STATS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_RESTRICTED_STATS
-UnflaggedApi: android.Manifest.permission#READ_RUNTIME_PROFILES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_RUNTIME_PROFILES
-UnflaggedApi: android.Manifest.permission#READ_SAFETY_CENTER_STATUS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_SAFETY_CENTER_STATUS
-UnflaggedApi: android.Manifest.permission#READ_SEARCH_INDEXABLES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_SEARCH_INDEXABLES
-UnflaggedApi: android.Manifest.permission#READ_SYSTEM_UPDATE_INFO:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_SYSTEM_UPDATE_INFO
-UnflaggedApi: android.Manifest.permission#READ_WALLPAPER_INTERNAL:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_WALLPAPER_INTERNAL
-UnflaggedApi: android.Manifest.permission#READ_WIFI_CREDENTIAL:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_WIFI_CREDENTIAL
-UnflaggedApi: android.Manifest.permission#READ_WRITE_SYNC_DISABLED_MODE_CONFIG:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.READ_WRITE_SYNC_DISABLED_MODE_CONFIG
-UnflaggedApi: android.Manifest.permission#REAL_GET_TASKS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REAL_GET_TASKS
-UnflaggedApi: android.Manifest.permission#RECEIVE_BLUETOOTH_MAP:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RECEIVE_BLUETOOTH_MAP
-UnflaggedApi: android.Manifest.permission#RECEIVE_DATA_ACTIVITY_CHANGE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RECEIVE_DATA_ACTIVITY_CHANGE
-UnflaggedApi: android.Manifest.permission#RECEIVE_DEVICE_CUSTOMIZATION_READY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY
-UnflaggedApi: android.Manifest.permission#RECEIVE_EMERGENCY_BROADCAST:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST
-UnflaggedApi: android.Manifest.permission#RECEIVE_WIFI_CREDENTIAL_CHANGE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE
-UnflaggedApi: android.Manifest.permission#RECORD_BACKGROUND_AUDIO:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RECORD_BACKGROUND_AUDIO
-UnflaggedApi: android.Manifest.permission#RECOVERY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RECOVERY
-UnflaggedApi: android.Manifest.permission#RECOVER_KEYSTORE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RECOVER_KEYSTORE
-UnflaggedApi: android.Manifest.permission#REGISTER_CALL_PROVIDER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REGISTER_CALL_PROVIDER
-UnflaggedApi: android.Manifest.permission#REGISTER_CONNECTION_MANAGER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REGISTER_CONNECTION_MANAGER
 UnflaggedApi: android.Manifest.permission#REGISTER_NSD_OFFLOAD_ENGINE:
     New API must be flagged with @FlaggedApi: field android.Manifest.permission.REGISTER_NSD_OFFLOAD_ENGINE
-UnflaggedApi: android.Manifest.permission#REGISTER_SIM_SUBSCRIPTION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REGISTER_SIM_SUBSCRIPTION
-UnflaggedApi: android.Manifest.permission#REGISTER_STATS_PULL_ATOM:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REGISTER_STATS_PULL_ATOM
-UnflaggedApi: android.Manifest.permission#REMOTE_DISPLAY_PROVIDER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REMOTE_DISPLAY_PROVIDER
-UnflaggedApi: android.Manifest.permission#REMOVE_DRM_CERTIFICATES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REMOVE_DRM_CERTIFICATES
-UnflaggedApi: android.Manifest.permission#REMOVE_TASKS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REMOVE_TASKS
-UnflaggedApi: android.Manifest.permission#RENOUNCE_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RENOUNCE_PERMISSIONS
 UnflaggedApi: android.Manifest.permission#REPORT_USAGE_STATS:
     New API must be flagged with @FlaggedApi: field android.Manifest.permission.REPORT_USAGE_STATS
-UnflaggedApi: android.Manifest.permission#REQUEST_NOTIFICATION_ASSISTANT_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE
-UnflaggedApi: android.Manifest.permission#RESET_PASSWORD:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RESET_PASSWORD
-UnflaggedApi: android.Manifest.permission#RESTART_WIFI_SUBSYSTEM:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RESTART_WIFI_SUBSYSTEM
-UnflaggedApi: android.Manifest.permission#RESTORE_RUNTIME_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS
-UnflaggedApi: android.Manifest.permission#RESTRICTED_VR_ACCESS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RESTRICTED_VR_ACCESS
-UnflaggedApi: android.Manifest.permission#RETRIEVE_WINDOW_CONTENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.RETRIEVE_WINDOW_CONTENT
-UnflaggedApi: android.Manifest.permission#REVIEW_ACCESSIBILITY_SERVICES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REVIEW_ACCESSIBILITY_SERVICES
-UnflaggedApi: android.Manifest.permission#REVOKE_RUNTIME_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS
-UnflaggedApi: android.Manifest.permission#ROTATE_SURFACE_FLINGER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.ROTATE_SURFACE_FLINGER
-UnflaggedApi: android.Manifest.permission#SATELLITE_COMMUNICATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SATELLITE_COMMUNICATION
-UnflaggedApi: android.Manifest.permission#SCHEDULE_PRIORITIZED_ALARM:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SCHEDULE_PRIORITIZED_ALARM
-UnflaggedApi: android.Manifest.permission#SECURE_ELEMENT_PRIVILEGED_OPERATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION
-UnflaggedApi: android.Manifest.permission#SEND_CATEGORY_CAR_NOTIFICATIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SEND_CATEGORY_CAR_NOTIFICATIONS
-UnflaggedApi: android.Manifest.permission#SEND_DEVICE_CUSTOMIZATION_READY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SEND_DEVICE_CUSTOMIZATION_READY
-UnflaggedApi: android.Manifest.permission#SEND_SAFETY_CENTER_UPDATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SEND_SAFETY_CENTER_UPDATE
-UnflaggedApi: android.Manifest.permission#SEND_SHOW_SUSPENDED_APP_DETAILS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SEND_SHOW_SUSPENDED_APP_DETAILS
-UnflaggedApi: android.Manifest.permission#SEND_SMS_NO_CONFIRMATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SEND_SMS_NO_CONFIRMATION
-UnflaggedApi: android.Manifest.permission#SERIAL_PORT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SERIAL_PORT
-UnflaggedApi: android.Manifest.permission#SET_ACTIVITY_WATCHER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_ACTIVITY_WATCHER
-UnflaggedApi: android.Manifest.permission#SET_CLIP_SOURCE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_CLIP_SOURCE
-UnflaggedApi: android.Manifest.permission#SET_DEFAULT_ACCOUNT_FOR_CONTACTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS
-UnflaggedApi: android.Manifest.permission#SET_HARMFUL_APP_WARNINGS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_HARMFUL_APP_WARNINGS
-UnflaggedApi: android.Manifest.permission#SET_LOW_POWER_STANDBY_PORTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_LOW_POWER_STANDBY_PORTS
-UnflaggedApi: android.Manifest.permission#SET_MEDIA_KEY_LISTENER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_MEDIA_KEY_LISTENER
-UnflaggedApi: android.Manifest.permission#SET_ORIENTATION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_ORIENTATION
-UnflaggedApi: android.Manifest.permission#SET_POINTER_SPEED:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_POINTER_SPEED
-UnflaggedApi: android.Manifest.permission#SET_SCREEN_COMPATIBILITY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_SCREEN_COMPATIBILITY
-UnflaggedApi: android.Manifest.permission#SET_SYSTEM_AUDIO_CAPTION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_SYSTEM_AUDIO_CAPTION
-UnflaggedApi: android.Manifest.permission#SET_UNRESTRICTED_KEEP_CLEAR_AREAS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS
-UnflaggedApi: android.Manifest.permission#SET_VOLUME_KEY_LONG_PRESS_LISTENER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER
-UnflaggedApi: android.Manifest.permission#SET_WALLPAPER_COMPONENT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_WALLPAPER_COMPONENT
-UnflaggedApi: android.Manifest.permission#SET_WALLPAPER_DIM_AMOUNT:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SET_WALLPAPER_DIM_AMOUNT
-UnflaggedApi: android.Manifest.permission#SHOW_KEYGUARD_MESSAGE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SHOW_KEYGUARD_MESSAGE
-UnflaggedApi: android.Manifest.permission#SHUTDOWN:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SHUTDOWN
-UnflaggedApi: android.Manifest.permission#SIGNAL_REBOOT_READINESS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SIGNAL_REBOOT_READINESS
-UnflaggedApi: android.Manifest.permission#SOUND_TRIGGER_RUN_IN_BATTERY_SAVER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER
-UnflaggedApi: android.Manifest.permission#STAGE_HEALTH_CONNECT_REMOTE_DATA:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.STAGE_HEALTH_CONNECT_REMOTE_DATA
-UnflaggedApi: android.Manifest.permission#START_ACTIVITIES_FROM_BACKGROUND:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND
-UnflaggedApi: android.Manifest.permission#START_CROSS_PROFILE_ACTIVITIES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.START_CROSS_PROFILE_ACTIVITIES
-UnflaggedApi: android.Manifest.permission#START_REVIEW_PERMISSION_DECISIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.START_REVIEW_PERMISSION_DECISIONS
-UnflaggedApi: android.Manifest.permission#START_TASKS_FROM_RECENTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.START_TASKS_FROM_RECENTS
-UnflaggedApi: android.Manifest.permission#STATUS_BAR_SERVICE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.STATUS_BAR_SERVICE
-UnflaggedApi: android.Manifest.permission#STOP_APP_SWITCHES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.STOP_APP_SWITCHES
-UnflaggedApi: android.Manifest.permission#SUBSTITUTE_NOTIFICATION_APP_NAME:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SUBSTITUTE_NOTIFICATION_APP_NAME
-UnflaggedApi: android.Manifest.permission#SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON
-UnflaggedApi: android.Manifest.permission#SUGGEST_EXTERNAL_TIME:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SUGGEST_EXTERNAL_TIME
-UnflaggedApi: android.Manifest.permission#SUSPEND_APPS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SUSPEND_APPS
-UnflaggedApi: android.Manifest.permission#SYSTEM_APPLICATION_OVERLAY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SYSTEM_APPLICATION_OVERLAY
-UnflaggedApi: android.Manifest.permission#SYSTEM_CAMERA:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.SYSTEM_CAMERA
-UnflaggedApi: android.Manifest.permission#TETHER_PRIVILEGED:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.TETHER_PRIVILEGED
-UnflaggedApi: android.Manifest.permission#TIS_EXTENSION_INTERFACE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.TIS_EXTENSION_INTERFACE
-UnflaggedApi: android.Manifest.permission#TOGGLE_AUTOMOTIVE_PROJECTION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION
-UnflaggedApi: android.Manifest.permission#TRIGGER_LOST_MODE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.TRIGGER_LOST_MODE
-UnflaggedApi: android.Manifest.permission#TV_INPUT_HARDWARE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.TV_INPUT_HARDWARE
-UnflaggedApi: android.Manifest.permission#TV_VIRTUAL_REMOTE_CONTROLLER:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.TV_VIRTUAL_REMOTE_CONTROLLER
-UnflaggedApi: android.Manifest.permission#UNLIMITED_SHORTCUTS_API_CALLS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.UNLIMITED_SHORTCUTS_API_CALLS
-UnflaggedApi: android.Manifest.permission#UPDATE_APP_OPS_STATS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.UPDATE_APP_OPS_STATS
-UnflaggedApi: android.Manifest.permission#UPDATE_DEVICE_MANAGEMENT_RESOURCES:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES
-UnflaggedApi: android.Manifest.permission#UPDATE_DOMAIN_VERIFICATION_USER_SELECTION:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION
-UnflaggedApi: android.Manifest.permission#UPDATE_FONTS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.UPDATE_FONTS
-UnflaggedApi: android.Manifest.permission#UPDATE_LOCK:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.UPDATE_LOCK
-UnflaggedApi: android.Manifest.permission#UPGRADE_RUNTIME_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS
-UnflaggedApi: android.Manifest.permission#USER_ACTIVITY:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.USER_ACTIVITY
-UnflaggedApi: android.Manifest.permission#USE_COLORIZED_NOTIFICATIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.USE_COLORIZED_NOTIFICATIONS
-UnflaggedApi: android.Manifest.permission#USE_RESERVED_DISK:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.USE_RESERVED_DISK
-UnflaggedApi: android.Manifest.permission#UWB_PRIVILEGED:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.UWB_PRIVILEGED
-UnflaggedApi: android.Manifest.permission#WHITELIST_AUTO_REVOKE_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS
-UnflaggedApi: android.Manifest.permission#WHITELIST_RESTRICTED_PERMISSIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS
-UnflaggedApi: android.Manifest.permission#WIFI_ACCESS_COEX_UNSAFE_CHANNELS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS
-UnflaggedApi: android.Manifest.permission#WIFI_SET_DEVICE_MOBILITY_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WIFI_SET_DEVICE_MOBILITY_STATE
-UnflaggedApi: android.Manifest.permission#WIFI_UPDATE_COEX_UNSAFE_CHANNELS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS
-UnflaggedApi: android.Manifest.permission#WIFI_UPDATE_USABILITY_STATS_SCORE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE
-UnflaggedApi: android.Manifest.permission#WRITE_ALLOWLISTED_DEVICE_CONFIG:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WRITE_ALLOWLISTED_DEVICE_CONFIG
-UnflaggedApi: android.Manifest.permission#WRITE_DEVICE_CONFIG:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WRITE_DEVICE_CONFIG
-UnflaggedApi: android.Manifest.permission#WRITE_DREAM_STATE:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WRITE_DREAM_STATE
-UnflaggedApi: android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS
-UnflaggedApi: android.Manifest.permission#WRITE_OBB:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WRITE_OBB
-UnflaggedApi: android.Manifest.permission#WRITE_SECURITY_LOG:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WRITE_SECURITY_LOG
-UnflaggedApi: android.Manifest.permission#WRITE_SMS:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission.WRITE_SMS
-UnflaggedApi: android.Manifest.permission_group#UNDEFINED:
-    New API must be flagged with @FlaggedApi: field android.Manifest.permission_group.UNDEFINED
-UnflaggedApi: android.R.array#config_keySystemUuidMapping:
-    New API must be flagged with @FlaggedApi: field android.R.array.config_keySystemUuidMapping
-UnflaggedApi: android.R.array#config_optionalIpSecAlgorithms:
-    New API must be flagged with @FlaggedApi: field android.R.array.config_optionalIpSecAlgorithms
-UnflaggedApi: android.R.attr#allowClearUserDataOnFailedRestore:
-    New API must be flagged with @FlaggedApi: field android.R.attr.allowClearUserDataOnFailedRestore
-UnflaggedApi: android.R.attr#gameSessionService:
-    New API must be flagged with @FlaggedApi: field android.R.attr.gameSessionService
-UnflaggedApi: android.R.attr#hotwordDetectionService:
-    New API must be flagged with @FlaggedApi: field android.R.attr.hotwordDetectionService
-UnflaggedApi: android.R.attr#isVrOnly:
-    New API must be flagged with @FlaggedApi: field android.R.attr.isVrOnly
-UnflaggedApi: android.R.attr#minExtensionVersion:
-    New API must be flagged with @FlaggedApi: field android.R.attr.minExtensionVersion
-UnflaggedApi: android.R.attr#playHomeTransitionSound:
-    New API must be flagged with @FlaggedApi: field android.R.attr.playHomeTransitionSound
-UnflaggedApi: android.R.attr#requiredSystemPropertyName:
-    New API must be flagged with @FlaggedApi: field android.R.attr.requiredSystemPropertyName
-UnflaggedApi: android.R.attr#requiredSystemPropertyValue:
-    New API must be flagged with @FlaggedApi: field android.R.attr.requiredSystemPropertyValue
-UnflaggedApi: android.R.attr#sdkVersion:
-    New API must be flagged with @FlaggedApi: field android.R.attr.sdkVersion
-UnflaggedApi: android.R.attr#supportsAmbientMode:
-    New API must be flagged with @FlaggedApi: field android.R.attr.supportsAmbientMode
-UnflaggedApi: android.R.attr#userRestriction:
-    New API must be flagged with @FlaggedApi: field android.R.attr.userRestriction
-UnflaggedApi: android.R.attr#visualQueryDetectionService:
-    New API must be flagged with @FlaggedApi: field android.R.attr.visualQueryDetectionService
-UnflaggedApi: android.R.bool#config_enableDefaultNotes:
-    New API must be flagged with @FlaggedApi: field android.R.bool.config_enableDefaultNotes
-UnflaggedApi: android.R.bool#config_enableDefaultNotesForWorkProfile:
-    New API must be flagged with @FlaggedApi: field android.R.bool.config_enableDefaultNotesForWorkProfile
-UnflaggedApi: android.R.bool#config_enableQrCodeScannerOnLockScreen:
-    New API must be flagged with @FlaggedApi: field android.R.bool.config_enableQrCodeScannerOnLockScreen
-UnflaggedApi: android.R.bool#config_safetyProtectionEnabled:
-    New API must be flagged with @FlaggedApi: field android.R.bool.config_safetyProtectionEnabled
-UnflaggedApi: android.R.bool#config_sendPackageName:
-    New API must be flagged with @FlaggedApi: field android.R.bool.config_sendPackageName
-UnflaggedApi: android.R.bool#config_showDefaultAssistant:
-    New API must be flagged with @FlaggedApi: field android.R.bool.config_showDefaultAssistant
-UnflaggedApi: android.R.bool#config_showDefaultEmergency:
-    New API must be flagged with @FlaggedApi: field android.R.bool.config_showDefaultEmergency
-UnflaggedApi: android.R.bool#config_showDefaultHome:
-    New API must be flagged with @FlaggedApi: field android.R.bool.config_showDefaultHome
-UnflaggedApi: android.R.color#system_notification_accent_color:
-    New API must be flagged with @FlaggedApi: field android.R.color.system_notification_accent_color
-UnflaggedApi: android.R.dimen#config_restrictedIconSize:
-    New API must be flagged with @FlaggedApi: field android.R.dimen.config_restrictedIconSize
-UnflaggedApi: android.R.dimen#config_viewConfigurationHandwritingGestureLineMargin:
-    New API must be flagged with @FlaggedApi: field android.R.dimen.config_viewConfigurationHandwritingGestureLineMargin
-UnflaggedApi: android.R.drawable#ic_info:
-    New API must be flagged with @FlaggedApi: field android.R.drawable.ic_info
-UnflaggedApi: android.R.drawable#ic_safety_protection:
-    New API must be flagged with @FlaggedApi: field android.R.drawable.ic_safety_protection
-UnflaggedApi: android.R.raw#loaderror:
-    New API must be flagged with @FlaggedApi: field android.R.raw.loaderror
-UnflaggedApi: android.R.raw#nodomain:
-    New API must be flagged with @FlaggedApi: field android.R.raw.nodomain
-UnflaggedApi: android.R.string#config_customMediaKeyDispatcher:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_customMediaKeyDispatcher
-UnflaggedApi: android.R.string#config_customMediaSessionPolicyProvider:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_customMediaSessionPolicyProvider
-UnflaggedApi: android.R.string#config_defaultAssistant:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_defaultAssistant
-UnflaggedApi: android.R.string#config_defaultAutomotiveNavigation:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_defaultAutomotiveNavigation
-UnflaggedApi: android.R.string#config_defaultBrowser:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_defaultBrowser
-UnflaggedApi: android.R.string#config_defaultCallRedirection:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_defaultCallRedirection
-UnflaggedApi: android.R.string#config_defaultCallScreening:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_defaultCallScreening
-UnflaggedApi: android.R.string#config_defaultDialer:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_defaultDialer
-UnflaggedApi: android.R.string#config_defaultNotes:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_defaultNotes
 UnflaggedApi: android.R.string#config_defaultRetailDemo:
     New API must be flagged with @FlaggedApi: field android.R.string.config_defaultRetailDemo
-UnflaggedApi: android.R.string#config_defaultSms:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_defaultSms
-UnflaggedApi: android.R.string#config_devicePolicyManagement:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_devicePolicyManagement
-UnflaggedApi: android.R.string#config_feedbackIntentExtraKey:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_feedbackIntentExtraKey
-UnflaggedApi: android.R.string#config_feedbackIntentNameKey:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_feedbackIntentNameKey
-UnflaggedApi: android.R.string#config_helpIntentExtraKey:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_helpIntentExtraKey
-UnflaggedApi: android.R.string#config_helpIntentNameKey:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_helpIntentNameKey
-UnflaggedApi: android.R.string#config_helpPackageNameKey:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_helpPackageNameKey
-UnflaggedApi: android.R.string#config_helpPackageNameValue:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_helpPackageNameValue
-UnflaggedApi: android.R.string#config_systemActivityRecognizer:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemActivityRecognizer
-UnflaggedApi: android.R.string#config_systemAmbientAudioIntelligence:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemAmbientAudioIntelligence
-UnflaggedApi: android.R.string#config_systemAppProtectionService:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemAppProtectionService
-UnflaggedApi: android.R.string#config_systemAudioIntelligence:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemAudioIntelligence
-UnflaggedApi: android.R.string#config_systemAutomotiveCalendarSyncManager:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemAutomotiveCalendarSyncManager
-UnflaggedApi: android.R.string#config_systemAutomotiveCluster:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemAutomotiveCluster
-UnflaggedApi: android.R.string#config_systemAutomotiveProjection:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemAutomotiveProjection
-UnflaggedApi: android.R.string#config_systemCallStreaming:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemCallStreaming
-UnflaggedApi: android.R.string#config_systemCompanionDeviceProvider:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemCompanionDeviceProvider
-UnflaggedApi: android.R.string#config_systemContacts:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemContacts
-UnflaggedApi: android.R.string#config_systemFinancedDeviceController:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemFinancedDeviceController
-UnflaggedApi: android.R.string#config_systemGallery:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemGallery
-UnflaggedApi: android.R.string#config_systemNotificationIntelligence:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemNotificationIntelligence
-UnflaggedApi: android.R.string#config_systemSettingsIntelligence:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemSettingsIntelligence
-UnflaggedApi: android.R.string#config_systemShell:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemShell
-UnflaggedApi: android.R.string#config_systemSpeechRecognizer:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemSpeechRecognizer
-UnflaggedApi: android.R.string#config_systemSupervision:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemSupervision
-UnflaggedApi: android.R.string#config_systemTelevisionNotificationHandler:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemTelevisionNotificationHandler
-UnflaggedApi: android.R.string#config_systemTextIntelligence:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemTextIntelligence
-UnflaggedApi: android.R.string#config_systemUi:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemUi
-UnflaggedApi: android.R.string#config_systemUiIntelligence:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemUiIntelligence
-UnflaggedApi: android.R.string#config_systemVisualIntelligence:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemVisualIntelligence
-UnflaggedApi: android.R.string#config_systemWearHealthService:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemWearHealthService
-UnflaggedApi: android.R.string#config_systemWellbeing:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemWellbeing
-UnflaggedApi: android.R.string#config_systemWifiCoexManager:
-    New API must be flagged with @FlaggedApi: field android.R.string.config_systemWifiCoexManager
-UnflaggedApi: android.R.string#safety_protection_display_text:
-    New API must be flagged with @FlaggedApi: field android.R.string.safety_protection_display_text
-UnflaggedApi: android.R.style#Theme_DeviceDefault_DocumentsUI:
-    New API must be flagged with @FlaggedApi: field android.R.style.Theme_DeviceDefault_DocumentsUI
-UnflaggedApi: android.R.style#Theme_Leanback_FormWizard:
-    New API must be flagged with @FlaggedApi: field android.R.style.Theme_Leanback_FormWizard
 UnflaggedApi: android.app.ActivityManager#getExternalHistoricalProcessStartReasons(String, int):
     New API must be flagged with @FlaggedApi: method android.app.ActivityManager.getExternalHistoricalProcessStartReasons(String,int)
 UnflaggedApi: android.app.AppOpsManager#OPSTR_RECEIVE_SANDBOX_TRIGGER_AUDIO:
     New API must be flagged with @FlaggedApi: field android.app.AppOpsManager.OPSTR_RECEIVE_SANDBOX_TRIGGER_AUDIO
-UnflaggedApi: android.app.AppOpsManager.AttributedHistoricalOps#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.AttributedHistoricalOps.equals(Object)
-UnflaggedApi: android.app.AppOpsManager.AttributedHistoricalOps#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.AttributedHistoricalOps.hashCode()
-UnflaggedApi: android.app.AppOpsManager.HistoricalOp#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.HistoricalOp.equals(Object)
-UnflaggedApi: android.app.AppOpsManager.HistoricalOp#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.HistoricalOp.hashCode()
-UnflaggedApi: android.app.AppOpsManager.HistoricalOps#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.HistoricalOps.equals(Object)
-UnflaggedApi: android.app.AppOpsManager.HistoricalOps#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.HistoricalOps.hashCode()
-UnflaggedApi: android.app.AppOpsManager.HistoricalOps#toString():
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.HistoricalOps.toString()
-UnflaggedApi: android.app.AppOpsManager.HistoricalPackageOps#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.HistoricalPackageOps.equals(Object)
-UnflaggedApi: android.app.AppOpsManager.HistoricalPackageOps#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.HistoricalPackageOps.hashCode()
-UnflaggedApi: android.app.AppOpsManager.HistoricalUidOps#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.HistoricalUidOps.equals(Object)
-UnflaggedApi: android.app.AppOpsManager.HistoricalUidOps#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.AppOpsManager.HistoricalUidOps.hashCode()
-UnflaggedApi: android.app.GameModeConfiguration#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.GameModeConfiguration.equals(Object)
-UnflaggedApi: android.app.GameModeConfiguration#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.GameModeConfiguration.hashCode()
-UnflaggedApi: android.app.StatusBarManager.DisableInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.app.StatusBarManager.DisableInfo.toString()
-UnflaggedApi: android.app.Vr2dDisplayProperties#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.Vr2dDisplayProperties.equals(Object)
-UnflaggedApi: android.app.Vr2dDisplayProperties#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.Vr2dDisplayProperties.hashCode()
-UnflaggedApi: android.app.Vr2dDisplayProperties#toString():
-    New API must be flagged with @FlaggedApi: method android.app.Vr2dDisplayProperties.toString()
-UnflaggedApi: android.app.admin.AccountTypePolicyKey#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.AccountTypePolicyKey.equals(Object)
-UnflaggedApi: android.app.admin.AccountTypePolicyKey#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.AccountTypePolicyKey.hashCode()
-UnflaggedApi: android.app.admin.AccountTypePolicyKey#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.AccountTypePolicyKey.toString()
-UnflaggedApi: android.app.admin.Authority#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.Authority.equals(Object)
-UnflaggedApi: android.app.admin.Authority#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.Authority.hashCode()
-UnflaggedApi: android.app.admin.DeviceAdminAuthority#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.DeviceAdminAuthority.equals(Object)
-UnflaggedApi: android.app.admin.DeviceAdminAuthority#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.DeviceAdminAuthority.hashCode()
-UnflaggedApi: android.app.admin.DeviceAdminAuthority#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.DeviceAdminAuthority.toString()
-UnflaggedApi: android.app.admin.DevicePolicyDrawableResource#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.DevicePolicyDrawableResource.equals(Object)
-UnflaggedApi: android.app.admin.DevicePolicyDrawableResource#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.DevicePolicyDrawableResource.hashCode()
-UnflaggedApi: android.app.admin.DevicePolicyKeyguardService#onDestroy():
-    New API must be flagged with @FlaggedApi: method android.app.admin.DevicePolicyKeyguardService.onDestroy()
-UnflaggedApi: android.app.admin.DevicePolicyResources.Strings:
-    New API must be flagged with @FlaggedApi: class android.app.admin.DevicePolicyResources.Strings
-UnflaggedApi: android.app.admin.DevicePolicyResources.Strings.DefaultAppSettings:
-    New API must be flagged with @FlaggedApi: class android.app.admin.DevicePolicyResources.Strings.DefaultAppSettings
-UnflaggedApi: android.app.admin.DevicePolicyResources.Strings.DefaultAppSettings#HOME_MISSING_WORK_PROFILE_SUPPORT_MESSAGE:
-    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyResources.Strings.DefaultAppSettings.HOME_MISSING_WORK_PROFILE_SUPPORT_MESSAGE
-UnflaggedApi: android.app.admin.DevicePolicyResources.Strings.DefaultAppSettings#WORK_PROFILE_DEFAULT_APPS_TITLE:
-    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyResources.Strings.DefaultAppSettings.WORK_PROFILE_DEFAULT_APPS_TITLE
-UnflaggedApi: android.app.admin.DevicePolicyResources.Strings.PermissionSettings:
-    New API must be flagged with @FlaggedApi: class android.app.admin.DevicePolicyResources.Strings.PermissionSettings
-UnflaggedApi: android.app.admin.DevicePolicyResources.Strings.PermissionSettings#BACKGROUND_ACCESS_DISABLED_BY_ADMIN_MESSAGE:
-    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyResources.Strings.PermissionSettings.BACKGROUND_ACCESS_DISABLED_BY_ADMIN_MESSAGE
-UnflaggedApi: android.app.admin.DevicePolicyResources.Strings.PermissionSettings#BACKGROUND_ACCESS_ENABLED_BY_ADMIN_MESSAGE:
-    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyResources.Strings.PermissionSettings.BACKGROUND_ACCESS_ENABLED_BY_ADMIN_MESSAGE
-UnflaggedApi: android.app.admin.DevicePolicyResources.Strings.PermissionSettings#FOREGROUND_ACCESS_ENABLED_BY_ADMIN_MESSAGE:
-    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyResources.Strings.PermissionSettings.FOREGROUND_ACCESS_ENABLED_BY_ADMIN_MESSAGE
-UnflaggedApi: android.app.admin.DevicePolicyResources.Strings.PermissionSettings#LOCATION_AUTO_GRANTED_MESSAGE:
-    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyResources.Strings.PermissionSettings.LOCATION_AUTO_GRANTED_MESSAGE
-UnflaggedApi: android.app.admin.DevicePolicyState#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.DevicePolicyState.toString()
-UnflaggedApi: android.app.admin.DevicePolicyStringResource#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.DevicePolicyStringResource.equals(Object)
-UnflaggedApi: android.app.admin.DevicePolicyStringResource#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.DevicePolicyStringResource.hashCode()
-UnflaggedApi: android.app.admin.DpcAuthority#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.DpcAuthority.equals(Object)
-UnflaggedApi: android.app.admin.DpcAuthority#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.DpcAuthority.hashCode()
-UnflaggedApi: android.app.admin.DpcAuthority#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.DpcAuthority.toString()
-UnflaggedApi: android.app.admin.EnforcingAdmin#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.EnforcingAdmin.equals(Object)
-UnflaggedApi: android.app.admin.EnforcingAdmin#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.EnforcingAdmin.hashCode()
-UnflaggedApi: android.app.admin.EnforcingAdmin#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.EnforcingAdmin.toString()
-UnflaggedApi: android.app.admin.IntentFilterPolicyKey#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.IntentFilterPolicyKey.equals(Object)
-UnflaggedApi: android.app.admin.IntentFilterPolicyKey#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.IntentFilterPolicyKey.hashCode()
-UnflaggedApi: android.app.admin.IntentFilterPolicyKey#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.IntentFilterPolicyKey.toString()
-UnflaggedApi: android.app.admin.LockTaskPolicy#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.LockTaskPolicy.equals(Object)
-UnflaggedApi: android.app.admin.LockTaskPolicy#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.LockTaskPolicy.hashCode()
-UnflaggedApi: android.app.admin.LockTaskPolicy#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.LockTaskPolicy.toString()
-UnflaggedApi: android.app.admin.NoArgsPolicyKey#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.NoArgsPolicyKey.toString()
-UnflaggedApi: android.app.admin.PackagePermissionPolicyKey#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.PackagePermissionPolicyKey.equals(Object)
-UnflaggedApi: android.app.admin.PackagePermissionPolicyKey#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.PackagePermissionPolicyKey.hashCode()
-UnflaggedApi: android.app.admin.PackagePermissionPolicyKey#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.PackagePermissionPolicyKey.toString()
-UnflaggedApi: android.app.admin.PackagePolicyKey#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.PackagePolicyKey.equals(Object)
-UnflaggedApi: android.app.admin.PackagePolicyKey#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.PackagePolicyKey.hashCode()
-UnflaggedApi: android.app.admin.PackagePolicyKey#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.PackagePolicyKey.toString()
-UnflaggedApi: android.app.admin.PolicyKey#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.PolicyKey.equals(Object)
-UnflaggedApi: android.app.admin.PolicyKey#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.PolicyKey.hashCode()
-UnflaggedApi: android.app.admin.PolicyState#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.PolicyState.toString()
-UnflaggedApi: android.app.admin.RoleAuthority#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.RoleAuthority.equals(Object)
-UnflaggedApi: android.app.admin.RoleAuthority#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.RoleAuthority.hashCode()
-UnflaggedApi: android.app.admin.RoleAuthority#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.RoleAuthority.toString()
-UnflaggedApi: android.app.admin.UnknownAuthority#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.admin.UnknownAuthority.equals(Object)
-UnflaggedApi: android.app.admin.UnknownAuthority#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.admin.UnknownAuthority.hashCode()
-UnflaggedApi: android.app.admin.UnknownAuthority#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.UnknownAuthority.toString()
-UnflaggedApi: android.app.admin.UserRestrictionPolicyKey#toString():
-    New API must be flagged with @FlaggedApi: method android.app.admin.UserRestrictionPolicyKey.toString()
-UnflaggedApi: android.app.ambientcontext.AmbientContextEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.app.ambientcontext.AmbientContextEvent.toString()
-UnflaggedApi: android.app.ambientcontext.AmbientContextEventRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.app.ambientcontext.AmbientContextEventRequest.toString()
-UnflaggedApi: android.app.assist.ActivityId#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.assist.ActivityId.equals(Object)
-UnflaggedApi: android.app.assist.ActivityId#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.assist.ActivityId.hashCode()
-UnflaggedApi: android.app.assist.ActivityId#toString():
-    New API must be flagged with @FlaggedApi: method android.app.assist.ActivityId.toString()
-UnflaggedApi: android.app.assist.AssistStructure.ViewNode#ViewNode():
-    New API must be flagged with @FlaggedApi: constructor android.app.assist.AssistStructure.ViewNode()
-UnflaggedApi: android.app.backup.RestoreDescription#toString():
-    New API must be flagged with @FlaggedApi: method android.app.backup.RestoreDescription.toString()
-UnflaggedApi: android.app.cloudsearch.SearchRequest#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.cloudsearch.SearchRequest.equals(Object)
-UnflaggedApi: android.app.cloudsearch.SearchRequest#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.cloudsearch.SearchRequest.hashCode()
-UnflaggedApi: android.app.cloudsearch.SearchRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.app.cloudsearch.SearchRequest.toString()
-UnflaggedApi: android.app.cloudsearch.SearchResponse#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.cloudsearch.SearchResponse.equals(Object)
-UnflaggedApi: android.app.cloudsearch.SearchResponse#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.cloudsearch.SearchResponse.hashCode()
-UnflaggedApi: android.app.cloudsearch.SearchResult#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.cloudsearch.SearchResult.equals(Object)
-UnflaggedApi: android.app.cloudsearch.SearchResult#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.cloudsearch.SearchResult.hashCode()
-UnflaggedApi: android.app.prediction.AppPredictionContext#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.prediction.AppPredictionContext.equals(Object)
-UnflaggedApi: android.app.prediction.AppPredictionSessionId#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.prediction.AppPredictionSessionId.equals(Object)
-UnflaggedApi: android.app.prediction.AppPredictionSessionId#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.prediction.AppPredictionSessionId.hashCode()
-UnflaggedApi: android.app.prediction.AppPredictionSessionId#toString():
-    New API must be flagged with @FlaggedApi: method android.app.prediction.AppPredictionSessionId.toString()
-UnflaggedApi: android.app.prediction.AppPredictor#finalize():
-    New API must be flagged with @FlaggedApi: method android.app.prediction.AppPredictor.finalize()
-UnflaggedApi: android.app.prediction.AppTarget#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.prediction.AppTarget.equals(Object)
-UnflaggedApi: android.app.prediction.AppTargetEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.prediction.AppTargetEvent.equals(Object)
-UnflaggedApi: android.app.prediction.AppTargetId#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.prediction.AppTargetId.equals(Object)
-UnflaggedApi: android.app.prediction.AppTargetId#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.prediction.AppTargetId.hashCode()
-UnflaggedApi: android.app.search.SearchAction#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.search.SearchAction.equals(Object)
-UnflaggedApi: android.app.search.SearchAction#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.search.SearchAction.hashCode()
-UnflaggedApi: android.app.search.SearchAction#toString():
-    New API must be flagged with @FlaggedApi: method android.app.search.SearchAction.toString()
-UnflaggedApi: android.app.search.SearchSessionId#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.search.SearchSessionId.equals(Object)
-UnflaggedApi: android.app.search.SearchSessionId#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.search.SearchSessionId.hashCode()
-UnflaggedApi: android.app.search.SearchSessionId#toString():
-    New API must be flagged with @FlaggedApi: method android.app.search.SearchSessionId.toString()
-UnflaggedApi: android.app.search.SearchTargetEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.search.SearchTargetEvent.equals(Object)
-UnflaggedApi: android.app.search.SearchTargetEvent#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.search.SearchTargetEvent.hashCode()
-UnflaggedApi: android.app.smartspace.SmartspaceAction#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceAction.equals(Object)
-UnflaggedApi: android.app.smartspace.SmartspaceAction#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceAction.hashCode()
-UnflaggedApi: android.app.smartspace.SmartspaceAction#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceAction.toString()
-UnflaggedApi: android.app.smartspace.SmartspaceConfig#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceConfig.equals(Object)
-UnflaggedApi: android.app.smartspace.SmartspaceConfig#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceConfig.hashCode()
-UnflaggedApi: android.app.smartspace.SmartspaceSessionId#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceSessionId.equals(Object)
-UnflaggedApi: android.app.smartspace.SmartspaceSessionId#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceSessionId.hashCode()
-UnflaggedApi: android.app.smartspace.SmartspaceSessionId#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceSessionId.toString()
-UnflaggedApi: android.app.smartspace.SmartspaceTarget#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceTarget.equals(Object)
-UnflaggedApi: android.app.smartspace.SmartspaceTarget#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceTarget.hashCode()
-UnflaggedApi: android.app.smartspace.SmartspaceTarget#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceTarget.toString()
-UnflaggedApi: android.app.smartspace.SmartspaceTargetEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.SmartspaceTargetEvent.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.BaseTemplateData#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.BaseTemplateData.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.BaseTemplateData#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.BaseTemplateData.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.BaseTemplateData#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.BaseTemplateData.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemInfo.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemInfo.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemInfo.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemLoggingInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemLoggingInfo.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemLoggingInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemLoggingInfo.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemLoggingInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.BaseTemplateData.SubItemLoggingInfo.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.CarouselTemplateData#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.CarouselTemplateData.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.CarouselTemplateData#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.CarouselTemplateData.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.CarouselTemplateData#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.CarouselTemplateData.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.CarouselTemplateData.CarouselItem#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.CarouselTemplateData.CarouselItem.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.CarouselTemplateData.CarouselItem#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.CarouselTemplateData.CarouselItem.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.CarouselTemplateData.CarouselItem#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.CarouselTemplateData.CarouselItem.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.CombinedCardsTemplateData#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.CombinedCardsTemplateData.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.CombinedCardsTemplateData#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.CombinedCardsTemplateData.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.CombinedCardsTemplateData#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.CombinedCardsTemplateData.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.HeadToHeadTemplateData#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.HeadToHeadTemplateData.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.HeadToHeadTemplateData#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.HeadToHeadTemplateData.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.HeadToHeadTemplateData#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.HeadToHeadTemplateData.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.Icon#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.Icon.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.Icon#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.Icon.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.Icon#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.Icon.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.SubCardTemplateData#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.SubCardTemplateData.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.SubCardTemplateData#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.SubCardTemplateData.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.SubCardTemplateData#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.SubCardTemplateData.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.SubImageTemplateData#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.SubImageTemplateData.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.SubImageTemplateData#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.SubImageTemplateData.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.SubImageTemplateData#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.SubImageTemplateData.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.SubListTemplateData#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.SubListTemplateData.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.SubListTemplateData#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.SubListTemplateData.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.SubListTemplateData#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.SubListTemplateData.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.TapAction#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.TapAction.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.TapAction#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.TapAction.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.TapAction#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.TapAction.toString()
-UnflaggedApi: android.app.smartspace.uitemplatedata.Text#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.Text.equals(Object)
-UnflaggedApi: android.app.smartspace.uitemplatedata.Text#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.Text.hashCode()
-UnflaggedApi: android.app.smartspace.uitemplatedata.Text#toString():
-    New API must be flagged with @FlaggedApi: method android.app.smartspace.uitemplatedata.Text.toString()
-UnflaggedApi: android.app.time.ExternalTimeSuggestion#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.ExternalTimeSuggestion.equals(Object)
-UnflaggedApi: android.app.time.ExternalTimeSuggestion#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.ExternalTimeSuggestion.hashCode()
-UnflaggedApi: android.app.time.ExternalTimeSuggestion#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.ExternalTimeSuggestion.toString()
-UnflaggedApi: android.app.time.TimeCapabilities#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeCapabilities.equals(Object)
-UnflaggedApi: android.app.time.TimeCapabilities#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeCapabilities.hashCode()
-UnflaggedApi: android.app.time.TimeCapabilities#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeCapabilities.toString()
-UnflaggedApi: android.app.time.TimeCapabilitiesAndConfig#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeCapabilitiesAndConfig.equals(Object)
-UnflaggedApi: android.app.time.TimeCapabilitiesAndConfig#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeCapabilitiesAndConfig.hashCode()
-UnflaggedApi: android.app.time.TimeCapabilitiesAndConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeCapabilitiesAndConfig.toString()
-UnflaggedApi: android.app.time.TimeConfiguration#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeConfiguration.equals(Object)
-UnflaggedApi: android.app.time.TimeConfiguration#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeConfiguration.hashCode()
-UnflaggedApi: android.app.time.TimeConfiguration#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeConfiguration.toString()
-UnflaggedApi: android.app.time.TimeState#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeState.equals(Object)
-UnflaggedApi: android.app.time.TimeState#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeState.hashCode()
-UnflaggedApi: android.app.time.TimeState#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeState.toString()
-UnflaggedApi: android.app.time.TimeZoneCapabilities#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneCapabilities.equals(Object)
-UnflaggedApi: android.app.time.TimeZoneCapabilities#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneCapabilities.hashCode()
-UnflaggedApi: android.app.time.TimeZoneCapabilities#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneCapabilities.toString()
-UnflaggedApi: android.app.time.TimeZoneCapabilitiesAndConfig#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneCapabilitiesAndConfig.equals(Object)
-UnflaggedApi: android.app.time.TimeZoneCapabilitiesAndConfig#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneCapabilitiesAndConfig.hashCode()
-UnflaggedApi: android.app.time.TimeZoneCapabilitiesAndConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneCapabilitiesAndConfig.toString()
-UnflaggedApi: android.app.time.TimeZoneConfiguration#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneConfiguration.equals(Object)
-UnflaggedApi: android.app.time.TimeZoneConfiguration#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneConfiguration.hashCode()
-UnflaggedApi: android.app.time.TimeZoneConfiguration#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneConfiguration.toString()
-UnflaggedApi: android.app.time.TimeZoneState#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneState.equals(Object)
-UnflaggedApi: android.app.time.TimeZoneState#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneState.hashCode()
-UnflaggedApi: android.app.time.TimeZoneState#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.TimeZoneState.toString()
-UnflaggedApi: android.app.time.UnixEpochTime#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.time.UnixEpochTime.equals(Object)
-UnflaggedApi: android.app.time.UnixEpochTime#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.time.UnixEpochTime.hashCode()
-UnflaggedApi: android.app.time.UnixEpochTime#toString():
-    New API must be flagged with @FlaggedApi: method android.app.time.UnixEpochTime.toString()
-UnflaggedApi: android.app.usage.BroadcastResponseStats#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.usage.BroadcastResponseStats.equals(Object)
-UnflaggedApi: android.app.usage.BroadcastResponseStats#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.usage.BroadcastResponseStats.hashCode()
-UnflaggedApi: android.app.usage.BroadcastResponseStats#toString():
-    New API must be flagged with @FlaggedApi: method android.app.usage.BroadcastResponseStats.toString()
-UnflaggedApi: android.app.usage.CacheQuotaHint#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.usage.CacheQuotaHint.equals(Object)
-UnflaggedApi: android.app.usage.CacheQuotaHint#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.usage.CacheQuotaHint.hashCode()
-UnflaggedApi: android.app.usage.CacheQuotaService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.app.usage.CacheQuotaService.onCreate()
-UnflaggedApi: android.app.usage.UsageEvents.Event#NOTIFICATION_INTERRUPTION:
-    New API must be flagged with @FlaggedApi: field android.app.usage.UsageEvents.Event.NOTIFICATION_INTERRUPTION
-UnflaggedApi: android.app.usage.UsageEvents.Event#NOTIFICATION_SEEN:
-    New API must be flagged with @FlaggedApi: field android.app.usage.UsageEvents.Event.NOTIFICATION_SEEN
-UnflaggedApi: android.app.usage.UsageEvents.Event#SLICE_PINNED:
-    New API must be flagged with @FlaggedApi: field android.app.usage.UsageEvents.Event.SLICE_PINNED
-UnflaggedApi: android.app.usage.UsageEvents.Event#SLICE_PINNED_PRIV:
-    New API must be flagged with @FlaggedApi: field android.app.usage.UsageEvents.Event.SLICE_PINNED_PRIV
-UnflaggedApi: android.app.usage.UsageEvents.Event#SYSTEM_INTERACTION:
-    New API must be flagged with @FlaggedApi: field android.app.usage.UsageEvents.Event.SYSTEM_INTERACTION
-UnflaggedApi: android.app.usage.UsageEvents.Event#getInstanceId():
-    New API must be flagged with @FlaggedApi: method android.app.usage.UsageEvents.Event.getInstanceId()
-UnflaggedApi: android.app.usage.UsageEvents.Event#getNotificationChannelId():
-    New API must be flagged with @FlaggedApi: method android.app.usage.UsageEvents.Event.getNotificationChannelId()
-UnflaggedApi: android.app.usage.UsageEvents.Event#getTaskRootClassName():
-    New API must be flagged with @FlaggedApi: method android.app.usage.UsageEvents.Event.getTaskRootClassName()
-UnflaggedApi: android.app.usage.UsageEvents.Event#getTaskRootPackageName():
-    New API must be flagged with @FlaggedApi: method android.app.usage.UsageEvents.Event.getTaskRootPackageName()
-UnflaggedApi: android.app.usage.UsageEvents.Event#isInstantApp():
-    New API must be flagged with @FlaggedApi: method android.app.usage.UsageEvents.Event.isInstantApp()
-UnflaggedApi: android.app.wallpapereffectsgeneration.CinematicEffectRequest#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.wallpapereffectsgeneration.CinematicEffectRequest.equals(Object)
-UnflaggedApi: android.app.wallpapereffectsgeneration.CinematicEffectRequest#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.wallpapereffectsgeneration.CinematicEffectRequest.hashCode()
-UnflaggedApi: android.app.wallpapereffectsgeneration.CinematicEffectResponse#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.app.wallpapereffectsgeneration.CinematicEffectResponse.equals(Object)
-UnflaggedApi: android.app.wallpapereffectsgeneration.CinematicEffectResponse#hashCode():
-    New API must be flagged with @FlaggedApi: method android.app.wallpapereffectsgeneration.CinematicEffectResponse.hashCode()
 UnflaggedApi: android.companion.virtual.VirtualDeviceManager.VirtualDevice#getPersistentDeviceId():
     New API must be flagged with @FlaggedApi: method android.companion.virtual.VirtualDeviceManager.VirtualDevice.getPersistentDeviceId()
-UnflaggedApi: android.companion.virtual.VirtualDeviceParams#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.companion.virtual.VirtualDeviceParams.equals(Object)
-UnflaggedApi: android.companion.virtual.VirtualDeviceParams#hashCode():
-    New API must be flagged with @FlaggedApi: method android.companion.virtual.VirtualDeviceParams.hashCode()
-UnflaggedApi: android.companion.virtual.VirtualDeviceParams#toString():
-    New API must be flagged with @FlaggedApi: method android.companion.virtual.VirtualDeviceParams.toString()
-UnflaggedApi: android.companion.virtual.sensor.VirtualSensorConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.companion.virtual.sensor.VirtualSensorConfig.toString()
+UnflaggedApi: android.content.Context#THREAD_NETWORK_SERVICE:
+    New API must be flagged with @FlaggedApi: field android.content.Context.THREAD_NETWORK_SERVICE
 UnflaggedApi: android.content.Intent#ACTION_UNARCHIVE_PACKAGE:
     New API must be flagged with @FlaggedApi: field android.content.Intent.ACTION_UNARCHIVE_PACKAGE
-UnflaggedApi: android.content.integrity.Rule#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.content.integrity.Rule.equals(Object)
-UnflaggedApi: android.content.integrity.Rule#hashCode():
-    New API must be flagged with @FlaggedApi: method android.content.integrity.Rule.hashCode()
-UnflaggedApi: android.content.integrity.Rule#toString():
-    New API must be flagged with @FlaggedApi: method android.content.integrity.Rule.toString()
-UnflaggedApi: android.content.pm.PackageArchiver:
-    New API must be flagged with @FlaggedApi: class android.content.pm.PackageArchiver
-UnflaggedApi: android.content.pm.PackageArchiver#EXTRA_UNARCHIVE_ALL_USERS:
-    New API must be flagged with @FlaggedApi: field android.content.pm.PackageArchiver.EXTRA_UNARCHIVE_ALL_USERS
-UnflaggedApi: android.content.pm.PackageArchiver#EXTRA_UNARCHIVE_PACKAGE_NAME:
-    New API must be flagged with @FlaggedApi: field android.content.pm.PackageArchiver.EXTRA_UNARCHIVE_PACKAGE_NAME
-UnflaggedApi: android.content.pm.PackageArchiver#requestArchive(String, android.content.IntentSender):
-    New API must be flagged with @FlaggedApi: method android.content.pm.PackageArchiver.requestArchive(String,android.content.IntentSender)
-UnflaggedApi: android.content.pm.PackageArchiver#requestUnarchive(String):
-    New API must be flagged with @FlaggedApi: method android.content.pm.PackageArchiver.requestUnarchive(String)
-UnflaggedApi: android.content.pm.PackageInfo#isArchived:
-    New API must be flagged with @FlaggedApi: field android.content.pm.PackageInfo.isArchived
 UnflaggedApi: android.content.pm.PackageInstaller#readInstallInfo(android.os.ParcelFileDescriptor, String, int):
     New API must be flagged with @FlaggedApi: method android.content.pm.PackageInstaller.readInstallInfo(android.os.ParcelFileDescriptor,String,int)
 UnflaggedApi: android.content.pm.PackageInstaller.InstallInfo#calculateInstalledSize(android.content.pm.PackageInstaller.SessionParams, android.os.ParcelFileDescriptor):
@@ -1579,320 +233,6 @@
     New API must be flagged with @FlaggedApi: field android.content.pm.PackageManager.EXTRA_REQUEST_PERMISSIONS_DEVICE_ID
 UnflaggedApi: android.content.pm.PackageManager#MATCH_ARCHIVED_PACKAGES:
     New API must be flagged with @FlaggedApi: field android.content.pm.PackageManager.MATCH_ARCHIVED_PACKAGES
-UnflaggedApi: android.content.pm.PackageManager#getPackageArchiver():
-    New API must be flagged with @FlaggedApi: method android.content.pm.PackageManager.getPackageArchiver()
-UnflaggedApi: android.content.pm.SuspendDialogInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.content.pm.SuspendDialogInfo.equals(Object)
-UnflaggedApi: android.content.pm.SuspendDialogInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.content.pm.SuspendDialogInfo.hashCode()
-UnflaggedApi: android.content.pm.SuspendDialogInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.content.pm.SuspendDialogInfo.toString()
-UnflaggedApi: android.content.pm.UserProperties#toString():
-    New API must be flagged with @FlaggedApi: method android.content.pm.UserProperties.toString()
-UnflaggedApi: android.content.pm.verify.domain.DomainOwner#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.content.pm.verify.domain.DomainOwner.equals(Object)
-UnflaggedApi: android.content.pm.verify.domain.DomainOwner#hashCode():
-    New API must be flagged with @FlaggedApi: method android.content.pm.verify.domain.DomainOwner.hashCode()
-UnflaggedApi: android.content.pm.verify.domain.DomainOwner#toString():
-    New API must be flagged with @FlaggedApi: method android.content.pm.verify.domain.DomainOwner.toString()
-UnflaggedApi: android.content.pm.verify.domain.DomainVerificationInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.content.pm.verify.domain.DomainVerificationInfo.equals(Object)
-UnflaggedApi: android.content.pm.verify.domain.DomainVerificationInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.content.pm.verify.domain.DomainVerificationInfo.hashCode()
-UnflaggedApi: android.content.pm.verify.domain.DomainVerificationInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.content.pm.verify.domain.DomainVerificationInfo.toString()
-UnflaggedApi: android.content.pm.verify.domain.DomainVerificationRequest#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.content.pm.verify.domain.DomainVerificationRequest.equals(Object)
-UnflaggedApi: android.content.pm.verify.domain.DomainVerificationRequest#hashCode():
-    New API must be flagged with @FlaggedApi: method android.content.pm.verify.domain.DomainVerificationRequest.hashCode()
-UnflaggedApi: android.hardware.biometrics.BiometricManager.Authenticators#BIOMETRIC_CONVENIENCE:
-    New API must be flagged with @FlaggedApi: field android.hardware.biometrics.BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE
-UnflaggedApi: android.hardware.biometrics.BiometricManager.Authenticators#EMPTY_SET:
-    New API must be flagged with @FlaggedApi: field android.hardware.biometrics.BiometricManager.Authenticators.EMPTY_SET
-UnflaggedApi: android.hardware.display.AmbientBrightnessDayStats#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.display.AmbientBrightnessDayStats.equals(Object)
-UnflaggedApi: android.hardware.display.AmbientBrightnessDayStats#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.display.AmbientBrightnessDayStats.hashCode()
-UnflaggedApi: android.hardware.display.AmbientBrightnessDayStats#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.display.AmbientBrightnessDayStats.toString()
-UnflaggedApi: android.hardware.display.BrightnessChangeEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.display.BrightnessChangeEvent.toString()
-UnflaggedApi: android.hardware.display.BrightnessConfiguration#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.display.BrightnessConfiguration.equals(Object)
-UnflaggedApi: android.hardware.display.BrightnessConfiguration#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.display.BrightnessConfiguration.hashCode()
-UnflaggedApi: android.hardware.display.BrightnessConfiguration#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.display.BrightnessConfiguration.toString()
-UnflaggedApi: android.hardware.display.BrightnessCorrection#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.display.BrightnessCorrection.equals(Object)
-UnflaggedApi: android.hardware.display.BrightnessCorrection#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.display.BrightnessCorrection.hashCode()
-UnflaggedApi: android.hardware.display.BrightnessCorrection#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.display.BrightnessCorrection.toString()
-UnflaggedApi: android.hardware.hdmi.HdmiDeviceInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.hdmi.HdmiDeviceInfo.equals(Object)
-UnflaggedApi: android.hardware.hdmi.HdmiDeviceInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.hdmi.HdmiDeviceInfo.hashCode()
-UnflaggedApi: android.hardware.hdmi.HdmiDeviceInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.hdmi.HdmiDeviceInfo.toString()
-UnflaggedApi: android.hardware.hdmi.HdmiPortInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.hdmi.HdmiPortInfo.equals(Object)
-UnflaggedApi: android.hardware.hdmi.HdmiPortInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.hdmi.HdmiPortInfo.hashCode()
-UnflaggedApi: android.hardware.hdmi.HdmiPortInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.hdmi.HdmiPortInfo.toString()
-UnflaggedApi: android.hardware.location.ContextHubClient#finalize():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.ContextHubClient.finalize()
-UnflaggedApi: android.hardware.location.ContextHubInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.location.ContextHubInfo.equals(Object)
-UnflaggedApi: android.hardware.location.ContextHubInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.ContextHubInfo.toString()
-UnflaggedApi: android.hardware.location.ContextHubIntentEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.location.ContextHubIntentEvent.equals(Object)
-UnflaggedApi: android.hardware.location.ContextHubIntentEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.ContextHubIntentEvent.toString()
-UnflaggedApi: android.hardware.location.ContextHubMessage#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.ContextHubMessage.toString()
-UnflaggedApi: android.hardware.location.GeofenceHardwareMonitorEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.GeofenceHardwareMonitorEvent.toString()
-UnflaggedApi: android.hardware.location.MemoryRegion#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.location.MemoryRegion.equals(Object)
-UnflaggedApi: android.hardware.location.MemoryRegion#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.MemoryRegion.toString()
-UnflaggedApi: android.hardware.location.NanoApp#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.NanoApp.toString()
-UnflaggedApi: android.hardware.location.NanoAppFilter#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.NanoAppFilter.toString()
-UnflaggedApi: android.hardware.location.NanoAppInstanceInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.NanoAppInstanceInfo.toString()
-UnflaggedApi: android.hardware.location.NanoAppMessage#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.location.NanoAppMessage.equals(Object)
-UnflaggedApi: android.hardware.location.NanoAppMessage#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.NanoAppMessage.toString()
-UnflaggedApi: android.hardware.location.NanoAppRpcService#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.location.NanoAppRpcService.equals(Object)
-UnflaggedApi: android.hardware.location.NanoAppRpcService#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.NanoAppRpcService.hashCode()
-UnflaggedApi: android.hardware.location.NanoAppRpcService#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.location.NanoAppRpcService.toString()
-UnflaggedApi: android.hardware.radio.ProgramList.Filter#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.ProgramList.Filter.equals(Object)
-UnflaggedApi: android.hardware.radio.ProgramList.Filter#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.ProgramList.Filter.hashCode()
-UnflaggedApi: android.hardware.radio.ProgramList.Filter#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.ProgramList.Filter.toString()
-UnflaggedApi: android.hardware.radio.ProgramSelector#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.ProgramSelector.equals(Object)
-UnflaggedApi: android.hardware.radio.ProgramSelector#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.ProgramSelector.hashCode()
-UnflaggedApi: android.hardware.radio.ProgramSelector#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.ProgramSelector.toString()
-UnflaggedApi: android.hardware.radio.ProgramSelector.Identifier#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.ProgramSelector.Identifier.equals(Object)
-UnflaggedApi: android.hardware.radio.ProgramSelector.Identifier#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.ProgramSelector.Identifier.hashCode()
-UnflaggedApi: android.hardware.radio.ProgramSelector.Identifier#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.ProgramSelector.Identifier.toString()
-UnflaggedApi: android.hardware.radio.RadioManager.AmBandConfig#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.AmBandConfig.equals(Object)
-UnflaggedApi: android.hardware.radio.RadioManager.AmBandConfig#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.AmBandConfig.hashCode()
-UnflaggedApi: android.hardware.radio.RadioManager.AmBandConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.AmBandConfig.toString()
-UnflaggedApi: android.hardware.radio.RadioManager.AmBandDescriptor#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.AmBandDescriptor.equals(Object)
-UnflaggedApi: android.hardware.radio.RadioManager.AmBandDescriptor#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.AmBandDescriptor.hashCode()
-UnflaggedApi: android.hardware.radio.RadioManager.AmBandDescriptor#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.AmBandDescriptor.toString()
-UnflaggedApi: android.hardware.radio.RadioManager.BandConfig#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.BandConfig.equals(Object)
-UnflaggedApi: android.hardware.radio.RadioManager.BandConfig#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.BandConfig.hashCode()
-UnflaggedApi: android.hardware.radio.RadioManager.BandConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.BandConfig.toString()
-UnflaggedApi: android.hardware.radio.RadioManager.BandDescriptor#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.BandDescriptor.equals(Object)
-UnflaggedApi: android.hardware.radio.RadioManager.BandDescriptor#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.BandDescriptor.hashCode()
-UnflaggedApi: android.hardware.radio.RadioManager.BandDescriptor#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.BandDescriptor.toString()
-UnflaggedApi: android.hardware.radio.RadioManager.FmBandConfig#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.FmBandConfig.equals(Object)
-UnflaggedApi: android.hardware.radio.RadioManager.FmBandConfig#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.FmBandConfig.hashCode()
-UnflaggedApi: android.hardware.radio.RadioManager.FmBandConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.FmBandConfig.toString()
-UnflaggedApi: android.hardware.radio.RadioManager.FmBandDescriptor#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.FmBandDescriptor.equals(Object)
-UnflaggedApi: android.hardware.radio.RadioManager.FmBandDescriptor#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.FmBandDescriptor.hashCode()
-UnflaggedApi: android.hardware.radio.RadioManager.FmBandDescriptor#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.FmBandDescriptor.toString()
-UnflaggedApi: android.hardware.radio.RadioManager.ModuleProperties#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.ModuleProperties.equals(Object)
-UnflaggedApi: android.hardware.radio.RadioManager.ModuleProperties#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.ModuleProperties.hashCode()
-UnflaggedApi: android.hardware.radio.RadioManager.ModuleProperties#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.ModuleProperties.toString()
-UnflaggedApi: android.hardware.radio.RadioManager.ProgramInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.ProgramInfo.equals(Object)
-UnflaggedApi: android.hardware.radio.RadioManager.ProgramInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.ProgramInfo.hashCode()
-UnflaggedApi: android.hardware.radio.RadioManager.ProgramInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioManager.ProgramInfo.toString()
-UnflaggedApi: android.hardware.radio.RadioMetadata#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioMetadata.equals(Object)
-UnflaggedApi: android.hardware.radio.RadioMetadata#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioMetadata.hashCode()
-UnflaggedApi: android.hardware.radio.RadioMetadata#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.radio.RadioMetadata.toString()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.Keyphrase#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.Keyphrase.equals(Object)
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.Keyphrase#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.Keyphrase.hashCode()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.Keyphrase#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.Keyphrase.toString()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra.equals(Object)
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra.hashCode()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.KeyphraseRecognitionExtra.toString()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel.equals(Object)
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel.hashCode()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel.toString()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.ModelParamRange#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.ModelParamRange.equals(Object)
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.ModelParamRange#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.ModelParamRange.toString()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.ModuleProperties#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.ModuleProperties.equals(Object)
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.ModuleProperties#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.ModuleProperties.hashCode()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.ModuleProperties#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.ModuleProperties.toString()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.RecognitionEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.RecognitionEvent.equals(Object)
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.RecognitionEvent#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.RecognitionEvent.hashCode()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.RecognitionEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.RecognitionEvent.toString()
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.SoundModel#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.SoundModel.equals(Object)
-UnflaggedApi: android.hardware.soundtrigger.SoundTrigger.SoundModel#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.soundtrigger.SoundTrigger.SoundModel.hashCode()
-UnflaggedApi: android.hardware.usb.DisplayPortAltModeInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.hardware.usb.DisplayPortAltModeInfo.equals(Object)
-UnflaggedApi: android.hardware.usb.DisplayPortAltModeInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.hardware.usb.DisplayPortAltModeInfo.hashCode()
-UnflaggedApi: android.hardware.usb.DisplayPortAltModeInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.usb.DisplayPortAltModeInfo.toString()
-UnflaggedApi: android.hardware.usb.UsbPort#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.usb.UsbPort.toString()
-UnflaggedApi: android.hardware.usb.UsbPortStatus#toString():
-    New API must be flagged with @FlaggedApi: method android.hardware.usb.UsbPortStatus.toString()
-UnflaggedApi: android.location.CorrelationVector#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.location.CorrelationVector.equals(Object)
-UnflaggedApi: android.location.CorrelationVector#hashCode():
-    New API must be flagged with @FlaggedApi: method android.location.CorrelationVector.hashCode()
-UnflaggedApi: android.location.CorrelationVector#toString():
-    New API must be flagged with @FlaggedApi: method android.location.CorrelationVector.toString()
-UnflaggedApi: android.location.Country#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.location.Country.equals(Object)
-UnflaggedApi: android.location.Country#hashCode():
-    New API must be flagged with @FlaggedApi: method android.location.Country.hashCode()
-UnflaggedApi: android.location.Country#toString():
-    New API must be flagged with @FlaggedApi: method android.location.Country.toString()
-UnflaggedApi: android.location.GnssExcessPathInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.location.GnssExcessPathInfo.equals(Object)
-UnflaggedApi: android.location.GnssExcessPathInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.location.GnssExcessPathInfo.hashCode()
-UnflaggedApi: android.location.GnssExcessPathInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GnssExcessPathInfo.toString()
-UnflaggedApi: android.location.GnssMeasurementCorrections#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GnssMeasurementCorrections.toString()
-UnflaggedApi: android.location.GnssMeasurementRequest#getWorkSource():
-    New API must be flagged with @FlaggedApi: method android.location.GnssMeasurementRequest.getWorkSource()
-UnflaggedApi: android.location.GnssMeasurementRequest.Builder#setWorkSource(android.os.WorkSource):
-    New API must be flagged with @FlaggedApi: method android.location.GnssMeasurementRequest.Builder.setWorkSource(android.os.WorkSource)
-UnflaggedApi: android.location.GnssReflectingPlane#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.location.GnssReflectingPlane.equals(Object)
-UnflaggedApi: android.location.GnssReflectingPlane#hashCode():
-    New API must be flagged with @FlaggedApi: method android.location.GnssReflectingPlane.hashCode()
-UnflaggedApi: android.location.GnssReflectingPlane#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GnssReflectingPlane.toString()
-UnflaggedApi: android.location.GnssRequest#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.location.GnssRequest.equals(Object)
-UnflaggedApi: android.location.GnssRequest#hashCode():
-    New API must be flagged with @FlaggedApi: method android.location.GnssRequest.hashCode()
-UnflaggedApi: android.location.GnssRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GnssRequest.toString()
-UnflaggedApi: android.location.GnssSingleSatCorrection#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.location.GnssSingleSatCorrection.equals(Object)
-UnflaggedApi: android.location.GnssSingleSatCorrection#hashCode():
-    New API must be flagged with @FlaggedApi: method android.location.GnssSingleSatCorrection.hashCode()
-UnflaggedApi: android.location.GnssSingleSatCorrection#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GnssSingleSatCorrection.toString()
-UnflaggedApi: android.location.GpsClock#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GpsClock.toString()
-UnflaggedApi: android.location.GpsMeasurement#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GpsMeasurement.toString()
-UnflaggedApi: android.location.GpsMeasurementsEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GpsMeasurementsEvent.toString()
-UnflaggedApi: android.location.GpsNavigationMessage#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GpsNavigationMessage.toString()
-UnflaggedApi: android.location.GpsNavigationMessageEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.location.GpsNavigationMessageEvent.toString()
-UnflaggedApi: android.location.LastLocationRequest#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.location.LastLocationRequest.equals(Object)
-UnflaggedApi: android.location.LastLocationRequest#hashCode():
-    New API must be flagged with @FlaggedApi: method android.location.LastLocationRequest.hashCode()
-UnflaggedApi: android.location.LastLocationRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.location.LastLocationRequest.toString()
-UnflaggedApi: android.location.SatellitePvt#toString():
-    New API must be flagged with @FlaggedApi: method android.location.SatellitePvt.toString()
-UnflaggedApi: android.location.SatellitePvt.ClockInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.location.SatellitePvt.ClockInfo.toString()
-UnflaggedApi: android.location.SatellitePvt.PositionEcef#toString():
-    New API must be flagged with @FlaggedApi: method android.location.SatellitePvt.PositionEcef.toString()
-UnflaggedApi: android.location.SatellitePvt.VelocityEcef#toString():
-    New API must be flagged with @FlaggedApi: method android.location.SatellitePvt.VelocityEcef.toString()
-UnflaggedApi: android.location.provider.ProviderRequest#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.location.provider.ProviderRequest.equals(Object)
-UnflaggedApi: android.location.provider.ProviderRequest#hashCode():
-    New API must be flagged with @FlaggedApi: method android.location.provider.ProviderRequest.hashCode()
-UnflaggedApi: android.location.provider.ProviderRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.location.provider.ProviderRequest.toString()
-UnflaggedApi: android.media.AudioDeviceAttributes#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.media.AudioDeviceAttributes.equals(Object)
-UnflaggedApi: android.media.AudioDeviceAttributes#hashCode():
-    New API must be flagged with @FlaggedApi: method android.media.AudioDeviceAttributes.hashCode()
-UnflaggedApi: android.media.AudioDeviceAttributes#toString():
-    New API must be flagged with @FlaggedApi: method android.media.AudioDeviceAttributes.toString()
-UnflaggedApi: android.media.AudioFocusInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.media.AudioFocusInfo.equals(Object)
-UnflaggedApi: android.media.AudioFocusInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.media.AudioFocusInfo.hashCode()
-UnflaggedApi: android.media.MediaRecorder.AudioSource#ECHO_REFERENCE:
-    New API must be flagged with @FlaggedApi: field android.media.MediaRecorder.AudioSource.ECHO_REFERENCE
-UnflaggedApi: android.media.MediaRecorder.AudioSource#HOTWORD:
-    New API must be flagged with @FlaggedApi: field android.media.MediaRecorder.AudioSource.HOTWORD
-UnflaggedApi: android.media.MediaRecorder.AudioSource#RADIO_TUNER:
-    New API must be flagged with @FlaggedApi: field android.media.MediaRecorder.AudioSource.RADIO_TUNER
-UnflaggedApi: android.media.MediaRecorder.AudioSource#ULTRASOUND:
-    New API must be flagged with @FlaggedApi: field android.media.MediaRecorder.AudioSource.ULTRASOUND
-UnflaggedApi: android.media.NearbyDevice#toString():
-    New API must be flagged with @FlaggedApi: method android.media.NearbyDevice.toString()
-UnflaggedApi: android.media.VolumeInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.media.VolumeInfo.equals(Object)
-UnflaggedApi: android.media.VolumeInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.media.VolumeInfo.hashCode()
-UnflaggedApi: android.media.VolumeInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.media.VolumeInfo.toString()
 UnflaggedApi: android.media.audiopolicy.AudioMix#CREATOR:
     New API must be flagged with @FlaggedApi: field android.media.audiopolicy.AudioMix.CREATOR
 UnflaggedApi: android.media.audiopolicy.AudioMix#describeContents():
@@ -1903,578 +243,22 @@
     New API must be flagged with @FlaggedApi: field android.media.audiopolicy.AudioMixingRule.CREATOR
 UnflaggedApi: android.media.audiopolicy.AudioMixingRule#describeContents():
     New API must be flagged with @FlaggedApi: method android.media.audiopolicy.AudioMixingRule.describeContents()
-UnflaggedApi: android.media.audiopolicy.AudioMixingRule#hashCode():
-    New API must be flagged with @FlaggedApi: method android.media.audiopolicy.AudioMixingRule.hashCode()
 UnflaggedApi: android.media.audiopolicy.AudioMixingRule#writeToParcel(android.os.Parcel, int):
     New API must be flagged with @FlaggedApi: method android.media.audiopolicy.AudioMixingRule.writeToParcel(android.os.Parcel,int)
 UnflaggedApi: android.media.audiopolicy.AudioPolicy#updateMixingRules(java.util.List<android.util.Pair<android.media.audiopolicy.AudioMix,android.media.audiopolicy.AudioMixingRule>>):
     New API must be flagged with @FlaggedApi: method android.media.audiopolicy.AudioPolicy.updateMixingRules(java.util.List<android.util.Pair<android.media.audiopolicy.AudioMix,android.media.audiopolicy.AudioMixingRule>>)
-UnflaggedApi: android.media.audiopolicy.AudioProductStrategy#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.media.audiopolicy.AudioProductStrategy.equals(Object)
-UnflaggedApi: android.media.audiopolicy.AudioProductStrategy#hashCode():
-    New API must be flagged with @FlaggedApi: method android.media.audiopolicy.AudioProductStrategy.hashCode()
-UnflaggedApi: android.media.audiopolicy.AudioProductStrategy#toString():
-    New API must be flagged with @FlaggedApi: method android.media.audiopolicy.AudioProductStrategy.toString()
-UnflaggedApi: android.media.audiopolicy.AudioVolumeGroup#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.media.audiopolicy.AudioVolumeGroup.equals(Object)
-UnflaggedApi: android.media.audiopolicy.AudioVolumeGroup#toString():
-    New API must be flagged with @FlaggedApi: method android.media.audiopolicy.AudioVolumeGroup.toString()
-UnflaggedApi: android.media.musicrecognition.MusicRecognitionService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.media.musicrecognition.MusicRecognitionService.onCreate()
-UnflaggedApi: android.media.soundtrigger.SoundTriggerDetectionService#onUnbind(android.content.Intent):
-    New API must be flagged with @FlaggedApi: method android.media.soundtrigger.SoundTriggerDetectionService.onUnbind(android.content.Intent)
-UnflaggedApi: android.media.tv.TunedInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.media.tv.TunedInfo.equals(Object)
-UnflaggedApi: android.media.tv.TunedInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.media.tv.TunedInfo.hashCode()
-UnflaggedApi: android.media.tv.TunedInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.media.tv.TunedInfo.toString()
-UnflaggedApi: android.media.tv.TvInputHardwareInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.media.tv.TvInputHardwareInfo.toString()
-UnflaggedApi: android.media.tv.TvRecordingClient.RecordingCallback#onEvent(String, String, android.os.Bundle):
-    New API must be flagged with @FlaggedApi: method android.media.tv.TvRecordingClient.RecordingCallback.onEvent(String,String,android.os.Bundle)
-UnflaggedApi: android.media.tv.TvStreamConfig#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.media.tv.TvStreamConfig.equals(Object)
-UnflaggedApi: android.media.tv.TvStreamConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.media.tv.TvStreamConfig.toString()
-UnflaggedApi: android.net.MatchAllNetworkSpecifier#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.MatchAllNetworkSpecifier.equals(Object)
-UnflaggedApi: android.net.MatchAllNetworkSpecifier#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.MatchAllNetworkSpecifier.hashCode()
-UnflaggedApi: android.net.NetworkKey#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.NetworkKey.equals(Object)
-UnflaggedApi: android.net.NetworkKey#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.NetworkKey.hashCode()
-UnflaggedApi: android.net.NetworkKey#toString():
-    New API must be flagged with @FlaggedApi: method android.net.NetworkKey.toString()
-UnflaggedApi: android.net.RssiCurve#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.RssiCurve.equals(Object)
-UnflaggedApi: android.net.RssiCurve#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.RssiCurve.hashCode()
-UnflaggedApi: android.net.RssiCurve#toString():
-    New API must be flagged with @FlaggedApi: method android.net.RssiCurve.toString()
-UnflaggedApi: android.net.ScoredNetwork#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.ScoredNetwork.equals(Object)
-UnflaggedApi: android.net.ScoredNetwork#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.ScoredNetwork.hashCode()
-UnflaggedApi: android.net.ScoredNetwork#toString():
-    New API must be flagged with @FlaggedApi: method android.net.ScoredNetwork.toString()
-UnflaggedApi: android.net.WebAddress#toString():
-    New API must be flagged with @FlaggedApi: method android.net.WebAddress.toString()
-UnflaggedApi: android.net.WifiKey#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.WifiKey.equals(Object)
-UnflaggedApi: android.net.WifiKey#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.WifiKey.hashCode()
-UnflaggedApi: android.net.WifiKey#toString():
-    New API must be flagged with @FlaggedApi: method android.net.WifiKey.toString()
-UnflaggedApi: android.net.metrics.ApfProgramEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.metrics.ApfProgramEvent.equals(Object)
-UnflaggedApi: android.net.metrics.ApfProgramEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.net.metrics.ApfProgramEvent.toString()
-UnflaggedApi: android.net.metrics.ApfStats#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.metrics.ApfStats.equals(Object)
-UnflaggedApi: android.net.metrics.ApfStats#toString():
-    New API must be flagged with @FlaggedApi: method android.net.metrics.ApfStats.toString()
-UnflaggedApi: android.net.metrics.DhcpClientEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.metrics.DhcpClientEvent.equals(Object)
-UnflaggedApi: android.net.metrics.DhcpClientEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.net.metrics.DhcpClientEvent.toString()
-UnflaggedApi: android.net.metrics.DhcpErrorEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.net.metrics.DhcpErrorEvent.toString()
-UnflaggedApi: android.net.metrics.IpManagerEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.metrics.IpManagerEvent.equals(Object)
-UnflaggedApi: android.net.metrics.IpManagerEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.net.metrics.IpManagerEvent.toString()
-UnflaggedApi: android.net.metrics.IpReachabilityEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.metrics.IpReachabilityEvent.equals(Object)
-UnflaggedApi: android.net.metrics.IpReachabilityEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.net.metrics.IpReachabilityEvent.toString()
-UnflaggedApi: android.net.metrics.NetworkEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.metrics.NetworkEvent.equals(Object)
-UnflaggedApi: android.net.metrics.NetworkEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.net.metrics.NetworkEvent.toString()
-UnflaggedApi: android.net.metrics.RaEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.metrics.RaEvent.equals(Object)
-UnflaggedApi: android.net.metrics.RaEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.net.metrics.RaEvent.toString()
-UnflaggedApi: android.net.metrics.ValidationProbeEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.metrics.ValidationProbeEvent.equals(Object)
-UnflaggedApi: android.net.metrics.ValidationProbeEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.net.metrics.ValidationProbeEvent.toString()
-UnflaggedApi: android.net.vcn.VcnNetworkPolicyResult#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.vcn.VcnNetworkPolicyResult.equals(Object)
-UnflaggedApi: android.net.vcn.VcnNetworkPolicyResult#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.vcn.VcnNetworkPolicyResult.hashCode()
-UnflaggedApi: android.net.vcn.VcnNetworkPolicyResult#toString():
-    New API must be flagged with @FlaggedApi: method android.net.vcn.VcnNetworkPolicyResult.toString()
-UnflaggedApi: android.net.wifi.nl80211.DeviceWiphyCapabilities#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.DeviceWiphyCapabilities.equals(Object)
-UnflaggedApi: android.net.wifi.nl80211.DeviceWiphyCapabilities#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.DeviceWiphyCapabilities.hashCode()
-UnflaggedApi: android.net.wifi.nl80211.DeviceWiphyCapabilities#toString():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.DeviceWiphyCapabilities.toString()
-UnflaggedApi: android.net.wifi.nl80211.NativeWifiClient#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.NativeWifiClient.equals(Object)
-UnflaggedApi: android.net.wifi.nl80211.NativeWifiClient#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.NativeWifiClient.hashCode()
-UnflaggedApi: android.net.wifi.nl80211.PnoNetwork#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.PnoNetwork.equals(Object)
-UnflaggedApi: android.net.wifi.nl80211.PnoNetwork#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.PnoNetwork.hashCode()
-UnflaggedApi: android.net.wifi.nl80211.PnoSettings#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.PnoSettings.equals(Object)
-UnflaggedApi: android.net.wifi.nl80211.PnoSettings#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.PnoSettings.hashCode()
-UnflaggedApi: android.net.wifi.nl80211.RadioChainInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.RadioChainInfo.equals(Object)
-UnflaggedApi: android.net.wifi.nl80211.RadioChainInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.nl80211.RadioChainInfo.hashCode()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.HotspotNetwork#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.HotspotNetwork.equals(Object)
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.HotspotNetwork#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.HotspotNetwork.hashCode()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.HotspotNetwork#toString():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.HotspotNetwork.toString()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.HotspotNetworkConnectionStatus#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.HotspotNetworkConnectionStatus.equals(Object)
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.HotspotNetworkConnectionStatus#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.HotspotNetworkConnectionStatus.hashCode()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.HotspotNetworkConnectionStatus#toString():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.HotspotNetworkConnectionStatus.toString()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.KnownNetwork#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.KnownNetwork.equals(Object)
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.KnownNetwork#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.KnownNetwork.hashCode()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.KnownNetwork#toString():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.KnownNetwork.toString()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.KnownNetworkConnectionStatus#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.KnownNetworkConnectionStatus.equals(Object)
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.KnownNetworkConnectionStatus#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.KnownNetworkConnectionStatus.hashCode()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.KnownNetworkConnectionStatus#toString():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.KnownNetworkConnectionStatus.toString()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.NetworkProviderInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.equals(Object)
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.NetworkProviderInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.hashCode()
 UnflaggedApi: android.net.wifi.sharedconnectivity.app.NetworkProviderInfo#isBatteryCharging():
     New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.isBatteryCharging()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.NetworkProviderInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.toString()
 UnflaggedApi: android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.Builder#setBatteryCharging(boolean):
     New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.Builder.setBatteryCharging(boolean)
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState.equals(Object)
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState#hashCode():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState.hashCode()
-UnflaggedApi: android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState#toString():
-    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState.toString()
-UnflaggedApi: android.os.BatterySaverPolicyConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.os.BatterySaverPolicyConfig.toString()
 UnflaggedApi: android.os.BugreportParams#BUGREPORT_MODE_ONBOARDING:
     New API must be flagged with @FlaggedApi: field android.os.BugreportParams.BUGREPORT_MODE_ONBOARDING
-UnflaggedApi: android.os.Build.VERSION#KNOWN_CODENAMES:
-    New API must be flagged with @FlaggedApi: field android.os.Build.VERSION.KNOWN_CODENAMES
-UnflaggedApi: android.os.Build.VERSION#PREVIEW_SDK_FINGERPRINT:
-    New API must be flagged with @FlaggedApi: field android.os.Build.VERSION.PREVIEW_SDK_FINGERPRINT
-UnflaggedApi: android.os.IncidentManager.PendingReport#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.os.IncidentManager.PendingReport.equals(Object)
-UnflaggedApi: android.os.IncidentManager.PendingReport#toString():
-    New API must be flagged with @FlaggedApi: method android.os.IncidentManager.PendingReport.toString()
-UnflaggedApi: android.os.IncidentReportArgs#toString():
-    New API must be flagged with @FlaggedApi: method android.os.IncidentReportArgs.toString()
-UnflaggedApi: android.os.NewUserRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.os.NewUserRequest.toString()
-UnflaggedApi: android.os.NewUserResponse#toString():
-    New API must be flagged with @FlaggedApi: method android.os.NewUserResponse.toString()
-UnflaggedApi: android.os.PowerManager.LowPowerStandbyPolicy#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.os.PowerManager.LowPowerStandbyPolicy.equals(Object)
-UnflaggedApi: android.os.PowerManager.LowPowerStandbyPolicy#hashCode():
-    New API must be flagged with @FlaggedApi: method android.os.PowerManager.LowPowerStandbyPolicy.hashCode()
-UnflaggedApi: android.os.PowerManager.LowPowerStandbyPolicy#toString():
-    New API must be flagged with @FlaggedApi: method android.os.PowerManager.LowPowerStandbyPolicy.toString()
-UnflaggedApi: android.os.PowerManager.LowPowerStandbyPortDescription#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.os.PowerManager.LowPowerStandbyPortDescription.equals(Object)
-UnflaggedApi: android.os.PowerManager.LowPowerStandbyPortDescription#hashCode():
-    New API must be flagged with @FlaggedApi: method android.os.PowerManager.LowPowerStandbyPortDescription.hashCode()
-UnflaggedApi: android.os.PowerManager.LowPowerStandbyPortDescription#toString():
-    New API must be flagged with @FlaggedApi: method android.os.PowerManager.LowPowerStandbyPortDescription.toString()
-UnflaggedApi: android.os.ServiceSpecificException#toString():
-    New API must be flagged with @FlaggedApi: method android.os.ServiceSpecificException.toString()
-UnflaggedApi: android.os.WorkSource.WorkChain#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.os.WorkSource.WorkChain.equals(Object)
-UnflaggedApi: android.os.WorkSource.WorkChain#hashCode():
-    New API must be flagged with @FlaggedApi: method android.os.WorkSource.WorkChain.hashCode()
-UnflaggedApi: android.os.WorkSource.WorkChain#toString():
-    New API must be flagged with @FlaggedApi: method android.os.WorkSource.WorkChain.toString()
-UnflaggedApi: android.os.connectivity.CellularBatteryStats#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.os.connectivity.CellularBatteryStats.equals(Object)
-UnflaggedApi: android.os.connectivity.CellularBatteryStats#hashCode():
-    New API must be flagged with @FlaggedApi: method android.os.connectivity.CellularBatteryStats.hashCode()
-UnflaggedApi: android.os.connectivity.WifiActivityEnergyInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.os.connectivity.WifiActivityEnergyInfo.toString()
-UnflaggedApi: android.os.connectivity.WifiBatteryStats#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.os.connectivity.WifiBatteryStats.equals(Object)
-UnflaggedApi: android.os.connectivity.WifiBatteryStats#hashCode():
-    New API must be flagged with @FlaggedApi: method android.os.connectivity.WifiBatteryStats.hashCode()
-UnflaggedApi: android.permission.AdminPermissionControlParams#toString():
-    New API must be flagged with @FlaggedApi: method android.permission.AdminPermissionControlParams.toString()
-UnflaggedApi: android.permission.PermissionGroupUsage#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.permission.PermissionGroupUsage.equals(Object)
-UnflaggedApi: android.permission.PermissionGroupUsage#hashCode():
-    New API must be flagged with @FlaggedApi: method android.permission.PermissionGroupUsage.hashCode()
-UnflaggedApi: android.permission.PermissionGroupUsage#toString():
-    New API must be flagged with @FlaggedApi: method android.permission.PermissionGroupUsage.toString()
-UnflaggedApi: android.permission.PermissionManager.SplitPermissionInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.permission.PermissionManager.SplitPermissionInfo.equals(Object)
-UnflaggedApi: android.permission.PermissionManager.SplitPermissionInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.permission.PermissionManager.SplitPermissionInfo.hashCode()
-UnflaggedApi: android.printservice.PrintServiceInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.printservice.PrintServiceInfo.equals(Object)
-UnflaggedApi: android.printservice.PrintServiceInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.printservice.PrintServiceInfo.hashCode()
-UnflaggedApi: android.printservice.PrintServiceInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.printservice.PrintServiceInfo.toString()
-UnflaggedApi: android.printservice.recommendation.RecommendationService#attachBaseContext(android.content.Context):
-    New API must be flagged with @FlaggedApi: method android.printservice.recommendation.RecommendationService.attachBaseContext(android.content.Context)
-UnflaggedApi: android.provider.CallLog.CallComposerLoggingException#toString():
-    New API must be flagged with @FlaggedApi: method android.provider.CallLog.CallComposerLoggingException.toString()
-UnflaggedApi: android.provider.ContactsContract.MetadataSync#CONTENT_ITEM_TYPE:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSync.CONTENT_ITEM_TYPE
-UnflaggedApi: android.provider.ContactsContract.MetadataSync#CONTENT_TYPE:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSync.CONTENT_TYPE
-UnflaggedApi: android.provider.ContactsContract.MetadataSync#CONTENT_URI:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSync.CONTENT_URI
-UnflaggedApi: android.provider.ContactsContract.MetadataSync#METADATA_AUTHORITY:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSync.METADATA_AUTHORITY
-UnflaggedApi: android.provider.ContactsContract.MetadataSync#METADATA_AUTHORITY_URI:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSync.METADATA_AUTHORITY_URI
-UnflaggedApi: android.provider.ContactsContract.MetadataSync#_COUNT:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSync._COUNT
-UnflaggedApi: android.provider.ContactsContract.MetadataSync#_ID:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSync._ID
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncColumns#ACCOUNT_NAME:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncColumns.ACCOUNT_NAME
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncColumns#ACCOUNT_TYPE:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncColumns.ACCOUNT_TYPE
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncColumns#DATA:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncColumns.DATA
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncColumns#DATA_SET:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncColumns.DATA_SET
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncColumns#DELETED:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncColumns.DELETED
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncColumns#RAW_CONTACT_BACKUP_ID:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncColumns.RAW_CONTACT_BACKUP_ID
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncState#CONTENT_ITEM_TYPE:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncState.CONTENT_ITEM_TYPE
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncState#CONTENT_TYPE:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncState.CONTENT_TYPE
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncState#CONTENT_URI:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncState.CONTENT_URI
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncState#_COUNT:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncState._COUNT
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncState#_ID:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncState._ID
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncStateColumns#ACCOUNT_NAME:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncStateColumns.ACCOUNT_NAME
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncStateColumns#ACCOUNT_TYPE:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncStateColumns.ACCOUNT_TYPE
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncStateColumns#DATA_SET:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncStateColumns.DATA_SET
-UnflaggedApi: android.provider.ContactsContract.MetadataSyncStateColumns#STATE:
-    New API must be flagged with @FlaggedApi: field android.provider.ContactsContract.MetadataSyncStateColumns.STATE
-UnflaggedApi: android.provider.ContactsContract.Settings#setDefaultAccount(android.content.ContentResolver, android.accounts.Account):
-    New API must be flagged with @FlaggedApi: method android.provider.ContactsContract.Settings.setDefaultAccount(android.content.ContentResolver,android.accounts.Account)
-UnflaggedApi: android.provider.ContactsContract.SimContacts#addSimAccount(android.content.ContentResolver, String, String, int, int):
-    New API must be flagged with @FlaggedApi: method android.provider.ContactsContract.SimContacts.addSimAccount(android.content.ContentResolver,String,String,int,int)
-UnflaggedApi: android.provider.ContactsContract.SimContacts#removeSimAccounts(android.content.ContentResolver, int):
-    New API must be flagged with @FlaggedApi: method android.provider.ContactsContract.SimContacts.removeSimAccounts(android.content.ContentResolver,int)
-UnflaggedApi: android.provider.SearchIndexableData#toString():
-    New API must be flagged with @FlaggedApi: method android.provider.SearchIndexableData.toString()
-UnflaggedApi: android.provider.SearchIndexableResource#toString():
-    New API must be flagged with @FlaggedApi: method android.provider.SearchIndexableResource.toString()
-UnflaggedApi: android.provider.SearchIndexablesProvider#attachInfo(android.content.Context, android.content.pm.ProviderInfo):
-    New API must be flagged with @FlaggedApi: method android.provider.SearchIndexablesProvider.attachInfo(android.content.Context,android.content.pm.ProviderInfo)
 UnflaggedApi: android.provider.Settings#ACTION_APP_PERMISSIONS_SETTINGS:
     New API must be flagged with @FlaggedApi: field android.provider.Settings.ACTION_APP_PERMISSIONS_SETTINGS
 UnflaggedApi: android.provider.Settings.System#putString(android.content.ContentResolver, String, String, boolean, boolean):
     New API must be flagged with @FlaggedApi: method android.provider.Settings.System.putString(android.content.ContentResolver,String,String,boolean,boolean)
 UnflaggedApi: android.provider.Settings.System#resetToDefaults(android.content.ContentResolver, String):
     New API must be flagged with @FlaggedApi: method android.provider.Settings.System.resetToDefaults(android.content.ContentResolver,String)
-UnflaggedApi: android.provider.SimPhonebookContract.SimRecords#QUERY_ARG_PIN2:
-    New API must be flagged with @FlaggedApi: field android.provider.SimPhonebookContract.SimRecords.QUERY_ARG_PIN2
-UnflaggedApi: android.provider.Telephony.Carriers#APN_SET_ID:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.APN_SET_ID
-UnflaggedApi: android.provider.Telephony.Carriers#CARRIER_EDITED:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.CARRIER_EDITED
-UnflaggedApi: android.provider.Telephony.Carriers#EDITED_STATUS:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.EDITED_STATUS
-UnflaggedApi: android.provider.Telephony.Carriers#MATCH_ALL_APN_SET_ID:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.MATCH_ALL_APN_SET_ID
-UnflaggedApi: android.provider.Telephony.Carriers#MAX_CONNECTIONS:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.MAX_CONNECTIONS
-UnflaggedApi: android.provider.Telephony.Carriers#MODEM_PERSIST:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.MODEM_PERSIST
-UnflaggedApi: android.provider.Telephony.Carriers#MTU_V4:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.MTU_V4
-UnflaggedApi: android.provider.Telephony.Carriers#MTU_V6:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.MTU_V6
-UnflaggedApi: android.provider.Telephony.Carriers#NO_APN_SET_ID:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.NO_APN_SET_ID
-UnflaggedApi: android.provider.Telephony.Carriers#TIME_LIMIT_FOR_MAX_CONNECTIONS:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.TIME_LIMIT_FOR_MAX_CONNECTIONS
-UnflaggedApi: android.provider.Telephony.Carriers#UNEDITED:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.UNEDITED
-UnflaggedApi: android.provider.Telephony.Carriers#USER_DELETED:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.USER_DELETED
-UnflaggedApi: android.provider.Telephony.Carriers#USER_EDITABLE:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.USER_EDITABLE
-UnflaggedApi: android.provider.Telephony.Carriers#USER_EDITED:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.USER_EDITED
-UnflaggedApi: android.provider.Telephony.Carriers#USER_VISIBLE:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.USER_VISIBLE
-UnflaggedApi: android.provider.Telephony.Carriers#WAIT_TIME_RETRY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Carriers.WAIT_TIME_RETRY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts:
-    New API must be flagged with @FlaggedApi: class android.provider.Telephony.CellBroadcasts
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#AUTHORITY_LEGACY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.AUTHORITY_LEGACY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#AUTHORITY_LEGACY_URI:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.AUTHORITY_LEGACY_URI
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#CALL_METHOD_GET_PREFERENCE:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.CALL_METHOD_GET_PREFERENCE
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#CID:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.CID
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#CMAS_CATEGORY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.CMAS_CATEGORY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#CMAS_CERTAINTY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.CMAS_CERTAINTY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#CMAS_MESSAGE_CLASS:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.CMAS_MESSAGE_CLASS
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#CMAS_RESPONSE_TYPE:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.CMAS_RESPONSE_TYPE
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#CMAS_SEVERITY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.CMAS_SEVERITY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#CMAS_URGENCY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.CMAS_URGENCY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#CONTENT_URI:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.CONTENT_URI
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#DATA_CODING_SCHEME:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.DATA_CODING_SCHEME
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#DEFAULT_SORT_ORDER:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.DEFAULT_SORT_ORDER
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#DELIVERY_TIME:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.DELIVERY_TIME
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#ETWS_IS_PRIMARY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.ETWS_IS_PRIMARY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#ETWS_WARNING_TYPE:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.ETWS_WARNING_TYPE
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#GEOGRAPHICAL_SCOPE:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.GEOGRAPHICAL_SCOPE
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#GEOMETRIES:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.GEOMETRIES
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#LAC:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.LAC
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#LANGUAGE_CODE:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.LANGUAGE_CODE
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#LOCATION_CHECK_TIME:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.LOCATION_CHECK_TIME
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#MAXIMUM_WAIT_TIME:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.MAXIMUM_WAIT_TIME
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#MESSAGE_BODY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.MESSAGE_BODY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#MESSAGE_BROADCASTED:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.MESSAGE_BROADCASTED
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#MESSAGE_DISPLAYED:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.MESSAGE_DISPLAYED
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#MESSAGE_FORMAT:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.MESSAGE_FORMAT
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#MESSAGE_HISTORY_URI:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.MESSAGE_HISTORY_URI
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#MESSAGE_PRIORITY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.MESSAGE_PRIORITY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#MESSAGE_READ:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.MESSAGE_READ
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#PLMN:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.PLMN
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#RECEIVED_TIME:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.RECEIVED_TIME
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#SERIAL_NUMBER:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.SERIAL_NUMBER
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#SERVICE_CATEGORY:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.SERVICE_CATEGORY
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#SLOT_INDEX:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.SLOT_INDEX
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#SUBSCRIPTION_ID:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.SUBSCRIPTION_ID
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#_COUNT:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts._COUNT
-UnflaggedApi: android.provider.Telephony.CellBroadcasts#_ID:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts._ID
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference:
-    New API must be flagged with @FlaggedApi: class android.provider.Telephony.CellBroadcasts.Preference
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_ALERT_VIBRATION_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_ALERT_VIBRATION_PREF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_AREA_UPDATE_INFO_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_AREA_UPDATE_INFO_PREF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_CMAS_AMBER_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_CMAS_AMBER_PREF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_CMAS_EXTREME_THREAT_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_CMAS_EXTREME_THREAT_PREF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_CMAS_IN_SECOND_LANGUAGE_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_CMAS_IN_SECOND_LANGUAGE_PREF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_CMAS_PRESIDENTIAL_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_CMAS_PRESIDENTIAL_PREF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_CMAS_SEVERE_THREAT_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_CMAS_SEVERE_THREAT_PREF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_EMERGENCY_PERF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_EMERGENCY_PERF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_PUBLIC_SAFETY_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_PUBLIC_SAFETY_PREF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_STATE_LOCAL_TEST_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_STATE_LOCAL_TEST_PREF
-UnflaggedApi: android.provider.Telephony.CellBroadcasts.Preference#ENABLE_TEST_ALERT_PREF:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.CellBroadcasts.Preference.ENABLE_TEST_ALERT_PREF
-UnflaggedApi: android.provider.Telephony.Sms.Intents#ACTION_SMS_EMERGENCY_CB_RECEIVED:
-    New API must be flagged with @FlaggedApi: field android.provider.Telephony.Sms.Intents.ACTION_SMS_EMERGENCY_CB_RECEIVED
-UnflaggedApi: android.service.ambientcontext.AmbientContextDetectionResult#toString():
-    New API must be flagged with @FlaggedApi: method android.service.ambientcontext.AmbientContextDetectionResult.toString()
-UnflaggedApi: android.service.ambientcontext.AmbientContextDetectionServiceStatus#toString():
-    New API must be flagged with @FlaggedApi: method android.service.ambientcontext.AmbientContextDetectionServiceStatus.toString()
-UnflaggedApi: android.service.appprediction.AppPredictionService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.appprediction.AppPredictionService.onCreate()
-UnflaggedApi: android.service.assist.classification.FieldClassificationRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.service.assist.classification.FieldClassificationRequest.toString()
-UnflaggedApi: android.service.assist.classification.FieldClassificationResponse#toString():
-    New API must be flagged with @FlaggedApi: method android.service.assist.classification.FieldClassificationResponse.toString()
-UnflaggedApi: android.service.assist.classification.FieldClassificationService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.assist.classification.FieldClassificationService.onCreate()
-UnflaggedApi: android.service.autofill.AutofillFieldClassificationService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.autofill.AutofillFieldClassificationService.onCreate()
-UnflaggedApi: android.service.autofill.Dataset.Builder#setContent(android.view.autofill.AutofillId, android.content.ClipData):
-    New API must be flagged with @FlaggedApi: method android.service.autofill.Dataset.Builder.setContent(android.view.autofill.AutofillId,android.content.ClipData)
-UnflaggedApi: android.service.autofill.augmented.AugmentedAutofillService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.autofill.augmented.AugmentedAutofillService.onCreate()
-UnflaggedApi: android.service.autofill.augmented.AugmentedAutofillService#onUnbind(android.content.Intent):
-    New API must be flagged with @FlaggedApi: method android.service.autofill.augmented.AugmentedAutofillService.onUnbind(android.content.Intent)
-UnflaggedApi: android.service.autofill.augmented.FillRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.service.autofill.augmented.FillRequest.toString()
-UnflaggedApi: android.service.autofill.augmented.FillWindow#finalize():
-    New API must be flagged with @FlaggedApi: method android.service.autofill.augmented.FillWindow.finalize()
-UnflaggedApi: android.service.autofill.augmented.PresentationParams.Area#toString():
-    New API must be flagged with @FlaggedApi: method android.service.autofill.augmented.PresentationParams.Area.toString()
-UnflaggedApi: android.service.cloudsearch.CloudSearchService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.cloudsearch.CloudSearchService.onCreate()
-UnflaggedApi: android.service.contentcapture.ActivityEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.service.contentcapture.ActivityEvent.toString()
-UnflaggedApi: android.service.contentcapture.ContentCaptureService#dump(java.io.FileDescriptor, java.io.PrintWriter, String[]):
-    New API must be flagged with @FlaggedApi: method android.service.contentcapture.ContentCaptureService.dump(java.io.FileDescriptor,java.io.PrintWriter,String[])
-UnflaggedApi: android.service.contentcapture.ContentCaptureService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.contentcapture.ContentCaptureService.onCreate()
-UnflaggedApi: android.service.contentsuggestions.ContentSuggestionsService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.contentsuggestions.ContentSuggestionsService.onCreate()
-UnflaggedApi: android.service.displayhash.DisplayHashParams#toString():
-    New API must be flagged with @FlaggedApi: method android.service.displayhash.DisplayHashParams.toString()
-UnflaggedApi: android.service.displayhash.DisplayHashingService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.displayhash.DisplayHashingService.onCreate()
-UnflaggedApi: android.service.euicc.EuiccProfileInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.euicc.EuiccProfileInfo.equals(Object)
-UnflaggedApi: android.service.euicc.EuiccProfileInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.euicc.EuiccProfileInfo.hashCode()
-UnflaggedApi: android.service.euicc.EuiccProfileInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.service.euicc.EuiccProfileInfo.toString()
-UnflaggedApi: android.service.euicc.EuiccService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.euicc.EuiccService.onCreate()
-UnflaggedApi: android.service.euicc.EuiccService#onDestroy():
-    New API must be flagged with @FlaggedApi: method android.service.euicc.EuiccService.onDestroy()
-UnflaggedApi: android.service.games.CreateGameSessionRequest#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.games.CreateGameSessionRequest.equals(Object)
-UnflaggedApi: android.service.games.CreateGameSessionRequest#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.games.CreateGameSessionRequest.hashCode()
-UnflaggedApi: android.service.games.CreateGameSessionRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.service.games.CreateGameSessionRequest.toString()
-UnflaggedApi: android.service.games.GameSessionService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.games.GameSessionService.onCreate()
-UnflaggedApi: android.service.games.GameStartedEvent#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.games.GameStartedEvent.equals(Object)
-UnflaggedApi: android.service.games.GameStartedEvent#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.games.GameStartedEvent.hashCode()
-UnflaggedApi: android.service.games.GameStartedEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.service.games.GameStartedEvent.toString()
-UnflaggedApi: android.service.notification.Adjustment#toString():
-    New API must be flagged with @FlaggedApi: method android.service.notification.Adjustment.toString()
-UnflaggedApi: android.service.notification.NotificationAssistantService#attachBaseContext(android.content.Context):
-    New API must be flagged with @FlaggedApi: method android.service.notification.NotificationAssistantService.attachBaseContext(android.content.Context)
-UnflaggedApi: android.service.notification.NotificationStats#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.notification.NotificationStats.equals(Object)
-UnflaggedApi: android.service.notification.NotificationStats#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.notification.NotificationStats.hashCode()
-UnflaggedApi: android.service.notification.NotificationStats#toString():
-    New API must be flagged with @FlaggedApi: method android.service.notification.NotificationStats.toString()
-UnflaggedApi: android.service.notification.SnoozeCriterion#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.notification.SnoozeCriterion.equals(Object)
-UnflaggedApi: android.service.notification.SnoozeCriterion#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.notification.SnoozeCriterion.hashCode()
-UnflaggedApi: android.service.resolver.ResolverRankerService#onDestroy():
-    New API must be flagged with @FlaggedApi: method android.service.resolver.ResolverRankerService.onDestroy()
-UnflaggedApi: android.service.resolver.ResolverTarget#toString():
-    New API must be flagged with @FlaggedApi: method android.service.resolver.ResolverTarget.toString()
-UnflaggedApi: android.service.rotationresolver.RotationResolutionRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.service.rotationresolver.RotationResolutionRequest.toString()
-UnflaggedApi: android.service.search.SearchUiService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.search.SearchUiService.onCreate()
-UnflaggedApi: android.service.smartspace.SmartspaceService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.smartspace.SmartspaceService.onCreate()
-UnflaggedApi: android.service.textclassifier.TextClassifierService#onUnbind(android.content.Intent):
-    New API must be flagged with @FlaggedApi: method android.service.textclassifier.TextClassifierService.onUnbind(android.content.Intent)
-UnflaggedApi: android.service.timezone.TimeZoneProviderStatus#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.timezone.TimeZoneProviderStatus.equals(Object)
-UnflaggedApi: android.service.timezone.TimeZoneProviderStatus#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.timezone.TimeZoneProviderStatus.hashCode()
-UnflaggedApi: android.service.timezone.TimeZoneProviderStatus#toString():
-    New API must be flagged with @FlaggedApi: method android.service.timezone.TimeZoneProviderStatus.toString()
-UnflaggedApi: android.service.timezone.TimeZoneProviderSuggestion#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.timezone.TimeZoneProviderSuggestion.equals(Object)
-UnflaggedApi: android.service.timezone.TimeZoneProviderSuggestion#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.timezone.TimeZoneProviderSuggestion.hashCode()
-UnflaggedApi: android.service.timezone.TimeZoneProviderSuggestion#toString():
-    New API must be flagged with @FlaggedApi: method android.service.timezone.TimeZoneProviderSuggestion.toString()
-UnflaggedApi: android.service.translation.TranslationService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.translation.TranslationService.onCreate()
-UnflaggedApi: android.service.trust.TrustAgentService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.trust.TrustAgentService.onCreate()
-UnflaggedApi: android.service.voice.AlwaysOnHotwordDetector#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.voice.AlwaysOnHotwordDetector.equals(Object)
-UnflaggedApi: android.service.voice.AlwaysOnHotwordDetector#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.voice.AlwaysOnHotwordDetector.hashCode()
-UnflaggedApi: android.service.voice.AlwaysOnHotwordDetector.ModelParamRange#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.voice.AlwaysOnHotwordDetector.ModelParamRange.equals(Object)
-UnflaggedApi: android.service.voice.AlwaysOnHotwordDetector.ModelParamRange#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.voice.AlwaysOnHotwordDetector.ModelParamRange.hashCode()
-UnflaggedApi: android.service.voice.AlwaysOnHotwordDetector.ModelParamRange#toString():
-    New API must be flagged with @FlaggedApi: method android.service.voice.AlwaysOnHotwordDetector.ModelParamRange.toString()
-UnflaggedApi: android.service.voice.HotwordAudioStream#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordAudioStream.equals(Object)
-UnflaggedApi: android.service.voice.HotwordAudioStream#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordAudioStream.hashCode()
-UnflaggedApi: android.service.voice.HotwordAudioStream#toString():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordAudioStream.toString()
-UnflaggedApi: android.service.voice.HotwordDetectedResult#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordDetectedResult.equals(Object)
-UnflaggedApi: android.service.voice.HotwordDetectedResult#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordDetectedResult.hashCode()
-UnflaggedApi: android.service.voice.HotwordDetectedResult#toString():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordDetectedResult.toString()
-UnflaggedApi: android.service.voice.HotwordDetectionService#getSystemService(String):
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordDetectionService.getSystemService(String)
-UnflaggedApi: android.service.voice.HotwordDetectionServiceFailure#toString():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordDetectionServiceFailure.toString()
-UnflaggedApi: android.service.voice.HotwordRejectedResult#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordRejectedResult.equals(Object)
-UnflaggedApi: android.service.voice.HotwordRejectedResult#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordRejectedResult.hashCode()
-UnflaggedApi: android.service.voice.HotwordRejectedResult#toString():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordRejectedResult.toString()
 UnflaggedApi: android.service.voice.HotwordTrainingAudio:
     New API must be flagged with @FlaggedApi: class android.service.voice.HotwordTrainingAudio
 UnflaggedApi: android.service.voice.HotwordTrainingAudio#CONTENTS_FILE_DESCRIPTOR:
@@ -2487,8 +271,6 @@
     New API must be flagged with @FlaggedApi: field android.service.voice.HotwordTrainingAudio.PARCELABLE_WRITE_RETURN_VALUE
 UnflaggedApi: android.service.voice.HotwordTrainingAudio#describeContents():
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.describeContents()
-UnflaggedApi: android.service.voice.HotwordTrainingAudio#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.equals(Object)
 UnflaggedApi: android.service.voice.HotwordTrainingAudio#getAudioFormat():
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.getAudioFormat()
 UnflaggedApi: android.service.voice.HotwordTrainingAudio#getAudioType():
@@ -2497,10 +279,6 @@
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.getHotwordAudio()
 UnflaggedApi: android.service.voice.HotwordTrainingAudio#getHotwordOffsetMillis():
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.getHotwordOffsetMillis()
-UnflaggedApi: android.service.voice.HotwordTrainingAudio#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.hashCode()
-UnflaggedApi: android.service.voice.HotwordTrainingAudio#toString():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.toString()
 UnflaggedApi: android.service.voice.HotwordTrainingAudio#writeToParcel(android.os.Parcel, int):
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.writeToParcel(android.os.Parcel,int)
 UnflaggedApi: android.service.voice.HotwordTrainingAudio.Builder:
@@ -2513,8 +291,6 @@
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.Builder.setAudioFormat(android.media.AudioFormat)
 UnflaggedApi: android.service.voice.HotwordTrainingAudio.Builder#setAudioType(int):
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.Builder.setAudioType(int)
-UnflaggedApi: android.service.voice.HotwordTrainingAudio.Builder#setHotwordAudio(byte...):
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.Builder.setHotwordAudio(byte...)
 UnflaggedApi: android.service.voice.HotwordTrainingAudio.Builder#setHotwordOffsetMillis(int):
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingAudio.Builder.setHotwordOffsetMillis(int)
 UnflaggedApi: android.service.voice.HotwordTrainingData:
@@ -2537,18 +313,12 @@
     New API must be flagged with @FlaggedApi: field android.service.voice.HotwordTrainingData.TIMEOUT_STAGE_VERY_EARLY
 UnflaggedApi: android.service.voice.HotwordTrainingData#describeContents():
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.describeContents()
-UnflaggedApi: android.service.voice.HotwordTrainingData#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.equals(Object)
 UnflaggedApi: android.service.voice.HotwordTrainingData#getMaxTrainingDataSize():
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.getMaxTrainingDataSize()
 UnflaggedApi: android.service.voice.HotwordTrainingData#getTimeoutStage():
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.getTimeoutStage()
 UnflaggedApi: android.service.voice.HotwordTrainingData#getTrainingAudios():
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.getTrainingAudios()
-UnflaggedApi: android.service.voice.HotwordTrainingData#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.hashCode()
-UnflaggedApi: android.service.voice.HotwordTrainingData#toString():
-    New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.toString()
 UnflaggedApi: android.service.voice.HotwordTrainingData#writeToParcel(android.os.Parcel, int):
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.writeToParcel(android.os.Parcel,int)
 UnflaggedApi: android.service.voice.HotwordTrainingData.Builder:
@@ -2563,330 +333,10 @@
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.Builder.setTimeoutStage(int)
 UnflaggedApi: android.service.voice.HotwordTrainingData.Builder#setTrainingAudios(java.util.List<android.service.voice.HotwordTrainingAudio>):
     New API must be flagged with @FlaggedApi: method android.service.voice.HotwordTrainingData.Builder.setTrainingAudios(java.util.List<android.service.voice.HotwordTrainingAudio>)
-UnflaggedApi: android.service.voice.SoundTriggerFailure#toString():
-    New API must be flagged with @FlaggedApi: method android.service.voice.SoundTriggerFailure.toString()
-UnflaggedApi: android.service.voice.VisualQueryDetectionService#getSystemService(String):
-    New API must be flagged with @FlaggedApi: method android.service.voice.VisualQueryDetectionService.getSystemService(String)
-UnflaggedApi: android.service.voice.VisualQueryDetectionService#openFileInput(String):
-    New API must be flagged with @FlaggedApi: method android.service.voice.VisualQueryDetectionService.openFileInput(String)
-UnflaggedApi: android.service.voice.VisualQueryDetectionServiceFailure#toString():
-    New API must be flagged with @FlaggedApi: method android.service.voice.VisualQueryDetectionServiceFailure.toString()
-UnflaggedApi: android.service.wallpaper.WallpaperService.Engine#isInAmbientMode():
-    New API must be flagged with @FlaggedApi: method android.service.wallpaper.WallpaperService.Engine.isInAmbientMode()
-UnflaggedApi: android.service.wallpaper.WallpaperService.Engine#onAmbientModeChanged(boolean, long):
-    New API must be flagged with @FlaggedApi: method android.service.wallpaper.WallpaperService.Engine.onAmbientModeChanged(boolean,long)
-UnflaggedApi: android.service.wallpapereffectsgeneration.WallpaperEffectsGenerationService#onCreate():
-    New API must be flagged with @FlaggedApi: method android.service.wallpapereffectsgeneration.WallpaperEffectsGenerationService.onCreate()
-UnflaggedApi: android.service.watchdog.ExplicitHealthCheckService.PackageConfig#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.service.watchdog.ExplicitHealthCheckService.PackageConfig.equals(Object)
-UnflaggedApi: android.service.watchdog.ExplicitHealthCheckService.PackageConfig#hashCode():
-    New API must be flagged with @FlaggedApi: method android.service.watchdog.ExplicitHealthCheckService.PackageConfig.hashCode()
-UnflaggedApi: android.service.watchdog.ExplicitHealthCheckService.PackageConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.service.watchdog.ExplicitHealthCheckService.PackageConfig.toString()
-UnflaggedApi: android.telecom.AudioState#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telecom.AudioState.equals(Object)
-UnflaggedApi: android.telecom.AudioState#toString():
-    New API must be flagged with @FlaggedApi: method android.telecom.AudioState.toString()
-UnflaggedApi: android.telecom.BluetoothCallQualityReport#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telecom.BluetoothCallQualityReport.equals(Object)
-UnflaggedApi: android.telecom.BluetoothCallQualityReport#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telecom.BluetoothCallQualityReport.hashCode()
-UnflaggedApi: android.telecom.CallScreeningService.CallResponse.Builder#setShouldScreenCallViaAudioProcessing(boolean):
-    New API must be flagged with @FlaggedApi: method android.telecom.CallScreeningService.CallResponse.Builder.setShouldScreenCallViaAudioProcessing(boolean)
-UnflaggedApi: android.telecom.Connection.CallFilteringCompletionInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telecom.Connection.CallFilteringCompletionInfo.toString()
 UnflaggedApi: android.telecom.StreamingCall#EXTRA_CALL_ID:
     New API must be flagged with @FlaggedApi: field android.telecom.StreamingCall.EXTRA_CALL_ID
-UnflaggedApi: android.telephony.CallAttributes#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.CallAttributes.equals(Object)
-UnflaggedApi: android.telephony.CallAttributes#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.CallAttributes.hashCode()
-UnflaggedApi: android.telephony.CallAttributes#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.CallAttributes.toString()
-UnflaggedApi: android.telephony.CallQuality#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.CallQuality.equals(Object)
-UnflaggedApi: android.telephony.CallQuality#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.CallQuality.hashCode()
-UnflaggedApi: android.telephony.CallQuality#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.CallQuality.toString()
-UnflaggedApi: android.telephony.CallState#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.CallState.equals(Object)
-UnflaggedApi: android.telephony.CallState#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.CallState.hashCode()
-UnflaggedApi: android.telephony.CallState#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.CallState.toString()
-UnflaggedApi: android.telephony.CarrierRestrictionRules#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.CarrierRestrictionRules.toString()
-UnflaggedApi: android.telephony.CbGeoUtils.Circle#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.CbGeoUtils.Circle.toString()
-UnflaggedApi: android.telephony.CbGeoUtils.LatLng#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.CbGeoUtils.LatLng.toString()
-UnflaggedApi: android.telephony.CbGeoUtils.Polygon#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.CbGeoUtils.Polygon.toString()
-UnflaggedApi: android.telephony.CellBroadcastIdRange#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.CellBroadcastIdRange.equals(Object)
-UnflaggedApi: android.telephony.CellBroadcastIdRange#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.CellBroadcastIdRange.hashCode()
-UnflaggedApi: android.telephony.CellBroadcastIdRange#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.CellBroadcastIdRange.toString()
-UnflaggedApi: android.telephony.DataSpecificRegistrationInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.DataSpecificRegistrationInfo.equals(Object)
-UnflaggedApi: android.telephony.DataSpecificRegistrationInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.DataSpecificRegistrationInfo.hashCode()
-UnflaggedApi: android.telephony.DataSpecificRegistrationInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.DataSpecificRegistrationInfo.toString()
-UnflaggedApi: android.telephony.DataThrottlingRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.DataThrottlingRequest.toString()
-UnflaggedApi: android.telephony.ImsiEncryptionInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ImsiEncryptionInfo.toString()
-UnflaggedApi: android.telephony.LinkCapacityEstimate#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.LinkCapacityEstimate.equals(Object)
-UnflaggedApi: android.telephony.LinkCapacityEstimate#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.LinkCapacityEstimate.hashCode()
-UnflaggedApi: android.telephony.LinkCapacityEstimate#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.LinkCapacityEstimate.toString()
-UnflaggedApi: android.telephony.LteVopsSupportInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.LteVopsSupportInfo.toString()
-UnflaggedApi: android.telephony.ModemActivityInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ModemActivityInfo.equals(Object)
-UnflaggedApi: android.telephony.ModemActivityInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ModemActivityInfo.hashCode()
-UnflaggedApi: android.telephony.ModemActivityInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ModemActivityInfo.toString()
 UnflaggedApi: android.telephony.NetworkRegistrationInfo.Builder#setIsNonTerrestrialNetwork(boolean):
     New API must be flagged with @FlaggedApi: method android.telephony.NetworkRegistrationInfo.Builder.setIsNonTerrestrialNetwork(boolean)
-UnflaggedApi: android.telephony.NetworkService#onUnbind(android.content.Intent):
-    New API must be flagged with @FlaggedApi: method android.telephony.NetworkService.onUnbind(android.content.Intent)
-UnflaggedApi: android.telephony.NrVopsSupportInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.NrVopsSupportInfo.toString()
-UnflaggedApi: android.telephony.PhoneCapability#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.PhoneCapability.equals(Object)
-UnflaggedApi: android.telephony.PhoneCapability#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.PhoneCapability.hashCode()
-UnflaggedApi: android.telephony.PhoneCapability#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.PhoneCapability.toString()
-UnflaggedApi: android.telephony.PhoneNumberRange#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.PhoneNumberRange.equals(Object)
-UnflaggedApi: android.telephony.PhoneNumberRange#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.PhoneNumberRange.hashCode()
-UnflaggedApi: android.telephony.PhoneNumberRange#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.PhoneNumberRange.toString()
-UnflaggedApi: android.telephony.PinResult#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.PinResult.equals(Object)
-UnflaggedApi: android.telephony.PinResult#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.PinResult.hashCode()
-UnflaggedApi: android.telephony.PinResult#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.PinResult.toString()
-UnflaggedApi: android.telephony.PreciseCallState#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.PreciseCallState.equals(Object)
-UnflaggedApi: android.telephony.PreciseCallState#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.PreciseCallState.hashCode()
-UnflaggedApi: android.telephony.PreciseCallState#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.PreciseCallState.toString()
-UnflaggedApi: android.telephony.SmsCbCmasInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.SmsCbCmasInfo.toString()
-UnflaggedApi: android.telephony.SmsCbEtwsInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.SmsCbEtwsInfo.toString()
-UnflaggedApi: android.telephony.SmsCbLocation#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.SmsCbLocation.equals(Object)
-UnflaggedApi: android.telephony.SmsCbLocation#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.SmsCbLocation.hashCode()
-UnflaggedApi: android.telephony.SmsCbLocation#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.SmsCbLocation.toString()
-UnflaggedApi: android.telephony.SmsCbMessage#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.SmsCbMessage.toString()
-UnflaggedApi: android.telephony.TelephonyHistogram#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.TelephonyHistogram.toString()
-UnflaggedApi: android.telephony.TelephonyManager.ModemActivityInfoException#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.TelephonyManager.ModemActivityInfoException.toString()
-UnflaggedApi: android.telephony.ThermalMitigationRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ThermalMitigationRequest.toString()
-UnflaggedApi: android.telephony.UiccAccessRule#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.UiccAccessRule.equals(Object)
-UnflaggedApi: android.telephony.UiccAccessRule#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.UiccAccessRule.hashCode()
-UnflaggedApi: android.telephony.UiccAccessRule#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.UiccAccessRule.toString()
-UnflaggedApi: android.telephony.UiccSlotInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.UiccSlotInfo.equals(Object)
-UnflaggedApi: android.telephony.UiccSlotInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.UiccSlotInfo.hashCode()
-UnflaggedApi: android.telephony.UiccSlotInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.UiccSlotInfo.toString()
-UnflaggedApi: android.telephony.UiccSlotMapping#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.UiccSlotMapping.equals(Object)
-UnflaggedApi: android.telephony.UiccSlotMapping#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.UiccSlotMapping.hashCode()
-UnflaggedApi: android.telephony.UiccSlotMapping#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.UiccSlotMapping.toString()
-UnflaggedApi: android.telephony.VopsSupportInfo#writeToParcel(android.os.Parcel, int):
-    New API must be flagged with @FlaggedApi: method android.telephony.VopsSupportInfo.writeToParcel(android.os.Parcel,int)
-UnflaggedApi: android.telephony.cdma.CdmaSmsCbProgramData#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.cdma.CdmaSmsCbProgramData.toString()
-UnflaggedApi: android.telephony.data.DataCallResponse#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.data.DataCallResponse.equals(Object)
-UnflaggedApi: android.telephony.data.DataCallResponse#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.data.DataCallResponse.hashCode()
-UnflaggedApi: android.telephony.data.DataCallResponse#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.data.DataCallResponse.toString()
-UnflaggedApi: android.telephony.data.DataProfile#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.data.DataProfile.equals(Object)
-UnflaggedApi: android.telephony.data.DataProfile#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.data.DataProfile.hashCode()
-UnflaggedApi: android.telephony.data.DataProfile#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.data.DataProfile.toString()
-UnflaggedApi: android.telephony.data.DataService#onDestroy():
-    New API must be flagged with @FlaggedApi: method android.telephony.data.DataService.onDestroy()
-UnflaggedApi: android.telephony.data.DataService#onUnbind(android.content.Intent):
-    New API must be flagged with @FlaggedApi: method android.telephony.data.DataService.onUnbind(android.content.Intent)
-UnflaggedApi: android.telephony.data.EpsBearerQosSessionAttributes#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.data.EpsBearerQosSessionAttributes.equals(Object)
-UnflaggedApi: android.telephony.data.EpsBearerQosSessionAttributes#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.data.EpsBearerQosSessionAttributes.hashCode()
-UnflaggedApi: android.telephony.data.NrQosSessionAttributes#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.data.NrQosSessionAttributes.equals(Object)
-UnflaggedApi: android.telephony.data.NrQosSessionAttributes#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.data.NrQosSessionAttributes.hashCode()
-UnflaggedApi: android.telephony.data.ThrottleStatus#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.data.ThrottleStatus.equals(Object)
-UnflaggedApi: android.telephony.data.ThrottleStatus#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.data.ThrottleStatus.hashCode()
-UnflaggedApi: android.telephony.data.ThrottleStatus#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.data.ThrottleStatus.toString()
-UnflaggedApi: android.telephony.euicc.EuiccNotification#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.euicc.EuiccNotification.equals(Object)
-UnflaggedApi: android.telephony.euicc.EuiccNotification#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.euicc.EuiccNotification.hashCode()
-UnflaggedApi: android.telephony.euicc.EuiccNotification#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.euicc.EuiccNotification.toString()
-UnflaggedApi: android.telephony.euicc.EuiccRulesAuthTable#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.euicc.EuiccRulesAuthTable.equals(Object)
-UnflaggedApi: android.telephony.gba.UaSecurityProtocolIdentifier#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.gba.UaSecurityProtocolIdentifier.equals(Object)
-UnflaggedApi: android.telephony.gba.UaSecurityProtocolIdentifier#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.gba.UaSecurityProtocolIdentifier.hashCode()
-UnflaggedApi: android.telephony.gba.UaSecurityProtocolIdentifier#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.gba.UaSecurityProtocolIdentifier.toString()
-UnflaggedApi: android.telephony.ims.AudioCodecAttributes#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.AudioCodecAttributes.toString()
-UnflaggedApi: android.telephony.ims.DelegateRegistrationState#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.DelegateRegistrationState.equals(Object)
-UnflaggedApi: android.telephony.ims.DelegateRegistrationState#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.DelegateRegistrationState.hashCode()
-UnflaggedApi: android.telephony.ims.DelegateRegistrationState#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.DelegateRegistrationState.toString()
-UnflaggedApi: android.telephony.ims.DelegateRequest#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.DelegateRequest.equals(Object)
-UnflaggedApi: android.telephony.ims.DelegateRequest#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.DelegateRequest.hashCode()
-UnflaggedApi: android.telephony.ims.DelegateRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.DelegateRequest.toString()
-UnflaggedApi: android.telephony.ims.FeatureTagState#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.FeatureTagState.equals(Object)
-UnflaggedApi: android.telephony.ims.FeatureTagState#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.FeatureTagState.hashCode()
-UnflaggedApi: android.telephony.ims.FeatureTagState#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.FeatureTagState.toString()
-UnflaggedApi: android.telephony.ims.ImsCallForwardInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsCallForwardInfo.toString()
-UnflaggedApi: android.telephony.ims.ImsCallProfile#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsCallProfile.toString()
-UnflaggedApi: android.telephony.ims.ImsConferenceState#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsConferenceState.toString()
-UnflaggedApi: android.telephony.ims.ImsExternalCallState#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsExternalCallState.toString()
-UnflaggedApi: android.telephony.ims.ImsMmTelManager.RegistrationCallback#onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsMmTelManager.RegistrationCallback.onTechnologyChangeFailed(int,android.telephony.ims.ImsReasonInfo)
-UnflaggedApi: android.telephony.ims.ImsMmTelManager.RegistrationCallback#onUnregistered(android.telephony.ims.ImsReasonInfo):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsMmTelManager.RegistrationCallback.onUnregistered(android.telephony.ims.ImsReasonInfo)
-UnflaggedApi: android.telephony.ims.ImsSsData#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsSsData.toString()
-UnflaggedApi: android.telephony.ims.ImsSsInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsSsInfo.toString()
-UnflaggedApi: android.telephony.ims.ImsStreamMediaProfile#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsStreamMediaProfile.toString()
-UnflaggedApi: android.telephony.ims.ImsSuppServiceNotification#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.ImsSuppServiceNotification.toString()
-UnflaggedApi: android.telephony.ims.MediaQualityStatus#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.MediaQualityStatus.equals(Object)
-UnflaggedApi: android.telephony.ims.MediaQualityStatus#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.MediaQualityStatus.hashCode()
-UnflaggedApi: android.telephony.ims.MediaQualityStatus#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.MediaQualityStatus.toString()
-UnflaggedApi: android.telephony.ims.MediaThreshold#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.MediaThreshold.equals(Object)
-UnflaggedApi: android.telephony.ims.MediaThreshold#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.MediaThreshold.hashCode()
-UnflaggedApi: android.telephony.ims.MediaThreshold#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.MediaThreshold.toString()
-UnflaggedApi: android.telephony.ims.PublishAttributes#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.PublishAttributes.equals(Object)
-UnflaggedApi: android.telephony.ims.PublishAttributes#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.PublishAttributes.hashCode()
-UnflaggedApi: android.telephony.ims.PublishAttributes#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.PublishAttributes.toString()
-UnflaggedApi: android.telephony.ims.RcsClientConfiguration#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RcsClientConfiguration.equals(Object)
-UnflaggedApi: android.telephony.ims.RcsClientConfiguration#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RcsClientConfiguration.hashCode()
-UnflaggedApi: android.telephony.ims.RcsContactPresenceTuple#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RcsContactPresenceTuple.toString()
-UnflaggedApi: android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities.toString()
-UnflaggedApi: android.telephony.ims.RcsContactUceCapability#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RcsContactUceCapability.toString()
-UnflaggedApi: android.telephony.ims.RtpHeaderExtension#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RtpHeaderExtension.equals(Object)
-UnflaggedApi: android.telephony.ims.RtpHeaderExtension#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RtpHeaderExtension.hashCode()
-UnflaggedApi: android.telephony.ims.RtpHeaderExtension#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RtpHeaderExtension.toString()
-UnflaggedApi: android.telephony.ims.RtpHeaderExtensionType#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RtpHeaderExtensionType.equals(Object)
-UnflaggedApi: android.telephony.ims.RtpHeaderExtensionType#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RtpHeaderExtensionType.hashCode()
-UnflaggedApi: android.telephony.ims.RtpHeaderExtensionType#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.RtpHeaderExtensionType.toString()
-UnflaggedApi: android.telephony.ims.SipDelegateConfiguration#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipDelegateConfiguration.equals(Object)
-UnflaggedApi: android.telephony.ims.SipDelegateConfiguration#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipDelegateConfiguration.hashCode()
-UnflaggedApi: android.telephony.ims.SipDelegateConfiguration#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipDelegateConfiguration.toString()
-UnflaggedApi: android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration.equals(Object)
-UnflaggedApi: android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration.hashCode()
-UnflaggedApi: android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration.toString()
-UnflaggedApi: android.telephony.ims.SipDialogState#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipDialogState.equals(Object)
-UnflaggedApi: android.telephony.ims.SipDialogState#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipDialogState.hashCode()
-UnflaggedApi: android.telephony.ims.SipMessage#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipMessage.equals(Object)
-UnflaggedApi: android.telephony.ims.SipMessage#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipMessage.hashCode()
-UnflaggedApi: android.telephony.ims.SipMessage#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SipMessage.toString()
-UnflaggedApi: android.telephony.ims.SrvccCall#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SrvccCall.equals(Object)
-UnflaggedApi: android.telephony.ims.SrvccCall#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SrvccCall.hashCode()
-UnflaggedApi: android.telephony.ims.SrvccCall#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.SrvccCall.toString()
-UnflaggedApi: android.telephony.ims.feature.CapabilityChangeRequest#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.feature.CapabilityChangeRequest.toString()
-UnflaggedApi: android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair.toString()
-UnflaggedApi: android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair.equals(Object)
-UnflaggedApi: android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair.hashCode()
-UnflaggedApi: android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair.toString()
-UnflaggedApi: android.telephony.mbms.DownloadRequest.Builder#setServiceId(String):
-    New API must be flagged with @FlaggedApi: method android.telephony.mbms.DownloadRequest.Builder.setServiceId(String)
 UnflaggedApi: android.telephony.mbms.vendor.MbmsDownloadServiceBase#DESCRIPTOR:
     New API must be flagged with @FlaggedApi: field android.telephony.mbms.vendor.MbmsDownloadServiceBase.DESCRIPTOR
 UnflaggedApi: android.telephony.mbms.vendor.MbmsStreamingServiceBase#DESCRIPTOR:
@@ -2901,18 +351,12 @@
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.AntennaDirection.PARCELABLE_WRITE_RETURN_VALUE
 UnflaggedApi: android.telephony.satellite.AntennaDirection#describeContents():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaDirection.describeContents()
-UnflaggedApi: android.telephony.satellite.AntennaDirection#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaDirection.equals(Object)
 UnflaggedApi: android.telephony.satellite.AntennaDirection#getX():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaDirection.getX()
 UnflaggedApi: android.telephony.satellite.AntennaDirection#getY():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaDirection.getY()
 UnflaggedApi: android.telephony.satellite.AntennaDirection#getZ():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaDirection.getZ()
-UnflaggedApi: android.telephony.satellite.AntennaDirection#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaDirection.hashCode()
-UnflaggedApi: android.telephony.satellite.AntennaDirection#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaDirection.toString()
 UnflaggedApi: android.telephony.satellite.AntennaDirection#writeToParcel(android.os.Parcel, int):
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaDirection.writeToParcel(android.os.Parcel,int)
 UnflaggedApi: android.telephony.satellite.AntennaPosition:
@@ -2925,16 +369,10 @@
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.AntennaPosition.PARCELABLE_WRITE_RETURN_VALUE
 UnflaggedApi: android.telephony.satellite.AntennaPosition#describeContents():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaPosition.describeContents()
-UnflaggedApi: android.telephony.satellite.AntennaPosition#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaPosition.equals(Object)
 UnflaggedApi: android.telephony.satellite.AntennaPosition#getAntennaDirection():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaPosition.getAntennaDirection()
 UnflaggedApi: android.telephony.satellite.AntennaPosition#getSuggestedHoldPosition():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaPosition.getSuggestedHoldPosition()
-UnflaggedApi: android.telephony.satellite.AntennaPosition#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaPosition.hashCode()
-UnflaggedApi: android.telephony.satellite.AntennaPosition#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaPosition.toString()
 UnflaggedApi: android.telephony.satellite.AntennaPosition#writeToParcel(android.os.Parcel, int):
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.AntennaPosition.writeToParcel(android.os.Parcel,int)
 UnflaggedApi: android.telephony.satellite.PointingInfo:
@@ -2947,16 +385,10 @@
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.PointingInfo.PARCELABLE_WRITE_RETURN_VALUE
 UnflaggedApi: android.telephony.satellite.PointingInfo#describeContents():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.PointingInfo.describeContents()
-UnflaggedApi: android.telephony.satellite.PointingInfo#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.PointingInfo.equals(Object)
 UnflaggedApi: android.telephony.satellite.PointingInfo#getSatelliteAzimuthDegrees():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.PointingInfo.getSatelliteAzimuthDegrees()
 UnflaggedApi: android.telephony.satellite.PointingInfo#getSatelliteElevationDegrees():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.PointingInfo.getSatelliteElevationDegrees()
-UnflaggedApi: android.telephony.satellite.PointingInfo#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.PointingInfo.hashCode()
-UnflaggedApi: android.telephony.satellite.PointingInfo#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.PointingInfo.toString()
 UnflaggedApi: android.telephony.satellite.PointingInfo#writeToParcel(android.os.Parcel, int):
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.PointingInfo.writeToParcel(android.os.Parcel,int)
 UnflaggedApi: android.telephony.satellite.SatelliteCapabilities:
@@ -2969,20 +401,14 @@
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteCapabilities.PARCELABLE_WRITE_RETURN_VALUE
 UnflaggedApi: android.telephony.satellite.SatelliteCapabilities#describeContents():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteCapabilities.describeContents()
-UnflaggedApi: android.telephony.satellite.SatelliteCapabilities#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteCapabilities.equals(Object)
 UnflaggedApi: android.telephony.satellite.SatelliteCapabilities#getAntennaPositionMap():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteCapabilities.getAntennaPositionMap()
 UnflaggedApi: android.telephony.satellite.SatelliteCapabilities#getMaxBytesPerOutgoingDatagram():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteCapabilities.getMaxBytesPerOutgoingDatagram()
 UnflaggedApi: android.telephony.satellite.SatelliteCapabilities#getSupportedRadioTechnologies():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteCapabilities.getSupportedRadioTechnologies()
-UnflaggedApi: android.telephony.satellite.SatelliteCapabilities#hashCode():
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteCapabilities.hashCode()
 UnflaggedApi: android.telephony.satellite.SatelliteCapabilities#isPointingRequired():
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteCapabilities.isPointingRequired()
-UnflaggedApi: android.telephony.satellite.SatelliteCapabilities#toString():
-    New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteCapabilities.toString()
 UnflaggedApi: android.telephony.satellite.SatelliteCapabilities#writeToParcel(android.os.Parcel, int):
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteCapabilities.writeToParcel(android.os.Parcel,int)
 UnflaggedApi: android.telephony.satellite.SatelliteDatagram:
@@ -3037,8 +463,6 @@
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.NT_RADIO_TECHNOLOGY_PROPRIETARY
 UnflaggedApi: android.telephony.satellite.SatelliteManager#NT_RADIO_TECHNOLOGY_UNKNOWN:
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.NT_RADIO_TECHNOLOGY_UNKNOWN
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_ACCESS_BARRED:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_ACCESS_BARRED
 UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE:
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE
 UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED:
@@ -3057,20 +481,6 @@
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_SUCCESS
 UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_DATAGRAM_TRANSFER_STATE_UNKNOWN:
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_UNKNOWN
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_ERROR:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_ERROR
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_ERROR_NONE:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_ERROR_NONE
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_INVALID_ARGUMENTS:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_INVALID_ARGUMENTS
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_INVALID_MODEM_STATE:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_INVALID_MODEM_STATE
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_INVALID_TELEPHONY_STATE:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_MODEM_BUSY:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_BUSY
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_MODEM_ERROR:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_ERROR
 UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_MODEM_STATE_DATAGRAM_RETRYING:
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_RETRYING
 UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING:
@@ -3085,28 +495,6 @@
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE
 UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_MODEM_STATE_UNKNOWN:
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_STATE_UNKNOWN
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_NETWORK_ERROR:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_NETWORK_ERROR
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_NETWORK_TIMEOUT:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_NETWORK_TIMEOUT
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_NOT_AUTHORIZED:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_NOT_AUTHORIZED
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_NOT_REACHABLE:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_NOT_REACHABLE
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_NOT_SUPPORTED:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_NOT_SUPPORTED
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_NO_RESOURCES:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_NO_RESOURCES
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_RADIO_NOT_AVAILABLE:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_RADIO_NOT_AVAILABLE
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_REQUEST_ABORTED:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_REQUEST_ABORTED
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_REQUEST_FAILED:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_REQUEST_FAILED
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_REQUEST_IN_PROGRESS:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_REQUEST_IN_PROGRESS
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_REQUEST_NOT_SUPPORTED:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_REQUEST_NOT_SUPPORTED
 UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_RESULT_ACCESS_BARRED:
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_ACCESS_BARRED
 UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_RESULT_ERROR:
@@ -3153,14 +541,6 @@
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_SERVICE_PROVISION_IN_PROGRESS
 UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_RESULT_SUCCESS:
     New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_SUCCESS
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_SERVER_ERROR:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_SERVER_ERROR
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_SERVICE_ERROR:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_SERVICE_ERROR
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_SERVICE_NOT_PROVISIONED:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED
-UnflaggedApi: android.telephony.satellite.SatelliteManager#SATELLITE_SERVICE_PROVISION_IN_PROGRESS:
-    New API must be flagged with @FlaggedApi: field android.telephony.satellite.SatelliteManager.SATELLITE_SERVICE_PROVISION_IN_PROGRESS
 UnflaggedApi: android.telephony.satellite.SatelliteManager#deprovisionSatelliteService(String, java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>):
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteManager.deprovisionSatelliteService(String,java.util.concurrent.Executor,java.util.function.Consumer<java.lang.Integer>)
 UnflaggedApi: android.telephony.satellite.SatelliteManager#pollPendingSatelliteDatagrams(java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>):
@@ -3225,141 +605,3 @@
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteTransmissionUpdateCallback.onSatellitePositionChanged(android.telephony.satellite.PointingInfo)
 UnflaggedApi: android.telephony.satellite.SatelliteTransmissionUpdateCallback#onSendDatagramStateChanged(int, int, int):
     New API must be flagged with @FlaggedApi: method android.telephony.satellite.SatelliteTransmissionUpdateCallback.onSendDatagramStateChanged(int,int,int)
-UnflaggedApi: android.text.FontConfig#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.equals(Object)
-UnflaggedApi: android.text.FontConfig#hashCode():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.hashCode()
-UnflaggedApi: android.text.FontConfig#toString():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.toString()
-UnflaggedApi: android.text.FontConfig.Alias#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.Alias.equals(Object)
-UnflaggedApi: android.text.FontConfig.Alias#hashCode():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.Alias.hashCode()
-UnflaggedApi: android.text.FontConfig.Alias#toString():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.Alias.toString()
-UnflaggedApi: android.text.FontConfig.Font#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.Font.equals(Object)
-UnflaggedApi: android.text.FontConfig.Font#hashCode():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.Font.hashCode()
-UnflaggedApi: android.text.FontConfig.Font#toString():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.Font.toString()
-UnflaggedApi: android.text.FontConfig.FontFamily#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.FontFamily.equals(Object)
-UnflaggedApi: android.text.FontConfig.FontFamily#hashCode():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.FontFamily.hashCode()
-UnflaggedApi: android.text.FontConfig.FontFamily#toString():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.FontFamily.toString()
-UnflaggedApi: android.text.FontConfig.NamedFamilyList#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.NamedFamilyList.equals(Object)
-UnflaggedApi: android.text.FontConfig.NamedFamilyList#hashCode():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.NamedFamilyList.hashCode()
-UnflaggedApi: android.text.FontConfig.NamedFamilyList#toString():
-    New API must be flagged with @FlaggedApi: method android.text.FontConfig.NamedFamilyList.toString()
-UnflaggedApi: android.view.contentcapture.ContentCaptureEvent#toString():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ContentCaptureEvent.toString()
-UnflaggedApi: android.view.contentcapture.ViewNode#getAutofillHints():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getAutofillHints()
-UnflaggedApi: android.view.contentcapture.ViewNode#getAutofillId():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getAutofillId()
-UnflaggedApi: android.view.contentcapture.ViewNode#getAutofillOptions():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getAutofillOptions()
-UnflaggedApi: android.view.contentcapture.ViewNode#getAutofillType():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getAutofillType()
-UnflaggedApi: android.view.contentcapture.ViewNode#getAutofillValue():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getAutofillValue()
-UnflaggedApi: android.view.contentcapture.ViewNode#getClassName():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getClassName()
-UnflaggedApi: android.view.contentcapture.ViewNode#getContentDescription():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getContentDescription()
-UnflaggedApi: android.view.contentcapture.ViewNode#getExtras():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getExtras()
-UnflaggedApi: android.view.contentcapture.ViewNode#getHeight():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getHeight()
-UnflaggedApi: android.view.contentcapture.ViewNode#getHint():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getHint()
-UnflaggedApi: android.view.contentcapture.ViewNode#getHintIdEntry():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getHintIdEntry()
-UnflaggedApi: android.view.contentcapture.ViewNode#getId():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getId()
-UnflaggedApi: android.view.contentcapture.ViewNode#getIdEntry():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getIdEntry()
-UnflaggedApi: android.view.contentcapture.ViewNode#getIdPackage():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getIdPackage()
-UnflaggedApi: android.view.contentcapture.ViewNode#getIdType():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getIdType()
-UnflaggedApi: android.view.contentcapture.ViewNode#getInputType():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getInputType()
-UnflaggedApi: android.view.contentcapture.ViewNode#getLeft():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getLeft()
-UnflaggedApi: android.view.contentcapture.ViewNode#getLocaleList():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getLocaleList()
-UnflaggedApi: android.view.contentcapture.ViewNode#getMaxTextEms():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getMaxTextEms()
-UnflaggedApi: android.view.contentcapture.ViewNode#getMaxTextLength():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getMaxTextLength()
-UnflaggedApi: android.view.contentcapture.ViewNode#getMinTextEms():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getMinTextEms()
-UnflaggedApi: android.view.contentcapture.ViewNode#getReceiveContentMimeTypes():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getReceiveContentMimeTypes()
-UnflaggedApi: android.view.contentcapture.ViewNode#getScrollX():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getScrollX()
-UnflaggedApi: android.view.contentcapture.ViewNode#getScrollY():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getScrollY()
-UnflaggedApi: android.view.contentcapture.ViewNode#getText():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getText()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTextBackgroundColor():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTextBackgroundColor()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTextColor():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTextColor()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTextIdEntry():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTextIdEntry()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTextLineBaselines():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTextLineBaselines()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTextLineCharOffsets():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTextLineCharOffsets()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTextSelectionEnd():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTextSelectionEnd()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTextSelectionStart():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTextSelectionStart()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTextSize():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTextSize()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTextStyle():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTextStyle()
-UnflaggedApi: android.view.contentcapture.ViewNode#getTop():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getTop()
-UnflaggedApi: android.view.contentcapture.ViewNode#getVisibility():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getVisibility()
-UnflaggedApi: android.view.contentcapture.ViewNode#getWidth():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.getWidth()
-UnflaggedApi: android.view.contentcapture.ViewNode#isAccessibilityFocused():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isAccessibilityFocused()
-UnflaggedApi: android.view.contentcapture.ViewNode#isActivated():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isActivated()
-UnflaggedApi: android.view.contentcapture.ViewNode#isAssistBlocked():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isAssistBlocked()
-UnflaggedApi: android.view.contentcapture.ViewNode#isCheckable():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isCheckable()
-UnflaggedApi: android.view.contentcapture.ViewNode#isChecked():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isChecked()
-UnflaggedApi: android.view.contentcapture.ViewNode#isClickable():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isClickable()
-UnflaggedApi: android.view.contentcapture.ViewNode#isContextClickable():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isContextClickable()
-UnflaggedApi: android.view.contentcapture.ViewNode#isEnabled():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isEnabled()
-UnflaggedApi: android.view.contentcapture.ViewNode#isFocusable():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isFocusable()
-UnflaggedApi: android.view.contentcapture.ViewNode#isFocused():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isFocused()
-UnflaggedApi: android.view.contentcapture.ViewNode#isLongClickable():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isLongClickable()
-UnflaggedApi: android.view.contentcapture.ViewNode#isOpaque():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isOpaque()
-UnflaggedApi: android.view.contentcapture.ViewNode#isSelected():
-    New API must be flagged with @FlaggedApi: method android.view.contentcapture.ViewNode.isSelected()
-UnflaggedApi: android.view.translation.UiTranslationSpec#equals(Object):
-    New API must be flagged with @FlaggedApi: method android.view.translation.UiTranslationSpec.equals(Object)
-UnflaggedApi: android.view.translation.UiTranslationSpec#hashCode():
-    New API must be flagged with @FlaggedApi: method android.view.translation.UiTranslationSpec.hashCode()
-UnflaggedApi: android.view.translation.UiTranslationSpec#toString():
-    New API must be flagged with @FlaggedApi: method android.view.translation.UiTranslationSpec.toString()
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index a4cc446..40c6fa8 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -3506,10 +3506,6 @@
     field public static final int FLAG_IS_ACCESSIBILITY_EVENT = 2048; // 0x800
   }
 
-  public static final class MotionEvent.PointerCoords {
-    method public boolean isResampled();
-  }
-
   @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface RemotableViewMethod {
     method public abstract String asyncImpl() default "";
   }
diff --git a/core/api/test-lint-baseline.txt b/core/api/test-lint-baseline.txt
index 1aaedab..107be8b 100644
--- a/core/api/test-lint-baseline.txt
+++ b/core/api/test-lint-baseline.txt
@@ -1,985 +1,341 @@
 // Baseline format: 1.0
-AcronymName: android.app.NotificationChannel#isImportanceLockedByOEM():
-    Acronyms should not be capitalized in method names: was `isImportanceLockedByOEM`, should this be `isImportanceLockedByOem`?
-AcronymName: android.app.NotificationChannel#setImportanceLockedByOEM(boolean):
-    Acronyms should not be capitalized in method names: was `setImportanceLockedByOEM`, should this be `setImportanceLockedByOem`?
+KotlinKeyword: android.app.Notification#when:
+    Avoid field names that are Kotlin hard keywords ("when"); see https://android.github.io/kotlin-guides/interop.html#no-hard-keywords
 
 
-ArrayReturn: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]) parameter #10:
-    Method parameter should be Collection<Descriptor> (or subclass) instead of raw array; was `android.media.audiofx.AudioEffect.Descriptor[]`
-ArrayReturn: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]) parameter #11:
-    Method parameter should be Collection<Descriptor> (or subclass) instead of raw array; was `android.media.audiofx.AudioEffect.Descriptor[]`
-ArrayReturn: android.view.Display#getSupportedWideColorGamut():
-    Method should return Collection<ColorSpace> (or subclass) instead of raw array; was `android.graphics.ColorSpace[]`
-ArrayReturn: android.view.FocusFinder#sort(android.view.View[], int, int, android.view.ViewGroup, boolean) parameter #0:
-    Method parameter should be Collection<View> (or subclass) instead of raw array; was `android.view.View[]`
-ArrayReturn: android.view.contentcapture.ViewNode.ViewStructureImpl#setAutofillOptions(CharSequence[]) parameter #0:
-    Method parameter should be Collection<CharSequence> (or subclass) instead of raw array; was `java.lang.CharSequence[]`
-
-
-AutoBoxing: android.os.VintfObject#getTargetFrameworkCompatibilityMatrixVersion():
-    Must avoid boxed primitives (`java.lang.Long`)
-
-
-BuilderSetStyle: android.os.StrictMode.ThreadPolicy.Builder#detectExplicitGc():
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method android.os.StrictMode.ThreadPolicy.Builder.detectExplicitGc()
-BuilderSetStyle: android.os.StrictMode.VmPolicy.Builder#permitIncorrectContextUse():
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method android.os.StrictMode.VmPolicy.Builder.permitIncorrectContextUse()
-
-
-ConcreteCollection: android.content.AutofillOptions#disabledActivities:
-    Field type is concrete collection (`android.util.ArrayMap`); must be higher-level interface
-ConcreteCollection: android.content.AutofillOptions#whitelistedActivitiesForAugmentedAutofill:
-    Field type is concrete collection (`android.util.ArraySet`); must be higher-level interface
-ConcreteCollection: android.content.ContentCaptureOptions#ContentCaptureOptions(int, int, int, int, int, android.util.ArraySet<android.content.ComponentName>) parameter #5:
-    Parameter type is concrete collection (`android.util.ArraySet`); must be higher-level interface
-ConcreteCollection: android.content.ContentCaptureOptions#whitelistedComponents:
-    Field type is concrete collection (`android.util.ArraySet`); must be higher-level interface
-ConcreteCollection: android.database.sqlite.SQLiteDebug.PagerStats#dbStats:
-    Field type is concrete collection (`java.util.ArrayList`); must be higher-level interface
-ConcreteCollection: android.service.autofill.CompositeUserData#getFieldClassificationAlgorithms():
-    Return type is concrete collection (`android.util.ArrayMap`); must be higher-level interface
-ConcreteCollection: android.service.autofill.CompositeUserData#getFieldClassificationArgs():
-    Return type is concrete collection (`android.util.ArrayMap`); must be higher-level interface
-ConcreteCollection: android.service.autofill.InternalTransformation#batchApply(android.service.autofill.ValueFinder, android.widget.RemoteViews, java.util.ArrayList<android.util.Pair<java.lang.Integer,android.service.autofill.InternalTransformation>>) parameter #2:
-    Parameter type is concrete collection (`java.util.ArrayList`); must be higher-level interface
-ConcreteCollection: android.service.autofill.UserData#getFieldClassificationAlgorithms():
-    Return type is concrete collection (`android.util.ArrayMap`); must be higher-level interface
-
-
-ContextFirst: android.os.VibrationEffect#get(android.net.Uri, android.content.Context) parameter #1:
-    Context is distinct, so it must be the first argument (method `get`)
-
-
-EndsWithImpl: android.view.contentcapture.ViewNode.ViewStructureImpl:
-    Don't expose your implementation details: `ViewStructureImpl` ends with `Impl`
-
-
-Enum: android.view.inspector.InspectableProperty.ValueType:
-    Enums are discouraged in Android APIs
-
-
-EqualsAndHashCode: android.os.StrictMode.ViolationInfo#hashCode():
-    Must override both equals and hashCode; missing one in android.os.StrictMode.ViolationInfo
-
-
-ExecutorRegistration: android.media.audiofx.AudioEffect#setParameterListener(android.media.audiofx.AudioEffect.OnParameterChangeListener):
-    Registration methods should have overload that accepts delivery Executor: `setParameterListener`
-ExecutorRegistration: android.permission.PermissionControllerManager#countPermissionApps(java.util.List<java.lang.String>, int, android.permission.PermissionControllerManager.OnCountPermissionAppsResultCallback, android.os.Handler):
-    Registration methods should have overload that accepts delivery Executor: `countPermissionApps`
-ExecutorRegistration: android.permission.PermissionControllerManager#getAppPermissions(String, android.permission.PermissionControllerManager.OnGetAppPermissionResultCallback, android.os.Handler):
-    Registration methods should have overload that accepts delivery Executor: `getAppPermissions`
-ExecutorRegistration: android.service.watchdog.ExplicitHealthCheckService#setCallback(android.os.RemoteCallback):
-    Registration methods should have overload that accepts delivery Executor: `setCallback`
-ExecutorRegistration: android.window.WindowOrganizer#applySyncTransaction(android.window.WindowContainerTransaction, android.window.WindowContainerTransactionCallback):
-    Registration methods should have overload that accepts delivery Executor: `applySyncTransaction`
-
-
-ForbiddenSuperClass: android.app.AppDetailsActivity:
-    AppDetailsActivity should not extend `Activity`. Activity subclasses are impossible to compose. Expose a composable API instead.
-
-
-GenericException: android.service.autofill.CharSequenceTransformation#apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int):
-    Methods must not throw generic exceptions (`java.lang.Exception`)
-GenericException: android.service.autofill.DateTransformation#apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int):
-    Methods must not throw generic exceptions (`java.lang.Exception`)
-GenericException: android.service.autofill.ImageTransformation#apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int):
-    Methods must not throw generic exceptions (`java.lang.Exception`)
-
-
-GetterSetterNames: android.net.NetworkPolicyManager#getRestrictBackground():
-    Symmetric method for `setRestrictBackground` must be named `isRestrictBackground`; was `getRestrictBackground`
-
-
-IntentBuilderName: android.hardware.soundtrigger.KeyphraseEnrollmentInfo#getManageKeyphraseIntent(int, String, java.util.Locale):
-    Methods creating an Intent should be named `create<Foo>Intent()`, was `getManageKeyphraseIntent`
-
-
-IntentName: android.provider.Settings.Secure#VOICE_INTERACTION_SERVICE:
-    Intent action constant name must be ACTION_FOO: VOICE_INTERACTION_SERVICE
-IntentName: android.provider.Telephony.Sms.Intents#SMS_CARRIER_PROVISION_ACTION:
-    Intent action constant name must be ACTION_FOO: SMS_CARRIER_PROVISION_ACTION
-
-
-KotlinOperator: android.os.PackageTagsList#contains(android.os.PackageTagsList):
-    Method can be invoked as a "in" operator from Kotlin: `contains` (this is usually desirable; just make sure it makes sense for this type of object)
-KotlinOperator: android.util.SparseArrayMap#get(int, K):
-    Method can be invoked with an indexing operator from Kotlin: `get` (this is usually desirable; just make sure it makes sense for this type of object)
-
-
-ListenerLast: android.permission.PermissionControllerManager#countPermissionApps(java.util.List<java.lang.String>, int, android.permission.PermissionControllerManager.OnCountPermissionAppsResultCallback, android.os.Handler) parameter #3:
-    Listeners should always be at end of argument list (method `countPermissionApps`)
-ListenerLast: android.permission.PermissionControllerManager#getAppPermissions(String, android.permission.PermissionControllerManager.OnGetAppPermissionResultCallback, android.os.Handler) parameter #2:
-    Listeners should always be at end of argument list (method `getAppPermissions`)
-
-
-ManagerConstructor: android.content.pm.ShortcutManager#ShortcutManager(android.content.Context):
-    Managers must always be obtained from Context; no direct constructors
-
-
-MinMaxConstant: android.os.UserHandle#MIN_SECONDARY_USER_ID:
-    If min/max could change in future, make them dynamic methods: android.os.UserHandle#MIN_SECONDARY_USER_ID
-MinMaxConstant: android.view.autofill.AutofillManager#MAX_TEMP_AUGMENTED_SERVICE_DURATION_MS:
-    If min/max could change in future, make them dynamic methods: android.view.autofill.AutofillManager#MAX_TEMP_AUGMENTED_SERVICE_DURATION_MS
-
-
-MissingGetterMatchingBuilder: android.media.VolumeShaper.Configuration.Builder#setOptionFlags(int):
-    android.media.VolumeShaper.Configuration does not declare a `getOptionFlags()` method matching method android.media.VolumeShaper.Configuration.Builder.setOptionFlags(int)
-MissingGetterMatchingBuilder: android.media.audiopolicy.AudioPolicy.Builder#setIsTestFocusPolicy(boolean):
-    android.media.audiopolicy.AudioPolicy does not declare a `isIsTestFocusPolicy()` method matching method android.media.audiopolicy.AudioPolicy.Builder.setIsTestFocusPolicy(boolean)
-MissingGetterMatchingBuilder: android.security.keystore.KeyGenParameterSpec.Builder#setUniqueIdIncluded(boolean):
-    android.security.keystore.KeyGenParameterSpec does not declare a `isUniqueIdIncluded()` method matching method android.security.keystore.KeyGenParameterSpec.Builder.setUniqueIdIncluded(boolean)
-MissingGetterMatchingBuilder: android.telecom.ConnectionRequest.Builder#setIsAdhocConferenceCall(boolean):
-    android.telecom.ConnectionRequest does not declare a `isIsAdhocConferenceCall()` method matching method android.telecom.ConnectionRequest.Builder.setIsAdhocConferenceCall(boolean)
-MissingGetterMatchingBuilder: android.telecom.ConnectionRequest.Builder#setRttPipeFromInCall(android.os.ParcelFileDescriptor):
-    android.telecom.ConnectionRequest does not declare a `getRttPipeFromInCall()` method matching method android.telecom.ConnectionRequest.Builder.setRttPipeFromInCall(android.os.ParcelFileDescriptor)
-MissingGetterMatchingBuilder: android.telecom.ConnectionRequest.Builder#setRttPipeToInCall(android.os.ParcelFileDescriptor):
-    android.telecom.ConnectionRequest does not declare a `getRttPipeToInCall()` method matching method android.telecom.ConnectionRequest.Builder.setRttPipeToInCall(android.os.ParcelFileDescriptor)
-MissingGetterMatchingBuilder: android.telecom.ConnectionRequest.Builder#setShouldShowIncomingCallUi(boolean):
-    android.telecom.ConnectionRequest does not declare a `shouldShowIncomingCallUi()` method matching method android.telecom.ConnectionRequest.Builder.setShouldShowIncomingCallUi(boolean)
-MissingGetterMatchingBuilder: android.view.Display.Mode.Builder#setResolution(int, int):
-    android.view.Display.Mode does not declare a `getResolution()` method matching method android.view.Display.Mode.Builder.setResolution(int,int)
-
-
-MissingNullability: android.app.Activity#onMovedToDisplay(int, android.content.res.Configuration) parameter #1:
-    Missing nullability on parameter `config` in method `onMovedToDisplay`
-MissingNullability: android.app.ActivityManager#alwaysShowUnsupportedCompileSdkWarning(android.content.ComponentName) parameter #0:
-    Missing nullability on parameter `activity` in method `alwaysShowUnsupportedCompileSdkWarning`
-MissingNullability: android.app.ActivityManager#holdLock(android.os.IBinder, int) parameter #0:
-    Missing nullability on parameter `token` in method `holdLock`
-MissingNullability: android.app.ActivityManager#scheduleApplicationInfoChanged(java.util.List<java.lang.String>, int) parameter #0:
-    Missing nullability on parameter `packages` in method `scheduleApplicationInfoChanged`
-MissingNullability: android.app.ActivityManager.TaskDescription#getIconFilename():
-    Missing nullability on method `getIconFilename` return
-MissingNullability: android.app.ActivityTaskManager#clearLaunchParamsForPackages(java.util.List<java.lang.String>) parameter #0:
-    Missing nullability on parameter `packageNames` in method `clearLaunchParamsForPackages`
-MissingNullability: android.app.ActivityTaskManager#resizeTask(int, android.graphics.Rect) parameter #1:
-    Missing nullability on parameter `bounds` in method `resizeTask`
-MissingNullability: android.app.ActivityTaskManager#supportsMultiWindow(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `supportsMultiWindow`
-MissingNullability: android.app.ActivityTaskManager#supportsSplitScreenMultiWindow(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `supportsSplitScreenMultiWindow`
 MissingNullability: android.app.AppDetailsActivity#onCreate(android.os.Bundle) parameter #0:
     Missing nullability on parameter `savedInstanceState` in method `onCreate`
-MissingNullability: android.app.AppOpsManager#isOperationActive(int, int, String) parameter #2:
-    Missing nullability on parameter `packageName` in method `isOperationActive`
-MissingNullability: android.app.AppOpsManager#opToPermission(int):
-    Missing nullability on method `opToPermission` return
-MissingNullability: android.app.AppOpsManager#permissionToOpCode(String) parameter #0:
-    Missing nullability on parameter `permission` in method `permissionToOpCode`
-MissingNullability: android.app.AppOpsManager#setMode(int, int, String, int) parameter #2:
-    Missing nullability on parameter `packageName` in method `setMode`
-MissingNullability: android.app.NotificationManager#allowAssistantAdjustment(String) parameter #0:
-    Missing nullability on parameter `capability` in method `allowAssistantAdjustment`
-MissingNullability: android.app.NotificationManager#disallowAssistantAdjustment(String) parameter #0:
-    Missing nullability on parameter `capability` in method `disallowAssistantAdjustment`
-MissingNullability: android.app.NotificationManager#getEffectsSuppressor():
-    Missing nullability on method `getEffectsSuppressor` return
-MissingNullability: android.app.TimePickerDialog#getTimePicker():
-    Missing nullability on method `getTimePicker` return
-MissingNullability: android.app.WindowConfiguration#compareTo(android.app.WindowConfiguration) parameter #0:
-    Missing nullability on parameter `that` in method `compareTo`
-MissingNullability: android.app.WindowConfiguration#getAppBounds():
-    Missing nullability on method `getAppBounds` return
-MissingNullability: android.app.WindowConfiguration#getBounds():
-    Missing nullability on method `getBounds` return
-MissingNullability: android.app.WindowConfiguration#setAppBounds(android.graphics.Rect) parameter #0:
-    Missing nullability on parameter `rect` in method `setAppBounds`
-MissingNullability: android.app.WindowConfiguration#setBounds(android.graphics.Rect) parameter #0:
-    Missing nullability on parameter `rect` in method `setBounds`
-MissingNullability: android.app.WindowConfiguration#setTo(android.app.WindowConfiguration) parameter #0:
-    Missing nullability on parameter `other` in method `setTo`
-MissingNullability: android.app.WindowConfiguration#writeToParcel(android.os.Parcel, int) parameter #0:
-    Missing nullability on parameter `dest` in method `writeToParcel`
-MissingNullability: android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts(android.os.UserHandle):
-    Missing nullability on method `getOwnerInstalledCaCerts` return
-MissingNullability: android.app.admin.SecurityLog.SecurityEvent#SecurityEvent(long, byte[]) parameter #1:
-    Missing nullability on parameter `data` in method `SecurityEvent`
-MissingNullability: android.app.prediction.AppPredictor#getSessionId():
-    Missing nullability on method `getSessionId` return
-MissingNullability: android.content.AutofillOptions#forWhitelistingItself():
-    Missing nullability on method `forWhitelistingItself` return
-MissingNullability: android.content.AutofillOptions#writeToParcel(android.os.Parcel, int) parameter #0:
-    Missing nullability on parameter `parcel` in method `writeToParcel`
-MissingNullability: android.content.ContentCaptureOptions#forWhitelistingItself():
-    Missing nullability on method `forWhitelistingItself` return
-MissingNullability: android.content.ContentCaptureOptions#writeToParcel(android.os.Parcel, int) parameter #0:
-    Missing nullability on parameter `parcel` in method `writeToParcel`
-MissingNullability: android.content.ContentResolver#getSyncAdapterPackagesForAuthorityAsUser(String, int):
-    Missing nullability on method `getSyncAdapterPackagesForAuthorityAsUser` return
-MissingNullability: android.content.ContentResolver#getSyncAdapterPackagesForAuthorityAsUser(String, int) parameter #0:
-    Missing nullability on parameter `authority` in method `getSyncAdapterPackagesForAuthorityAsUser`
-MissingNullability: android.content.pm.ActivityInfo#isTranslucentOrFloating(android.content.res.TypedArray) parameter #0:
-    Missing nullability on parameter `attributes` in method `isTranslucentOrFloating`
-MissingNullability: android.content.pm.LauncherApps#LauncherApps(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `LauncherApps`
-MissingNullability: android.content.pm.PackageManager#getHoldLockToken():
-    Missing nullability on method `getHoldLockToken` return
-MissingNullability: android.content.pm.PackageManager#getNamesForUids(int[]) parameter #0:
-    Missing nullability on parameter `uids` in method `getNamesForUids`
-MissingNullability: android.content.pm.PackageManager#holdLock(android.os.IBinder, int) parameter #0:
-    Missing nullability on parameter `token` in method `holdLock`
-MissingNullability: android.content.pm.ShortcutManager#ShortcutManager(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `ShortcutManager`
-MissingNullability: android.content.pm.UserInfo#UserInfo(android.content.pm.UserInfo) parameter #0:
-    Missing nullability on parameter `orig` in method `UserInfo`
-MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int) parameter #1:
-    Missing nullability on parameter `name` in method `UserInfo`
-MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int) parameter #2:
-    Missing nullability on parameter `iconPath` in method `UserInfo`
-MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int, String) parameter #1:
-    Missing nullability on parameter `name` in method `UserInfo`
-MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int, String) parameter #2:
-    Missing nullability on parameter `iconPath` in method `UserInfo`
-MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, String, int, String) parameter #4:
-    Missing nullability on parameter `userType` in method `UserInfo`
-MissingNullability: android.content.pm.UserInfo#UserInfo(int, String, int) parameter #1:
-    Missing nullability on parameter `name` in method `UserInfo`
-MissingNullability: android.content.pm.UserInfo#getUserHandle():
-    Missing nullability on method `getUserHandle` return
-MissingNullability: android.content.pm.UserInfo#iconPath:
-    Missing nullability on field `iconPath` in class `class android.content.pm.UserInfo`
-MissingNullability: android.content.pm.UserInfo#lastLoggedInFingerprint:
-    Missing nullability on field `lastLoggedInFingerprint` in class `class android.content.pm.UserInfo`
-MissingNullability: android.content.pm.UserInfo#name:
-    Missing nullability on field `name` in class `class android.content.pm.UserInfo`
-MissingNullability: android.content.pm.UserInfo#userType:
-    Missing nullability on field `userType` in class `class android.content.pm.UserInfo`
-MissingNullability: android.content.pm.UserInfo#writeToParcel(android.os.Parcel, int) parameter #0:
-    Missing nullability on parameter `dest` in method `writeToParcel`
-MissingNullability: android.content.res.AssetManager#getOverlayablesToString(String) parameter #0:
-    Missing nullability on parameter `packageName` in method `getOverlayablesToString`
-MissingNullability: android.content.res.Configuration#windowConfiguration:
-    Missing nullability on field `windowConfiguration` in class `class android.content.res.Configuration`
-MissingNullability: android.database.sqlite.SQLiteDebug#dump(android.util.Printer, String[]) parameter #0:
-    Missing nullability on parameter `printer` in method `dump`
-MissingNullability: android.database.sqlite.SQLiteDebug#dump(android.util.Printer, String[]) parameter #1:
-    Missing nullability on parameter `args` in method `dump`
-MissingNullability: android.database.sqlite.SQLiteDebug#getDatabaseInfo():
-    Missing nullability on method `getDatabaseInfo` return
-MissingNullability: android.database.sqlite.SQLiteDebug.DbStats#DbStats(String, long, long, int, int, int, int) parameter #0:
-    Missing nullability on parameter `dbName` in method `DbStats`
-MissingNullability: android.database.sqlite.SQLiteDebug.DbStats#cache:
-    Missing nullability on field `cache` in class `class android.database.sqlite.SQLiteDebug.DbStats`
-MissingNullability: android.database.sqlite.SQLiteDebug.DbStats#dbName:
-    Missing nullability on field `dbName` in class `class android.database.sqlite.SQLiteDebug.DbStats`
-MissingNullability: android.database.sqlite.SQLiteDebug.PagerStats#dbStats:
-    Missing nullability on field `dbStats` in class `class android.database.sqlite.SQLiteDebug.PagerStats`
-MissingNullability: android.database.sqlite.SQLiteDirectCursorDriver#SQLiteDirectCursorDriver(android.database.sqlite.SQLiteDatabase, String, String, android.os.CancellationSignal) parameter #0:
-    Missing nullability on parameter `db` in method `SQLiteDirectCursorDriver`
-MissingNullability: android.database.sqlite.SQLiteDirectCursorDriver#SQLiteDirectCursorDriver(android.database.sqlite.SQLiteDatabase, String, String, android.os.CancellationSignal) parameter #1:
-    Missing nullability on parameter `sql` in method `SQLiteDirectCursorDriver`
-MissingNullability: android.database.sqlite.SQLiteDirectCursorDriver#SQLiteDirectCursorDriver(android.database.sqlite.SQLiteDatabase, String, String, android.os.CancellationSignal) parameter #2:
-    Missing nullability on parameter `editTable` in method `SQLiteDirectCursorDriver`
-MissingNullability: android.database.sqlite.SQLiteDirectCursorDriver#SQLiteDirectCursorDriver(android.database.sqlite.SQLiteDatabase, String, String, android.os.CancellationSignal) parameter #3:
-    Missing nullability on parameter `cancellationSignal` in method `SQLiteDirectCursorDriver`
-MissingNullability: android.database.sqlite.SQLiteDirectCursorDriver#cursorRequeried(android.database.Cursor) parameter #0:
-    Missing nullability on parameter `cursor` in method `cursorRequeried`
-MissingNullability: android.database.sqlite.SQLiteDirectCursorDriver#query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]):
-    Missing nullability on method `query` return
-MissingNullability: android.database.sqlite.SQLiteDirectCursorDriver#query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]) parameter #0:
-    Missing nullability on parameter `factory` in method `query`
-MissingNullability: android.database.sqlite.SQLiteDirectCursorDriver#query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]) parameter #1:
-    Missing nullability on parameter `selectionArgs` in method `query`
-MissingNullability: android.database.sqlite.SQLiteDirectCursorDriver#setBindArguments(String[]) parameter #0:
-    Missing nullability on parameter `bindArgs` in method `setBindArguments`
-MissingNullability: android.database.sqlite.SQLiteGlobal#getDefaultJournalMode():
-    Missing nullability on method `getDefaultJournalMode` return
-MissingNullability: android.database.sqlite.SQLiteGlobal#getDefaultSyncMode():
-    Missing nullability on method `getDefaultSyncMode` return
-MissingNullability: android.database.sqlite.SQLiteGlobal#getWALSyncMode():
-    Missing nullability on method `getWALSyncMode` return
-MissingNullability: android.graphics.ImageDecoder#createSource(android.content.res.Resources, java.io.InputStream, int) parameter #0:
-    Missing nullability on parameter `res` in method `createSource`
-MissingNullability: android.graphics.drawable.AdaptiveIconDrawable#getSafeZone():
-    Missing nullability on method `getSafeZone` return
-MissingNullability: android.graphics.drawable.ColorDrawable#getXfermode():
-    Missing nullability on method `getXfermode` return
-MissingNullability: android.hardware.camera2.CameraManager#getCameraIdListNoLazy():
-    Missing nullability on method `getCameraIdListNoLazy` return
-MissingNullability: android.hardware.display.AmbientDisplayConfiguration#AmbientDisplayConfiguration(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `AmbientDisplayConfiguration`
-MissingNullability: android.media.AudioAttributes#getSdkUsages():
-    Missing nullability on method `getSdkUsages` return
-MissingNullability: android.media.AudioManager#getPublicStreamTypes():
-    Missing nullability on method `getPublicStreamTypes` return
-MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String) parameter #3:
-    Missing nullability on parameter `clientFormat` in method `AudioRecordingConfiguration`
-MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String) parameter #4:
-    Missing nullability on parameter `devFormat` in method `AudioRecordingConfiguration`
-MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String) parameter #6:
-    Missing nullability on parameter `packageName` in method `AudioRecordingConfiguration`
-MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]) parameter #10:
-    Missing nullability on parameter `clientEffects` in method `AudioRecordingConfiguration`
-MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]) parameter #11:
-    Missing nullability on parameter `deviceEffects` in method `AudioRecordingConfiguration`
-MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]) parameter #3:
-    Missing nullability on parameter `clientFormat` in method `AudioRecordingConfiguration`
-MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]) parameter #4:
-    Missing nullability on parameter `devFormat` in method `AudioRecordingConfiguration`
-MissingNullability: android.media.AudioRecordingConfiguration#AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]) parameter #6:
-    Missing nullability on parameter `packageName` in method `AudioRecordingConfiguration`
-MissingNullability: android.media.PlaybackParams#setAudioStretchMode(int):
-    Missing nullability on method `setAudioStretchMode` return
-MissingNullability: android.media.audiofx.AudioEffect#EFFECT_TYPE_NULL:
-    Missing nullability on field `EFFECT_TYPE_NULL` in class `class android.media.audiofx.AudioEffect`
-MissingNullability: android.media.audiofx.AudioEffect#byteArrayToInt(byte[]) parameter #0:
-    Missing nullability on parameter `valueBuf` in method `byteArrayToInt`
-MissingNullability: android.media.audiofx.AudioEffect#byteArrayToShort(byte[]) parameter #0:
-    Missing nullability on parameter `valueBuf` in method `byteArrayToShort`
-MissingNullability: android.media.audiofx.AudioEffect#getParameter(byte[], byte[]) parameter #0:
-    Missing nullability on parameter `param` in method `getParameter`
-MissingNullability: android.media.audiofx.AudioEffect#getParameter(byte[], byte[]) parameter #1:
-    Missing nullability on parameter `value` in method `getParameter`
-MissingNullability: android.media.audiofx.AudioEffect#getParameter(int, byte[]) parameter #1:
-    Missing nullability on parameter `value` in method `getParameter`
-MissingNullability: android.media.audiofx.AudioEffect#getParameter(int, int[]) parameter #1:
-    Missing nullability on parameter `value` in method `getParameter`
-MissingNullability: android.media.audiofx.AudioEffect#getParameter(int, short[]) parameter #1:
-    Missing nullability on parameter `value` in method `getParameter`
-MissingNullability: android.media.audiofx.AudioEffect#getParameter(int[], short[]) parameter #0:
-    Missing nullability on parameter `param` in method `getParameter`
-MissingNullability: android.media.audiofx.AudioEffect#getParameter(int[], short[]) parameter #1:
-    Missing nullability on parameter `value` in method `getParameter`
-MissingNullability: android.media.audiofx.AudioEffect#intToByteArray(int):
-    Missing nullability on method `intToByteArray` return
-MissingNullability: android.media.audiofx.AudioEffect#isEffectTypeAvailable(java.util.UUID) parameter #0:
-    Missing nullability on parameter `type` in method `isEffectTypeAvailable`
-MissingNullability: android.media.audiofx.AudioEffect#setParameter(byte[], byte[]) parameter #0:
-    Missing nullability on parameter `param` in method `setParameter`
-MissingNullability: android.media.audiofx.AudioEffect#setParameter(byte[], byte[]) parameter #1:
-    Missing nullability on parameter `value` in method `setParameter`
-MissingNullability: android.media.audiofx.AudioEffect#setParameter(int, byte[]) parameter #1:
-    Missing nullability on parameter `value` in method `setParameter`
-MissingNullability: android.media.audiofx.AudioEffect#setParameter(int[], byte[]) parameter #0:
-    Missing nullability on parameter `param` in method `setParameter`
-MissingNullability: android.media.audiofx.AudioEffect#setParameter(int[], byte[]) parameter #1:
-    Missing nullability on parameter `value` in method `setParameter`
-MissingNullability: android.media.audiofx.AudioEffect#setParameter(int[], int[]) parameter #0:
-    Missing nullability on parameter `param` in method `setParameter`
-MissingNullability: android.media.audiofx.AudioEffect#setParameter(int[], int[]) parameter #1:
-    Missing nullability on parameter `value` in method `setParameter`
-MissingNullability: android.media.audiofx.AudioEffect#setParameterListener(android.media.audiofx.AudioEffect.OnParameterChangeListener) parameter #0:
-    Missing nullability on parameter `listener` in method `setParameterListener`
-MissingNullability: android.media.audiofx.AudioEffect#shortToByteArray(short):
-    Missing nullability on method `shortToByteArray` return
-MissingNullability: android.media.audiofx.AudioEffect.Descriptor#Descriptor(android.os.Parcel) parameter #0:
-    Missing nullability on parameter `in` in method `Descriptor`
-MissingNullability: android.media.audiofx.AudioEffect.Descriptor#writeToParcel(android.os.Parcel) parameter #0:
-    Missing nullability on parameter `dest` in method `writeToParcel`
-MissingNullability: android.media.audiofx.AudioEffect.OnParameterChangeListener#onParameterChange(android.media.audiofx.AudioEffect, int, byte[], byte[]) parameter #0:
-    Missing nullability on parameter `effect` in method `onParameterChange`
-MissingNullability: android.media.audiofx.AudioEffect.OnParameterChangeListener#onParameterChange(android.media.audiofx.AudioEffect, int, byte[], byte[]) parameter #2:
-    Missing nullability on parameter `param` in method `onParameterChange`
-MissingNullability: android.media.audiofx.AudioEffect.OnParameterChangeListener#onParameterChange(android.media.audiofx.AudioEffect, int, byte[], byte[]) parameter #3:
-    Missing nullability on parameter `value` in method `onParameterChange`
-MissingNullability: android.os.Build#is64BitAbi(String) parameter #0:
-    Missing nullability on parameter `abi` in method `is64BitAbi`
-MissingNullability: android.os.Build.VERSION#ACTIVE_CODENAMES:
-    Missing nullability on field `ACTIVE_CODENAMES` in class `class android.os.Build.VERSION`
-MissingNullability: android.os.Environment#buildPath(java.io.File, java.lang.String...):
-    Missing nullability on method `buildPath` return
-MissingNullability: android.os.Environment#buildPath(java.io.File, java.lang.String...) parameter #0:
-    Missing nullability on parameter `base` in method `buildPath`
-MissingNullability: android.os.Environment#buildPath(java.io.File, java.lang.String...) parameter #1:
-    Missing nullability on parameter `segments` in method `buildPath`
-MissingNullability: android.os.FileUtils#contains(java.io.File, java.io.File) parameter #0:
-    Missing nullability on parameter `dir` in method `contains`
-MissingNullability: android.os.FileUtils#contains(java.io.File, java.io.File) parameter #1:
-    Missing nullability on parameter `file` in method `contains`
-MissingNullability: android.os.ParcelFileDescriptor#getFile(java.io.FileDescriptor):
-    Missing nullability on method `getFile` return
-MissingNullability: android.os.ParcelFileDescriptor#getFile(java.io.FileDescriptor) parameter #0:
-    Missing nullability on parameter `fd` in method `getFile`
-MissingNullability: android.os.StrictMode#setViolationLogger(android.os.StrictMode.ViolationLogger) parameter #0:
-    Missing nullability on parameter `listener` in method `setViolationLogger`
-MissingNullability: android.os.StrictMode.ViolationInfo#ViolationInfo(android.os.Parcel) parameter #0:
-    Missing nullability on parameter `in` in method `ViolationInfo`
-MissingNullability: android.os.StrictMode.ViolationInfo#ViolationInfo(android.os.Parcel, boolean) parameter #0:
-    Missing nullability on parameter `in` in method `ViolationInfo`
-MissingNullability: android.os.StrictMode.ViolationInfo#broadcastIntentAction:
-    Missing nullability on field `broadcastIntentAction` in class `class android.os.StrictMode.ViolationInfo`
-MissingNullability: android.os.StrictMode.ViolationInfo#dump(android.util.Printer, String) parameter #0:
-    Missing nullability on parameter `pw` in method `dump`
-MissingNullability: android.os.StrictMode.ViolationInfo#dump(android.util.Printer, String) parameter #1:
-    Missing nullability on parameter `prefix` in method `dump`
-MissingNullability: android.os.StrictMode.ViolationInfo#getStackTrace():
-    Missing nullability on method `getStackTrace` return
-MissingNullability: android.os.StrictMode.ViolationInfo#getViolationClass():
-    Missing nullability on method `getViolationClass` return
-MissingNullability: android.os.StrictMode.ViolationInfo#getViolationDetails():
-    Missing nullability on method `getViolationDetails` return
-MissingNullability: android.os.StrictMode.ViolationInfo#tags:
-    Missing nullability on field `tags` in class `class android.os.StrictMode.ViolationInfo`
-MissingNullability: android.os.StrictMode.ViolationInfo#writeToParcel(android.os.Parcel, int) parameter #0:
-    Missing nullability on parameter `dest` in method `writeToParcel`
-MissingNullability: android.os.StrictMode.ViolationLogger#log(android.os.StrictMode.ViolationInfo) parameter #0:
-    Missing nullability on parameter `info` in method `log`
-MissingNullability: android.os.VibrationEffect#RINGTONES:
-    Missing nullability on field `RINGTONES` in class `class android.os.VibrationEffect`
-MissingNullability: android.os.VibrationEffect#get(android.net.Uri, android.content.Context) parameter #0:
-    Missing nullability on parameter `uri` in method `get`
-MissingNullability: android.os.VibrationEffect#get(android.net.Uri, android.content.Context) parameter #1:
-    Missing nullability on parameter `context` in method `get`
-MissingNullability: android.os.VibrationEffect#get(int):
-    Missing nullability on method `get` return
-MissingNullability: android.os.VibrationEffect#get(int, boolean):
-    Missing nullability on method `get` return
-MissingNullability: android.os.VintfObject#getHalNamesAndVersions():
-    Missing nullability on method `getHalNamesAndVersions` return
-MissingNullability: android.os.VintfObject#getSepolicyVersion():
-    Missing nullability on method `getSepolicyVersion` return
-MissingNullability: android.os.VintfObject#getTargetFrameworkCompatibilityMatrixVersion():
-    Missing nullability on method `getTargetFrameworkCompatibilityMatrixVersion` return
-MissingNullability: android.os.VintfObject#getVndkSnapshots():
-    Missing nullability on method `getVndkSnapshots` return
-MissingNullability: android.os.VintfObject#report():
-    Missing nullability on method `report` return
-MissingNullability: android.os.VintfRuntimeInfo#getCpuInfo():
-    Missing nullability on method `getCpuInfo` return
-MissingNullability: android.os.VintfRuntimeInfo#getHardwareId():
-    Missing nullability on method `getHardwareId` return
-MissingNullability: android.os.VintfRuntimeInfo#getKernelVersion():
-    Missing nullability on method `getKernelVersion` return
-MissingNullability: android.os.VintfRuntimeInfo#getNodeName():
-    Missing nullability on method `getNodeName` return
-MissingNullability: android.os.VintfRuntimeInfo#getOsName():
-    Missing nullability on method `getOsName` return
-MissingNullability: android.os.VintfRuntimeInfo#getOsRelease():
-    Missing nullability on method `getOsRelease` return
-MissingNullability: android.os.VintfRuntimeInfo#getOsVersion():
-    Missing nullability on method `getOsVersion` return
-MissingNullability: android.os.WorkSource#add(int, String) parameter #1:
-    Missing nullability on parameter `name` in method `add`
-MissingNullability: android.os.health.HealthKeys.Constants#Constants(Class) parameter #0:
-    Missing nullability on parameter `clazz` in method `Constants`
-MissingNullability: android.os.health.HealthKeys.Constants#getDataType():
-    Missing nullability on method `getDataType` return
-MissingNullability: android.os.health.HealthKeys.Constants#getKeys(int):
-    Missing nullability on method `getKeys` return
-MissingNullability: android.os.health.HealthStats#HealthStats(android.os.Parcel) parameter #0:
-    Missing nullability on parameter `in` in method `HealthStats`
-MissingNullability: android.os.health.HealthStatsParceler#HealthStatsParceler(android.os.Parcel) parameter #0:
-    Missing nullability on parameter `in` in method `HealthStatsParceler`
-MissingNullability: android.os.health.HealthStatsParceler#HealthStatsParceler(android.os.health.HealthStatsWriter) parameter #0:
-    Missing nullability on parameter `writer` in method `HealthStatsParceler`
-MissingNullability: android.os.health.HealthStatsParceler#getHealthStats():
-    Missing nullability on method `getHealthStats` return
-MissingNullability: android.os.health.HealthStatsParceler#writeToParcel(android.os.Parcel, int) parameter #0:
-    Missing nullability on parameter `out` in method `writeToParcel`
-MissingNullability: android.os.health.HealthStatsWriter#HealthStatsWriter(android.os.health.HealthKeys.Constants) parameter #0:
-    Missing nullability on parameter `constants` in method `HealthStatsWriter`
-MissingNullability: android.os.health.HealthStatsWriter#addMeasurements(int, String, long) parameter #1:
-    Missing nullability on parameter `name` in method `addMeasurements`
-MissingNullability: android.os.health.HealthStatsWriter#addStats(int, String, android.os.health.HealthStatsWriter) parameter #1:
-    Missing nullability on parameter `name` in method `addStats`
-MissingNullability: android.os.health.HealthStatsWriter#addStats(int, String, android.os.health.HealthStatsWriter) parameter #2:
-    Missing nullability on parameter `value` in method `addStats`
-MissingNullability: android.os.health.HealthStatsWriter#addTimers(int, String, android.os.health.TimerStat) parameter #1:
-    Missing nullability on parameter `name` in method `addTimers`
-MissingNullability: android.os.health.HealthStatsWriter#addTimers(int, String, android.os.health.TimerStat) parameter #2:
-    Missing nullability on parameter `value` in method `addTimers`
-MissingNullability: android.os.health.HealthStatsWriter#flattenToParcel(android.os.Parcel) parameter #0:
-    Missing nullability on parameter `out` in method `flattenToParcel`
-MissingNullability: android.os.storage.StorageVolume#getPath():
-    Missing nullability on method `getPath` return
-MissingNullability: android.provider.CalendarContract.Calendars#SYNC_WRITABLE_COLUMNS:
-    Missing nullability on field `SYNC_WRITABLE_COLUMNS` in class `class android.provider.CalendarContract.Calendars`
-MissingNullability: android.provider.CalendarContract.Events#SYNC_WRITABLE_COLUMNS:
-    Missing nullability on field `SYNC_WRITABLE_COLUMNS` in class `class android.provider.CalendarContract.Events`
-MissingNullability: android.provider.ContactsContract.RawContactsEntity#CORP_CONTENT_URI:
-    Missing nullability on field `CORP_CONTENT_URI` in class `class android.provider.ContactsContract.RawContactsEntity`
-MissingNullability: android.security.keystore.KeyProtection.Builder#setBoundToSpecificSecureUserId(long):
-    Missing nullability on method `setBoundToSpecificSecureUserId` return
-MissingNullability: android.service.autofill.CompositeUserData#getCategoryIds():
-    Missing nullability on method `getCategoryIds` return
-MissingNullability: android.service.autofill.CompositeUserData#getDefaultFieldClassificationArgs():
-    Missing nullability on method `getDefaultFieldClassificationArgs` return
-MissingNullability: android.service.autofill.CompositeUserData#getFieldClassificationAlgorithms():
-    Missing nullability on method `getFieldClassificationAlgorithms` return
-MissingNullability: android.service.autofill.CompositeUserData#getFieldClassificationArgs():
-    Missing nullability on method `getFieldClassificationArgs` return
-MissingNullability: android.service.autofill.CompositeUserData#getValues():
-    Missing nullability on method `getValues` return
-MissingNullability: android.service.autofill.CompositeUserData#writeToParcel(android.os.Parcel, int) parameter #0:
-    Missing nullability on parameter `parcel` in method `writeToParcel`
-MissingNullability: android.service.autofill.UserData#getFieldClassificationAlgorithms():
-    Missing nullability on method `getFieldClassificationAlgorithms` return
-MissingNullability: android.telecom.Call.Details#getTelecomCallId():
-    Missing nullability on method `getTelecomCallId` return
-MissingNullability: android.telephony.ServiceState#addNetworkRegistrationInfo(android.telephony.NetworkRegistrationInfo) parameter #0:
-    Missing nullability on parameter `nri` in method `addNetworkRegistrationInfo`
-MissingNullability: android.telephony.ServiceState#setCellBandwidths(int[]) parameter #0:
-    Missing nullability on parameter `bandwidths` in method `setCellBandwidths`
-MissingNullability: android.telephony.SmsManager#checkSmsShortCodeDestination(String, String) parameter #0:
-    Missing nullability on parameter `destAddress` in method `checkSmsShortCodeDestination`
-MissingNullability: android.telephony.SmsManager#checkSmsShortCodeDestination(String, String) parameter #1:
-    Missing nullability on parameter `countryIso` in method `checkSmsShortCodeDestination`
-MissingNullability: android.telephony.TelephonyManager#HAL_VERSION_UNKNOWN:
-    Missing nullability on field `HAL_VERSION_UNKNOWN` in class `class android.telephony.TelephonyManager`
-MissingNullability: android.telephony.TelephonyManager#HAL_VERSION_UNSUPPORTED:
-    Missing nullability on field `HAL_VERSION_UNSUPPORTED` in class `class android.telephony.TelephonyManager`
-MissingNullability: android.telephony.TelephonyManager#getLine1AlphaTag():
-    Missing nullability on method `getLine1AlphaTag` return
-MissingNullability: android.telephony.TelephonyManager#getRadioHalVersion():
-    Missing nullability on method `getRadioHalVersion` return
-MissingNullability: android.telephony.TelephonyManager#setCarrierTestOverride(String, String, String, String, String, String, String, String, String) parameter #0:
-    Missing nullability on parameter `mccmnc` in method `setCarrierTestOverride`
-MissingNullability: android.telephony.TelephonyManager#setCarrierTestOverride(String, String, String, String, String, String, String, String, String) parameter #1:
-    Missing nullability on parameter `imsi` in method `setCarrierTestOverride`
-MissingNullability: android.telephony.TelephonyManager#setCarrierTestOverride(String, String, String, String, String, String, String, String, String) parameter #2:
-    Missing nullability on parameter `iccid` in method `setCarrierTestOverride`
-MissingNullability: android.telephony.TelephonyManager#setCarrierTestOverride(String, String, String, String, String, String, String, String, String) parameter #3:
-    Missing nullability on parameter `gid1` in method `setCarrierTestOverride`
-MissingNullability: android.telephony.TelephonyManager#setCarrierTestOverride(String, String, String, String, String, String, String, String, String) parameter #4:
-    Missing nullability on parameter `gid2` in method `setCarrierTestOverride`
-MissingNullability: android.telephony.TelephonyManager#setCarrierTestOverride(String, String, String, String, String, String, String, String, String) parameter #5:
-    Missing nullability on parameter `plmn` in method `setCarrierTestOverride`
-MissingNullability: android.telephony.TelephonyManager#setCarrierTestOverride(String, String, String, String, String, String, String, String, String) parameter #6:
-    Missing nullability on parameter `spn` in method `setCarrierTestOverride`
-MissingNullability: android.telephony.TelephonyManager#setCarrierTestOverride(String, String, String, String, String, String, String, String, String) parameter #7:
-    Missing nullability on parameter `carrierPriviledgeRules` in method `setCarrierTestOverride`
-MissingNullability: android.telephony.TelephonyManager#setCarrierTestOverride(String, String, String, String, String, String, String, String, String) parameter #8:
-    Missing nullability on parameter `apn` in method `setCarrierTestOverride`
-MissingNullability: android.text.Selection.MemoryTextWatcher#afterTextChanged(android.text.Editable) parameter #0:
-    Missing nullability on parameter `s` in method `afterTextChanged`
-MissingNullability: android.text.Selection.MemoryTextWatcher#beforeTextChanged(CharSequence, int, int, int) parameter #0:
-    Missing nullability on parameter `s` in method `beforeTextChanged`
-MissingNullability: android.text.Selection.MemoryTextWatcher#onTextChanged(CharSequence, int, int, int) parameter #0:
-    Missing nullability on parameter `s` in method `onTextChanged`
-MissingNullability: android.transition.TransitionManager#getTransition(android.transition.Scene):
-    Missing nullability on method `getTransition` return
-MissingNullability: android.transition.TransitionManager#getTransition(android.transition.Scene) parameter #0:
-    Missing nullability on parameter `scene` in method `getTransition`
-MissingNullability: android.util.FeatureFlagUtils#getAllFeatureFlags():
-    Missing nullability on method `getAllFeatureFlags` return
-MissingNullability: android.util.FeatureFlagUtils#isEnabled(android.content.Context, String) parameter #0:
-    Missing nullability on parameter `context` in method `isEnabled`
-MissingNullability: android.util.FeatureFlagUtils#isEnabled(android.content.Context, String) parameter #1:
-    Missing nullability on parameter `feature` in method `isEnabled`
-MissingNullability: android.util.FeatureFlagUtils#setEnabled(android.content.Context, String, boolean) parameter #0:
-    Missing nullability on parameter `context` in method `setEnabled`
-MissingNullability: android.util.FeatureFlagUtils#setEnabled(android.content.Context, String, boolean) parameter #1:
-    Missing nullability on parameter `feature` in method `setEnabled`
-MissingNullability: android.util.TimeUtils#formatDuration(long):
-    Missing nullability on method `formatDuration` return
-MissingNullability: android.util.proto.EncodedBuffer#dumpBuffers(String) parameter #0:
-    Missing nullability on parameter `tag` in method `dumpBuffers`
-MissingNullability: android.util.proto.EncodedBuffer#dumpByteString(String, String, byte[]) parameter #0:
-    Missing nullability on parameter `tag` in method `dumpByteString`
-MissingNullability: android.util.proto.EncodedBuffer#dumpByteString(String, String, byte[]) parameter #1:
-    Missing nullability on parameter `prefix` in method `dumpByteString`
-MissingNullability: android.util.proto.EncodedBuffer#dumpByteString(String, String, byte[]) parameter #2:
-    Missing nullability on parameter `buf` in method `dumpByteString`
-MissingNullability: android.util.proto.EncodedBuffer#getBytes(int):
-    Missing nullability on method `getBytes` return
-MissingNullability: android.util.proto.EncodedBuffer#getDebugString():
-    Missing nullability on method `getDebugString` return
-MissingNullability: android.util.proto.EncodedBuffer#writeRawBuffer(byte[]) parameter #0:
-    Missing nullability on parameter `val` in method `writeRawBuffer`
-MissingNullability: android.util.proto.EncodedBuffer#writeRawBuffer(byte[], int, int) parameter #0:
-    Missing nullability on parameter `val` in method `writeRawBuffer`
-MissingNullability: android.util.proto.ProtoParseException#ProtoParseException(String) parameter #0:
-    Missing nullability on parameter `msg` in method `ProtoParseException`
-MissingNullability: android.util.proto.WireTypeMismatchException#WireTypeMismatchException(String) parameter #0:
-    Missing nullability on parameter `msg` in method `WireTypeMismatchException`
-MissingNullability: android.view.Choreographer#postCallback(int, Runnable, Object) parameter #1:
-    Missing nullability on parameter `action` in method `postCallback`
-MissingNullability: android.view.Choreographer#postCallback(int, Runnable, Object) parameter #2:
-    Missing nullability on parameter `token` in method `postCallback`
-MissingNullability: android.view.Choreographer#postCallbackDelayed(int, Runnable, Object, long) parameter #1:
-    Missing nullability on parameter `action` in method `postCallbackDelayed`
-MissingNullability: android.view.Choreographer#postCallbackDelayed(int, Runnable, Object, long) parameter #2:
-    Missing nullability on parameter `token` in method `postCallbackDelayed`
-MissingNullability: android.view.Choreographer#removeCallbacks(int, Runnable, Object) parameter #1:
-    Missing nullability on parameter `action` in method `removeCallbacks`
-MissingNullability: android.view.Choreographer#removeCallbacks(int, Runnable, Object) parameter #2:
-    Missing nullability on parameter `token` in method `removeCallbacks`
-MissingNullability: android.view.FocusFinder#sort(android.view.View[], int, int, android.view.ViewGroup, boolean) parameter #0:
-    Missing nullability on parameter `views` in method `sort`
-MissingNullability: android.view.FocusFinder#sort(android.view.View[], int, int, android.view.ViewGroup, boolean) parameter #3:
-    Missing nullability on parameter `root` in method `sort`
-MissingNullability: android.view.KeyEvent#actionToString(int):
-    Missing nullability on method `actionToString` return
-MissingNullability: android.view.SurfaceControlViewHost#relayout(android.view.WindowManager.LayoutParams) parameter #0:
-    Missing nullability on parameter `attrs` in method `relayout`
-MissingNullability: android.view.View#getTooltipView():
-    Missing nullability on method `getTooltipView` return
-MissingNullability: android.view.View#isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable) parameter #0:
-    Missing nullability on parameter `background` in method `isDefaultFocusHighlightNeeded`
-MissingNullability: android.view.View#isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable) parameter #1:
-    Missing nullability on parameter `foreground` in method `isDefaultFocusHighlightNeeded`
-MissingNullability: android.view.ViewDebug#startRenderingCommandsCapture(android.view.View, java.util.concurrent.Executor, java.util.concurrent.Callable<java.io.OutputStream>) parameter #0:
-    Missing nullability on parameter `tree` in method `startRenderingCommandsCapture`
-MissingNullability: android.view.ViewDebug#startRenderingCommandsCapture(android.view.View, java.util.concurrent.Executor, java.util.concurrent.Callable<java.io.OutputStream>) parameter #1:
-    Missing nullability on parameter `executor` in method `startRenderingCommandsCapture`
-MissingNullability: android.view.ViewDebug#startRenderingCommandsCapture(android.view.View, java.util.concurrent.Executor, java.util.concurrent.Callable<java.io.OutputStream>) parameter #2:
-    Missing nullability on parameter `callback` in method `startRenderingCommandsCapture`
-MissingNullability: android.view.WindowManager#holdLock(android.os.IBinder, int) parameter #0:
-    Missing nullability on parameter `token` in method `holdLock`
-MissingNullability: android.view.WindowManager.LayoutParams#accessibilityTitle:
-    Missing nullability on field `accessibilityTitle` in class `class android.view.WindowManager.LayoutParams`
-MissingNullability: android.view.accessibility.AccessibilityNodeInfo#writeToParcelNoRecycle(android.os.Parcel, int) parameter #0:
-    Missing nullability on parameter `parcel` in method `writeToParcelNoRecycle`
-MissingNullability: android.view.accessibility.AccessibilityWindowInfo#setNumInstancesInUseCounter(java.util.concurrent.atomic.AtomicInteger) parameter #0:
-    Missing nullability on parameter `counter` in method `setNumInstancesInUseCounter`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#asyncNewChild(int):
-    Missing nullability on method `asyncNewChild` return
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#getAutofillId():
-    Missing nullability on method `getAutofillId` return
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#getExtras():
-    Missing nullability on method `getExtras` return
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#getHint():
-    Missing nullability on method `getHint` return
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#getNode():
-    Missing nullability on method `getNode` return
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#getTempRect():
-    Missing nullability on method `getTempRect` return
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#getText():
-    Missing nullability on method `getText` return
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#newChild(int):
-    Missing nullability on method `newChild` return
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#newHtmlInfoBuilder(String):
-    Missing nullability on method `newHtmlInfoBuilder` return
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#newHtmlInfoBuilder(String) parameter #0:
-    Missing nullability on parameter `tagName` in method `newHtmlInfoBuilder`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setAutofillHints(String[]) parameter #0:
-    Missing nullability on parameter `hints` in method `setAutofillHints`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setAutofillId(android.view.autofill.AutofillId) parameter #0:
-    Missing nullability on parameter `id` in method `setAutofillId`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setAutofillId(android.view.autofill.AutofillId, int) parameter #0:
-    Missing nullability on parameter `parentId` in method `setAutofillId`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setAutofillOptions(CharSequence[]) parameter #0:
-    Missing nullability on parameter `options` in method `setAutofillOptions`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setAutofillValue(android.view.autofill.AutofillValue) parameter #0:
-    Missing nullability on parameter `value` in method `setAutofillValue`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setClassName(String) parameter #0:
-    Missing nullability on parameter `className` in method `setClassName`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setContentDescription(CharSequence) parameter #0:
-    Missing nullability on parameter `contentDescription` in method `setContentDescription`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setHint(CharSequence) parameter #0:
-    Missing nullability on parameter `hint` in method `setHint`
 MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setHintIdEntry(String) parameter #0:
     Missing nullability on parameter `entryName` in method `setHintIdEntry`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setHtmlInfo(android.view.ViewStructure.HtmlInfo) parameter #0:
-    Missing nullability on parameter `htmlInfo` in method `setHtmlInfo`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setId(int, String, String, String) parameter #1:
-    Missing nullability on parameter `packageName` in method `setId`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setId(int, String, String, String) parameter #2:
-    Missing nullability on parameter `typeName` in method `setId`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setId(int, String, String, String) parameter #3:
-    Missing nullability on parameter `entryName` in method `setId`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setLocaleList(android.os.LocaleList) parameter #0:
-    Missing nullability on parameter `localeList` in method `setLocaleList`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setText(CharSequence) parameter #0:
-    Missing nullability on parameter `text` in method `setText`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setText(CharSequence, int, int) parameter #0:
-    Missing nullability on parameter `text` in method `setText`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setTextLines(int[], int[]) parameter #0:
-    Missing nullability on parameter `charOffsets` in method `setTextLines`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setTextLines(int[], int[]) parameter #1:
-    Missing nullability on parameter `baselines` in method `setTextLines`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setTransformation(android.graphics.Matrix) parameter #0:
-    Missing nullability on parameter `matrix` in method `setTransformation`
-MissingNullability: android.view.contentcapture.ViewNode.ViewStructureImpl#setWebDomain(String) parameter #0:
-    Missing nullability on parameter `domain` in method `setWebDomain`
-MissingNullability: android.widget.CalendarView#getBoundsForDate(long, android.graphics.Rect) parameter #1:
-    Missing nullability on parameter `outBounds` in method `getBoundsForDate`
 MissingNullability: android.widget.ImageView#isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable) parameter #0:
     Missing nullability on parameter `background` in method `isDefaultFocusHighlightNeeded`
 MissingNullability: android.widget.ImageView#isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable) parameter #1:
     Missing nullability on parameter `foreground` in method `isDefaultFocusHighlightNeeded`
-MissingNullability: android.widget.Magnifier#getMagnifierDefaultSize():
-    Missing nullability on method `getMagnifierDefaultSize` return
-MissingNullability: android.widget.Magnifier#setOnOperationCompleteCallback(android.widget.Magnifier.Callback) parameter #0:
-    Missing nullability on parameter `callback` in method `setOnOperationCompleteCallback`
-MissingNullability: android.widget.NumberPicker#getDisplayedValueForCurrentSelection():
-    Missing nullability on method `getDisplayedValueForCurrentSelection` return
-MissingNullability: android.widget.PopupMenu#getMenuListView():
-    Missing nullability on method `getMenuListView` return
-MissingNullability: android.widget.TimePicker#getAmView():
-    Missing nullability on method `getAmView` return
-MissingNullability: android.widget.TimePicker#getHourView():
-    Missing nullability on method `getHourView` return
-MissingNullability: android.widget.TimePicker#getMinuteView():
-    Missing nullability on method `getMinuteView` return
-MissingNullability: android.widget.TimePicker#getPmView():
-    Missing nullability on method `getPmView` return
-
-
-MutableBareField: android.content.AutofillOptions#appDisabledExpiration:
-    Bare field appDisabledExpiration must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.AutofillOptions#augmentedAutofillEnabled:
-    Bare field augmentedAutofillEnabled must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.AutofillOptions#disabledActivities:
-    Bare field disabledActivities must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.AutofillOptions#whitelistedActivitiesForAugmentedAutofill:
-    Bare field whitelistedActivitiesForAugmentedAutofill must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#convertedFromPreCreated:
-    Bare field convertedFromPreCreated must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#creationTime:
-    Bare field creationTime must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#flags:
-    Bare field flags must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#guestToRemove:
-    Bare field guestToRemove must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#iconPath:
-    Bare field iconPath must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#id:
-    Bare field id must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#lastLoggedInFingerprint:
-    Bare field lastLoggedInFingerprint must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#lastLoggedInTime:
-    Bare field lastLoggedInTime must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#name:
-    Bare field name must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#partial:
-    Bare field partial must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#preCreated:
-    Bare field preCreated must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#profileBadge:
-    Bare field profileBadge must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#profileGroupId:
-    Bare field profileGroupId must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#restrictedProfileParentId:
-    Bare field restrictedProfileParentId must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#serialNumber:
-    Bare field serialNumber must be marked final, or moved behind accessors if mutable
-MutableBareField: android.content.pm.UserInfo#userType:
-    Bare field userType must be marked final, or moved behind accessors if mutable
-MutableBareField: android.database.sqlite.SQLiteDebug.DbStats#cache:
-    Bare field cache must be marked final, or moved behind accessors if mutable
-MutableBareField: android.database.sqlite.SQLiteDebug.DbStats#dbName:
-    Bare field dbName must be marked final, or moved behind accessors if mutable
-MutableBareField: android.database.sqlite.SQLiteDebug.DbStats#dbSize:
-    Bare field dbSize must be marked final, or moved behind accessors if mutable
-MutableBareField: android.database.sqlite.SQLiteDebug.DbStats#lookaside:
-    Bare field lookaside must be marked final, or moved behind accessors if mutable
-MutableBareField: android.database.sqlite.SQLiteDebug.DbStats#pageSize:
-    Bare field pageSize must be marked final, or moved behind accessors if mutable
-MutableBareField: android.database.sqlite.SQLiteDebug.PagerStats#dbStats:
-    Bare field dbStats must be marked final, or moved behind accessors if mutable
-MutableBareField: android.database.sqlite.SQLiteDebug.PagerStats#largestMemAlloc:
-    Bare field largestMemAlloc must be marked final, or moved behind accessors if mutable
-MutableBareField: android.database.sqlite.SQLiteDebug.PagerStats#memoryUsed:
-    Bare field memoryUsed must be marked final, or moved behind accessors if mutable
-MutableBareField: android.database.sqlite.SQLiteDebug.PagerStats#pageCacheOverflow:
-    Bare field pageCacheOverflow must be marked final, or moved behind accessors if mutable
-MutableBareField: android.os.StrictMode.ViolationInfo#broadcastIntentAction:
-    Bare field broadcastIntentAction must be marked final, or moved behind accessors if mutable
-MutableBareField: android.os.StrictMode.ViolationInfo#durationMillis:
-    Bare field durationMillis must be marked final, or moved behind accessors if mutable
-MutableBareField: android.os.StrictMode.ViolationInfo#numAnimationsRunning:
-    Bare field numAnimationsRunning must be marked final, or moved behind accessors if mutable
-MutableBareField: android.os.StrictMode.ViolationInfo#numInstances:
-    Bare field numInstances must be marked final, or moved behind accessors if mutable
-MutableBareField: android.os.StrictMode.ViolationInfo#tags:
-    Bare field tags must be marked final, or moved behind accessors if mutable
-MutableBareField: android.os.StrictMode.ViolationInfo#violationNumThisLoop:
-    Bare field violationNumThisLoop must be marked final, or moved behind accessors if mutable
-MutableBareField: android.os.StrictMode.ViolationInfo#violationUptimeMillis:
-    Bare field violationUptimeMillis must be marked final, or moved behind accessors if mutable
-
-
-NoByteOrShort: android.media.audiofx.AudioEffect#byteArrayToShort(byte[]):
-    Should avoid odd sized primitives; use `int` instead of `short` in method android.media.audiofx.AudioEffect.byteArrayToShort(byte[])
-NoByteOrShort: android.media.audiofx.AudioEffect#setParameter(int, short) parameter #1:
-    Should avoid odd sized primitives; use `int` instead of `short` in parameter value in android.media.audiofx.AudioEffect.setParameter(int param, short value)
-NoByteOrShort: android.media.audiofx.AudioEffect#shortToByteArray(short) parameter #0:
-    Should avoid odd sized primitives; use `int` instead of `short` in parameter value in android.media.audiofx.AudioEffect.shortToByteArray(short value)
-NoByteOrShort: android.util.proto.EncodedBuffer#readRawByte():
-    Should avoid odd sized primitives; use `int` instead of `byte` in method android.util.proto.EncodedBuffer.readRawByte()
-NoByteOrShort: android.util.proto.EncodedBuffer#writeRawByte(byte) parameter #0:
-    Should avoid odd sized primitives; use `int` instead of `byte` in parameter val in android.util.proto.EncodedBuffer.writeRawByte(byte val)
-
-
-NoSettingsProvider: android.provider.Settings.Global#APP_OPS_CONSTANTS:
-    New setting keys are not allowed (Field: APP_OPS_CONSTANTS); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#AUTOMATIC_POWER_SAVE_MODE:
-    New setting keys are not allowed (Field: AUTOMATIC_POWER_SAVE_MODE); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#BATTERY_SAVER_CONSTANTS:
-    New setting keys are not allowed (Field: BATTERY_SAVER_CONSTANTS); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD:
-    New setting keys are not allowed (Field: DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#DYNAMIC_POWER_SAVINGS_ENABLED:
-    New setting keys are not allowed (Field: DYNAMIC_POWER_SAVINGS_ENABLED); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#HDR_CONVERSION_MODE:
-    New setting keys are not allowed (Field: HDR_CONVERSION_MODE); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#HDR_FORCE_CONVERSION_TYPE:
-    New setting keys are not allowed (Field: HDR_FORCE_CONVERSION_TYPE); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#HIDDEN_API_BLACKLIST_EXEMPTIONS:
-    New setting keys are not allowed (Field: HIDDEN_API_BLACKLIST_EXEMPTIONS); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#HIDDEN_API_POLICY:
-    New setting keys are not allowed (Field: HIDDEN_API_POLICY); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#HIDE_ERROR_DIALOGS:
-    New setting keys are not allowed (Field: HIDE_ERROR_DIALOGS); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#LOW_POWER_MODE:
-    New setting keys are not allowed (Field: LOW_POWER_MODE); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#LOW_POWER_MODE_STICKY:
-    New setting keys are not allowed (Field: LOW_POWER_MODE_STICKY); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Global#OVERLAY_DISPLAY_DEVICES:
-    New setting keys are not allowed (Field: OVERLAY_DISPLAY_DEVICES); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED:
-    New setting keys are not allowed (Field: ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#ACCESSIBILITY_MAGNIFICATION_CAPABILITY:
-    New setting keys are not allowed (Field: ACCESSIBILITY_MAGNIFICATION_CAPABILITY); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#ACCESSIBILITY_MAGNIFICATION_MODE:
-    New setting keys are not allowed (Field: ACCESSIBILITY_MAGNIFICATION_MODE); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#ACCESSIBILITY_SHORTCUT_TARGET_SERVICE:
-    New setting keys are not allowed (Field: ACCESSIBILITY_SHORTCUT_TARGET_SERVICE); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#AUTOFILL_SERVICE:
-    New setting keys are not allowed (Field: AUTOFILL_SERVICE); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#BIOMETRIC_VIRTUAL_ENABLED:
-    New setting keys are not allowed (Field: BIOMETRIC_VIRTUAL_ENABLED); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#CONTENT_CAPTURE_ENABLED:
-    New setting keys are not allowed (Field: CONTENT_CAPTURE_ENABLED); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#DISABLED_PRINT_SERVICES:
-    New setting keys are not allowed (Field: DISABLED_PRINT_SERVICES); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#ENABLED_VR_LISTENERS:
-    New setting keys are not allowed (Field: ENABLED_VR_LISTENERS); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#IMMERSIVE_MODE_CONFIRMATIONS:
-    New setting keys are not allowed (Field: IMMERSIVE_MODE_CONFIRMATIONS); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#NOTIFICATION_BADGING:
-    New setting keys are not allowed (Field: NOTIFICATION_BADGING); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#POWER_MENU_LOCKED_SHOW_CONTENT:
-    New setting keys are not allowed (Field: POWER_MENU_LOCKED_SHOW_CONTENT); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#SYNC_PARENT_SOUNDS:
-    New setting keys are not allowed (Field: SYNC_PARENT_SOUNDS); use getters/setters in relevant manager class
-NoSettingsProvider: android.provider.Settings.Secure#VOICE_INTERACTION_SERVICE:
-    New setting keys are not allowed (Field: VOICE_INTERACTION_SERVICE); use getters/setters in relevant manager class
-
-
-OnNameExpected: android.service.notification.ConditionProviderService#isBound():
-    If implemented by developer, should follow the on<Something> style; otherwise consider marking final
-OnNameExpected: android.service.watchdog.ExplicitHealthCheckService#setCallback(android.os.RemoteCallback):
-    If implemented by developer, should follow the on<Something> style; otherwise consider marking final
-
-
-PackageLayering: android.util.FeatureFlagUtils:
-    Method parameter type `android.content.Context` violates package layering: nothing in `package android.util` should depend on `package android.content`
-
-
-ParcelConstructor: android.credentials.ui.ProviderData#ProviderData(android.os.Parcel):
-    Parcelable inflation is exposed through CREATOR, not raw constructors, in android.credentials.ui.ProviderData
-ParcelConstructor: android.os.StrictMode.ViolationInfo#ViolationInfo(android.os.Parcel):
-    Parcelable inflation is exposed through CREATOR, not raw constructors, in android.os.StrictMode.ViolationInfo
-ParcelConstructor: android.os.health.HealthStatsParceler#HealthStatsParceler(android.os.Parcel):
-    Parcelable inflation is exposed through CREATOR, not raw constructors, in android.os.health.HealthStatsParceler
-
-
-ParcelCreator: android.app.WindowConfiguration:
-    Parcelable requires a `CREATOR` field; missing in android.app.WindowConfiguration
-ParcelCreator: android.service.autofill.InternalOnClickAction:
-    Parcelable requires a `CREATOR` field; missing in android.service.autofill.InternalOnClickAction
-ParcelCreator: android.service.autofill.InternalSanitizer:
-    Parcelable requires a `CREATOR` field; missing in android.service.autofill.InternalSanitizer
-ParcelCreator: android.service.autofill.InternalTransformation:
-    Parcelable requires a `CREATOR` field; missing in android.service.autofill.InternalTransformation
-ParcelCreator: android.service.autofill.InternalValidator:
-    Parcelable requires a `CREATOR` field; missing in android.service.autofill.InternalValidator
-
-
-ParcelNotFinal: android.app.WindowConfiguration:
-    Parcelable classes must be final: android.app.WindowConfiguration is not final
-ParcelNotFinal: android.content.pm.UserInfo:
-    Parcelable classes must be final: android.content.pm.UserInfo is not final
-ParcelNotFinal: android.os.health.HealthStatsParceler:
-    Parcelable classes must be final: android.os.health.HealthStatsParceler is not final
-ParcelNotFinal: android.service.autofill.InternalOnClickAction:
-    Parcelable classes must be final: android.service.autofill.InternalOnClickAction is not final
-ParcelNotFinal: android.service.autofill.InternalSanitizer:
-    Parcelable classes must be final: android.service.autofill.InternalSanitizer is not final
-ParcelNotFinal: android.service.autofill.InternalTransformation:
-    Parcelable classes must be final: android.service.autofill.InternalTransformation is not final
-ParcelNotFinal: android.service.autofill.InternalValidator:
-    Parcelable classes must be final: android.service.autofill.InternalValidator is not final
 
 
 ProtectedMember: android.app.AppDetailsActivity#onCreate(android.os.Bundle):
     Protected methods not allowed; must be public: method android.app.AppDetailsActivity.onCreate(android.os.Bundle)}
-ProtectedMember: android.view.View#resetResolvedDrawables():
-    Protected methods not allowed; must be public: method android.view.View.resetResolvedDrawables()}
 ProtectedMember: android.view.ViewGroup#resetResolvedDrawables():
     Protected methods not allowed; must be public: method android.view.ViewGroup.resetResolvedDrawables()}
 
 
-RethrowRemoteException: android.app.ActivityManager#resumeAppSwitches():
-    Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause)
+SamShouldBeLast: android.animation.ValueAnimator#ofObject(android.animation.TypeEvaluator, java.lang.Object...):
+    SAM-compatible parameters (such as parameter 1, "evaluator", in android.animation.ValueAnimator.ofObject) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.Activity#convertToTranslucent(android.app.Activity.TranslucentConversionListener, android.app.ActivityOptions):
+    SAM-compatible parameters (such as parameter 1, "callback", in android.app.Activity.convertToTranslucent) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.ActivityManager#addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.app.ActivityManager.addOnUidImportanceListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.AlarmManager#set(int, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 4, "listener", in android.app.AlarmManager.set) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.AlarmManager#set(int, long, long, long, android.app.AlarmManager.OnAlarmListener, android.os.Handler, android.os.WorkSource):
+    SAM-compatible parameters (such as parameter 5, "listener", in android.app.AlarmManager.set) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.AlarmManager#setExact(int, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 4, "listener", in android.app.AlarmManager.setExact) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.AlarmManager#setWindow(int, long, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 5, "listener", in android.app.AlarmManager.setWindow) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.PendingIntent#send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler):
+    SAM-compatible parameters (such as parameter 4, "onFinished", in android.app.PendingIntent.send) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.PendingIntent#send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, String):
+    SAM-compatible parameters (such as parameter 4, "onFinished", in android.app.PendingIntent.send) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.PendingIntent#send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, String, android.os.Bundle):
+    SAM-compatible parameters (such as parameter 4, "onFinished", in android.app.PendingIntent.send) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.PendingIntent#send(int, android.app.PendingIntent.OnFinished, android.os.Handler):
+    SAM-compatible parameters (such as parameter 2, "onFinished", in android.app.PendingIntent.send) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.UiAutomation#executeAndWaitForEvent(Runnable, android.app.UiAutomation.AccessibilityEventFilter, long):
+    SAM-compatible parameters (such as parameter 2, "filter", in android.app.UiAutomation.executeAndWaitForEvent) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.app.WallpaperManager#addOnColorsChangedListener(android.app.WallpaperManager.OnColorsChangedListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.app.WallpaperManager.addOnColorsChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.content.pm.ActivityInfo#dump(android.util.Printer, String):
+    SAM-compatible parameters (such as parameter 1, "pw", in android.content.pm.ActivityInfo.dump) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.content.pm.ApplicationInfo#dump(android.util.Printer, String):
+    SAM-compatible parameters (such as parameter 1, "pw", in android.content.pm.ApplicationInfo.dump) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.content.pm.ComponentInfo#dumpBack(android.util.Printer, String):
+    SAM-compatible parameters (such as parameter 1, "pw", in android.content.pm.ComponentInfo.dumpBack) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.content.pm.ComponentInfo#dumpFront(android.util.Printer, String):
+    SAM-compatible parameters (such as parameter 1, "pw", in android.content.pm.ComponentInfo.dumpFront) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.content.pm.PackageItemInfo#dumpBack(android.util.Printer, String):
+    SAM-compatible parameters (such as parameter 1, "pw", in android.content.pm.PackageItemInfo.dumpBack) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.content.pm.PackageItemInfo#dumpFront(android.util.Printer, String):
+    SAM-compatible parameters (such as parameter 1, "pw", in android.content.pm.PackageItemInfo.dumpFront) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.database.sqlite.SQLiteCursorDriver#query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]):
+    SAM-compatible parameters (such as parameter 1, "factory", in android.database.sqlite.SQLiteCursorDriver.query) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.graphics.drawable.AdaptiveIconDrawable#scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long):
+    SAM-compatible parameters (such as parameter 2, "what", in android.graphics.drawable.AdaptiveIconDrawable.scheduleDrawable) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.graphics.drawable.Drawable#scheduleSelf(Runnable, long):
+    SAM-compatible parameters (such as parameter 1, "what", in android.graphics.drawable.Drawable.scheduleSelf) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.graphics.drawable.Drawable.Callback#scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long):
+    SAM-compatible parameters (such as parameter 2, "what", in android.graphics.drawable.Drawable.Callback.scheduleDrawable) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.graphics.drawable.LayerDrawable#scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long):
+    SAM-compatible parameters (such as parameter 2, "what", in android.graphics.drawable.LayerDrawable.scheduleDrawable) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioManager#abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes):
+    SAM-compatible parameters (such as parameter 1, "l", in android.media.AudioManager.abandonAudioFocus) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioManager#requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int):
+    SAM-compatible parameters (such as parameter 1, "l", in android.media.AudioManager.requestAudioFocus) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioManager#requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy):
+    SAM-compatible parameters (such as parameter 1, "l", in android.media.AudioManager.requestAudioFocus) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioManager#requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int):
+    SAM-compatible parameters (such as parameter 1, "l", in android.media.AudioManager.requestAudioFocus) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioRecord#addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioRecord.addOnRoutingChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioRecord#addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioRecord.addOnRoutingChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioTrack#addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioTrack.addOnRoutingChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.AudioTrack#addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.media.AudioTrack.addOnRoutingChangedListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.media.MediaCas#setEventListener(android.media.MediaCas.EventListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.media.MediaCas.setEventListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.os.Parcel#createFixedArray(Class<T>, java.util.function.Function<android.os.IBinder,S>, int...):
+    SAM-compatible parameters (such as parameter 2, "asInterface", in android.os.Parcel.createFixedArray) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity, android.security.KeyChainAliasCallback, String[], java.security.Principal[], String, int, String):
+    SAM-compatible parameters (such as parameter 2, "response", in android.security.KeyChain.choosePrivateKeyAlias) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity, android.security.KeyChainAliasCallback, String[], java.security.Principal[], android.net.Uri, String):
+    SAM-compatible parameters (such as parameter 2, "response", in android.security.KeyChain.choosePrivateKeyAlias) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.view.Choreographer#postFrameCallbackDelayed(android.view.Choreographer.FrameCallback, long):
+    SAM-compatible parameters (such as parameter 1, "callback", in android.view.Choreographer.postFrameCallbackDelayed) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.view.View#postDelayed(Runnable, long):
+    SAM-compatible parameters (such as parameter 1, "action", in android.view.View.postDelayed) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.view.View#postOnAnimationDelayed(Runnable, long):
+    SAM-compatible parameters (such as parameter 1, "action", in android.view.View.postOnAnimationDelayed) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.view.View#scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long):
+    SAM-compatible parameters (such as parameter 2, "what", in android.view.View.scheduleDrawable) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.view.Window#addOnFrameMetricsAvailableListener(android.view.Window.OnFrameMetricsAvailableListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.view.Window.addOnFrameMetricsAvailableListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.view.accessibility.AccessibilityManager#addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.view.accessibility.AccessibilityManager.addAccessibilityStateChangeListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.view.accessibility.AccessibilityManager#addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener, android.os.Handler):
+    SAM-compatible parameters (such as parameter 1, "listener", in android.view.accessibility.AccessibilityManager.addTouchExplorationStateChangeListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.view.inputmethod.InputMethodInfo#dump(android.util.Printer, String):
+    SAM-compatible parameters (such as parameter 1, "pw", in android.view.inputmethod.InputMethodInfo.dump) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 
 
-SamShouldBeLast: android.database.sqlite.SQLiteDebug#dump(android.util.Printer, String[]):
-    SAM-compatible parameters (such as parameter 1, "printer", in android.database.sqlite.SQLiteDebug.dump) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.database.sqlite.SQLiteDirectCursorDriver#query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]):
-    SAM-compatible parameters (such as parameter 1, "factory", in android.database.sqlite.SQLiteDirectCursorDriver.query) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.os.StrictMode.ViolationInfo#dump(android.util.Printer, String):
-    SAM-compatible parameters (such as parameter 1, "pw", in android.os.StrictMode.ViolationInfo.dump) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.permission.PermissionControllerManager#countPermissionApps(java.util.List<java.lang.String>, int, android.permission.PermissionControllerManager.OnCountPermissionAppsResultCallback, android.os.Handler):
-    SAM-compatible parameters (such as parameter 3, "callback", in android.permission.PermissionControllerManager.countPermissionApps) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.permission.PermissionControllerManager#getAppPermissions(String, android.permission.PermissionControllerManager.OnGetAppPermissionResultCallback, android.os.Handler):
-    SAM-compatible parameters (such as parameter 2, "callback", in android.permission.PermissionControllerManager.getAppPermissions) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.service.autofill.CharSequenceTransformation#apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int):
-    SAM-compatible parameters (such as parameter 1, "finder", in android.service.autofill.CharSequenceTransformation.apply) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.service.autofill.DateTransformation#apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int):
-    SAM-compatible parameters (such as parameter 1, "finder", in android.service.autofill.DateTransformation.apply) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.service.autofill.ImageTransformation#apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int):
-    SAM-compatible parameters (such as parameter 1, "finder", in android.service.autofill.ImageTransformation.apply) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.service.autofill.InternalTransformation#batchApply(android.service.autofill.ValueFinder, android.widget.RemoteViews, java.util.ArrayList<android.util.Pair<java.lang.Integer,android.service.autofill.InternalTransformation>>):
-    SAM-compatible parameters (such as parameter 1, "finder", in android.service.autofill.InternalTransformation.batchApply) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.view.Choreographer#postCallback(int, Runnable, Object):
-    SAM-compatible parameters (such as parameter 2, "action", in android.view.Choreographer.postCallback) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.view.Choreographer#postCallbackDelayed(int, Runnable, Object, long):
-    SAM-compatible parameters (such as parameter 2, "action", in android.view.Choreographer.postCallbackDelayed) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-SamShouldBeLast: android.view.Choreographer#removeCallbacks(int, Runnable, Object):
-    SAM-compatible parameters (such as parameter 2, "action", in android.view.Choreographer.removeCallbacks) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-
-
-StaticUtils: android.os.health.HealthKeys:
-    Fully-static utility classes must not have constructor
-StaticUtils: android.service.autofill.InternalTransformation:
-    Fully-static utility classes must not have constructor
-StaticUtils: android.util.FeatureFlagUtils:
-    Fully-static utility classes must not have constructor
-
-
-StreamFiles: android.os.Environment#buildPath(java.io.File, java.lang.String...):
-    Methods accepting `File` should also accept `FileDescriptor` or streams: method android.os.Environment.buildPath(java.io.File,java.lang.String...)
-StreamFiles: android.os.FileUtils#contains(java.io.File, java.io.File):
-    Methods accepting `File` should also accept `FileDescriptor` or streams: method android.os.FileUtils.contains(java.io.File,java.io.File)
-
-
-UseIcu: android.hardware.soundtrigger.KeyphraseEnrollmentInfo#getKeyphraseMetadata(String, java.util.Locale) parameter #1:
-    Type `java.util.Locale` should be replaced with richer ICU type `android.icu.util.ULocale`
-UseIcu: android.hardware.soundtrigger.KeyphraseEnrollmentInfo#getManageKeyphraseIntent(int, String, java.util.Locale) parameter #2:
-    Type `java.util.Locale` should be replaced with richer ICU type `android.icu.util.ULocale`
-UseIcu: android.hardware.soundtrigger.KeyphraseMetadata#supportsLocale(java.util.Locale) parameter #0:
-    Type `java.util.Locale` should be replaced with richer ICU type `android.icu.util.ULocale`
-
-
-UserHandle: android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts(android.os.UserHandle):
-    When a method overload is needed to target a specific UserHandle, callers should be directed to use Context.createPackageContextAsUser() and re-obtain the relevant Manager, and no new API should be added
-UserHandle: android.app.usage.StorageStatsManager#queryCratesForPackage(java.util.UUID, String, android.os.UserHandle):
-    When a method overload is needed to target a specific UserHandle, callers should be directed to use Context.createPackageContextAsUser() and re-obtain the relevant Manager, and no new API should be added
-UserHandle: android.app.usage.StorageStatsManager#queryCratesForUser(java.util.UUID, android.os.UserHandle):
-    When a method overload is needed to target a specific UserHandle, callers should be directed to use Context.createPackageContextAsUser() and re-obtain the relevant Manager, and no new API should be added
-UserHandle: android.content.pm.PackageManager#getInstallReason(String, android.os.UserHandle):
-    When a method overload is needed to target a specific UserHandle, callers should be directed to use Context.createPackageContextAsUser() and re-obtain the relevant Manager, and no new API should be added
-
-
-UserHandleName: android.content.AutofillOptions:
-    Classes holding a set of parameters should be called `FooParams`, was `AutofillOptions`
-UserHandleName: android.content.ContentCaptureOptions:
-    Classes holding a set of parameters should be called `FooParams`, was `ContentCaptureOptions`
-
-
-VisiblySynchronized: PsiThisExpression:
-    Internal locks must not be exposed (synchronizing on this or class is still externally observable): method android.content.res.AssetManager.getApkPaths()
-VisiblySynchronized: android.content.res.AssetManager#getApkPaths():
-    Internal locks must not be exposed (synchronizing on this or class is still externally observable): method android.content.res.AssetManager.getApkPaths()
-VisiblySynchronized: android.content.res.AssetManager#getLastResourceResolution():
-    Internal locks must not be exposed (synchronizing on this or class is still externally observable): method android.content.res.AssetManager.getLastResourceResolution()
-VisiblySynchronized: android.content.res.AssetManager#getOverlayablesToString(String):
-    Internal locks must not be exposed (synchronizing on this or class is still externally observable): method android.content.res.AssetManager.getOverlayablesToString(String)
-VisiblySynchronized: android.content.res.AssetManager#setResourceResolutionLoggingEnabled(boolean):
-    Internal locks must not be exposed (synchronizing on this or class is still externally observable): method android.content.res.AssetManager.setResourceResolutionLoggingEnabled(boolean)
-VisiblySynchronized: android.os.MessageQueue#removeSyncBarrier(int):
-    Internal locks must not be exposed (synchronizing on this or class is still externally observable): method android.os.MessageQueue.removeSyncBarrier(int)
+UnflaggedApi: android.Manifest.permission#MANAGE_REMOTE_AUTH:
+    New API must be flagged with @FlaggedApi: field android.Manifest.permission.MANAGE_REMOTE_AUTH
+UnflaggedApi: android.Manifest.permission#START_ACTIVITIES_FROM_SDK_SANDBOX:
+    New API must be flagged with @FlaggedApi: field android.Manifest.permission.START_ACTIVITIES_FROM_SDK_SANDBOX
+UnflaggedApi: android.Manifest.permission#USE_REMOTE_AUTH:
+    New API must be flagged with @FlaggedApi: field android.Manifest.permission.USE_REMOTE_AUTH
+UnflaggedApi: android.app.admin.DevicePolicyIdentifiers#PERMITTED_INPUT_METHODS_POLICY:
+    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyIdentifiers.PERMITTED_INPUT_METHODS_POLICY
+UnflaggedApi: android.app.admin.DevicePolicyIdentifiers#PERSONAL_APPS_SUSPENDED_POLICY:
+    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyIdentifiers.PERSONAL_APPS_SUSPENDED_POLICY
+UnflaggedApi: android.app.admin.DevicePolicyIdentifiers#SCREEN_CAPTURE_DISABLED_POLICY:
+    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyIdentifiers.SCREEN_CAPTURE_DISABLED_POLICY
+UnflaggedApi: android.app.admin.DevicePolicyIdentifiers#USB_DATA_SIGNALING_POLICY:
+    New API must be flagged with @FlaggedApi: field android.app.admin.DevicePolicyIdentifiers.USB_DATA_SIGNALING_POLICY
+UnflaggedApi: android.companion.AssociationInfo.Builder:
+    New API must be flagged with @FlaggedApi: class android.companion.AssociationInfo.Builder
+UnflaggedApi: android.companion.AssociationInfo.Builder#Builder(android.companion.AssociationInfo):
+    New API must be flagged with @FlaggedApi: constructor android.companion.AssociationInfo.Builder(android.companion.AssociationInfo)
+UnflaggedApi: android.companion.AssociationInfo.Builder#Builder(int, int, String):
+    New API must be flagged with @FlaggedApi: constructor android.companion.AssociationInfo.Builder(int,int,String)
+UnflaggedApi: android.companion.AssociationInfo.Builder#build():
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.build()
+UnflaggedApi: android.companion.AssociationInfo.Builder#setAssociatedDevice(android.companion.AssociatedDevice):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setAssociatedDevice(android.companion.AssociatedDevice)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setDeviceMacAddress(android.net.MacAddress):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setDeviceMacAddress(android.net.MacAddress)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setDeviceProfile(String):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setDeviceProfile(String)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setDisplayName(CharSequence):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setDisplayName(CharSequence)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setLastTimeConnected(long):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setLastTimeConnected(long)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setNotifyOnDeviceNearby(boolean):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setNotifyOnDeviceNearby(boolean)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setRevoked(boolean):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setRevoked(boolean)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setSelfManaged(boolean):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setSelfManaged(boolean)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setSystemDataSyncFlags(int):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setSystemDataSyncFlags(int)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setTag(String):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setTag(String)
+UnflaggedApi: android.companion.AssociationInfo.Builder#setTimeApproved(long):
+    New API must be flagged with @FlaggedApi: method android.companion.AssociationInfo.Builder.setTimeApproved(long)
+UnflaggedApi: android.companion.CompanionDeviceManager#MESSAGE_REQUEST_PING:
+    New API must be flagged with @FlaggedApi: field android.companion.CompanionDeviceManager.MESSAGE_REQUEST_PING
+UnflaggedApi: android.companion.CompanionDeviceManager#enableSecureTransport(boolean):
+    New API must be flagged with @FlaggedApi: method android.companion.CompanionDeviceManager.enableSecureTransport(boolean)
+UnflaggedApi: android.content.AttributionSource#AttributionSource(int, int, String, String, android.os.IBinder, String[], android.content.AttributionSource):
+    New API must be flagged with @FlaggedApi: constructor android.content.AttributionSource(int,int,String,String,android.os.IBinder,String[],android.content.AttributionSource)
+UnflaggedApi: android.content.AttributionSource#AttributionSource(int, int, String, String, android.os.IBinder, String[], int, android.content.AttributionSource):
+    New API must be flagged with @FlaggedApi: constructor android.content.AttributionSource(int,int,String,String,android.os.IBinder,String[],int,android.content.AttributionSource)
+UnflaggedApi: android.content.pm.UserInfo#isCommunalProfile():
+    New API must be flagged with @FlaggedApi: method android.content.pm.UserInfo.isCommunalProfile()
+UnflaggedApi: android.content.pm.UserInfo#isPrivateProfile():
+    New API must be flagged with @FlaggedApi: method android.content.pm.UserInfo.isPrivateProfile()
+UnflaggedApi: android.credentials.CredentialProviderInfo#isPrimary():
+    New API must be flagged with @FlaggedApi: method android.credentials.CredentialProviderInfo.isPrimary()
+UnflaggedApi: android.media.AudioManager#enterAudioFocusFreezeForTest(java.util.List<java.lang.Integer>):
+    New API must be flagged with @FlaggedApi: method android.media.AudioManager.enterAudioFocusFreezeForTest(java.util.List<java.lang.Integer>)
+UnflaggedApi: android.media.AudioManager#exitAudioFocusFreezeForTest():
+    New API must be flagged with @FlaggedApi: method android.media.AudioManager.exitAudioFocusFreezeForTest()
+UnflaggedApi: android.media.AudioManager#getFocusDuckedUidsForTest():
+    New API must be flagged with @FlaggedApi: method android.media.AudioManager.getFocusDuckedUidsForTest()
+UnflaggedApi: android.media.AudioManager#getFocusFadeOutDurationForTest():
+    New API must be flagged with @FlaggedApi: method android.media.AudioManager.getFocusFadeOutDurationForTest()
+UnflaggedApi: android.media.AudioManager#getFocusUnmuteDelayAfterFadeOutForTest():
+    New API must be flagged with @FlaggedApi: method android.media.AudioManager.getFocusUnmuteDelayAfterFadeOutForTest()
+UnflaggedApi: android.media.RingtoneSelection:
+    New API must be flagged with @FlaggedApi: class android.media.RingtoneSelection
+UnflaggedApi: android.media.RingtoneSelection#DEFAULT_SELECTION_URI_STRING:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.DEFAULT_SELECTION_URI_STRING
+UnflaggedApi: android.media.RingtoneSelection#FROM_URI_RINGTONE_SELECTION_ONLY:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.FROM_URI_RINGTONE_SELECTION_ONLY
+UnflaggedApi: android.media.RingtoneSelection#FROM_URI_RINGTONE_SELECTION_OR_SOUND:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.FROM_URI_RINGTONE_SELECTION_OR_SOUND
+UnflaggedApi: android.media.RingtoneSelection#FROM_URI_RINGTONE_SELECTION_OR_VIBRATION:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.FROM_URI_RINGTONE_SELECTION_OR_VIBRATION
+UnflaggedApi: android.media.RingtoneSelection#SOUND_SOURCE_DEFAULT:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.SOUND_SOURCE_DEFAULT
+UnflaggedApi: android.media.RingtoneSelection#SOUND_SOURCE_OFF:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.SOUND_SOURCE_OFF
+UnflaggedApi: android.media.RingtoneSelection#SOUND_SOURCE_URI:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.SOUND_SOURCE_URI
+UnflaggedApi: android.media.RingtoneSelection#VIBRATION_SOURCE_APPLICATION_PROVIDED:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.VIBRATION_SOURCE_APPLICATION_PROVIDED
+UnflaggedApi: android.media.RingtoneSelection#VIBRATION_SOURCE_AUDIO_CHANNEL:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.VIBRATION_SOURCE_AUDIO_CHANNEL
+UnflaggedApi: android.media.RingtoneSelection#VIBRATION_SOURCE_DEFAULT:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.VIBRATION_SOURCE_DEFAULT
+UnflaggedApi: android.media.RingtoneSelection#VIBRATION_SOURCE_HAPTIC_GENERATOR:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.VIBRATION_SOURCE_HAPTIC_GENERATOR
+UnflaggedApi: android.media.RingtoneSelection#VIBRATION_SOURCE_OFF:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.VIBRATION_SOURCE_OFF
+UnflaggedApi: android.media.RingtoneSelection#VIBRATION_SOURCE_URI:
+    New API must be flagged with @FlaggedApi: field android.media.RingtoneSelection.VIBRATION_SOURCE_URI
+UnflaggedApi: android.media.RingtoneSelection#fromUri(android.net.Uri, int):
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.fromUri(android.net.Uri,int)
+UnflaggedApi: android.media.RingtoneSelection#getSoundSource():
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.getSoundSource()
+UnflaggedApi: android.media.RingtoneSelection#getSoundUri():
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.getSoundUri()
+UnflaggedApi: android.media.RingtoneSelection#getVibrationSource():
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.getVibrationSource()
+UnflaggedApi: android.media.RingtoneSelection#getVibrationUri():
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.getVibrationUri()
+UnflaggedApi: android.media.RingtoneSelection#isRingtoneSelectionUri(android.net.Uri):
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.isRingtoneSelectionUri(android.net.Uri)
+UnflaggedApi: android.media.RingtoneSelection#toUri():
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.toUri()
+UnflaggedApi: android.media.RingtoneSelection.Builder:
+    New API must be flagged with @FlaggedApi: class android.media.RingtoneSelection.Builder
+UnflaggedApi: android.media.RingtoneSelection.Builder#Builder():
+    New API must be flagged with @FlaggedApi: constructor android.media.RingtoneSelection.Builder()
+UnflaggedApi: android.media.RingtoneSelection.Builder#Builder(android.media.RingtoneSelection):
+    New API must be flagged with @FlaggedApi: constructor android.media.RingtoneSelection.Builder(android.media.RingtoneSelection)
+UnflaggedApi: android.media.RingtoneSelection.Builder#build():
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.Builder.build()
+UnflaggedApi: android.media.RingtoneSelection.Builder#setSoundSource(android.net.Uri):
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.Builder.setSoundSource(android.net.Uri)
+UnflaggedApi: android.media.RingtoneSelection.Builder#setSoundSource(int):
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.Builder.setSoundSource(int)
+UnflaggedApi: android.media.RingtoneSelection.Builder#setVibrationSource(android.net.Uri):
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.Builder.setVibrationSource(android.net.Uri)
+UnflaggedApi: android.media.RingtoneSelection.Builder#setVibrationSource(int):
+    New API must be flagged with @FlaggedApi: method android.media.RingtoneSelection.Builder.setVibrationSource(int)
+UnflaggedApi: android.media.soundtrigger.SoundTriggerInstrumentation#setInPhoneCallState(boolean):
+    New API must be flagged with @FlaggedApi: method android.media.soundtrigger.SoundTriggerInstrumentation.setInPhoneCallState(boolean)
+UnflaggedApi: android.media.soundtrigger.SoundTriggerManager#createManagerForModule(android.hardware.soundtrigger.SoundTrigger.ModuleProperties):
+    New API must be flagged with @FlaggedApi: method android.media.soundtrigger.SoundTriggerManager.createManagerForModule(android.hardware.soundtrigger.SoundTrigger.ModuleProperties)
+UnflaggedApi: android.media.soundtrigger.SoundTriggerManager#createManagerForTestModule():
+    New API must be flagged with @FlaggedApi: method android.media.soundtrigger.SoundTriggerManager.createManagerForTestModule()
+UnflaggedApi: android.media.soundtrigger.SoundTriggerManager#listModuleProperties():
+    New API must be flagged with @FlaggedApi: method android.media.soundtrigger.SoundTriggerManager.listModuleProperties()
+UnflaggedApi: android.media.soundtrigger.SoundTriggerManager#loadSoundModel(android.hardware.soundtrigger.SoundTrigger.SoundModel):
+    New API must be flagged with @FlaggedApi: method android.media.soundtrigger.SoundTriggerManager.loadSoundModel(android.hardware.soundtrigger.SoundTrigger.SoundModel)
+UnflaggedApi: android.media.soundtrigger.SoundTriggerManager.Model#getSoundModel():
+    New API must be flagged with @FlaggedApi: method android.media.soundtrigger.SoundTriggerManager.Model.getSoundModel()
+UnflaggedApi: android.net.wifi.sharedconnectivity.app.SharedConnectivityManager#getBroadcastReceiver():
+    New API must be flagged with @FlaggedApi: method android.net.wifi.sharedconnectivity.app.SharedConnectivityManager.getBroadcastReceiver()
+UnflaggedApi: android.os.BatteryManager#BATTERY_PLUGGED_ANY:
+    New API must be flagged with @FlaggedApi: field android.os.BatteryManager.BATTERY_PLUGGED_ANY
+UnflaggedApi: android.os.BugreportParams#BUGREPORT_MODE_MAX_VALUE:
+    New API must be flagged with @FlaggedApi: field android.os.BugreportParams.BUGREPORT_MODE_MAX_VALUE
+UnflaggedApi: android.os.PowerManager#isBatterySaverSupported():
+    New API must be flagged with @FlaggedApi: method android.os.PowerManager.isBatterySaverSupported()
+UnflaggedApi: android.os.UserHandle#USER_CURRENT:
+    New API must be flagged with @FlaggedApi: field android.os.UserHandle.USER_CURRENT
+UnflaggedApi: android.os.UserManager#getAliveUsers():
+    New API must be flagged with @FlaggedApi: method android.os.UserManager.getAliveUsers()
+UnflaggedApi: android.os.UserManager#getUsers():
+    New API must be flagged with @FlaggedApi: method android.os.UserManager.getUsers()
+UnflaggedApi: android.os.vibrator.persistence.ParsedVibration:
+    New API must be flagged with @FlaggedApi: class android.os.vibrator.persistence.ParsedVibration
+UnflaggedApi: android.os.vibrator.persistence.ParsedVibration#getVibrationEffects():
+    New API must be flagged with @FlaggedApi: method android.os.vibrator.persistence.ParsedVibration.getVibrationEffects()
+UnflaggedApi: android.os.vibrator.persistence.ParsedVibration#resolve(android.os.Vibrator):
+    New API must be flagged with @FlaggedApi: method android.os.vibrator.persistence.ParsedVibration.resolve(android.os.Vibrator)
+UnflaggedApi: android.os.vibrator.persistence.VibrationXmlParser:
+    New API must be flagged with @FlaggedApi: class android.os.vibrator.persistence.VibrationXmlParser
+UnflaggedApi: android.os.vibrator.persistence.VibrationXmlParser#parseDocument(java.io.Reader):
+    New API must be flagged with @FlaggedApi: method android.os.vibrator.persistence.VibrationXmlParser.parseDocument(java.io.Reader)
+UnflaggedApi: android.os.vibrator.persistence.VibrationXmlParser#parseVibrationEffect(java.io.Reader):
+    New API must be flagged with @FlaggedApi: method android.os.vibrator.persistence.VibrationXmlParser.parseVibrationEffect(java.io.Reader)
+UnflaggedApi: android.os.vibrator.persistence.VibrationXmlSerializer:
+    New API must be flagged with @FlaggedApi: class android.os.vibrator.persistence.VibrationXmlSerializer
+UnflaggedApi: android.os.vibrator.persistence.VibrationXmlSerializer#serialize(android.os.VibrationEffect, java.io.Writer):
+    New API must be flagged with @FlaggedApi: method android.os.vibrator.persistence.VibrationXmlSerializer.serialize(android.os.VibrationEffect,java.io.Writer)
+UnflaggedApi: android.os.vibrator.persistence.VibrationXmlSerializer.SerializationFailedException:
+    New API must be flagged with @FlaggedApi: class android.os.vibrator.persistence.VibrationXmlSerializer.SerializationFailedException
+UnflaggedApi: android.service.notification.NotificationRankingUpdate:
+    New API must be flagged with @FlaggedApi: class android.service.notification.NotificationRankingUpdate
+UnflaggedApi: android.service.notification.NotificationRankingUpdate#CONTENTS_FILE_DESCRIPTOR:
+    New API must be flagged with @FlaggedApi: field android.service.notification.NotificationRankingUpdate.CONTENTS_FILE_DESCRIPTOR
+UnflaggedApi: android.service.notification.NotificationRankingUpdate#PARCELABLE_WRITE_RETURN_VALUE:
+    New API must be flagged with @FlaggedApi: field android.service.notification.NotificationRankingUpdate.PARCELABLE_WRITE_RETURN_VALUE
+UnflaggedApi: android.service.notification.NotificationRankingUpdate#isFdNotNullAndClosed():
+    New API must be flagged with @FlaggedApi: method android.service.notification.NotificationRankingUpdate.isFdNotNullAndClosed()
+UnflaggedApi: android.telephony.TelephonyManager#HAL_SERVICE_SATELLITE:
+    New API must be flagged with @FlaggedApi: field android.telephony.TelephonyManager.HAL_SERVICE_SATELLITE
+UnflaggedApi: android.telephony.ims.feature.MmTelFeature.MmTelCapabilities:
+    New API must be flagged with @FlaggedApi: class android.telephony.ims.feature.MmTelFeature.MmTelCapabilities
+UnflaggedApi: android.text.MeasuredParagraph:
+    New API must be flagged with @FlaggedApi: class android.text.MeasuredParagraph
+UnflaggedApi: android.text.MeasuredParagraph#buildForStaticLayoutTest(android.text.TextPaint, android.graphics.text.LineBreakConfig, CharSequence, int, int, android.text.TextDirectionHeuristic, int, boolean, android.text.MeasuredParagraph.StyleRunCallback):
+    New API must be flagged with @FlaggedApi: method android.text.MeasuredParagraph.buildForStaticLayoutTest(android.text.TextPaint,android.graphics.text.LineBreakConfig,CharSequence,int,int,android.text.TextDirectionHeuristic,int,boolean,android.text.MeasuredParagraph.StyleRunCallback)
+UnflaggedApi: android.text.MeasuredParagraph.StyleRunCallback:
+    New API must be flagged with @FlaggedApi: class android.text.MeasuredParagraph.StyleRunCallback
+UnflaggedApi: android.text.MeasuredParagraph.StyleRunCallback#onAppendReplacementRun(android.graphics.Paint, int, float):
+    New API must be flagged with @FlaggedApi: method android.text.MeasuredParagraph.StyleRunCallback.onAppendReplacementRun(android.graphics.Paint,int,float)
+UnflaggedApi: android.text.MeasuredParagraph.StyleRunCallback#onAppendStyleRun(android.graphics.Paint, android.graphics.text.LineBreakConfig, int, boolean):
+    New API must be flagged with @FlaggedApi: method android.text.MeasuredParagraph.StyleRunCallback.onAppendStyleRun(android.graphics.Paint,android.graphics.text.LineBreakConfig,int,boolean)
+UnflaggedApi: android.view.Choreographer#getFrameTimeNanos():
+    New API must be flagged with @FlaggedApi: method android.view.Choreographer.getFrameTimeNanos()
+UnflaggedApi: android.view.InputDevice#getAssociatedDisplayId():
+    New API must be flagged with @FlaggedApi: method android.view.InputDevice.getAssociatedDisplayId()
+UnflaggedApi: android.view.InputDevice#getKeyboardLanguageTag():
+    New API must be flagged with @FlaggedApi: method android.view.InputDevice.getKeyboardLanguageTag()
+UnflaggedApi: android.view.InputDevice#getKeyboardLayoutType():
+    New API must be flagged with @FlaggedApi: method android.view.InputDevice.getKeyboardLayoutType()
+UnflaggedApi: android.view.MotionEvent.PointerCoords#isResampled():
+    New API must be flagged with @FlaggedApi: method android.view.MotionEvent.PointerCoords.isResampled()
+UnflaggedApi: android.view.WindowManager#replaceContentOnDisplayWithMirror(int, android.view.Window):
+    New API must be flagged with @FlaggedApi: method android.view.WindowManager.replaceContentOnDisplayWithMirror(int,android.view.Window)
+UnflaggedApi: android.view.WindowManager#replaceContentOnDisplayWithSc(int, android.view.SurfaceControl):
+    New API must be flagged with @FlaggedApi: method android.view.WindowManager.replaceContentOnDisplayWithSc(int,android.view.SurfaceControl)
+UnflaggedApi: android.view.WindowManager.LayoutParams#preferredMaxDisplayRefreshRate:
+    New API must be flagged with @FlaggedApi: field android.view.WindowManager.LayoutParams.preferredMaxDisplayRefreshRate
+UnflaggedApi: android.view.WindowManager.LayoutParams#preferredMinDisplayRefreshRate:
+    New API must be flagged with @FlaggedApi: field android.view.WindowManager.LayoutParams.preferredMinDisplayRefreshRate
+UnflaggedApi: android.view.accessibility.AccessibilityWindowInfo#UNDEFINED_WINDOW_ID:
+    New API must be flagged with @FlaggedApi: field android.view.accessibility.AccessibilityWindowInfo.UNDEFINED_WINDOW_ID
+UnflaggedApi: android.view.animation.AnimationUtils#lockAnimationClock(long, long):
+    New API must be flagged with @FlaggedApi: method android.view.animation.AnimationUtils.lockAnimationClock(long,long)
+UnflaggedApi: android.view.inputmethod.InputMethodManager#getEnabledInputMethodListAsUser(android.os.UserHandle):
+    New API must be flagged with @FlaggedApi: method android.view.inputmethod.InputMethodManager.getEnabledInputMethodListAsUser(android.os.UserHandle)
+UnflaggedApi: android.view.inputmethod.InputMethodManager#getEnabledInputMethodSubtypeListAsUser(String, boolean, android.os.UserHandle):
+    New API must be flagged with @FlaggedApi: method android.view.inputmethod.InputMethodManager.getEnabledInputMethodSubtypeListAsUser(String,boolean,android.os.UserHandle)
+UnflaggedApi: android.view.inputmethod.InputMethodManager#isCurrentRootView(android.view.View):
+    New API must be flagged with @FlaggedApi: method android.view.inputmethod.InputMethodManager.isCurrentRootView(android.view.View)
+UnflaggedApi: android.view.inputmethod.InputMethodManager#isStylusHandwritingAvailableAsUser(android.os.UserHandle):
+    New API must be flagged with @FlaggedApi: method android.view.inputmethod.InputMethodManager.isStylusHandwritingAvailableAsUser(android.os.UserHandle)
+UnflaggedApi: android.view.inputmethod.InsertModeGesture:
+    New API must be flagged with @FlaggedApi: class android.view.inputmethod.InsertModeGesture
+UnflaggedApi: android.window.WindowInfosListenerForTest.WindowInfo#displayId:
+    New API must be flagged with @FlaggedApi: field android.window.WindowInfosListenerForTest.WindowInfo.displayId
+UnflaggedApi: android.window.WindowInfosListenerForTest.WindowInfo#isVisible:
+    New API must be flagged with @FlaggedApi: field android.window.WindowInfosListenerForTest.WindowInfo.isVisible
+UnflaggedApi: android.window.WindowInfosListenerForTest.WindowInfo#transform:
+    New API must be flagged with @FlaggedApi: field android.window.WindowInfosListenerForTest.WindowInfo.transform
diff --git a/core/java/android/app/TEST_MAPPING b/core/java/android/app/TEST_MAPPING
index 06e1b5b..93107ce 100644
--- a/core/java/android/app/TEST_MAPPING
+++ b/core/java/android/app/TEST_MAPPING
@@ -350,21 +350,6 @@
             "file_patterns": ["(/|^)ContextImpl.java"]
         },
         {
-            "name": "CtsWindowManagerDeviceScvh",
-            "options": [
-                {
-                    "exclude-annotation": "androidx.test.filters.FlakyTest"
-                },
-                {
-                    "exclude-annotation": "org.junit.Ignore"
-                },
-                {
-                    "include-filter": "android.content.wm.cts"
-                }
-            ],
-            "file_patterns": ["(/|^)ContextImpl.java"]
-        },
-        {
             "name": "CtsWindowManagerDeviceWindow",
             "options": [
                 {
diff --git a/core/java/android/credentials/CredentialManager.java b/core/java/android/credentials/CredentialManager.java
index 408869e..20771af 100644
--- a/core/java/android/credentials/CredentialManager.java
+++ b/core/java/android/credentials/CredentialManager.java
@@ -131,15 +131,35 @@
     @Hide
     public void getCandidateCredentials(
             @NonNull GetCredentialRequest request,
+            @NonNull String callingPackage,
             @Nullable CancellationSignal cancellationSignal,
             @CallbackExecutor @NonNull Executor executor,
-            @NonNull OutcomeReceiver<GetCredentialResponse, GetCredentialException> callback) {
+            @NonNull OutcomeReceiver<GetCandidateCredentialsResponse,
+                    GetCandidateCredentialsException> callback
+    ) {
         requireNonNull(request, "request must not be null");
+        requireNonNull(callingPackage, "callingPackage must not be null");
         requireNonNull(executor, "executor must not be null");
         requireNonNull(callback, "callback must not be null");
 
         if (cancellationSignal != null && cancellationSignal.isCanceled()) {
-            Log.w(TAG, "getCredential already canceled");
+            Log.w(TAG, "getCandidateCredentials already canceled");
+            return;
+        }
+
+        ICancellationSignal cancelRemote = null;
+        try {
+            cancelRemote =
+                    mService.getCandidateCredentials(
+                            request,
+                            new GetCandidateCredentialsTransport(executor, callback),
+                            mContext.getOpPackageName());
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+
+        if (cancellationSignal != null && cancelRemote != null) {
+            cancellationSignal.setRemote(cancelRemote);
         }
     }
 
diff --git a/core/java/android/credentials/GetCandidateCredentialsResponse.java b/core/java/android/credentials/GetCandidateCredentialsResponse.java
index 1d649eb..231e4bc 100644
--- a/core/java/android/credentials/GetCandidateCredentialsResponse.java
+++ b/core/java/android/credentials/GetCandidateCredentialsResponse.java
@@ -17,9 +17,17 @@
 package android.credentials;
 
 import android.annotation.Hide;
+import android.annotation.NonNull;
+import android.credentials.ui.GetCredentialProviderData;
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import com.android.internal.util.AnnotationValidations;
+import com.android.internal.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * A list of candidate credentials.
  *
@@ -28,11 +36,34 @@
 @Hide
 public final class GetCandidateCredentialsResponse implements Parcelable {
     // TODO(b/299321990): Add members
+
+    @NonNull
+    private final List<GetCredentialProviderData> mCandidateProviderDataList;
+
+    /**
+     * @hide
+     */
+    @Hide
+    public GetCandidateCredentialsResponse(
+            List<GetCredentialProviderData> candidateProviderDataList
+    ) {
+        Preconditions.checkCollectionNotEmpty(
+                candidateProviderDataList,
+                /*valueName=*/ "candidateProviderDataList");
+        mCandidateProviderDataList = new ArrayList<>(candidateProviderDataList);
+    }
+
     protected GetCandidateCredentialsResponse(Parcel in) {
+        List<GetCredentialProviderData> candidateProviderDataList = new ArrayList<>();
+        in.readTypedList(candidateProviderDataList, GetCredentialProviderData.CREATOR);
+        mCandidateProviderDataList = candidateProviderDataList;
+
+        AnnotationValidations.validate(NonNull.class, null, mCandidateProviderDataList);
     }
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
+        dest.writeTypedList(mCandidateProviderDataList);
     }
 
     @Override
@@ -41,7 +72,7 @@
     }
 
     public static final Creator<GetCandidateCredentialsResponse> CREATOR =
-            new Creator<GetCandidateCredentialsResponse>() {
+            new Creator<>() {
                 @Override
                 public GetCandidateCredentialsResponse createFromParcel(Parcel in) {
                     return new GetCandidateCredentialsResponse(in);
diff --git a/core/java/android/credentials/ICredentialManager.aidl b/core/java/android/credentials/ICredentialManager.aidl
index 42323d6..d081576 100644
--- a/core/java/android/credentials/ICredentialManager.aidl
+++ b/core/java/android/credentials/ICredentialManager.aidl
@@ -47,7 +47,7 @@
 
     @nullable ICancellationSignal executeCreateCredential(in CreateCredentialRequest request, in ICreateCredentialCallback callback, String callingPackage);
 
-    @nullable ICancellationSignal getCandidateCredentials(in GetCandidateCredentialsRequest request, in IGetCandidateCredentialsCallback callback, String callingPackage);
+    @nullable ICancellationSignal getCandidateCredentials(in GetCredentialRequest request, in IGetCandidateCredentialsCallback callback, String callingPackage);
 
     @nullable ICancellationSignal clearCredentialState(in ClearCredentialStateRequest request, in IClearCredentialStateCallback callback, String callingPackage);
 
diff --git a/core/java/android/inputmethodservice/SoftInputWindow.java b/core/java/android/inputmethodservice/SoftInputWindow.java
index 7f6ec58..cf47786 100644
--- a/core/java/android/inputmethodservice/SoftInputWindow.java
+++ b/core/java/android/inputmethodservice/SoftInputWindow.java
@@ -16,14 +16,12 @@
 
 package android.inputmethodservice;
 
-import static android.inputmethodservice.SoftInputWindowProto.BOUNDS;
 import static android.inputmethodservice.SoftInputWindowProto.WINDOW_STATE;
 
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
 import android.annotation.IntDef;
 import android.app.Dialog;
-import android.graphics.Rect;
 import android.os.Debug;
 import android.os.IBinder;
 import android.util.Log;
@@ -45,7 +43,6 @@
     private static final String TAG = "SoftInputWindow";
 
     private final KeyEvent.DispatcherState mDispatcherState;
-    private final Rect mBounds = new Rect();
     private final InputMethodService mService;
 
     @Retention(SOURCE)
@@ -150,22 +147,6 @@
     }
 
     @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        getWindow().getDecorView().getHitRect(mBounds);
-
-        if (ev.isWithinBoundsNoHistory(mBounds.left, mBounds.top,
-                mBounds.right - 1, mBounds.bottom - 1)) {
-            return super.dispatchTouchEvent(ev);
-        } else {
-            MotionEvent temp = ev.clampNoHistory(mBounds.left, mBounds.top,
-                    mBounds.right - 1, mBounds.bottom - 1);
-            boolean handled = super.dispatchTouchEvent(temp);
-            temp.recycle();
-            return handled;
-        }
-    }
-
-    @Override
     public void show() {
         switch (mWindowState) {
             case WindowState.TOKEN_PENDING:
@@ -273,7 +254,6 @@
 
     void dumpDebug(ProtoOutputStream proto, long fieldId) {
         final long token = proto.start(fieldId);
-        mBounds.dumpDebug(proto, BOUNDS);
         proto.write(WINDOW_STATE, mWindowState);
         proto.end(token);
     }
diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java
index f40efc8..218d4bb 100644
--- a/core/java/android/os/Binder.java
+++ b/core/java/android/os/Binder.java
@@ -186,6 +186,8 @@
     /**
      * Get the binder transaction observer for this process.
      *
+     * TODO(b/299356196): only applies to Java code, not C++/Rust
+     *
      * @hide
      */
     public static void setObserver(@Nullable BinderInternal.Observer observer) {
@@ -202,6 +204,8 @@
      * that require a result must be sent as {@link IBinder#FLAG_ONEWAY} calls
      * which deliver results through a callback interface.
      *
+     * TODO(b/299355525): only applies to Java code, not C++/Rust
+     *
      * @hide
      */
     public static void setWarnOnBlocking(boolean warnOnBlocking) {
@@ -218,6 +222,8 @@
      * interfaces hosted by package that could be upgraded or replaced,
      * otherwise you risk system instability if that remote interface wedges.
      *
+     * TODO(b/299355525): only applies to Java code, not C++/Rust
+     *
      * @hide
      */
     public static IBinder allowBlocking(IBinder binder) {
@@ -1307,6 +1313,8 @@
             int callingUid) {
         // Make sure the observer won't change while processing a transaction.
         final BinderInternal.Observer observer = sObserver;
+
+        // TODO(b/299356196): observer should also observe transactions in native code
         final CallSession callSession =
                 observer != null ? observer.callStarted(this, code, UNSET_WORKSOURCE) : null;
         // Theoretically, we should call transact, which will call onTransact,
@@ -1329,7 +1337,7 @@
 
         final boolean tracingEnabled = tagEnabled && transactionTraceName != null;
         try {
-            // TODO - this logic should not be in Java - it should be in native
+            // TODO(b/299356201) - this logic should not be in Java - it should be in native
             // code in libbinder so that it works for all binder users.
             final BinderCallHeavyHitterWatcher heavyHitterWatcher = sHeavyHitterWatcher;
             if (heavyHitterWatcher != null && callingUid != -1) {
@@ -1340,9 +1348,9 @@
                 Trace.traceBegin(Trace.TRACE_TAG_AIDL, transactionTraceName);
             }
 
-            // TODO - this logic should not be in Java - it should be in native
-            // code in libbinder so that it works for all binder users. Further,
-            // this should not re-use flags.
+            // TODO(b/299353919) - this logic should not be in Java - it should be
+            // in native code in libbinder so that it works for all binder users.
+            // Further, this should not re-use flags.
             if ((flags & FLAG_COLLECT_NOTED_APP_OPS) != 0 && callingUid != -1) {
                 AppOpsManager.startNotedAppOpsCollection(callingUid);
                 try {
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 7e71134f..c19c20c 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3596,12 +3596,9 @@
                 }
 
                 Bundle b;
-                // b/252663068: if we're in system server and the caller did not call
+                // If we're in system server and the caller did not call
                 // clearCallingIdentity, the read would fail due to mismatched AttributionSources.
-                // TODO(b/256013480): remove this bypass after fixing the callers in system server.
-                if (namespace.equals(DeviceConfig.NAMESPACE_DEVICE_POLICY_MANAGER)
-                        && Settings.isInSystemServer()
-                        && Binder.getCallingUid() != Process.myUid()) {
+                if (Settings.isInSystemServer() && Binder.getCallingUid() != Process.myUid()) {
                     final long token = Binder.clearCallingIdentity();
                     try {
                         // Fetch all flags for the namespace at once for caching purposes
diff --git a/core/java/android/security/flags.aconfig b/core/java/android/security/flags.aconfig
index cfc6f48..800149c 100644
--- a/core/java/android/security/flags.aconfig
+++ b/core/java/android/security/flags.aconfig
@@ -20,3 +20,11 @@
     description: "Feature flag for deprecating .fsv_sig"
     bug: "277916185"
 }
+
+flag {
+    name: "extend_vb_chain_to_updated_apk"
+    namespace: "hardware_backed_security"
+    description: "Use v4 signature and fs-verity to chain verification of allowlisted APKs to Verified Boot"
+    bug: "277916185"
+    is_fixed_read_only: true
+}
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index 776eeda..cdf5eec3 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -18,6 +18,7 @@
 
 import static android.os.IInputConstants.INPUT_EVENT_FLAG_IS_ACCESSIBILITY_EVENT;
 import static android.view.Display.DEFAULT_DISPLAY;
+
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
 import android.annotation.IntDef;
@@ -4360,17 +4361,6 @@
         public boolean isResampled;
 
         /**
-         * Returns true if this pointer coords object was generated by resampling, rather than from
-         * an actual input event from the device at this time.
-         *
-         * @hide
-         */
-        @TestApi
-        public boolean isResampled() {
-            return isResampled;
-        }
-
-        /**
          * Clears the contents of this object.
          * Resets all axes to zero.
          */
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index fe515cd..f7f3957 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -3752,7 +3752,15 @@
                         && !child.isActivityDeniedForAutofillForUnimportantView())
                     || (shouldIncludeAllChildrenViewWithAutofillTypeNotNone(afm)
                         && child.getAutofillType() != AUTOFILL_TYPE_NONE)
-                    || shouldIncludeAllChildrenViews(afm)){
+                    || shouldIncludeAllChildrenViews(afm)
+                    || (child instanceof ViewGroup && child.getVisibility() != View.VISIBLE)) {
+                // If the child is a ViewGroup object and its visibility is not visible, include
+                // it as part of the assist structure. The children of these invisible ViewGroup
+                // objects are parsed and included in the assist structure. When the Autofill
+                // Provider determines the visibility of these children, it looks at their
+                // visibility as well as their parent's visibility. Omitting invisible parents
+                // will lead to the Autofill Provider incorrectly assuming that these children
+                // of invisible parents are actually visible.
                 list.add(child);
             } else if (child instanceof ViewGroup) {
                 ((ViewGroup) child).populateChildrenForAutofill(list, flags);
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index d191ccd..ff6165b 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -461,6 +461,9 @@
     @NonNull Display mDisplay;
     final String mBasePackageName;
 
+    // If we would like to keep a particular eye on the corresponding package.
+    final boolean mExtraDisplayListenerLogging;
+
     final int[] mTmpLocation = new int[2];
 
     final TypedValue mTmpValue = new TypedValue();
@@ -1010,6 +1013,8 @@
         mWindowLayout = windowLayout;
         mDisplay = display;
         mBasePackageName = context.getBasePackageName();
+        final String name = DisplayProperties.debug_vri_package().orElse(null);
+        mExtraDisplayListenerLogging = !TextUtils.isEmpty(name) && name.equals(mBasePackageName);
         mThread = Thread.currentThread();
         mLocation = new WindowLeaked(null);
         mLocation.fillInStackTrace();
@@ -1444,6 +1449,10 @@
                 // We should update mAttachInfo.mDisplayState after registerDisplayListener
                 // because displayState might be changed before registerDisplayListener.
                 mAttachInfo.mDisplayState = mDisplay.getState();
+                if (mExtraDisplayListenerLogging) {
+                    Slog.i(mTag, "(" + mBasePackageName + ") Initial DisplayState: "
+                            + mAttachInfo.mDisplayState, new Throwable());
+                }
                 if ((res & WindowManagerGlobal.ADD_FLAG_USE_BLAST) != 0) {
                     mUseBLASTAdapter = true;
                 }
@@ -1528,6 +1537,9 @@
      * Register any kind of listeners if setView was success.
      */
     private void registerListeners() {
+        if (mExtraDisplayListenerLogging) {
+            Slog.i(mTag, "Register listeners: " + mBasePackageName);
+        }
         mAccessibilityManager.addAccessibilityStateChangeListener(
                 mAccessibilityInteractionConnectionManager, mHandler);
         mAccessibilityManager.addHighTextContrastStateChangeListener(
@@ -1553,6 +1565,9 @@
         DisplayManagerGlobal
                 .getInstance()
                 .unregisterDisplayListener(mDisplayListener);
+        if (mExtraDisplayListenerLogging) {
+            Slog.w(mTag, "Unregister listeners: " + mBasePackageName, new Throwable());
+        }
     }
 
     private void setTag() {
@@ -1960,9 +1975,16 @@
     private final DisplayListener mDisplayListener = new DisplayListener() {
         @Override
         public void onDisplayChanged(int displayId) {
+            if (mExtraDisplayListenerLogging) {
+                Slog.i(mTag, "Received onDisplayChanged - " + mView);
+            }
             if (mView != null && mDisplay.getDisplayId() == displayId) {
                 final int oldDisplayState = mAttachInfo.mDisplayState;
                 final int newDisplayState = mDisplay.getState();
+                if (mExtraDisplayListenerLogging) {
+                    Slog.i(mTag, "DisplayState - old: " + oldDisplayState
+                            + ", new: " + newDisplayState);
+                }
                 if (oldDisplayState != newDisplayState) {
                     mAttachInfo.mDisplayState = newDisplayState;
                     pokeDrawLockIfNeeded();
@@ -3995,8 +4017,6 @@
             mWindowFocusChanged = false;
             hasWindowFocus = mUpcomingWindowFocus;
         }
-        // TODO (b/131181940): Make sure this doesn't leak Activity with mActivityConfigCallback
-        // config changes.
         if (hasWindowFocus) {
             mInsetsController.onWindowFocusGained(
                     getFocusedViewOrNull() != null /* hasViewFocused */);
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 05063365..a0d0656 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -27,6 +27,7 @@
 import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX;
 import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY;
 import static android.view.inputmethod.CursorAnchorInfo.FLAG_HAS_VISIBLE_REGION;
+
 import static com.android.text.flags.Flags.FLAG_USE_BOUNDS_FOR_WIDTH;
 
 import android.R;
@@ -240,7 +241,6 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FastMath;
 import com.android.internal.util.Preconditions;
-import com.android.text.flags.Flags;
 
 import libcore.util.EmptyArray;
 
@@ -1634,7 +1634,7 @@
         }
 
         if (CompatChanges.isChangeEnabled(USE_BOUNDS_FOR_WIDTH)) {
-            mUseBoundsForWidth = Flags.useBoundsForWidth();
+            mUseBoundsForWidth = false;  // TODO: Connect to the flag.
         } else {
             mUseBoundsForWidth = false;
         }
@@ -14151,7 +14151,8 @@
                             selectionStart, OffsetMapping.MAP_STRATEGY_CURSOR);
                     final int line = layout.getLineForOffset(offsetTransformed);
                     final float insertionMarkerX =
-                            layout.getPrimaryHorizontal(offsetTransformed)
+                            layout.getPrimaryHorizontal(
+                                            offsetTransformed, layout.shouldClampCursor(line))
                                     + viewportToContentHorizontalOffset;
                     final float insertionMarkerTop = layout.getLineTop(line)
                             + viewportToContentVerticalOffset;
diff --git a/core/proto/android/inputmethodservice/softinputwindow.proto b/core/proto/android/inputmethodservice/softinputwindow.proto
index e0ba6bf..32d14f0 100644
--- a/core/proto/android/inputmethodservice/softinputwindow.proto
+++ b/core/proto/android/inputmethodservice/softinputwindow.proto
@@ -27,6 +27,6 @@
     reserved 2;  // window_type
     reserved 3;  // gravity
     reserved 4;  // takes_focus
-    optional .android.graphics.RectProto bounds = 5;
+    reserved 5;  // bounds
     optional int32 window_state = 6;
 }
\ No newline at end of file
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index d09bf44..9ffd17f 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -5451,6 +5451,10 @@
          to enroll the other eligible biometric. -->
     <fraction name="config_biometricNotificationFrrThreshold">25%</fraction>
 
+    <!-- Whether to enable the biometric notification for dual-modality device that enrolled a
+         single biometric and experiences high FRR. -->
+    <bool name="config_biometricFrrNotificationEnabled">false</bool>
+
     <!-- The component name for the default profile supervisor, which can be set as a profile owner
     even after user setup is complete. The defined component should be used for supervision purposes
     only. The component must be part of a system app. -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 7f1a6f9..fe11449 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2604,6 +2604,7 @@
 
   <!-- Biometric FRR config -->
   <java-symbol type="fraction" name="config_biometricNotificationFrrThreshold" />
+  <java-symbol type="bool" name="config_biometricFrrNotificationEnabled" />
 
   <!-- Biometric FRR notification messages -->
   <java-symbol type="string" name="device_unlock_notification_name" />
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
index a5ee19e..cdfc4c8 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
@@ -879,14 +879,12 @@
 
         // Skip resolving if the activity is on a pinned TaskFragmentContainer.
         // TODO(b/243518738): skip resolving for overlay container.
-        if (container != null) {
-            final TaskContainer taskContainer = container.getTaskContainer();
-            if (taskContainer.isTaskFragmentContainerPinned(container)) {
-                return true;
-            }
+        final TaskContainer taskContainer = container != null ? container.getTaskContainer() : null;
+        if (container != null && taskContainer != null
+                && taskContainer.isTaskFragmentContainerPinned(container)) {
+            return true;
         }
 
-        final TaskContainer taskContainer = container != null ? container.getTaskContainer() : null;
         if (!isOnReparent && taskContainer != null
                 && taskContainer.getTopNonFinishingTaskFragmentContainer(false /* includePin */)
                         != container) {
@@ -895,6 +893,28 @@
             return true;
         }
 
+        // Ensure the top TaskFragments are updated to the right config if activity is resolved
+        // to a new TaskFragment while pin TF exists.
+        final boolean handled = resolveActivityToContainerByRule(wct, activity, container,
+                isOnReparent);
+        if (handled && taskContainer != null) {
+            final SplitPinContainer splitPinContainer = taskContainer.getSplitPinContainer();
+            if (splitPinContainer != null) {
+                final TaskFragmentContainer resolvedContainer = getContainerWithActivity(activity);
+                if (resolvedContainer != null && resolvedContainer.getRunningActivityCount() <= 1) {
+                    updateContainer(wct, splitPinContainer.getSecondaryContainer());
+                }
+            }
+        }
+        return handled;
+    }
+
+    /**
+     * Resolves the activity to a {@link TaskFragmentContainer} according to the Split-rules.
+     */
+    boolean resolveActivityToContainerByRule(@NonNull WindowContainerTransaction wct,
+            @NonNull Activity activity, @Nullable TaskFragmentContainer container,
+            boolean isOnReparent) {
         /*
          * We will check the following to see if there is any embedding rule matched:
          * 1. Whether the new launched activity should always expand.
@@ -1301,6 +1321,26 @@
             }
         }
 
+        // Ensure the top TaskFragments are updated to the right config if the intent is resolved
+        // to a new TaskFragment while pin TF exists.
+        final TaskFragmentContainer launchingContainer = resolveStartActivityIntentByRule(wct,
+                taskId, intent, launchingActivity);
+        if (launchingContainer != null && launchingContainer.getRunningActivityCount() == 0) {
+            final SplitPinContainer splitPinContainer =
+                    launchingContainer.getTaskContainer().getSplitPinContainer();
+            if (splitPinContainer != null) {
+                updateContainer(wct, splitPinContainer.getSecondaryContainer());
+            }
+        }
+        return launchingContainer;
+    }
+
+    /**
+     * Resolves the intent to a {@link TaskFragmentContainer} according to the Split-rules.
+     */
+    @Nullable
+    TaskFragmentContainer resolveStartActivityIntentByRule(@NonNull WindowContainerTransaction wct,
+            int taskId, @NonNull Intent intent, @Nullable Activity launchingActivity) {
         /*
          * We will check the following to see if there is any embedding rule matched:
          * 1. Whether the new activity intent should always expand.
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java
index 66e6930..39e3180 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java
@@ -257,8 +257,16 @@
             return false;
         }
 
-        // Badged bubble image
-        Drawable bubbleDrawable = iconFactory.getBubbleDrawable(c, info.shortcutInfo, b.getIcon());
+        Drawable bubbleDrawable = null;
+        try {
+            // Badged bubble image
+            bubbleDrawable = iconFactory.getBubbleDrawable(c, info.shortcutInfo,
+                    b.getIcon());
+        } catch (Exception e) {
+            // If we can't create the icon we'll default to the app icon
+            Log.w(TAG, "Exception creating icon for the bubble: " + b.getKey());
+        }
+
         if (bubbleDrawable == null) {
             // Default to app icon
             bubbleDrawable = appIcon;
@@ -268,7 +276,7 @@
                 b.isImportantConversation());
         info.badgeBitmap = badgeBitmapInfo.icon;
         // Raw badge bitmap never includes the important conversation ring
-        info.rawBadgeBitmap = b.isImportantConversation() // is this needed for bar?
+        info.rawBadgeBitmap = b.isImportantConversation()
                 ? iconFactory.getBadgeBitmap(badgedIcon, false).icon
                 : badgeBitmapInfo.icon;
 
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
index dbff20e..b81a415 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
@@ -56,6 +56,7 @@
 
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Supplier;
 
 /**
  * Defines visuals and behaviors of a window decoration of a caption bar and shadows. It works with
@@ -109,7 +110,30 @@
             Choreographer choreographer,
             SyncTransactionQueue syncQueue,
             RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
-        super(context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig);
+        this (context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig,
+                handler, choreographer, syncQueue, rootTaskDisplayAreaOrganizer,
+                SurfaceControl.Builder::new, SurfaceControl.Transaction::new,
+                WindowContainerTransaction::new, new SurfaceControlViewHostFactory() {});
+    }
+
+    DesktopModeWindowDecoration(
+            Context context,
+            DisplayController displayController,
+            ShellTaskOrganizer taskOrganizer,
+            ActivityManager.RunningTaskInfo taskInfo,
+            SurfaceControl taskSurface,
+            Configuration windowDecorConfig,
+            Handler handler,
+            Choreographer choreographer,
+            SyncTransactionQueue syncQueue,
+            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
+            Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
+            Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier,
+            Supplier<WindowContainerTransaction> windowContainerTransactionSupplier,
+            SurfaceControlViewHostFactory surfaceControlViewHostFactory) {
+        super(context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig,
+                surfaceControlBuilderSupplier, surfaceControlTransactionSupplier,
+                windowContainerTransactionSupplier, surfaceControlViewHostFactory);
 
         mHandler = handler;
         mChoreographer = choreographer;
@@ -150,7 +174,7 @@
             return;
         }
 
-        final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+        final SurfaceControl.Transaction t = mSurfaceControlTransactionSupplier.get();
         // Use |applyStartTransactionOnDraw| so that the transaction (that applies task crop) is
         // synced with the buffer transaction (that draws the View). Both will be shown on screen
         // at the same, whereas applying them independently causes flickering. See b/270202228.
@@ -183,10 +207,20 @@
         mRelayoutParams.mCaptionHeightId = getCaptionHeightId();
         mRelayoutParams.mShadowRadiusId = shadowRadiusID;
         mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw;
-
-        mRelayoutParams.mWindowDecorConfig = DesktopTasksController.isDesktopDensityOverrideSet()
-                ? mContext.getResources().getConfiguration() // Use system context
-                : mTaskInfo.configuration; // Use task configuration
+        // The configuration used to lay out the window decoration. The system context's config is
+        // used when the task density has been overridden to a custom density so that the resources
+        // and views of the decoration aren't affected and match the rest of the System UI, if not
+        // then just use the task's configuration. A copy is made instead of using the original
+        // reference so that the configuration isn't mutated on config changes and diff checks can
+        // be made in WindowDecoration#relayout using the pre/post-relayout configuration.
+        // See b/301119301.
+        // TODO(b/301119301): consider moving the config data needed for diffs to relayout params
+        // instead of using a whole Configuration as a parameter.
+        final Configuration windowDecorConfig = new Configuration();
+        windowDecorConfig.setTo(DesktopTasksController.isDesktopDensityOverrideSet()
+                ? mContext.getResources().getConfiguration() // Use system context.
+                : mTaskInfo.configuration); // Use task configuration.
+        mRelayoutParams.mWindowDecorConfig = windowDecorConfig;
 
         mRelayoutParams.mCornerRadius =
                 (int) ScreenDecorationsUtils.getWindowCornerRadius(mContext);
@@ -442,6 +476,7 @@
     @Override
     void releaseViews() {
         closeHandleMenu();
+        closeMaximizeMenu();
         super.releaseViews();
     }
 
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
index a269275..2d5ef72 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
@@ -196,7 +196,8 @@
         final int oldDensityDpi = mWindowDecorConfig.densityDpi;
         mWindowDecorConfig = params.mWindowDecorConfig != null ? params.mWindowDecorConfig
                 : mTaskInfo.getConfiguration();
-        if (oldDensityDpi != mWindowDecorConfig.densityDpi
+        final int newDensityDpi = mWindowDecorConfig.densityDpi;
+        if (oldDensityDpi != newDensityDpi
                 || mDisplay == null
                 || mDisplay.getDisplayId() != mTaskInfo.displayId
                 || oldLayoutResId != mLayoutResId) {
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipFromSplitScreenOnGoToHomeTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipFromSplitScreenOnGoToHomeTest.kt
index 2bd6d57..b86c98e 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipFromSplitScreenOnGoToHomeTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipFromSplitScreenOnGoToHomeTest.kt
@@ -139,6 +139,7 @@
         @JvmStatic
         fun getParams() =
             LegacyFlickerTestFactory.nonRotationTests(
+                supportedRotations = listOf(Rotation.ROTATION_0),
                 // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy.
                 supportedNavigationModes = listOf(NavBar.MODE_GESTURAL)
             )
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorationTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorationTests.java
new file mode 100644
index 0000000..a2dbab1
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorationTests.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.windowdecor;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.app.ActivityManager;
+import android.content.ComponentName;
+import android.content.res.Configuration;
+import android.os.Handler;
+import android.testing.AndroidTestingRunner;
+import android.view.Choreographer;
+import android.view.Display;
+import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
+import android.window.WindowContainerTransaction;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.TestRunningTaskInfoBuilder;
+import com.android.wm.shell.common.DisplayController;
+import com.android.wm.shell.common.SyncTransactionQueue;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+
+import java.util.function.Supplier;
+
+/**
+ * Tests for {@link DesktopModeWindowDecoration}.
+ *
+ * Build/Install/Run:
+ * atest WMShellUnitTests:DesktopModeWindowDecorationTests
+ */
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+public class DesktopModeWindowDecorationTests extends ShellTestCase {
+    @Mock
+    private DisplayController mMockDisplayController;
+    @Mock
+    private ShellTaskOrganizer mMockShellTaskOrganizer;
+    @Mock
+    private Handler mMockHandler;
+    @Mock
+    private Choreographer mMockChoreographer;
+    @Mock
+    private SyncTransactionQueue mMockSyncQueue;
+    @Mock
+    private RootTaskDisplayAreaOrganizer mMockRootTaskDisplayAreaOrganizer;
+    @Mock
+    private Supplier<SurfaceControl.Transaction> mMockTransactionSupplier;
+    @Mock
+    private SurfaceControl.Transaction mMockTransaction;
+    @Mock
+    private SurfaceControl mMockSurfaceControl;
+    @Mock
+    private SurfaceControlViewHost mMockSurfaceControlViewHost;
+    @Mock
+    private WindowDecoration.SurfaceControlViewHostFactory mMockSurfaceControlViewHostFactory;
+
+    private final Configuration mConfiguration = new Configuration();
+
+    @Before
+    public void setUp() {
+        doReturn(mMockSurfaceControlViewHost).when(mMockSurfaceControlViewHostFactory).create(
+                any(), any(), any());
+        doReturn(mMockTransaction).when(mMockTransactionSupplier).get();
+    }
+
+    @Test
+    public void testMenusClosedWhenTaskIsInvisible() {
+        doReturn(mMockTransaction).when(mMockTransaction).hide(any());
+
+        final ActivityManager.RunningTaskInfo taskInfo = createTaskInfo(false /* visible */);
+        final DesktopModeWindowDecoration spyWindowDecor =
+                spy(createWindowDecoration(taskInfo));
+
+        spyWindowDecor.relayout(taskInfo);
+
+        // Menus should close if open before the task being invisible causes relayout to return.
+        verify(spyWindowDecor).closeHandleMenu();
+        verify(spyWindowDecor).closeMaximizeMenu();
+
+    }
+
+    private DesktopModeWindowDecoration createWindowDecoration(
+            ActivityManager.RunningTaskInfo taskInfo) {
+        return new DesktopModeWindowDecoration(mContext, mMockDisplayController,
+                mMockShellTaskOrganizer, taskInfo, mMockSurfaceControl, mConfiguration,
+                mMockHandler, mMockChoreographer, mMockSyncQueue, mMockRootTaskDisplayAreaOrganizer,
+                SurfaceControl.Builder::new, mMockTransactionSupplier,
+                WindowContainerTransaction::new, mMockSurfaceControlViewHostFactory);
+    }
+
+    private ActivityManager.RunningTaskInfo createTaskInfo(boolean visible) {
+        final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
+                new ActivityManager.TaskDescription.Builder();
+        ActivityManager.RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setDisplayId(Display.DEFAULT_DISPLAY)
+                .setTaskDescriptionBuilder(taskDescriptionBuilder)
+                .setVisible(visible)
+                .build();
+        taskInfo.realActivity = new ComponentName("com.android.wm.shell.windowdecor",
+                "DesktopModeWindowDecorationTests");
+        taskInfo.baseActivity = new ComponentName("com.android.wm.shell.windowdecor",
+                "DesktopModeWindowDecorationTests");
+        return taskInfo;
+
+    }
+}
diff --git a/packages/CredentialManager/Android.bp b/packages/CredentialManager/Android.bp
index 233aee2..fe26dc3 100644
--- a/packages/CredentialManager/Android.bp
+++ b/packages/CredentialManager/Android.bp
@@ -50,46 +50,3 @@
         proguard_compatibility: false,
     },
 }
-
-android_app {
-    name: "ClockworkCredentialManager",
-    defaults: ["platform_app_defaults"],
-    certificate: "platform",
-    manifest: "wear/AndroidManifest.xml",
-    srcs: ["wear/src/**/*.kt"],
-    resource_dirs: ["wear/res"],
-
-    dex_preopt: {
-        profile_guided: true,
-        profile: "wear/profile.txt.prof",
-    },
-
-    static_libs: [
-        "PlatformComposeCore",
-        "androidx.activity_activity-compose",
-        "androidx.appcompat_appcompat",
-        "androidx.compose.foundation_foundation",
-        "androidx.compose.foundation_foundation-layout",
-        "androidx.compose.material_material-icons-core",
-        "androidx.compose.material_material-icons-extended",
-        "androidx.compose.ui_ui",
-        "androidx.core_core-ktx",
-        "androidx.credentials_credentials",
-        "androidx.lifecycle_lifecycle-extensions",
-        "androidx.lifecycle_lifecycle-livedata",
-        "androidx.lifecycle_lifecycle-runtime-ktx",
-        "androidx.lifecycle_lifecycle-viewmodel-compose",
-        "androidx.wear.compose_compose-foundation",
-        "androidx.wear.compose_compose-material",
-        "kotlinx-coroutines-core",
-    ],
-
-    platform_apis: true,
-    privileged: true,
-
-    kotlincflags: ["-Xjvm-default=all"],
-
-    optimize: {
-        proguard_compatibility: false,
-    },
-}
diff --git a/packages/CredentialManager/wear/Android.bp b/packages/CredentialManager/wear/Android.bp
new file mode 100644
index 0000000..639e8d1
--- /dev/null
+++ b/packages/CredentialManager/wear/Android.bp
@@ -0,0 +1,53 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "frameworks_base_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_app {
+    name: "ClockworkCredentialManager",
+    defaults: ["platform_app_defaults"],
+    certificate: "platform",
+    manifest: "AndroidManifest.xml",
+    srcs: ["src/**/*.kt"],
+    resource_dirs: ["res"],
+
+    dex_preopt: {
+        profile_guided: true,
+        profile: "profile.txt.prof",
+    },
+
+    static_libs: [
+        "Horologist",
+        "PlatformComposeCore",
+        "androidx.activity_activity-compose",
+        "androidx.appcompat_appcompat",
+        "androidx.compose.foundation_foundation",
+        "androidx.compose.foundation_foundation-layout",
+        "androidx.compose.material_material-icons-core",
+        "androidx.compose.material_material-icons-extended",
+        "androidx.compose.runtime_runtime",
+        "androidx.compose.ui_ui",
+        "androidx.core_core-ktx",
+        "androidx.lifecycle_lifecycle-extensions",
+        "androidx.lifecycle_lifecycle-livedata",
+        "androidx.lifecycle_lifecycle-runtime-ktx",
+        "androidx.lifecycle_lifecycle-viewmodel-compose",
+        "androidx.wear.compose_compose-foundation",
+        "androidx.wear.compose_compose-material",
+        "androidx.wear.compose_compose-navigation",
+        "kotlinx-coroutines-core",
+    ],
+
+    platform_apis: true,
+    privileged: true,
+
+    kotlincflags: ["-Xjvm-default=all"],
+
+    optimize: {
+        proguard_compatibility: false,
+    },
+}
diff --git a/packages/CredentialManager/wear/AndroidManifest.xml b/packages/CredentialManager/wear/AndroidManifest.xml
index 001a56d..90248734 100644
--- a/packages/CredentialManager/wear/AndroidManifest.xml
+++ b/packages/CredentialManager/wear/AndroidManifest.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
 /*
- * Copyright (c) 2017 Google Inc.
+ * Copyright (c) 2023 Google Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +19,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.credentialmanager">
 
+    <uses-feature android:name="android.hardware.type.watch" />
+
     <uses-permission android:name="android.permission.LAUNCH_CREDENTIAL_SELECTOR"/>
     <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
     <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/>
@@ -28,17 +30,15 @@
       android:dataExtractionRules="@xml/data_extraction_rules"
       android:fullBackupContent="@xml/backup_rules"
       android:label="@string/app_name"
-      android:supportsRtl="true"
-      android:theme="@style/Theme.CredentialSelector">
+      android:supportsRtl="true">
 
         <activity
-            android:name=".CredentialSelectorActivity"
+            android:name=".ui.CredentialSelectorActivity"
             android:exported="true"
             android:permission="android.permission.LAUNCH_CREDENTIAL_SELECTOR"
             android:launchMode="singleTop"
             android:label="@string/app_name"
-            android:excludeFromRecents="true"
-            android:theme="@style/Theme.CredentialSelector">
+            android:excludeFromRecents="true">
         </activity>
   </application>
 
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorActivity.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorActivity.kt
similarity index 68%
rename from packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorActivity.kt
rename to packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorActivity.kt
index f7b2499..77fffaa 100644
--- a/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorActivity.kt
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/CredentialSelectorActivity.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 The Android Open Source Project
+ * Copyright (C) 2023 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,19 +14,29 @@
  * limitations under the License.
  */
 
+package com.android.credentialmanager.ui
+
 import android.os.Bundle
-import androidx.activity.compose.setContent
 import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.navigation.NavHostController
 import androidx.wear.compose.material.MaterialTheme
-import androidx.wear.compose.material.Text
+import androidx.wear.compose.navigation.rememberSwipeDismissableNavController
 
 class CredentialSelectorActivity : ComponentActivity() {
+
+    lateinit var navController: NavHostController
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
+        setTheme(android.R.style.Theme_DeviceDefault)
+
         setContent {
+            navController = rememberSwipeDismissableNavController()
+
             MaterialTheme {
-                Text("Credential Manager entry point")
+                WearApp(navController = navController)
             }
         }
     }
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/Screen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/Screen.kt
new file mode 100644
index 0000000..ee6ea5e
--- /dev/null
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/Screen.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0N
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.credentialmanager.ui
+
+sealed class Screen(
+    val route: String,
+) {
+    object Main : Screen("main")
+}
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt
new file mode 100644
index 0000000..5ec0c8c
--- /dev/null
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0N
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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:OptIn(ExperimentalHorologistApi::class)
+
+package com.android.credentialmanager.ui
+
+import androidx.compose.runtime.Composable
+import androidx.navigation.NavHostController
+import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState
+import androidx.wear.compose.navigation.rememberSwipeDismissableNavHostState
+import com.android.credentialmanager.ui.screens.MainScreen
+import com.google.android.horologist.annotations.ExperimentalHorologistApi
+import com.google.android.horologist.compose.navscaffold.WearNavScaffold
+import com.google.android.horologist.compose.navscaffold.composable
+
+@Composable
+fun WearApp(
+    navController: NavHostController
+) {
+    val swipeToDismissBoxState = rememberSwipeToDismissBoxState()
+    val navHostState =
+        rememberSwipeDismissableNavHostState(swipeToDismissBoxState = swipeToDismissBoxState)
+
+    WearNavScaffold(
+        startDestination = Screen.Main.route,
+        navController = navController,
+        state = navHostState,
+    ) {
+        composable(Screen.Main.route) {
+            MainScreen()
+        }
+    }
+}
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/MainScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/MainScreen.kt
new file mode 100644
index 0000000..662d710
--- /dev/null
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/MainScreen.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0N
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.credentialmanager.ui.screens
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.wear.compose.material.Text
+
+@Composable
+fun MainScreen(modifier: Modifier = Modifier) {
+    Box(modifier = modifier, contentAlignment = Alignment.Center) {
+        Text("This is a placeholder for the main screen.")
+    }
+}
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt
index cfd1a50..01596d2 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt
@@ -45,6 +45,7 @@
 import com.android.settingslib.spa.gallery.preference.PreferencePageProvider
 import com.android.settingslib.spa.gallery.preference.SwitchPreferencePageProvider
 import com.android.settingslib.spa.gallery.preference.TwoTargetSwitchPreferencePageProvider
+import com.android.settingslib.spa.gallery.scaffold.SearchScaffoldPageProvider
 import com.android.settingslib.spa.gallery.ui.CategoryPageProvider
 import com.android.settingslib.spa.gallery.ui.SpinnerPageProvider
 import com.android.settingslib.spa.slice.SpaSliceBroadcastReceiver
@@ -94,6 +95,7 @@
                 SettingsExposedDropdownMenuBoxPageProvider,
                 SettingsExposedDropdownMenuCheckBoxProvider,
                 SettingsTextFieldPasswordPageProvider,
+                SearchScaffoldPageProvider,
             ),
             rootPages = listOf(
                 HomePageProvider.createSettingsPage(),
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePageProvider.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePageProvider.kt
index 6cac220..b339b44 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePageProvider.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePageProvider.kt
@@ -41,6 +41,7 @@
 import com.android.settingslib.spa.gallery.page.SettingsPagerPageProvider
 import com.android.settingslib.spa.gallery.page.SliderPageProvider
 import com.android.settingslib.spa.gallery.preference.PreferenceMainPageProvider
+import com.android.settingslib.spa.gallery.scaffold.SearchScaffoldPageProvider
 import com.android.settingslib.spa.gallery.ui.CategoryPageProvider
 import com.android.settingslib.spa.gallery.ui.SpinnerPageProvider
 import com.android.settingslib.spa.widget.scaffold.HomeScaffold
@@ -55,6 +56,7 @@
             PreferenceMainPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
             OperateListPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
             ArgumentPageProvider.buildInjectEntry("foo")!!.setLink(fromPage = owner).build(),
+            SearchScaffoldPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
             SliderPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
             SpinnerPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
             SettingsPagerPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/scaffold/SearchScaffoldPageProvider.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/scaffold/SearchScaffoldPageProvider.kt
new file mode 100644
index 0000000..a1ab35b
--- /dev/null
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/scaffold/SearchScaffoldPageProvider.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.spa.gallery.scaffold
+
+import android.os.Bundle
+import androidx.compose.runtime.Composable
+import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
+import com.android.settingslib.spa.framework.common.SettingsPageProvider
+import com.android.settingslib.spa.framework.common.createSettingsPage
+import com.android.settingslib.spa.framework.compose.navigator
+import com.android.settingslib.spa.widget.preference.Preference
+import com.android.settingslib.spa.widget.preference.PreferenceModel
+import com.android.settingslib.spa.widget.scaffold.SearchScaffold
+import com.android.settingslib.spa.widget.ui.PlaceholderTitle
+
+private const val TITLE = "Sample SearchScaffold"
+
+object SearchScaffoldPageProvider : SettingsPageProvider {
+    override val name = "SearchScaffold"
+
+    private val owner = createSettingsPage()
+
+    fun buildInjectEntry() = SettingsEntryBuilder.createInject(owner = owner)
+        .setUiLayoutFn {
+            Preference(object : PreferenceModel {
+                override val title = TITLE
+                override val onClick = navigator(name)
+            })
+        }
+
+    @Composable
+    override fun Page(arguments: Bundle?) {
+        Page()
+    }
+}
+
+@Composable
+private fun Page() {
+    SearchScaffold(title = TITLE) { bottomPadding, searchQuery ->
+        PlaceholderTitle("Search query: ${searchQuery.value}")
+    }
+}
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/AnimateToScene.kt b/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/AnimateToScene.kt
index 7536728..88944f10 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/AnimateToScene.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/AnimateToScene.kt
@@ -107,6 +107,9 @@
     reversed: Boolean = false,
 ) {
     val fromScene = layoutImpl.state.transitionState.currentScene
+    val isUserInput =
+        (layoutImpl.state.transitionState as? TransitionState.Transition)?.isUserInputDriven
+            ?: false
 
     val animationSpec = layoutImpl.transitions.transitionSpec(fromScene, target).spec
     val visibilityThreshold =
@@ -116,9 +119,9 @@
     val targetProgress = if (reversed) 0f else 1f
     val transition =
         if (reversed) {
-            OneOffTransition(target, fromScene, currentScene = target, animatable)
+            OneOffTransition(target, fromScene, currentScene = target, isUserInput, animatable)
         } else {
-            OneOffTransition(fromScene, target, currentScene = target, animatable)
+            OneOffTransition(fromScene, target, currentScene = target, isUserInput, animatable)
         }
 
     // Change the current layout state to use this new transition.
@@ -139,6 +142,7 @@
     override val fromScene: SceneKey,
     override val toScene: SceneKey,
     override val currentScene: SceneKey,
+    override val isUserInputDriven: Boolean,
     private val animatable: Animatable<Float, AnimationVector1D>,
 ) : TransitionState.Transition {
     override val progress: Float
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/ObservableTransitionState.kt b/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/ObservableTransitionState.kt
index a625250..ccdec6e 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/ObservableTransitionState.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/ObservableTransitionState.kt
@@ -42,6 +42,17 @@
         val fromScene: SceneKey,
         val toScene: SceneKey,
         val progress: Flow<Float>,
+
+        /**
+         * Whether the transition was originally triggered by user input rather than being
+         * programmatic. If this value is initially true, it will remain true until the transition
+         * fully completes, even if the user input that triggered the transition has ended. Any
+         * sub-transitions launched by this one will inherit this value. For example, if the user
+         * drags a pointer but does not exceed the threshold required to transition to another
+         * scene, this value will remain true after the pointer is no longer touching the screen and
+         * will be true in any transition created to animate back to the original position.
+         */
+        val isUserInputDriven: Boolean,
     ) : ObservableTransitionState()
 }
 
@@ -62,6 +73,7 @@
                             fromScene = state.fromScene,
                             toScene = state.toScene,
                             progress = snapshotFlow { state.progress },
+                            isUserInputDriven = state.isUserInputDriven,
                         )
                     }
                 }
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SceneTransitionLayoutState.kt b/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SceneTransitionLayoutState.kt
index 47e3d5a..7a21211 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SceneTransitionLayoutState.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SceneTransitionLayoutState.kt
@@ -68,5 +68,8 @@
          * when flinging quickly during a swipe gesture.
          */
         val progress: Float
+
+        /** Whether the transition was triggered by user input rather than being programmatic. */
+        val isUserInputDriven: Boolean
     }
 }
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SwipeToScene.kt b/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SwipeToScene.kt
index 2069ebd..790ea08 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SwipeToScene.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SwipeToScene.kt
@@ -137,6 +137,8 @@
             return offset / distance
         }
 
+    override val isUserInputDriven = true
+
     /** The current offset caused by the drag gesture. */
     var dragOffset by mutableFloatStateOf(0f)
 
diff --git a/packages/SystemUI/compose/core/tests/src/com/android/compose/animation/scene/SwipeToSceneTest.kt b/packages/SystemUI/compose/core/tests/src/com/android/compose/animation/scene/SwipeToSceneTest.kt
index cb2607a..2232370 100644
--- a/packages/SystemUI/compose/core/tests/src/com/android/compose/animation/scene/SwipeToSceneTest.kt
+++ b/packages/SystemUI/compose/core/tests/src/com/android/compose/animation/scene/SwipeToSceneTest.kt
@@ -122,6 +122,7 @@
         assertThat(transition.toScene).isEqualTo(TestScenes.SceneB)
         assertThat(transition.currentScene).isEqualTo(TestScenes.SceneA)
         assertThat(transition.progress).isEqualTo(55.dp / LayoutWidth)
+        assertThat(transition.isUserInputDriven).isTrue()
 
         // Release the finger. We should now be animating back to A (currentScene = SceneA) given
         // that 55dp < positional threshold.
@@ -133,6 +134,7 @@
         assertThat(transition.toScene).isEqualTo(TestScenes.SceneB)
         assertThat(transition.currentScene).isEqualTo(TestScenes.SceneA)
         assertThat(transition.progress).isEqualTo(55.dp / LayoutWidth)
+        assertThat(transition.isUserInputDriven).isTrue()
 
         // Wait for the animation to finish. We should now be in scene A.
         rule.waitForIdle()
@@ -154,6 +156,7 @@
         assertThat(transition.toScene).isEqualTo(TestScenes.SceneC)
         assertThat(transition.currentScene).isEqualTo(TestScenes.SceneA)
         assertThat(transition.progress).isEqualTo(56.dp / LayoutHeight)
+        assertThat(transition.isUserInputDriven).isTrue()
 
         // Release the finger. We should now be animating to C (currentScene = SceneC) given
         // that 56dp >= positional threshold.
@@ -165,6 +168,7 @@
         assertThat(transition.toScene).isEqualTo(TestScenes.SceneC)
         assertThat(transition.currentScene).isEqualTo(TestScenes.SceneC)
         assertThat(transition.progress).isEqualTo(56.dp / LayoutHeight)
+        assertThat(transition.isUserInputDriven).isTrue()
 
         // Wait for the animation to finish. We should now be in scene C.
         rule.waitForIdle()
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt
index 47af842..ef01266 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt
@@ -158,6 +158,7 @@
                 fromScene = fromScene.toModel().key,
                 toScene = toScene.toModel().key,
                 progress = progress,
+                isUserInputDriven = isUserInputDriven,
             )
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
index 7b58b1f..9e5fd55 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
@@ -31,6 +31,7 @@
 import com.android.systemui.dock.DockManagerImpl;
 import com.android.systemui.doze.DozeHost;
 import com.android.systemui.media.dagger.MediaModule;
+import com.android.systemui.navigationbar.NavigationBarControllerModule;
 import com.android.systemui.navigationbar.gestural.GestureModule;
 import com.android.systemui.plugins.qs.QSFactory;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -101,6 +102,7 @@
         GestureModule.class,
         MediaModule.class,
         MultiUserUtilsModule.class,
+        NavigationBarControllerModule.class,
         PowerModule.class,
         QSModule.class,
         ReferenceScreenshotModule.class,
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
index 3a942bd..1e002b8 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
@@ -89,6 +89,7 @@
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
 import com.android.systemui.statusbar.connectivity.ConnectivityModule;
+import com.android.systemui.statusbar.dagger.StatusBarModule;
 import com.android.systemui.statusbar.disableflags.dagger.DisableFlagsModule;
 import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
@@ -198,6 +199,7 @@
             SettingsUtilModule.class,
             SmartRepliesInflationModule.class,
             SmartspaceModule.class,
+            StatusBarModule.class,
             StatusBarPipelineModule.class,
             StatusBarPolicyModule.class,
             StatusBarWindowModule.class,
diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
index 4d713a2..d5f9288 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
@@ -412,16 +412,6 @@
     val NEW_SHADE_CARRIER_GROUP_MOBILE_ICONS =
         releasedFlag("new_shade_carrier_group_mobile_icons")
 
-    // 700 - dialer/calls
-    // TODO(b/254512734): Tracking Bug
-    val ONGOING_CALL_STATUS_BAR_CHIP = releasedFlag("ongoing_call_status_bar_chip")
-
-    // TODO(b/254512681): Tracking Bug
-    val ONGOING_CALL_IN_IMMERSIVE = releasedFlag("ongoing_call_in_immersive")
-
-    // TODO(b/254512753): Tracking Bug
-    val ONGOING_CALL_IN_IMMERSIVE_CHIP_TAP = releasedFlag("ongoing_call_in_immersive_chip_tap")
-
     // 800 - general visual/theme
     @JvmField val MONET = resourceBooleanFlag(R.bool.flag_monet, "monet")
 
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt
index 257006e..22bcf0a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewConfigurator.kt
@@ -18,10 +18,8 @@
 package com.android.systemui.keyguard
 
 import android.content.Context
-import android.content.res.Configuration
 import android.view.LayoutInflater
 import android.view.View
-import android.view.ViewGroup
 import com.android.keyguard.KeyguardStatusView
 import com.android.keyguard.KeyguardStatusViewController
 import com.android.keyguard.LockIconView
@@ -29,38 +27,21 @@
 import com.android.keyguard.dagger.KeyguardStatusViewComponent
 import com.android.systemui.CoreStartable
 import com.android.systemui.R
-import com.android.systemui.communal.ui.adapter.CommunalWidgetViewAdapter
-import com.android.systemui.communal.ui.binder.CommunalWidgetViewBinder
-import com.android.systemui.communal.ui.viewmodel.CommunalWidgetViewModel
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.flags.FeatureFlags
 import com.android.systemui.flags.Flags
-import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
-import com.android.systemui.keyguard.ui.binder.KeyguardAmbientIndicationAreaViewBinder
 import com.android.systemui.keyguard.ui.binder.KeyguardBlueprintViewBinder
 import com.android.systemui.keyguard.ui.binder.KeyguardIndicationAreaBinder
-import com.android.systemui.keyguard.ui.binder.KeyguardQuickAffordanceViewBinder
 import com.android.systemui.keyguard.ui.binder.KeyguardRootViewBinder
-import com.android.systemui.keyguard.ui.binder.KeyguardSettingsViewBinder
 import com.android.systemui.keyguard.ui.view.KeyguardIndicationArea
 import com.android.systemui.keyguard.ui.view.KeyguardRootView
 import com.android.systemui.keyguard.ui.view.layout.KeyguardBlueprintCommandListener
-import com.android.systemui.keyguard.ui.viewmodel.KeyguardAmbientIndicationViewModel
 import com.android.systemui.keyguard.ui.viewmodel.KeyguardBlueprintViewModel
 import com.android.systemui.keyguard.ui.viewmodel.KeyguardIndicationAreaViewModel
-import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordancesCombinedViewModel
 import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
-import com.android.systemui.keyguard.ui.viewmodel.KeyguardSettingsMenuViewModel
 import com.android.systemui.keyguard.ui.viewmodel.OccludingAppDeviceEntryMessageViewModel
-import com.android.systemui.plugins.ActivityStarter
-import com.android.systemui.plugins.FalsingManager
 import com.android.systemui.shade.NotificationShadeWindowView
 import com.android.systemui.statusbar.KeyguardIndicationController
-import com.android.systemui.statusbar.VibratorHelper
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
-import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer
-import com.android.systemui.statusbar.notification.stack.ui.viewbinder.SharedNotificationContainerBinder
-import com.android.systemui.statusbar.notification.stack.ui.viewmodel.SharedNotificationContainerViewModel
 import com.android.systemui.statusbar.policy.KeyguardStateController
 import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator
 import javax.inject.Inject
@@ -74,30 +55,17 @@
 @Inject
 constructor(
     private val keyguardRootView: KeyguardRootView,
-    private val sharedNotificationContainer: SharedNotificationContainer,
     private val keyguardRootViewModel: KeyguardRootViewModel,
     private val keyguardIndicationAreaViewModel: KeyguardIndicationAreaViewModel,
-    private val sharedNotificationContainerViewModel: SharedNotificationContainerViewModel,
-    private val keyguardAmbientIndicationViewModel: KeyguardAmbientIndicationViewModel,
     private val notificationShadeWindowView: NotificationShadeWindowView,
     private val featureFlags: FeatureFlags,
     private val indicationController: KeyguardIndicationController,
-    private val keyguardQuickAffordancesCombinedViewModel:
-        KeyguardQuickAffordancesCombinedViewModel,
-    private val falsingManager: FalsingManager,
-    private val vibratorHelper: VibratorHelper,
     private val keyguardStateController: KeyguardStateController,
-    private val keyguardSettingsMenuViewModel: KeyguardSettingsMenuViewModel,
-    private val activityStarter: ActivityStarter,
     private val occludingAppDeviceEntryMessageViewModel: OccludingAppDeviceEntryMessageViewModel,
     private val chipbarCoordinator: ChipbarCoordinator,
     private val keyguardBlueprintCommandListener: KeyguardBlueprintCommandListener,
     private val keyguardBlueprintViewModel: KeyguardBlueprintViewModel,
     private val keyguardStatusViewComponentFactory: KeyguardStatusViewComponent.Factory,
-    private val keyguardBlueprintInteractor: KeyguardBlueprintInteractor,
-    private val communalWidgetViewModel: CommunalWidgetViewModel,
-    private val communalWidgetViewAdapter: CommunalWidgetViewAdapter,
-    private val notificationStackScrollerLayoutController: NotificationStackScrollLayoutController,
     private val context: Context,
     private val keyguardIndicationController: KeyguardIndicationController,
     private val lockIconViewController: LockIconViewController,
@@ -105,10 +73,7 @@
 
     private var rootViewHandle: DisposableHandle? = null
     private var indicationAreaHandle: DisposableHandle? = null
-    private var leftShortcutHandle: KeyguardQuickAffordanceViewBinder.Binding? = null
-    private var rightShortcutHandle: KeyguardQuickAffordanceViewBinder.Binding? = null
-    private var ambientIndicationAreaHandle: KeyguardAmbientIndicationAreaViewBinder.Binding? = null
-    private var settingsPopupMenuHandle: DisposableHandle? = null
+
     var keyguardStatusViewController: KeyguardStatusViewController? = null
         get() {
             if (field == null) {
@@ -127,52 +92,12 @@
 
     override fun start() {
         bindKeyguardRootView()
-        if (featureFlags.isEnabled(Flags.LAZY_INFLATE_KEYGUARD)) {
-            keyguardRootView.removeAllViews()
-            initializeViews()
-        } else {
-            val notificationPanel =
-                notificationShadeWindowView.requireViewById(R.id.notification_panel) as ViewGroup
-            unbindKeyguardBottomArea(notificationPanel)
-            bindIndicationArea()
-            bindLockIconView(notificationPanel)
-            bindKeyguardStatusView(notificationPanel)
-            setupNotificationStackScrollLayout(notificationPanel)
-            bindLeftShortcut()
-            bindRightShortcut()
-            bindAmbientIndicationArea()
-            bindSettingsPopupMenu()
-            bindCommunalWidgetArea()
-        }
+        initializeViews()
 
         KeyguardBlueprintViewBinder.bind(keyguardRootView, keyguardBlueprintViewModel)
         keyguardBlueprintCommandListener.start()
     }
 
-    fun setupNotificationStackScrollLayout(legacyParent: ViewGroup) {
-        if (featureFlags.isEnabled(Flags.MIGRATE_NSSL)) {
-            // This moves the existing NSSL view to a different parent, as the controller is a
-            // singleton and recreating it has other bad side effects
-            val nssl =
-                legacyParent.requireViewById<View>(R.id.notification_stack_scroller).also {
-                    (it.getParent() as ViewGroup).removeView(it)
-                }
-            sharedNotificationContainer.addNotificationStackScrollLayout(nssl)
-            SharedNotificationContainerBinder.bind(
-                sharedNotificationContainer,
-                sharedNotificationContainerViewModel,
-                notificationStackScrollerLayoutController,
-            )
-        }
-    }
-
-    override fun onConfigurationChanged(newConfig: Configuration?) {
-        super.onConfigurationChanged(newConfig)
-        leftShortcutHandle?.onConfigurationChanged()
-        rightShortcutHandle?.onConfigurationChanged()
-        ambientIndicationAreaHandle?.onConfigurationChanged()
-    }
-
     fun bindIndicationArea() {
         indicationAreaHandle?.dispose()
 
@@ -213,135 +138,6 @@
             )
     }
 
-    private fun bindLockIconView(legacyParent: ViewGroup) {
-        if (featureFlags.isEnabled(Flags.MIGRATE_LOCK_ICON)) {
-            legacyParent.requireViewById<View>(R.id.lock_icon_view).let {
-                legacyParent.removeView(it)
-            }
-        } else {
-            keyguardRootView.findViewById<View?>(R.id.lock_icon_view)?.let {
-                keyguardRootView.removeView(it)
-            }
-            legacyParent.requireViewById<LockIconView>(R.id.lock_icon_view).let {
-                lockIconViewController.setLockIconView(it)
-            }
-        }
-    }
-
-    private fun bindAmbientIndicationArea() {
-        if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
-            ambientIndicationAreaHandle?.destroy()
-            ambientIndicationAreaHandle =
-                KeyguardAmbientIndicationAreaViewBinder.bind(
-                    notificationShadeWindowView,
-                    keyguardAmbientIndicationViewModel,
-                    keyguardRootViewModel,
-                )
-        } else {
-            keyguardRootView.findViewById<View?>(R.id.ambient_indication_container)?.let {
-                keyguardRootView.removeView(it)
-            }
-        }
-    }
-
-    private fun bindSettingsPopupMenu() {
-        if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
-            settingsPopupMenuHandle?.dispose()
-            settingsPopupMenuHandle =
-                KeyguardSettingsViewBinder.bind(
-                    keyguardRootView,
-                    keyguardSettingsMenuViewModel,
-                    vibratorHelper,
-                    activityStarter,
-                )
-        } else {
-            keyguardRootView.findViewById<View?>(R.id.keyguard_settings_button)?.let {
-                keyguardRootView.removeView(it)
-            }
-        }
-    }
-
-    private fun unbindKeyguardBottomArea(legacyParent: ViewGroup) {
-        if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
-            legacyParent.requireViewById<View>(R.id.keyguard_bottom_area).let {
-                legacyParent.removeView(it)
-            }
-        }
-    }
-
-    private fun bindLeftShortcut() {
-        leftShortcutHandle?.destroy()
-        if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
-            leftShortcutHandle =
-                KeyguardQuickAffordanceViewBinder.bind(
-                    keyguardRootView.requireViewById(R.id.start_button),
-                    keyguardQuickAffordancesCombinedViewModel.startButton,
-                    keyguardRootViewModel.alpha,
-                    falsingManager,
-                    vibratorHelper,
-                ) {
-                    indicationController.showTransientIndication(it)
-                }
-        } else {
-            keyguardRootView.findViewById<View?>(R.id.start_button)?.let {
-                keyguardRootView.removeView(it)
-            }
-        }
-    }
-
-    private fun bindRightShortcut() {
-        rightShortcutHandle?.destroy()
-        if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
-            rightShortcutHandle =
-                KeyguardQuickAffordanceViewBinder.bind(
-                    keyguardRootView.requireViewById(R.id.end_button),
-                    keyguardQuickAffordancesCombinedViewModel.endButton,
-                    keyguardRootViewModel.alpha,
-                    falsingManager,
-                    vibratorHelper,
-                ) {
-                    indicationController.showTransientIndication(it)
-                }
-        } else {
-            keyguardRootView.findViewById<View?>(R.id.end_button)?.let {
-                keyguardRootView.removeView(it)
-            }
-        }
-    }
-
-    fun bindKeyguardStatusView(legacyParent: ViewGroup) {
-        // At startup, 2 views with the ID `R.id.keyguard_status_view` will be available.
-        // Disable one of them
-        if (featureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW)) {
-            legacyParent.findViewById<View>(R.id.keyguard_status_view)?.let {
-                legacyParent.removeView(it)
-            }
-
-            val keyguardStatusView = keyguardRootView.addStatusView()
-            val statusViewComponent = keyguardStatusViewComponentFactory.build(keyguardStatusView)
-            val controller = statusViewComponent.getKeyguardStatusViewController()
-            controller.init()
-            keyguardStatusViewController = controller
-        } else {
-            keyguardRootView.findViewById<View?>(R.id.keyguard_status_view)?.let {
-                keyguardRootView.removeView(it)
-            }
-        }
-    }
-
-    private fun bindCommunalWidgetArea() {
-        if (!featureFlags.isEnabled(Flags.WIDGET_ON_KEYGUARD)) {
-            return
-        }
-
-        CommunalWidgetViewBinder.bind(
-            keyguardRootView,
-            communalWidgetViewModel,
-            communalWidgetViewAdapter,
-            keyguardBlueprintInteractor,
-        )
-    }
-
     /**
      * Temporary, to allow NotificationPanelViewController to use the same instance while code is
      * migrated: b/288242803
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt
index a948741..f2b28d9 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/KeyguardRootView.kt
@@ -19,123 +19,14 @@
 
 import android.content.Context
 import android.util.AttributeSet
-import android.view.LayoutInflater
-import android.view.View
-import android.widget.ImageView
 import androidx.constraintlayout.widget.ConstraintLayout
-import androidx.core.content.res.ResourcesCompat
-import com.android.keyguard.KeyguardStatusView
-import com.android.keyguard.LockIconView
-import com.android.systemui.R
-import com.android.systemui.animation.view.LaunchableImageView
 
 /** Provides a container for all keyguard ui content. */
 class KeyguardRootView(
     context: Context,
-    private val attrs: AttributeSet?,
+    attrs: AttributeSet?,
 ) :
     ConstraintLayout(
         context,
         attrs,
-    ) {
-
-    private var statusView: KeyguardStatusView? = null
-
-    init {
-        addIndicationTextArea()
-        addLockIconView()
-        addAmbientIndicationArea()
-        addLeftShortcut()
-        addRightShortcut()
-        addSettingsPopupMenu()
-        addStatusView()
-    }
-
-    private fun addIndicationTextArea() {
-        val view = KeyguardIndicationArea(context, attrs)
-        addView(view)
-    }
-
-    private fun addLockIconView() {
-        val view = LockIconView(context, attrs).apply { id = R.id.lock_icon_view }
-        addView(view)
-    }
-
-    private fun addAmbientIndicationArea() {
-        LayoutInflater.from(context).inflate(R.layout.ambient_indication, this)
-    }
-
-    private fun addLeftShortcut() {
-        val padding = resources.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_padding)
-        val view =
-            LaunchableImageView(context, attrs).apply {
-                id = R.id.start_button
-                scaleType = ImageView.ScaleType.FIT_CENTER
-                background =
-                    ResourcesCompat.getDrawable(
-                        context.resources,
-                        R.drawable.keyguard_bottom_affordance_bg,
-                        context.theme
-                    )
-                foreground =
-                    ResourcesCompat.getDrawable(
-                        context.resources,
-                        R.drawable.keyguard_bottom_affordance_selected_border,
-                        context.theme
-                    )
-                visibility = View.INVISIBLE
-                setPadding(padding, padding, padding, padding)
-            }
-        addView(view)
-    }
-
-    private fun addRightShortcut() {
-        val padding = resources.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_padding)
-        val view =
-            LaunchableImageView(context, attrs).apply {
-                id = R.id.end_button
-                scaleType = ImageView.ScaleType.FIT_CENTER
-                background =
-                    ResourcesCompat.getDrawable(
-                        context.resources,
-                        R.drawable.keyguard_bottom_affordance_bg,
-                        context.theme
-                    )
-                foreground =
-                    ResourcesCompat.getDrawable(
-                        context.resources,
-                        R.drawable.keyguard_bottom_affordance_selected_border,
-                        context.theme
-                    )
-                visibility = View.INVISIBLE
-                setPadding(padding, padding, padding, padding)
-            }
-        addView(view)
-    }
-
-    private fun addSettingsPopupMenu() {
-        val view =
-            LayoutInflater.from(context)
-                .inflate(R.layout.keyguard_settings_popup_menu, this, false)
-                .apply {
-                    id = R.id.keyguard_settings_button
-                    visibility = GONE
-                }
-        addView(view)
-    }
-
-    fun addStatusView(): KeyguardStatusView {
-        // StatusView may need to be rebuilt on config changes. Remove and reinflate
-        statusView?.let { removeView(it) }
-        val view =
-            (LayoutInflater.from(context).inflate(R.layout.keyguard_status_view, this, false)
-                    as KeyguardStatusView)
-                .apply {
-                    setClipChildren(false)
-                    statusView = this
-                }
-
-        addView(view)
-        return view
-    }
-}
+    )
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt
index 43bbf69..1eeb017 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprint.kt
@@ -17,10 +17,7 @@
 
 package com.android.systemui.keyguard.ui.view.layout.blueprints
 
-import androidx.constraintlayout.widget.ConstraintLayout
 import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
 import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
 import com.android.systemui.keyguard.ui.view.layout.sections.AodNotificationIconsSection
 import com.android.systemui.keyguard.ui.view.layout.sections.DefaultAmbientIndicationAreaSection
@@ -54,7 +51,6 @@
     defaultNotificationStackScrollLayoutSection: DefaultNotificationStackScrollLayoutSection,
     splitShadeGuidelines: SplitShadeGuidelines,
     aodNotificationIconsSection: AodNotificationIconsSection,
-    private val featureFlags: FeatureFlags,
 ) : KeyguardBlueprint {
     override val id: String = DEFAULT
 
@@ -72,16 +68,6 @@
             aodNotificationIconsSection,
         )
 
-    override fun replaceViews(
-        previousBlueprint: KeyguardBlueprint?,
-        constraintLayout: ConstraintLayout,
-        bindData: Boolean
-    ) {
-        if (featureFlags.isEnabled(Flags.LAZY_INFLATE_KEYGUARD)) {
-            super.replaceViews(previousBlueprint, constraintLayout, bindData)
-        }
-    }
-
     companion object {
         const val DEFAULT = "default"
     }
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
index 5a42028..a601d7f 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020 The Android Open Source Project
+ * Copyright (C) 2023 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,483 +16,58 @@
 
 package com.android.systemui.navigationbar;
 
-import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
-import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE;
-import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR;
-import static com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler.DEBUG_MISSING_GESTURE_TAG;
-import static com.android.systemui.shared.recents.utilities.Utilities.isLargeScreen;
-
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.hardware.display.DisplayManager;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.RemoteException;
-import android.os.Trace;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.Display;
-import android.view.IWindowManager;
-import android.view.View;
-import android.view.WindowManagerGlobal;
-
-import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
-import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.statusbar.RegisterStatusBarResult;
-import com.android.settingslib.applications.InterestingConfigChanges;
-import com.android.systemui.Dumpable;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
-import com.android.systemui.model.SysUiState;
-import com.android.systemui.recents.OverviewProxyService;
-import com.android.systemui.settings.DisplayTracker;
-import com.android.systemui.shared.system.QuickStepContract;
-import com.android.systemui.shared.system.TaskStackChangeListeners;
-import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.phone.AutoHideController;
-import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
-import com.android.systemui.statusbar.phone.LightBarController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.util.settings.SecureSettings;
-import com.android.wm.shell.back.BackAnimation;
-import com.android.wm.shell.pip.Pip;
-
-import java.io.PrintWriter;
-import java.util.Optional;
-
-import javax.inject.Inject;
+import com.android.systemui.statusbar.phone.BarTransitions;
 
 /** A controller to handle navigation bars. */
-@SysUISingleton
-public class NavigationBarController implements
-        ConfigurationController.ConfigurationListener,
-        NavigationModeController.ModeChangedListener,
-        Dumpable {
-
-    private static final String TAG = NavigationBarController.class.getSimpleName();
-
-    private final Context mContext;
-    private final Handler mHandler;
-    private final NavigationBarComponent.Factory mNavigationBarComponentFactory;
-    private FeatureFlags mFeatureFlags;
-    private final SecureSettings mSecureSettings;
-    private final DisplayTracker mDisplayTracker;
-    private final DisplayManager mDisplayManager;
-    private final TaskbarDelegate mTaskbarDelegate;
-    private final NavBarHelper mNavBarHelper;
-    private int mNavMode;
-    @VisibleForTesting boolean mIsLargeScreen;
-
-    /** A displayId - nav bar maps. */
-    @VisibleForTesting
-    SparseArray<NavigationBar> mNavigationBars = new SparseArray<>();
-
-    // Tracks config changes that will actually recreate the nav bar
-    private final InterestingConfigChanges mConfigChanges = new InterestingConfigChanges(
-            ActivityInfo.CONFIG_FONT_SCALE
-                    | ActivityInfo.CONFIG_UI_MODE);
-
-    @Inject
-    public NavigationBarController(Context context,
-            OverviewProxyService overviewProxyService,
-            NavigationModeController navigationModeController,
-            SysUiState sysUiFlagsContainer,
-            CommandQueue commandQueue,
-            @Main Handler mainHandler,
-            ConfigurationController configurationController,
-            NavBarHelper navBarHelper,
-            TaskbarDelegate taskbarDelegate,
-            NavigationBarComponent.Factory navigationBarComponentFactory,
-            DumpManager dumpManager,
-            AutoHideController autoHideController,
-            LightBarController lightBarController,
-            TaskStackChangeListeners taskStackChangeListeners,
-            Optional<Pip> pipOptional,
-            Optional<BackAnimation> backAnimation,
-            FeatureFlags featureFlags,
-            SecureSettings secureSettings,
-            DisplayTracker displayTracker) {
-        mContext = context;
-        mHandler = mainHandler;
-        mNavigationBarComponentFactory = navigationBarComponentFactory;
-        mFeatureFlags = featureFlags;
-        mSecureSettings = secureSettings;
-        mDisplayTracker = displayTracker;
-        mDisplayManager = mContext.getSystemService(DisplayManager.class);
-        commandQueue.addCallback(mCommandQueueCallbacks);
-        configurationController.addCallback(this);
-        mConfigChanges.applyNewConfig(mContext.getResources());
-        mNavMode = navigationModeController.addListener(this);
-        mNavBarHelper = navBarHelper;
-        mTaskbarDelegate = taskbarDelegate;
-        mTaskbarDelegate.setDependencies(commandQueue, overviewProxyService,
-                navBarHelper, navigationModeController, sysUiFlagsContainer,
-                dumpManager, autoHideController, lightBarController, pipOptional,
-                backAnimation.orElse(null), taskStackChangeListeners);
-        mIsLargeScreen = isLargeScreen(mContext);
-        dumpManager.registerDumpable(this);
-    }
-
-    @Override
-    public void onConfigChanged(Configuration newConfig) {
-        boolean isOldConfigLargeScreen = mIsLargeScreen;
-        mIsLargeScreen = isLargeScreen(mContext);
-        boolean willApplyConfig = mConfigChanges.applyNewConfig(mContext.getResources());
-        boolean largeScreenChanged = mIsLargeScreen != isOldConfigLargeScreen;
-        // TODO(b/243765256): Disable this logging once b/243765256 is fixed.
-        Log.i(DEBUG_MISSING_GESTURE_TAG, "NavbarController: newConfig=" + newConfig
-                + " mTaskbarDelegate initialized=" + mTaskbarDelegate.isInitialized()
-                + " willApplyConfigToNavbars=" + willApplyConfig
-                + " navBarCount=" + mNavigationBars.size());
-        if (mTaskbarDelegate.isInitialized()) {
-            mTaskbarDelegate.onConfigurationChanged(newConfig);
-        }
-        // If we folded/unfolded while in 3 button, show navbar in folded state, hide in unfolded
-        if (largeScreenChanged && updateNavbarForTaskbar()) {
-            return;
-        }
-
-        if (willApplyConfig) {
-            for (int i = 0; i < mNavigationBars.size(); i++) {
-                recreateNavigationBar(mNavigationBars.keyAt(i));
-            }
-        } else {
-            for (int i = 0; i < mNavigationBars.size(); i++) {
-                mNavigationBars.valueAt(i).onConfigurationChanged(newConfig);
-            }
-        }
-    }
-
-    @Override
-    public void onNavigationModeChanged(int mode) {
-        if (mNavMode == mode) {
-            return;
-        }
-        final int oldMode = mNavMode;
-        mNavMode = mode;
-        updateAccessibilityButtonModeIfNeeded();
-
-        mHandler.post(() -> {
-            // create/destroy nav bar based on nav mode only in unfolded state
-            if (oldMode != mNavMode) {
-                updateNavbarForTaskbar();
-            }
-            for (int i = 0; i < mNavigationBars.size(); i++) {
-                NavigationBar navBar = mNavigationBars.valueAt(i);
-                if (navBar == null) {
-                    continue;
-                }
-                navBar.getView().updateStates();
-            }
-        });
-    }
-
-    private void updateAccessibilityButtonModeIfNeeded() {
-        final int mode = mSecureSettings.getIntForUser(
-                Settings.Secure.ACCESSIBILITY_BUTTON_MODE,
-                ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT);
-
-        // ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU is compatible under gestural or non-gestural
-        // mode, so we don't need to update it.
-        if (mode == ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU) {
-            return;
-        }
-
-        // ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR is incompatible under gestural mode. Need to
-        // force update to ACCESSIBILITY_BUTTON_MODE_GESTURE.
-        if (QuickStepContract.isGesturalMode(mNavMode)
-                && mode == ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR) {
-            mSecureSettings.putIntForUser(
-                    Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_GESTURE,
-                    UserHandle.USER_CURRENT);
-            // ACCESSIBILITY_BUTTON_MODE_GESTURE is incompatible under non gestural mode. Need to
-            // force update to ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR.
-        } else if (!QuickStepContract.isGesturalMode(mNavMode)
-                && mode == ACCESSIBILITY_BUTTON_MODE_GESTURE) {
-            mSecureSettings.putIntForUser(
-                    Settings.Secure.ACCESSIBILITY_BUTTON_MODE,
-                    ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT);
-        }
-    }
-
-    private boolean shouldCreateNavBarAndTaskBar(int displayId) {
-        final IWindowManager wms = WindowManagerGlobal.getWindowManagerService();
-
-        try {
-            return wms.hasNavigationBar(displayId);
-        } catch (RemoteException e) {
-            // Cannot get wms, just return false with warning message.
-            Log.w(TAG, "Cannot get WindowManager.");
-            return false;
-        }
-    }
-
-    /** @see #initializeTaskbarIfNecessary() */
-    private boolean updateNavbarForTaskbar() {
-        boolean taskbarShown = initializeTaskbarIfNecessary();
-        if (!taskbarShown && mNavigationBars.get(mContext.getDisplayId()) == null) {
-            createNavigationBar(mContext.getDisplay(), null, null);
-        }
-        return taskbarShown;
-    }
-
-    /** @return {@code true} if taskbar is enabled, false otherwise */
-    private boolean initializeTaskbarIfNecessary() {
-        // Enable for large screens or (phone AND flag is set); assuming phone = !mIsLargeScreen
-        boolean taskbarEnabled = (mIsLargeScreen || mFeatureFlags.isEnabled(
-                Flags.HIDE_NAVBAR_WINDOW)) && shouldCreateNavBarAndTaskBar(mContext.getDisplayId());
-
-        if (taskbarEnabled) {
-            Trace.beginSection("NavigationBarController#initializeTaskbarIfNecessary");
-            final int displayId = mContext.getDisplayId();
-            // Hint to NavBarHelper if we are replacing an existing bar to skip extra work
-            mNavBarHelper.setTogglingNavbarTaskbar(mNavigationBars.contains(displayId));
-            // Remove navigation bar when taskbar is showing
-            removeNavigationBar(displayId);
-            mTaskbarDelegate.init(displayId);
-            mNavBarHelper.setTogglingNavbarTaskbar(false);
-            Trace.endSection();
-
-        } else {
-            mTaskbarDelegate.destroy();
-        }
-        return taskbarEnabled;
-    }
-
-    private final CommandQueue.Callbacks mCommandQueueCallbacks = new CommandQueue.Callbacks() {
-        @Override
-        public void onDisplayRemoved(int displayId) {
-            removeNavigationBar(displayId);
-        }
-
-        @Override
-        public void onDisplayReady(int displayId) {
-            Display display = mDisplayManager.getDisplay(displayId);
-            mIsLargeScreen = isLargeScreen(mContext);
-            createNavigationBar(display, null /* savedState */, null /* result */);
-        }
-
-        @Override
-        public void setNavigationBarLumaSamplingEnabled(int displayId, boolean enable) {
-            final NavigationBar navigationBar = getNavigationBar(displayId);
-            if (navigationBar != null) {
-                navigationBar.setNavigationBarLumaSamplingEnabled(enable);
-            }
-        }
-
-        @Override
-        public void showPinningEnterExitToast(boolean entering) {
-            int displayId = mContext.getDisplayId();
-            final NavigationBarView navBarView = getNavigationBarView(displayId);
-            if (navBarView != null) {
-                navBarView.showPinningEnterExitToast(entering);
-            } else if (displayId == mDisplayTracker.getDefaultDisplayId()
-                    && mTaskbarDelegate.isInitialized()) {
-                mTaskbarDelegate.showPinningEnterExitToast(entering);
-            }
-        }
-
-        @Override
-        public void showPinningEscapeToast() {
-            int displayId = mContext.getDisplayId();
-            final NavigationBarView navBarView = getNavigationBarView(displayId);
-            if (navBarView != null) {
-                navBarView.showPinningEscapeToast();
-            } else if (displayId == mDisplayTracker.getDefaultDisplayId()
-                    && mTaskbarDelegate.isInitialized()) {
-                mTaskbarDelegate.showPinningEscapeToast();
-            }
-        }
-    };
-
-    /**
-     * Recreates the navigation bar for the given display.
-     */
-    private void recreateNavigationBar(int displayId) {
-        // TODO: Improve this flow so that we don't need to create a new nav bar but just
-        //       the view
-        Bundle savedState = new Bundle();
-        NavigationBar bar = mNavigationBars.get(displayId);
-        if (bar != null) {
-            bar.onSaveInstanceState(savedState);
-        }
-        removeNavigationBar(displayId);
-        createNavigationBar(mDisplayManager.getDisplay(displayId), savedState, null /* result */);
-    }
-
-    // TODO(b/117478341): I use {@code includeDefaultDisplay} to make this method compatible to
-    // CarStatusBar because they have their own nav bar. Think about a better way for it.
+public interface NavigationBarController {
     /**
      * Creates navigation bars when car/status bar initializes.
+     * <p>
+     * TODO(b/117478341): I use {@code includeDefaultDisplay} to make this method compatible to
+     * CarStatusBar because they have their own nav bar. Think about a better way for it.
      *
      * @param includeDefaultDisplay {@code true} to create navigation bar on default display.
      */
-    public void createNavigationBars(final boolean includeDefaultDisplay,
-            RegisterStatusBarResult result) {
-        updateAccessibilityButtonModeIfNeeded();
+    void createNavigationBars(
+            boolean includeDefaultDisplay,
+            RegisterStatusBarResult result);
 
-        // Don't need to create nav bar on the default display if we initialize TaskBar.
-        final boolean shouldCreateDefaultNavbar = includeDefaultDisplay
-                && !initializeTaskbarIfNecessary();
-        Display[] displays = mDisplayTracker.getAllDisplays();
-        for (Display display : displays) {
-            if (shouldCreateDefaultNavbar
-                    || display.getDisplayId() != mDisplayTracker.getDefaultDisplayId()) {
-                createNavigationBar(display, null /* savedState */, result);
-            }
-        }
-    }
-
-    /**
-     * Adds a navigation bar on default display or an external display if the display supports
-     * system decorations.
-     *
-     * @param display the display to add navigation bar on.
-     */
-    @VisibleForTesting
-    void createNavigationBar(Display display, Bundle savedState, RegisterStatusBarResult result) {
-        if (display == null) {
-            return;
-        }
-
-        final int displayId = display.getDisplayId();
-        final boolean isOnDefaultDisplay = displayId == mDisplayTracker.getDefaultDisplayId();
-
-        if (!shouldCreateNavBarAndTaskBar(displayId)) {
-            return;
-        }
-
-        // We may show TaskBar on the default display for large screen device. Don't need to create
-        // navigation bar for this case.
-        if (isOnDefaultDisplay && initializeTaskbarIfNecessary()) {
-            return;
-        }
-
-        final Context context = isOnDefaultDisplay
-                ? mContext
-                : mContext.createDisplayContext(display);
-        NavigationBarComponent component = mNavigationBarComponentFactory.create(
-                context, savedState);
-        NavigationBar navBar = component.getNavigationBar();
-        navBar.init();
-        mNavigationBars.put(displayId, navBar);
-
-        navBar.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
-            @Override
-            public void onViewAttachedToWindow(View v) {
-                if (result != null) {
-                    navBar.setImeWindowStatus(display.getDisplayId(), result.mImeToken,
-                            result.mImeWindowVis, result.mImeBackDisposition,
-                            result.mShowImeSwitcher);
-                }
-            }
-
-            @Override
-            public void onViewDetachedFromWindow(View v) {
-                v.removeOnAttachStateChangeListener(this);
-            }
-        });
-    }
-
-    void removeNavigationBar(int displayId) {
-        NavigationBar navBar = mNavigationBars.get(displayId);
-        if (navBar != null) {
-            navBar.destroyView();
-            mNavigationBars.remove(displayId);
-        }
-    }
+    /** Removes the navigation bar for the given display ID. */
+    void removeNavigationBar(int displayId);
 
     /** @see NavigationBar#checkNavBarModes() */
-    public void checkNavBarModes(int displayId) {
-        NavigationBar navBar = mNavigationBars.get(displayId);
-        if (navBar != null) {
-            navBar.checkNavBarModes();
-        }
-    }
+    void checkNavBarModes(int displayId);
 
     /** @see NavigationBar#finishBarAnimations() */
-    public void finishBarAnimations(int displayId) {
-        NavigationBar navBar = mNavigationBars.get(displayId);
-        if (navBar != null) {
-            navBar.finishBarAnimations();
-        }
-    }
+    void finishBarAnimations(int displayId);
 
     /** @see NavigationBar#touchAutoDim() */
-    public void touchAutoDim(int displayId) {
-        NavigationBar navBar = mNavigationBars.get(displayId);
-        if (navBar != null) {
-            navBar.touchAutoDim();
-        }
-    }
+    void touchAutoDim(int displayId);
 
     /** @see NavigationBar#transitionTo(int, boolean) */
-    public void transitionTo(int displayId, @TransitionMode int barMode, boolean animate) {
-        NavigationBar navBar = mNavigationBars.get(displayId);
-        if (navBar != null) {
-            navBar.transitionTo(barMode, animate);
-        }
-    }
+    void transitionTo(int displayId, @BarTransitions.TransitionMode int barMode, boolean animate);
 
     /** @see NavigationBar#disableAnimationsDuringHide(long) */
-    public void disableAnimationsDuringHide(int displayId, long delay) {
-        NavigationBar navBar = mNavigationBars.get(displayId);
-        if (navBar != null) {
-            navBar.disableAnimationsDuringHide(delay);
-        }
-    }
+    void disableAnimationsDuringHide(int displayId, long delay);
 
     /** @return {@link NavigationBarView} on the default display. */
-    public @Nullable NavigationBarView getDefaultNavigationBarView() {
-        return getNavigationBarView(mDisplayTracker.getDefaultDisplayId());
-    }
+    @Nullable
+    NavigationBarView getDefaultNavigationBarView();
 
     /**
      * @param displayId the ID of display which Navigation bar is on
      * @return {@link NavigationBarView} on the display with {@code displayId}.
      *         {@code null} if no navigation bar on that display.
      */
-    public @Nullable NavigationBarView getNavigationBarView(int displayId) {
-        NavigationBar navBar = getNavigationBar(displayId);
-        return (navBar == null) ? null : navBar.getView();
-    }
+    @Nullable
+    NavigationBarView getNavigationBarView(int displayId);
 
-    private @Nullable NavigationBar getNavigationBar(int displayId) {
-        return mNavigationBars.get(displayId);
-    }
-
-    public boolean isOverviewEnabled(int displayId) {
-        final NavigationBarView navBarView = getNavigationBarView(displayId);
-        if (navBarView != null) {
-            return navBarView.isOverviewEnabled();
-        } else {
-            return mTaskbarDelegate.isOverviewEnabled();
-        }
-    }
+    boolean isOverviewEnabled(int displayId);
 
     /** @return {@link NavigationBar} on the default display. */
     @Nullable
-    public NavigationBar getDefaultNavigationBar() {
-        return mNavigationBars.get(mDisplayTracker.getDefaultDisplayId());
-    }
-
-    @Override
-    public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
-        pw.println("mIsLargeScreen=" + mIsLargeScreen);
-        pw.println("mNavMode=" + mNavMode);
-        for (int i = 0; i < mNavigationBars.size(); i++) {
-            if (i > 0) {
-                pw.println();
-            }
-            mNavigationBars.valueAt(i).dump(pw);
-        }
-    }
+    NavigationBar getDefaultNavigationBar();
 }
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerEmptyImpl.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerEmptyImpl.kt
new file mode 100644
index 0000000..e73b078
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerEmptyImpl.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.navigationbar
+
+import com.android.internal.statusbar.RegisterStatusBarResult
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.statusbar.phone.BarTransitions
+import javax.inject.Inject
+
+/** A no-op version of [NavigationBarController] for variants like Arc and TV. */
+@SysUISingleton
+class NavigationBarControllerEmptyImpl @Inject constructor() : NavigationBarController {
+    override fun createNavigationBars(
+        includeDefaultDisplay: Boolean,
+        result: RegisterStatusBarResult?,
+    ) {}
+    override fun removeNavigationBar(displayId: Int) {}
+    override fun checkNavBarModes(displayId: Int) {}
+    override fun finishBarAnimations(displayId: Int) {}
+    override fun touchAutoDim(displayId: Int) {}
+    override fun transitionTo(
+        displayId: Int,
+        @BarTransitions.TransitionMode barMode: Int,
+        animate: Boolean,
+    ) {}
+    override fun disableAnimationsDuringHide(displayId: Int, delay: Long) {}
+    override fun getDefaultNavigationBarView(): NavigationBarView? = null
+    override fun getNavigationBarView(displayId: Int): NavigationBarView? = null
+    override fun isOverviewEnabled(displayId: Int) = false
+    override fun getDefaultNavigationBar(): NavigationBar? = null
+}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java
new file mode 100644
index 0000000..564e984
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java
@@ -0,0 +1,490 @@
+/*
+ * Copyright (C) 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 com.android.systemui.navigationbar;
+
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR;
+import static com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler.DEBUG_MISSING_GESTURE_TAG;
+import static com.android.systemui.shared.recents.utilities.Utilities.isLargeScreen;
+
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.content.res.Configuration;
+import android.hardware.display.DisplayManager;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.os.Trace;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.util.Log;
+import android.util.SparseArray;
+import android.view.Display;
+import android.view.IWindowManager;
+import android.view.View;
+import android.view.WindowManagerGlobal;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.statusbar.RegisterStatusBarResult;
+import com.android.settingslib.applications.InterestingConfigChanges;
+import com.android.systemui.Dumpable;
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
+import com.android.systemui.model.SysUiState;
+import com.android.systemui.recents.OverviewProxyService;
+import com.android.systemui.settings.DisplayTracker;
+import com.android.systemui.shared.system.QuickStepContract;
+import com.android.systemui.shared.system.TaskStackChangeListeners;
+import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.phone.AutoHideController;
+import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
+import com.android.systemui.statusbar.phone.LightBarController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.util.settings.SecureSettings;
+import com.android.wm.shell.back.BackAnimation;
+import com.android.wm.shell.pip.Pip;
+
+import java.io.PrintWriter;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+@SysUISingleton
+public class NavigationBarControllerImpl implements
+        ConfigurationController.ConfigurationListener,
+        NavigationModeController.ModeChangedListener,
+        Dumpable, NavigationBarController {
+
+    private static final String TAG = NavigationBarControllerImpl.class.getSimpleName();
+
+    private final Context mContext;
+    private final Handler mHandler;
+    private final NavigationBarComponent.Factory mNavigationBarComponentFactory;
+    private FeatureFlags mFeatureFlags;
+    private final SecureSettings mSecureSettings;
+    private final DisplayTracker mDisplayTracker;
+    private final DisplayManager mDisplayManager;
+    private final TaskbarDelegate mTaskbarDelegate;
+    private final NavBarHelper mNavBarHelper;
+    private int mNavMode;
+    @VisibleForTesting boolean mIsLargeScreen;
+
+    /** A displayId - nav bar maps. */
+    @VisibleForTesting
+    SparseArray<NavigationBar> mNavigationBars = new SparseArray<>();
+
+    // Tracks config changes that will actually recreate the nav bar
+    private final InterestingConfigChanges mConfigChanges = new InterestingConfigChanges(
+            ActivityInfo.CONFIG_FONT_SCALE
+                    | ActivityInfo.CONFIG_UI_MODE);
+
+    @Inject
+    public NavigationBarControllerImpl(Context context,
+            OverviewProxyService overviewProxyService,
+            NavigationModeController navigationModeController,
+            SysUiState sysUiFlagsContainer,
+            CommandQueue commandQueue,
+            @Main Handler mainHandler,
+            ConfigurationController configurationController,
+            NavBarHelper navBarHelper,
+            TaskbarDelegate taskbarDelegate,
+            NavigationBarComponent.Factory navigationBarComponentFactory,
+            DumpManager dumpManager,
+            AutoHideController autoHideController,
+            LightBarController lightBarController,
+            TaskStackChangeListeners taskStackChangeListeners,
+            Optional<Pip> pipOptional,
+            Optional<BackAnimation> backAnimation,
+            FeatureFlags featureFlags,
+            SecureSettings secureSettings,
+            DisplayTracker displayTracker) {
+        mContext = context;
+        mHandler = mainHandler;
+        mNavigationBarComponentFactory = navigationBarComponentFactory;
+        mFeatureFlags = featureFlags;
+        mSecureSettings = secureSettings;
+        mDisplayTracker = displayTracker;
+        mDisplayManager = mContext.getSystemService(DisplayManager.class);
+        commandQueue.addCallback(mCommandQueueCallbacks);
+        configurationController.addCallback(this);
+        mConfigChanges.applyNewConfig(mContext.getResources());
+        mNavMode = navigationModeController.addListener(this);
+        mNavBarHelper = navBarHelper;
+        mTaskbarDelegate = taskbarDelegate;
+        mTaskbarDelegate.setDependencies(commandQueue, overviewProxyService,
+                navBarHelper, navigationModeController, sysUiFlagsContainer,
+                dumpManager, autoHideController, lightBarController, pipOptional,
+                backAnimation.orElse(null), taskStackChangeListeners);
+        mIsLargeScreen = isLargeScreen(mContext);
+        dumpManager.registerDumpable(this);
+    }
+
+    @Override
+    public void onConfigChanged(Configuration newConfig) {
+        boolean isOldConfigLargeScreen = mIsLargeScreen;
+        mIsLargeScreen = isLargeScreen(mContext);
+        boolean willApplyConfig = mConfigChanges.applyNewConfig(mContext.getResources());
+        boolean largeScreenChanged = mIsLargeScreen != isOldConfigLargeScreen;
+        // TODO(b/243765256): Disable this logging once b/243765256 is fixed.
+        Log.i(DEBUG_MISSING_GESTURE_TAG, "NavbarController: newConfig=" + newConfig
+                + " mTaskbarDelegate initialized=" + mTaskbarDelegate.isInitialized()
+                + " willApplyConfigToNavbars=" + willApplyConfig
+                + " navBarCount=" + mNavigationBars.size());
+        if (mTaskbarDelegate.isInitialized()) {
+            mTaskbarDelegate.onConfigurationChanged(newConfig);
+        }
+        // If we folded/unfolded while in 3 button, show navbar in folded state, hide in unfolded
+        if (largeScreenChanged && updateNavbarForTaskbar()) {
+            return;
+        }
+
+        if (willApplyConfig) {
+            for (int i = 0; i < mNavigationBars.size(); i++) {
+                recreateNavigationBar(mNavigationBars.keyAt(i));
+            }
+        } else {
+            for (int i = 0; i < mNavigationBars.size(); i++) {
+                mNavigationBars.valueAt(i).onConfigurationChanged(newConfig);
+            }
+        }
+    }
+
+    @Override
+    public void onNavigationModeChanged(int mode) {
+        if (mNavMode == mode) {
+            return;
+        }
+        final int oldMode = mNavMode;
+        mNavMode = mode;
+        updateAccessibilityButtonModeIfNeeded();
+
+        mHandler.post(() -> {
+            // create/destroy nav bar based on nav mode only in unfolded state
+            if (oldMode != mNavMode) {
+                updateNavbarForTaskbar();
+            }
+            for (int i = 0; i < mNavigationBars.size(); i++) {
+                NavigationBar navBar = mNavigationBars.valueAt(i);
+                if (navBar == null) {
+                    continue;
+                }
+                navBar.getView().updateStates();
+            }
+        });
+    }
+
+    private void updateAccessibilityButtonModeIfNeeded() {
+        final int mode = mSecureSettings.getIntForUser(
+                Settings.Secure.ACCESSIBILITY_BUTTON_MODE,
+                ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT);
+
+        // ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU is compatible under gestural or non-gestural
+        // mode, so we don't need to update it.
+        if (mode == ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU) {
+            return;
+        }
+
+        // ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR is incompatible under gestural mode. Need to
+        // force update to ACCESSIBILITY_BUTTON_MODE_GESTURE.
+        if (QuickStepContract.isGesturalMode(mNavMode)
+                && mode == ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR) {
+            mSecureSettings.putIntForUser(
+                    Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_GESTURE,
+                    UserHandle.USER_CURRENT);
+            // ACCESSIBILITY_BUTTON_MODE_GESTURE is incompatible under non gestural mode. Need to
+            // force update to ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR.
+        } else if (!QuickStepContract.isGesturalMode(mNavMode)
+                && mode == ACCESSIBILITY_BUTTON_MODE_GESTURE) {
+            mSecureSettings.putIntForUser(
+                    Settings.Secure.ACCESSIBILITY_BUTTON_MODE,
+                    ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT);
+        }
+    }
+
+    private boolean shouldCreateNavBarAndTaskBar(int displayId) {
+        final IWindowManager wms = WindowManagerGlobal.getWindowManagerService();
+
+        try {
+            return wms.hasNavigationBar(displayId);
+        } catch (RemoteException e) {
+            // Cannot get wms, just return false with warning message.
+            Log.w(TAG, "Cannot get WindowManager.");
+            return false;
+        }
+    }
+
+    /** @see #initializeTaskbarIfNecessary() */
+    private boolean updateNavbarForTaskbar() {
+        boolean taskbarShown = initializeTaskbarIfNecessary();
+        if (!taskbarShown && mNavigationBars.get(mContext.getDisplayId()) == null) {
+            createNavigationBar(mContext.getDisplay(), null, null);
+        }
+        return taskbarShown;
+    }
+
+    /** @return {@code true} if taskbar is enabled, false otherwise */
+    private boolean initializeTaskbarIfNecessary() {
+        // Enable for large screens or (phone AND flag is set); assuming phone = !mIsLargeScreen
+        boolean taskbarEnabled = (mIsLargeScreen || mFeatureFlags.isEnabled(
+                Flags.HIDE_NAVBAR_WINDOW)) && shouldCreateNavBarAndTaskBar(mContext.getDisplayId());
+
+        if (taskbarEnabled) {
+            Trace.beginSection("NavigationBarController#initializeTaskbarIfNecessary");
+            final int displayId = mContext.getDisplayId();
+            // Hint to NavBarHelper if we are replacing an existing bar to skip extra work
+            mNavBarHelper.setTogglingNavbarTaskbar(mNavigationBars.contains(displayId));
+            // Remove navigation bar when taskbar is showing
+            removeNavigationBar(displayId);
+            mTaskbarDelegate.init(displayId);
+            mNavBarHelper.setTogglingNavbarTaskbar(false);
+            Trace.endSection();
+
+        } else {
+            mTaskbarDelegate.destroy();
+        }
+        return taskbarEnabled;
+    }
+
+    private final CommandQueue.Callbacks mCommandQueueCallbacks = new CommandQueue.Callbacks() {
+        @Override
+        public void onDisplayRemoved(int displayId) {
+            removeNavigationBar(displayId);
+        }
+
+        @Override
+        public void onDisplayReady(int displayId) {
+            Display display = mDisplayManager.getDisplay(displayId);
+            mIsLargeScreen = isLargeScreen(mContext);
+            createNavigationBar(display, null /* savedState */, null /* result */);
+        }
+
+        @Override
+        public void setNavigationBarLumaSamplingEnabled(int displayId, boolean enable) {
+            final NavigationBar navigationBar = getNavigationBar(displayId);
+            if (navigationBar != null) {
+                navigationBar.setNavigationBarLumaSamplingEnabled(enable);
+            }
+        }
+
+        @Override
+        public void showPinningEnterExitToast(boolean entering) {
+            int displayId = mContext.getDisplayId();
+            final NavigationBarView navBarView = getNavigationBarView(displayId);
+            if (navBarView != null) {
+                navBarView.showPinningEnterExitToast(entering);
+            } else if (displayId == mDisplayTracker.getDefaultDisplayId()
+                    && mTaskbarDelegate.isInitialized()) {
+                mTaskbarDelegate.showPinningEnterExitToast(entering);
+            }
+        }
+
+        @Override
+        public void showPinningEscapeToast() {
+            int displayId = mContext.getDisplayId();
+            final NavigationBarView navBarView = getNavigationBarView(displayId);
+            if (navBarView != null) {
+                navBarView.showPinningEscapeToast();
+            } else if (displayId == mDisplayTracker.getDefaultDisplayId()
+                    && mTaskbarDelegate.isInitialized()) {
+                mTaskbarDelegate.showPinningEscapeToast();
+            }
+        }
+    };
+
+    /**
+     * Recreates the navigation bar for the given display.
+     */
+    private void recreateNavigationBar(int displayId) {
+        // TODO: Improve this flow so that we don't need to create a new nav bar but just
+        //       the view
+        Bundle savedState = new Bundle();
+        NavigationBar bar = mNavigationBars.get(displayId);
+        if (bar != null) {
+            bar.onSaveInstanceState(savedState);
+        }
+        removeNavigationBar(displayId);
+        createNavigationBar(mDisplayManager.getDisplay(displayId), savedState, null /* result */);
+    }
+
+    @Override
+    public void createNavigationBars(final boolean includeDefaultDisplay,
+            RegisterStatusBarResult result) {
+        updateAccessibilityButtonModeIfNeeded();
+
+        // Don't need to create nav bar on the default display if we initialize TaskBar.
+        final boolean shouldCreateDefaultNavbar = includeDefaultDisplay
+                && !initializeTaskbarIfNecessary();
+        Display[] displays = mDisplayTracker.getAllDisplays();
+        for (Display display : displays) {
+            if (shouldCreateDefaultNavbar
+                    || display.getDisplayId() != mDisplayTracker.getDefaultDisplayId()) {
+                createNavigationBar(display, null /* savedState */, result);
+            }
+        }
+    }
+
+    /**
+     * Adds a navigation bar on default display or an external display if the display supports
+     * system decorations.
+     *
+     * @param display the display to add navigation bar on.
+     */
+    @VisibleForTesting
+    void createNavigationBar(Display display, Bundle savedState,
+            RegisterStatusBarResult result) {
+        if (display == null) {
+            return;
+        }
+
+        final int displayId = display.getDisplayId();
+        final boolean isOnDefaultDisplay = displayId == mDisplayTracker.getDefaultDisplayId();
+
+        if (!shouldCreateNavBarAndTaskBar(displayId)) {
+            return;
+        }
+
+        // We may show TaskBar on the default display for large screen device. Don't need to create
+        // navigation bar for this case.
+        if (isOnDefaultDisplay && initializeTaskbarIfNecessary()) {
+            return;
+        }
+
+        final Context context = isOnDefaultDisplay
+                ? mContext
+                : mContext.createDisplayContext(display);
+        NavigationBarComponent component = mNavigationBarComponentFactory.create(
+                context, savedState);
+        NavigationBar navBar = component.getNavigationBar();
+        navBar.init();
+        mNavigationBars.put(displayId, navBar);
+
+        navBar.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
+            @Override
+            public void onViewAttachedToWindow(View v) {
+                if (result != null) {
+                    navBar.setImeWindowStatus(display.getDisplayId(), result.mImeToken,
+                            result.mImeWindowVis, result.mImeBackDisposition,
+                            result.mShowImeSwitcher);
+                }
+            }
+
+            @Override
+            public void onViewDetachedFromWindow(View v) {
+                v.removeOnAttachStateChangeListener(this);
+            }
+        });
+    }
+
+    @Override
+    public void removeNavigationBar(int displayId) {
+        NavigationBar navBar = mNavigationBars.get(displayId);
+        if (navBar != null) {
+            navBar.destroyView();
+            mNavigationBars.remove(displayId);
+        }
+    }
+
+    @Override
+    public void checkNavBarModes(int displayId) {
+        NavigationBar navBar = mNavigationBars.get(displayId);
+        if (navBar != null) {
+            navBar.checkNavBarModes();
+        }
+    }
+
+    @Override
+    public void finishBarAnimations(int displayId) {
+        NavigationBar navBar = mNavigationBars.get(displayId);
+        if (navBar != null) {
+            navBar.finishBarAnimations();
+        }
+    }
+
+    @Override
+    public void touchAutoDim(int displayId) {
+        NavigationBar navBar = mNavigationBars.get(displayId);
+        if (navBar != null) {
+            navBar.touchAutoDim();
+        }
+    }
+
+    @Override
+    public void transitionTo(int displayId, @TransitionMode int barMode, boolean animate) {
+        NavigationBar navBar = mNavigationBars.get(displayId);
+        if (navBar != null) {
+            navBar.transitionTo(barMode, animate);
+        }
+    }
+
+    @Override
+    public void disableAnimationsDuringHide(int displayId, long delay) {
+        NavigationBar navBar = mNavigationBars.get(displayId);
+        if (navBar != null) {
+            navBar.disableAnimationsDuringHide(delay);
+        }
+    }
+
+    @Override
+    public @Nullable NavigationBarView getDefaultNavigationBarView() {
+        return getNavigationBarView(mDisplayTracker.getDefaultDisplayId());
+    }
+
+    @Override
+    public @Nullable NavigationBarView getNavigationBarView(int displayId) {
+        NavigationBar navBar = getNavigationBar(displayId);
+        return (navBar == null) ? null : navBar.getView();
+    }
+
+    private @Nullable NavigationBar getNavigationBar(int displayId) {
+        return mNavigationBars.get(displayId);
+    }
+
+    @Override
+    public boolean isOverviewEnabled(int displayId) {
+        final NavigationBarView navBarView = getNavigationBarView(displayId);
+        if (navBarView != null) {
+            return navBarView.isOverviewEnabled();
+        } else {
+            return mTaskbarDelegate.isOverviewEnabled();
+        }
+    }
+
+    @Override
+    @Nullable
+    public NavigationBar getDefaultNavigationBar() {
+        return mNavigationBars.get(mDisplayTracker.getDefaultDisplayId());
+    }
+
+    @Override
+    public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
+        pw.println("mIsLargeScreen=" + mIsLargeScreen);
+        pw.println("mNavMode=" + mNavMode);
+        for (int i = 0; i < mNavigationBars.size(); i++) {
+            if (i > 0) {
+                pw.println();
+            }
+            mNavigationBars.valueAt(i).dump(pw);
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerModule.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerModule.kt
new file mode 100644
index 0000000..448f280
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerModule.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.navigationbar
+
+import dagger.Binds
+import dagger.Module
+
+/** A module providing an instance of [NavigationBarController]. */
+@Module
+abstract class NavigationBarControllerModule {
+    @Binds
+    abstract fun navigationBarController(impl: NavigationBarControllerImpl): NavigationBarController
+}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NoopNavigationBarControllerModule.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/NoopNavigationBarControllerModule.kt
new file mode 100644
index 0000000..b59912a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NoopNavigationBarControllerModule.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.navigationbar
+
+import dagger.Binds
+import dagger.Module
+
+/** A module providing a no-op instance of [NavigationBarController]. */
+@Module
+abstract class NoopNavigationBarControllerModule {
+    @Binds
+    abstract fun navigationBarController(
+        impl: NavigationBarControllerEmptyImpl
+    ): NavigationBarController
+}
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
index 0842fe0..ea8eb36 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
@@ -321,7 +321,7 @@
         // When switched to a secondary user, the sysUI is still running in the main user, we will
         // need to update the shortcut in the secondary user.
         if (user == getCurrentRunningUser()) {
-            updateNoteTaskAsUserInternal(user)
+            launchUpdateNoteTaskAsUser(user)
         } else {
             // TODO(b/278729185): Replace fire and forget service with a bounded service.
             val intent = NoteTaskControllerUpdateService.createIntent(context)
@@ -330,23 +330,25 @@
     }
 
     @InternalNoteTaskApi
-    fun updateNoteTaskAsUserInternal(user: UserHandle) {
-        if (!userManager.isUserUnlocked(user)) {
-            debugLog { "updateNoteTaskAsUserInternal call but user locked: user=$user" }
-            return
-        }
+    fun launchUpdateNoteTaskAsUser(user: UserHandle) {
+        applicationScope.launch {
+            if (!userManager.isUserUnlocked(user)) {
+                debugLog { "updateNoteTaskAsUserInternal call but user locked: user=$user" }
+                return@launch
+            }
 
-        val packageName = roleManager.getDefaultRoleHolderAsUser(ROLE_NOTES, user)
-        val hasNotesRoleHolder = isEnabled && !packageName.isNullOrEmpty()
+            val packageName = roleManager.getDefaultRoleHolderAsUser(ROLE_NOTES, user)
+            val hasNotesRoleHolder = isEnabled && !packageName.isNullOrEmpty()
 
-        setNoteTaskShortcutEnabled(hasNotesRoleHolder, user)
+            setNoteTaskShortcutEnabled(hasNotesRoleHolder, user)
 
-        if (hasNotesRoleHolder) {
-            shortcutManager.enableShortcuts(listOf(SHORTCUT_ID))
-            val updatedShortcut = roleManager.createNoteShortcutInfoAsUser(context, user)
-            shortcutManager.updateShortcuts(listOf(updatedShortcut))
-        } else {
-            shortcutManager.disableShortcuts(listOf(SHORTCUT_ID))
+            if (hasNotesRoleHolder) {
+                shortcutManager.enableShortcuts(listOf(SHORTCUT_ID))
+                val updatedShortcut = roleManager.createNoteShortcutInfoAsUser(context, user)
+                shortcutManager.updateShortcuts(listOf(updatedShortcut))
+            } else {
+                shortcutManager.disableShortcuts(listOf(SHORTCUT_ID))
+            }
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskControllerUpdateService.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskControllerUpdateService.kt
index 3e352af..486fde1 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskControllerUpdateService.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskControllerUpdateService.kt
@@ -44,7 +44,7 @@
     override fun onCreate() {
         super.onCreate()
         // TODO(b/278729185): Replace fire and forget service with a bounded service.
-        controller.updateNoteTaskAsUserInternal(user)
+        controller.launchUpdateNoteTaskAsUser(user)
         stopSelf()
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInitializer.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInitializer.kt
index fe1034a..338d3ed 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInitializer.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInitializer.kt
@@ -23,6 +23,7 @@
 import android.view.KeyEvent
 import android.view.KeyEvent.KEYCODE_N
 import android.view.KeyEvent.KEYCODE_STYLUS_BUTTON_TAIL
+import android.view.ViewConfiguration
 import com.android.keyguard.KeyguardUpdateMonitor
 import com.android.keyguard.KeyguardUpdateMonitorCallback
 import com.android.systemui.dagger.qualifiers.Background
@@ -65,12 +66,6 @@
      * [NoteTaskController], ensure custom actions can be triggered (i.e., keyboard shortcut).
      */
     private fun initializeHandleSystemKey() {
-        val callbacks =
-            object : CommandQueue.Callbacks {
-                override fun handleSystemKey(key: KeyEvent) {
-                    key.toNoteTaskEntryPointOrNull()?.let(controller::showNoteTask)
-                }
-            }
         commandQueue.addCallback(callbacks)
     }
 
@@ -134,15 +129,39 @@
                 controller.updateNoteTaskForCurrentUserAndManagedProfiles()
             }
         }
-}
 
-/**
- * Maps a [KeyEvent] to a [NoteTaskEntryPoint]. If the [KeyEvent] does not represent a
- * [NoteTaskEntryPoint], returns null.
- */
-private fun KeyEvent.toNoteTaskEntryPointOrNull(): NoteTaskEntryPoint? =
-    when {
-        keyCode == KEYCODE_STYLUS_BUTTON_TAIL -> TAIL_BUTTON
-        keyCode == KEYCODE_N && isMetaPressed && isCtrlPressed -> KEYBOARD_SHORTCUT
-        else -> null
+    /**
+     * Tracks a [KeyEvent], and determines if it should trigger an action to show the note task.
+     * Returns a [NoteTaskEntryPoint] if an action should be taken, and null otherwise.
+     */
+    private fun KeyEvent.toNoteTaskEntryPointOrNull(): NoteTaskEntryPoint? =
+        when {
+            keyCode == KEYCODE_STYLUS_BUTTON_TAIL && isTailButtonNotesGesture() -> TAIL_BUTTON
+            keyCode == KEYCODE_N && isMetaPressed && isCtrlPressed -> KEYBOARD_SHORTCUT
+            else -> null
+        }
+
+    private var lastStylusButtonTailUpEventTime: Long = -MULTI_PRESS_TIMEOUT
+
+    /**
+     * Perform gesture detection for the stylus tail button to make sure we only show the note task
+     * when there is a single press. Long presses and multi-presses are ignored for now.
+     */
+    private fun KeyEvent.isTailButtonNotesGesture(): Boolean {
+        if (keyCode != KEYCODE_STYLUS_BUTTON_TAIL || action != KeyEvent.ACTION_UP) {
+            return false
+        }
+
+        val isMultiPress = (downTime - lastStylusButtonTailUpEventTime) < MULTI_PRESS_TIMEOUT
+        val isLongPress = (eventTime - downTime) >= LONG_PRESS_TIMEOUT
+        lastStylusButtonTailUpEventTime = eventTime
+        // For now, trigger action immediately on UP of a single press, without waiting for
+        // the multi-press timeout to expire.
+        return !isMultiPress && !isLongPress
     }
+
+    companion object {
+        val MULTI_PRESS_TIMEOUT = ViewConfiguration.getMultiPressTimeout().toLong()
+        val LONG_PRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout().toLong()
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/model/ObservableTransitionState.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/model/ObservableTransitionState.kt
index 9a30aa6..3927873 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/shared/model/ObservableTransitionState.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/shared/model/ObservableTransitionState.kt
@@ -32,5 +32,16 @@
         val fromScene: SceneKey,
         val toScene: SceneKey,
         val progress: Flow<Float>,
+
+        /**
+         * Whether the transition was originally triggered by user input rather than being
+         * programmatic. If this value is initially true, it will remain true until the transition
+         * fully completes, even if the user input that triggered the transition has ended. Any
+         * sub-transitions launched by this one will inherit this value. For example, if the user
+         * drags a pointer but does not exceed the threshold required to transition to another
+         * scene, this value will remain true after the pointer is no longer touching the screen and
+         * will be true in any transition created to animate back to the original position.
+         */
+        val isUserInputDriven: Boolean,
     ) : ObservableTransitionState()
 }
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index d2e80fc..7f0b899 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -586,6 +586,8 @@
     private boolean mGestureWaitForTouchSlop;
     private boolean mIgnoreXTouchSlop;
     private boolean mExpandLatencyTracking;
+    private boolean mUseExternalTouch = false;
+
     /**
      * Whether we're waking up and will play the delayed doze animation in
      * {@link NotificationWakeUpCoordinator}. If so, we'll want to keep the clock centered until the
@@ -1404,13 +1406,6 @@
 
         updateViewControllers(userAvatarView, keyguardUserSwitcherView);
 
-        if (mFeatureFlags.isEnabled(Flags.MIGRATE_KEYGUARD_STATUS_VIEW) && !mFeatureFlags.isEnabled(
-                Flags.LAZY_INFLATE_KEYGUARD)) {
-            attachSplitShadeMediaPlayerContainer(
-                    mKeyguardViewConfigurator.getKeyguardRootView()
-                        .findViewById(R.id.status_view_media_container));
-        }
-
         if (!mFeatureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
             // Update keyguard bottom area
             int index = mView.indexOfChild(mKeyguardBottomArea);
@@ -4121,12 +4116,22 @@
 
     /** Sends an external (e.g. Status Bar) intercept touch event to the Shade touch handler. */
     boolean handleExternalInterceptTouch(MotionEvent event) {
-        return mTouchHandler.onInterceptTouchEvent(event);
+        try {
+            mUseExternalTouch = true;
+            return mTouchHandler.onInterceptTouchEvent(event);
+        } finally {
+            mUseExternalTouch = false;
+        }
     }
 
     @Override
     public boolean handleExternalTouch(MotionEvent event) {
-        return mTouchHandler.onTouchEvent(event);
+        try {
+            mUseExternalTouch = true;
+            return mTouchHandler.onTouchEvent(event);
+        } finally {
+            mUseExternalTouch = false;
+        }
     }
 
     @Override
@@ -4713,9 +4718,20 @@
     public final class TouchHandler implements View.OnTouchListener, Gefingerpoken {
         private long mLastTouchDownTime = -1L;
 
-        /** @see ViewGroup#onInterceptTouchEvent(MotionEvent) */
+        /**
+         * With the shade and lockscreen being separated in the view hierarchy, touch handling now
+         * originates with the parent window through {@link #handleExternalTouch}. This allows for
+         * parity with the legacy hierarchy while not undertaking a massive refactoring of touch
+         * handling.
+         *
+         * @see NotificationShadeWindowViewController#didNotificationPanelInterceptEvent
+         */
         @Override
         public boolean onInterceptTouchEvent(MotionEvent event) {
+            if (mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL) && !mUseExternalTouch) {
+                return false;
+            }
+
             mShadeLog.logMotionEvent(event, "NPVC onInterceptTouchEvent");
             if (mQsController.disallowTouches()) {
                 mShadeLog.logMotionEvent(event,
@@ -4868,8 +4884,20 @@
             return onTouchEvent(event);
         }
 
+        /**
+         * With the shade and lockscreen being separated in the view hierarchy, touch handling now
+         * originates with the parent window through {@link #handleExternalTouch}. This allows for
+         * parity with the legacy hierarchy while not undertaking a massive refactoring of touch
+         * handling.
+         *
+         * @see NotificationShadeWindowViewController#didNotificationPanelInterceptEvent
+         */
         @Override
         public boolean onTouchEvent(MotionEvent event) {
+            if (mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL) && !mUseExternalTouch) {
+                return false;
+            }
+
             if (event.getAction() == MotionEvent.ACTION_DOWN) {
                 if (event.getDownTime() == mLastTouchDownTime) {
                     // An issue can occur when swiping down after unlock, where multiple down
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
index 880ba92..96fae14 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
@@ -267,6 +267,9 @@
         }
         mView.setLayoutInsetsController(mNotificationInsetsController);
         mView.setInteractionEventHandler(new NotificationShadeWindowView.InteractionEventHandler() {
+            boolean mUseDragDownHelperForTouch = false;
+            boolean mLastInterceptWasDragDownHelper = false;
+
             @Override
             public Boolean handleDispatchTouchEvent(MotionEvent ev) {
                 if (mStatusBarViewController == null) { // Fix for b/192490822
@@ -360,10 +363,8 @@
                 );
 
                 // In case we start outside of the view bounds (below the status bar), we need to
-                // dispatch
-                // the touch manually as the view system can't accommodate for touches outside of
-                // the
-                // regular view bounds.
+                // dispatch the touch manually as the view system can't accommodate for touches
+                // outside of the regular view bounds.
                 if (isDown && ev.getY() >= mView.getBottom()) {
                     mExpandingBelowNotch = true;
                     expandingBelowNotch = true;
@@ -405,6 +406,15 @@
 
             @Override
             public boolean shouldInterceptTouchEvent(MotionEvent ev) {
+                boolean intercepted = shouldInterceptTouchEventInternal(ev);
+                if (intercepted) {
+                    mUseDragDownHelperForTouch = mLastInterceptWasDragDownHelper;
+                }
+                return intercepted;
+            }
+
+            private boolean shouldInterceptTouchEventInternal(MotionEvent ev) {
+                mLastInterceptWasDragDownHelper = false;
                 if (mStatusBarStateController.isDozing() && !mDozeServiceHost.isPulsing()
                         && !mDockManager.isDocked()) {
                     if (ev.getAction() == MotionEvent.ACTION_DOWN) {
@@ -431,19 +441,36 @@
                 }
 
                 if (mNotificationPanelViewController.isFullyExpanded()
-                        && mDragDownHelper.isDragDownEnabled()
                         && !mService.isBouncerShowing()
                         && !mStatusBarStateController.isDozing()) {
-                    boolean result = mDragDownHelper.onInterceptTouchEvent(ev);
-                    if (result) {
-                        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
-                            mShadeLogger.d("NSWVC: drag down helper intercepted");
+                    if (mDragDownHelper.isDragDownEnabled()) {
+                        // This handles drag down over lockscreen
+                        boolean result = mDragDownHelper.onInterceptTouchEvent(ev);
+                        if (mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL)) {
+                            if (result) {
+                                mLastInterceptWasDragDownHelper = true;
+                                if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+                                    mShadeLogger.d("NSWVC: drag down helper intercepted");
+                                }
+                            } else if (didNotificationPanelInterceptEvent(ev)) {
+                                return true;
+                            }
+                        } else {
+                            if (result) {
+                                if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+                                    mShadeLogger.d("NSWVC: drag down helper intercepted");
+                                }
+                            }
+                        }
+                        return result;
+                    } else {
+                        // This else handles interactions on the full shade while unlocked
+                        if (didNotificationPanelInterceptEvent(ev)) {
+                            return true;
                         }
                     }
-                    return result;
-                } else {
-                    return false;
                 }
+                return false;
             }
 
             @Override
@@ -451,7 +478,9 @@
                 MotionEvent cancellation = MotionEvent.obtain(ev);
                 cancellation.setAction(MotionEvent.ACTION_CANCEL);
                 mStackScrollLayout.onInterceptTouchEvent(cancellation);
-                mNotificationPanelViewController.handleExternalInterceptTouch(cancellation);
+                if (!mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL)) {
+                    mNotificationPanelViewController.handleExternalInterceptTouch(cancellation);
+                }
                 cancellation.recycle();
             }
 
@@ -461,18 +490,27 @@
                 if (mStatusBarStateController.isDozing()) {
                     handled = !mDozeServiceHost.isPulsing();
                 }
-
                 if (mStatusBarKeyguardViewManager.onTouch(ev)) {
                     return true;
                 }
-
-                if (mDragDownHelper.isDragDownEnabled()
-                        || mDragDownHelper.isDraggingDown()) {
-                    // we still want to finish our drag down gesture when locking the screen
-                    return mDragDownHelper.onTouchEvent(ev) || handled;
+                if (mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL)) {
+                    if (mLastInterceptWasDragDownHelper && (mDragDownHelper.isDraggingDown())) {
+                        // we still want to finish our drag down gesture when locking the screen
+                        handled |= mDragDownHelper.onTouchEvent(ev) || handled;
+                    }
+                    if (!handled && mNotificationPanelViewController.handleExternalTouch(ev)) {
+                        return true;
+                    }
                 } else {
-                    return handled;
+                    if (mDragDownHelper.isDragDownEnabled()
+                            || mDragDownHelper.isDraggingDown()) {
+                        // we still want to finish our drag down gesture when locking the screen
+                        return mDragDownHelper.onTouchEvent(ev) || handled;
+                    } else {
+                        return handled;
+                    }
                 }
+                return handled;
             }
 
             @Override
@@ -520,6 +558,20 @@
         mDepthController.onPanelExpansionChanged(currentState);
     }
 
+    private boolean didNotificationPanelInterceptEvent(MotionEvent ev) {
+        if (mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL)) {
+            // Since NotificationStackScrollLayout is now a sibling of notification_panel, we need
+            // to also ask NotificationPanelViewController directly, in order to process swipe up
+            // events originating from notifications
+            if (mNotificationPanelViewController.handleExternalInterceptTouch(ev)) {
+                mShadeLogger.d("NSWVC: NPVC intercepted");
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     public NotificationShadeWindowView getView() {
         return mView;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
index ff0d78f8..d653cb4 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
@@ -70,6 +70,7 @@
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
 import com.android.systemui.fragments.FragmentHostManager;
 import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
 import com.android.systemui.media.controls.pipeline.MediaDataManager;
@@ -1776,7 +1777,9 @@
                     // Dragging down on the lockscreen statusbar should prohibit other interactions
                     // immediately, otherwise we'll wait on the touchslop. This is to allow
                     // dragging down to expanded quick settings directly on the lockscreen.
-                    mPanelView.getParent().requestDisallowInterceptTouchEvent(true);
+                    if (!mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL)) {
+                        mPanelView.getParent().requestDisallowInterceptTouchEvent(true);
+                    }
                 }
                 if (mExpansionAnimator != null) {
                     mInitialHeightOnTouch = mExpansionHeight;
@@ -1819,7 +1822,9 @@
                         && Math.abs(h) > Math.abs(x - mInitialTouchX)
                         && shouldQuickSettingsIntercept(
                         mInitialTouchX, mInitialTouchY, h)) {
-                    mPanelView.getParent().requestDisallowInterceptTouchEvent(true);
+                    if (!mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL)) {
+                        mPanelView.getParent().requestDisallowInterceptTouchEvent(true);
+                    }
                     mShadeLog.onQsInterceptMoveQsTrackingEnabled(h);
                     setTracking(true);
                     traceQsJank(true, false);
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
index 9a356ad..19a4ee8 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
@@ -484,11 +484,13 @@
         if (largeScreenActive) {
             logInstantEvent("Large screen constraints set")
             header.setTransition(LARGE_SCREEN_HEADER_TRANSITION_ID)
+            systemIconsHoverContainer.isClickable = true
             systemIconsHoverContainer.setOnClickListener { shadeCollapseAction?.run() }
         } else {
             logInstantEvent("Small screen constraints set")
             header.setTransition(HEADER_TRANSITION_ID)
             systemIconsHoverContainer.setOnClickListener(null)
+            systemIconsHoverContainer.isClickable = false
         }
         header.jumpToState(header.startState)
         updatePosition()
diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt
index b77b9e4..9918918 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt
@@ -59,6 +59,7 @@
     @Application scope: CoroutineScope,
     disableFlagsRepository: DisableFlagsRepository,
     sceneContainerFlags: SceneContainerFlags,
+    // TODO(b/300258424) convert to direct reference instead of provider
     sceneInteractorProvider: Provider<SceneInteractor>,
     keyguardRepository: KeyguardRepository,
     userSetupRepository: UserSetupRepository,
@@ -141,15 +142,22 @@
      * if the user's input gesture has ended but a transition they initiated is animating.
      */
     val isUserInteractingWithShade: Flow<Boolean> =
-        userInteractingFlow(repository.legacyShadeTracking, repository.legacyShadeExpansion)
-
+        if (sceneContainerFlags.isEnabled()) {
+            sceneBasedInteracting(sceneInteractorProvider.get(), SceneKey.Shade)
+        } else {
+            userInteractingFlow(repository.legacyShadeTracking, repository.legacyShadeExpansion)
+        }
     /**
      * Whether the user is expanding or collapsing quick settings with user input. This will be true
      * even if the user's input gesture has ended but a transition they initiated is still
      * animating.
      */
     val isUserInteractingWithQs: Flow<Boolean> =
-        userInteractingFlow(repository.legacyQsTracking, repository.qsExpansion)
+        if (sceneContainerFlags.isEnabled()) {
+            sceneBasedInteracting(sceneInteractorProvider.get(), SceneKey.QuickSettings)
+        } else {
+            userInteractingFlow(repository.legacyQsTracking, repository.qsExpansion)
+        }
 
     /**
      * Whether the user is expanding or collapsing either the shade or quick settings with user
@@ -158,6 +166,7 @@
      */
     val isUserInteracting: Flow<Boolean> =
         combine(isUserInteractingWithShade, isUserInteractingWithShade) { shade, qs -> shade || qs }
+            .distinctUntilChanged()
 
     /** Emits true if the shade can be expanded from QQS to QS and false otherwise. */
     val isExpandToQsEnabled: Flow<Boolean> =
@@ -198,6 +207,18 @@
             }
             .distinctUntilChanged()
 
+    fun sceneBasedInteracting(sceneInteractor: SceneInteractor, sceneKey: SceneKey) =
+        sceneInteractor.transitionState
+            .map { state ->
+                when (state) {
+                    is ObservableTransitionState.Idle -> false
+                    is ObservableTransitionState.Transition ->
+                        state.isUserInputDriven &&
+                            (state.toScene == sceneKey || state.fromScene == sceneKey)
+                }
+            }
+            .distinctUntilChanged()
+
     /**
      * Return a flow for whether a user is interacting with an expandable shade component using
      * tracking and expansion flows. NOTE: expansion must be a `StateFlow` to guarantee that
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 6304c1e..670fb12 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -375,15 +375,8 @@
         /**
          * @see IStatusBar#showTransient(int, int, boolean).
          */
-        default void showTransient(int displayId, @InsetsType int types) { }
-
-        /**
-         * @see IStatusBar#showTransient(int, int, boolean).
-         */
         default void showTransient(int displayId, @InsetsType int types,
-                boolean isGestureOnSystemBar) {
-            showTransient(displayId, types);
-        }
+                boolean isGestureOnSystemBar) {}
 
         /**
          * @see IStatusBar#abortTransient(int, int).
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java
index 3dfe068..d058d04 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java
@@ -16,7 +16,6 @@
 
 package com.android.systemui.statusbar.dagger;
 
-import android.app.IActivityManager;
 import android.app.WallpaperManager;
 import android.content.Context;
 import android.hardware.display.DisplayManager;
@@ -38,7 +37,6 @@
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
 import com.android.systemui.media.controls.pipeline.MediaDataManager;
-import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.power.domain.interactor.PowerInteractor;
 import com.android.systemui.settings.DisplayTracker;
@@ -57,12 +55,10 @@
 import com.android.systemui.statusbar.StatusBarStateControllerImpl;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.commandline.CommandRegistry;
-import com.android.systemui.statusbar.gesture.SwipeStatusBarAwayGestureHandler;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.RemoteInputControllerLogger;
 import com.android.systemui.statusbar.notification.collection.NotifCollection;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
-import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
 import com.android.systemui.statusbar.phone.CentralSurfacesImpl;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -73,23 +69,15 @@
 import com.android.systemui.statusbar.phone.StatusBarIconList;
 import com.android.systemui.statusbar.phone.StatusBarNotificationPresenterModule;
 import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback;
-import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
-import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallFlags;
-import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallLogger;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.statusbar.policy.RemoteInputUriController;
-import com.android.systemui.statusbar.window.StatusBarWindowController;
 import com.android.systemui.util.concurrency.DelayableExecutor;
-import com.android.systemui.util.time.SystemClock;
 
 import dagger.Binds;
 import dagger.Lazy;
 import dagger.Module;
 import dagger.Provides;
 
-import java.util.Optional;
-import java.util.concurrent.Executor;
-
 /**
  * This module provides instances needed to construct {@link CentralSurfacesImpl}. These are moved to
  * this separate from {@link CentralSurfacesModule} module so that components that wish to build
@@ -230,51 +218,6 @@
     }
 
     /**
-     */
-    @Provides
-    @SysUISingleton
-    static OngoingCallController provideOngoingCallController(
-            Context context,
-            CommonNotifCollection notifCollection,
-            SystemClock systemClock,
-            ActivityStarter activityStarter,
-            @Main Executor mainExecutor,
-            IActivityManager iActivityManager,
-            OngoingCallLogger logger,
-            DumpManager dumpManager,
-            StatusBarWindowController statusBarWindowController,
-            SwipeStatusBarAwayGestureHandler swipeStatusBarAwayGestureHandler,
-            StatusBarStateController statusBarStateController,
-            OngoingCallFlags ongoingCallFlags) {
-
-        boolean ongoingCallInImmersiveEnabled = ongoingCallFlags.isInImmersiveEnabled();
-        Optional<StatusBarWindowController> windowController =
-                ongoingCallInImmersiveEnabled
-                        ? Optional.of(statusBarWindowController)
-                        : Optional.empty();
-        Optional<SwipeStatusBarAwayGestureHandler> gestureHandler =
-                ongoingCallInImmersiveEnabled
-                        ? Optional.of(swipeStatusBarAwayGestureHandler)
-                        : Optional.empty();
-        OngoingCallController ongoingCallController =
-                new OngoingCallController(
-                        context,
-                        notifCollection,
-                        ongoingCallFlags,
-                        systemClock,
-                        activityStarter,
-                        mainExecutor,
-                        iActivityManager,
-                        logger,
-                        dumpManager,
-                        windowController,
-                        gestureHandler,
-                        statusBarStateController);
-        ongoingCallController.init();
-        return ongoingCallController;
-    }
-
-    /**
      * {@link NotificationPanelViewController} implements two interfaces:
      *  - {@link com.android.systemui.shade.ShadeViewController}, which can be used by any class
      *    needing access to the shade.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt
new file mode 100644
index 0000000..d1464ed
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.dagger
+
+import com.android.systemui.CoreStartable
+import com.android.systemui.statusbar.data.repository.StatusBarModeRepository
+import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryImpl
+import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController
+import dagger.Binds
+import dagger.Module
+import dagger.multibindings.ClassKey
+import dagger.multibindings.IntoMap
+
+/**
+ * A module for **only** classes related to the status bar **UI element**. This module specifically
+ * should **not** include:
+ * - Classes in the `statusbar` package that are unrelated to the status bar UI.
+ * - Status bar classes that are already provided by other modules
+ *   ([com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule],
+ *   [com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule], etc.).
+ */
+@Module
+abstract class StatusBarModule {
+    @Binds
+    abstract fun bindStatusBarModeRepository(
+        impl: StatusBarModeRepositoryImpl
+    ): StatusBarModeRepository
+
+    @Binds
+    @IntoMap
+    @ClassKey(StatusBarModeRepositoryImpl::class)
+    abstract fun bindStatusBarModeRepositoryStart(impl: StatusBarModeRepositoryImpl): CoreStartable
+
+    @Binds
+    @IntoMap
+    @ClassKey(OngoingCallController::class)
+    abstract fun bindOngoingCallController(impl: OngoingCallController): CoreStartable
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/StatusBarModeRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/StatusBarModeRepository.kt
new file mode 100644
index 0000000..1de7a2f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/StatusBarModeRepository.kt
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.data.repository
+
+import android.view.WindowInsets
+import com.android.systemui.CoreStartable
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.DisplayId
+import com.android.systemui.statusbar.CommandQueue
+import javax.inject.Inject
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+/**
+ * A repository for the current mode of the status bar on the homescreen (translucent, transparent,
+ * opaque, lights out, hidden, etc.).
+ *
+ * Note: These status bar modes are status bar *window* states that are sent to us from
+ * WindowManager, not determined internally.
+ */
+interface StatusBarModeRepository {
+    /**
+     * True if the status bar window is showing transiently and will disappear soon, and false
+     * otherwise. ("Otherwise" in this case means the status bar is persistently hidden OR
+     * persistently shown.)
+     *
+     * This behavior is controlled by WindowManager via
+     * [android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE], *not* calculated
+     * internally. SysUI merely obeys the behavior sent to us.
+     */
+    val isTransientShown: StateFlow<Boolean>
+
+    /**
+     * Requests for the status bar to be shown transiently.
+     *
+     * TODO(b/277764509): Don't allow [CentralSurfaces] to set the transient mode; have it
+     *   determined internally instead.
+     */
+    fun showTransient()
+
+    /**
+     * Requests for the status bar to be no longer showing transiently.
+     *
+     * TODO(b/277764509): Don't allow [CentralSurfaces] to set the transient mode; have it
+     *   determined internally instead.
+     */
+    fun clearTransient()
+}
+
+@SysUISingleton
+class StatusBarModeRepositoryImpl
+@Inject
+constructor(
+    @DisplayId thisDisplayId: Int,
+    private val commandQueue: CommandQueue,
+) : StatusBarModeRepository, CoreStartable {
+
+    private val commandQueueCallback =
+        object : CommandQueue.Callbacks {
+            override fun showTransient(
+                displayId: Int,
+                @WindowInsets.Type.InsetsType types: Int,
+                isGestureOnSystemBar: Boolean,
+            ) {
+                if (isTransientRelevant(displayId, types)) {
+                    _isTransientShown.value = true
+                }
+            }
+
+            override fun abortTransient(displayId: Int, @WindowInsets.Type.InsetsType types: Int) {
+                if (isTransientRelevant(displayId, types)) {
+                    _isTransientShown.value = false
+                }
+            }
+
+            private fun isTransientRelevant(
+                displayId: Int,
+                @WindowInsets.Type.InsetsType types: Int,
+            ): Boolean {
+                return displayId == thisDisplayId && (types and WindowInsets.Type.statusBars() != 0)
+            }
+        }
+
+    override fun start() {
+        commandQueue.addCallback(commandQueueCallback)
+    }
+
+    private val _isTransientShown = MutableStateFlow(false)
+    override val isTransientShown: StateFlow<Boolean> = _isTransientShown.asStateFlow()
+
+    override fun showTransient() {
+        _isTransientShown.value = true
+    }
+
+    override fun clearTransient() {
+        _isTransientShown.value = false
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
index 7d57568..6ed2089 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
@@ -306,10 +306,6 @@
     @VisibleForTesting
     void setBarStateForTest(int state);
 
-    void showTransientUnchecked();
-
-    void clearTransient();
-
     void acquireGestureWakeLock(long time);
 
     boolean setAppearance(int appearance);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
index ebcfb8a..c9db153 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
@@ -36,7 +36,6 @@
 import android.util.Slog;
 import android.view.HapticFeedbackConstants;
 import android.view.KeyEvent;
-import android.view.WindowInsets;
 import android.view.WindowInsets.Type.InsetsType;
 import android.view.WindowInsetsController.Appearance;
 import android.view.WindowInsetsController.Behavior;
@@ -192,17 +191,6 @@
     }
 
     @Override
-    public void abortTransient(int displayId, @InsetsType int types) {
-        if (displayId != mDisplayId) {
-            return;
-        }
-        if ((types & WindowInsets.Type.statusBars()) == 0) {
-            return;
-        }
-        mCentralSurfaces.clearTransient();
-    }
-
-    @Override
     public void addQsTile(ComponentName tile) {
         mQSHost.addTile(tile);
     }
@@ -487,17 +475,6 @@
     }
 
     @Override
-    public void showTransient(int displayId, @InsetsType int types, boolean isGestureOnSystemBar) {
-        if (displayId != mDisplayId) {
-            return;
-        }
-        if ((types & WindowInsets.Type.statusBars()) == 0) {
-            return;
-        }
-        mCentralSurfaces.showTransientUnchecked();
-    }
-
-    @Override
     public void toggleKeyboardShortcutsMenu(int deviceId) {
         mCentralSurfaces.resendMessage(new CentralSurfaces.KeyboardShortcutsMessage(deviceId));
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt
index 5e505f7..50d8e99 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt
@@ -86,8 +86,6 @@
     override fun updateNotificationPanelTouchState() {}
     override fun getRotation() = 0
     override fun setBarStateForTest(state: Int) {}
-    override fun showTransientUnchecked() {}
-    override fun clearTransient() {}
     override fun acquireGestureWakeLock(time: Long) {}
     override fun setAppearance(appearance: Int) = false
     override fun getBarMode() = 0
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index 8d35d39..d968e71 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -207,6 +207,7 @@
 import com.android.systemui.statusbar.StatusBarState;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.core.StatusBarInitializer;
+import com.android.systemui.statusbar.data.repository.StatusBarModeRepository;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotificationActivityStarter;
 import com.android.systemui.statusbar.notification.NotificationLaunchAnimatorControllerProvider;
@@ -238,6 +239,7 @@
 import com.android.systemui.util.WallpaperController;
 import com.android.systemui.util.concurrency.DelayableExecutor;
 import com.android.systemui.util.concurrency.MessageRouter;
+import com.android.systemui.util.kotlin.JavaAdapter;
 import com.android.systemui.volume.VolumeComponent;
 import com.android.wm.shell.bubbles.Bubbles;
 import com.android.wm.shell.startingsurface.SplashscreenContentDrawer;
@@ -410,6 +412,7 @@
     private final NotificationShadeWindowController mNotificationShadeWindowController;
     private final StatusBarInitializer mStatusBarInitializer;
     private final StatusBarWindowController mStatusBarWindowController;
+    private final StatusBarModeRepository mStatusBarModeRepository;
     private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
     @VisibleForTesting
     DozeServiceHost mDozeServiceHost;
@@ -496,8 +499,6 @@
     /** @see android.view.WindowInsetsController#setSystemBarsAppearance(int, int) */
     private @Appearance int mAppearance;
 
-    private boolean mTransientShown;
-
     private final DisplayMetrics mDisplayMetrics;
 
     // XXX: gesture research
@@ -558,6 +559,7 @@
     private final ScrimController mScrimController;
     protected DozeScrimController mDozeScrimController;
     private final BackActionInteractor mBackActionInteractor;
+    private final JavaAdapter mJavaAdapter;
     private final Executor mUiBgExecutor;
 
     protected boolean mDozing;
@@ -633,6 +635,7 @@
             StatusBarInitializer statusBarInitializer,
             StatusBarWindowController statusBarWindowController,
             StatusBarWindowStateController statusBarWindowStateController,
+            StatusBarModeRepository statusBarModeRepository,
             KeyguardUpdateMonitor keyguardUpdateMonitor,
             StatusBarSignalPolicy statusBarSignalPolicy,
             PulseExpansionHandler pulseExpansionHandler,
@@ -651,6 +654,7 @@
             DisplayMetrics displayMetrics,
             MetricsLogger metricsLogger,
             ShadeLogger shadeLogger,
+            JavaAdapter javaAdapter,
             @UiBackground Executor uiBgExecutor,
             ShadeSurface shadeSurface,
             NotificationMediaManager notificationMediaManager,
@@ -740,6 +744,7 @@
         mAutoHideController = autoHideController;
         mStatusBarInitializer = statusBarInitializer;
         mStatusBarWindowController = statusBarWindowController;
+        mStatusBarModeRepository = statusBarModeRepository;
         mKeyguardUpdateMonitor = keyguardUpdateMonitor;
         mPulseExpansionHandler = pulseExpansionHandler;
         mWakeUpCoordinator = notificationWakeUpCoordinator;
@@ -759,6 +764,7 @@
         mDisplayMetrics = displayMetrics;
         mMetricsLogger = metricsLogger;
         mShadeLogger = shadeLogger;
+        mJavaAdapter = javaAdapter;
         mUiBgExecutor = uiBgExecutor;
         mShadeSurface = shadeSurface;
         mMediaManager = notificationMediaManager;
@@ -934,7 +940,7 @@
         setUpPresenter();
 
         if ((result.mTransientBarTypes & WindowInsets.Type.statusBars()) != 0) {
-            showTransientUnchecked();
+            mStatusBarModeRepository.showTransient();
         }
         mCommandQueueCallbacks.onSystemBarAttributesChanged(mDisplayId, result.mAppearance,
                 result.mAppearanceRegions, result.mNavbarColorManagedByIme, result.mBehavior,
@@ -1184,6 +1190,8 @@
         mWallpaperController.setRootView(getNotificationShadeWindowView());
 
         mDemoModeController.addCallback(mDemoModeCallback);
+        mJavaAdapter.alwaysCollectFlow(
+                mStatusBarModeRepository.isTransientShown(), this::onTransientShownChanged);
 
         mCommandQueueCallbacks = mCommandQueueCallbacksLazy.get();
         mCommandQueue.addCallback(mCommandQueueCallbacks);
@@ -1249,7 +1257,7 @@
 
             @Override
             public void hide() {
-                clearTransient();
+                mStatusBarModeRepository.clearTransient();
             }
         });
 
@@ -1537,7 +1545,9 @@
         return (v, event) -> {
             mAutoHideController.checkUserAutoHide(event);
             mRemoteInputManager.checkRemoteInputOutside(event);
-            mShadeController.onStatusBarTouch(event);
+            if (!mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL)) {
+                mShadeController.onStatusBarTouch(event);
+            }
             return getNotificationShadeWindowView().onTouchEvent(event);
         };
     }
@@ -1716,25 +1726,15 @@
         return mCommandQueue.panelsEnabled();
     }
 
-    @Override
-    public void showTransientUnchecked() {
-        if (!mTransientShown) {
-            mTransientShown = true;
+    private void onTransientShownChanged(boolean transientShown) {
+        if (transientShown) {
             mNoAnimationOnNextBarModeChange = true;
-            maybeUpdateBarMode();
         }
-    }
-
-    @Override
-    public void clearTransient() {
-        if (mTransientShown) {
-            mTransientShown = false;
-            maybeUpdateBarMode();
-        }
+        maybeUpdateBarMode();
     }
 
     private void maybeUpdateBarMode() {
-        final int barMode = barMode(mTransientShown, mAppearance);
+        final int barMode = barMode(isTransientShown(), mAppearance);
         if (updateBarMode(barMode)) {
             mLightBarController.onStatusBarModeChanged(barMode);
             updateBubblesVisibility();
@@ -3149,7 +3149,7 @@
     // End Extra BaseStatusBarMethods.
 
     boolean isTransientShown() {
-        return mTransientShown;
+        return mStatusBarModeRepository.isTransientShown().getValue();
     }
 
     private void updateLightRevealScrimVisibility() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt
index b3af91d..52e444f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt
@@ -27,6 +27,7 @@
 import android.view.View
 import androidx.annotation.VisibleForTesting
 import com.android.internal.jank.InteractionJankMonitor
+import com.android.systemui.CoreStartable
 import com.android.systemui.Dumpable
 import com.android.systemui.R
 import com.android.systemui.animation.ActivityLaunchAnimator
@@ -43,7 +44,6 @@
 import com.android.systemui.statusbar.window.StatusBarWindowController
 import com.android.systemui.util.time.SystemClock
 import java.io.PrintWriter
-import java.util.Optional
 import java.util.concurrent.Executor
 import javax.inject.Inject
 
@@ -54,17 +54,16 @@
 class OngoingCallController @Inject constructor(
     private val context: Context,
     private val notifCollection: CommonNotifCollection,
-    private val ongoingCallFlags: OngoingCallFlags,
     private val systemClock: SystemClock,
     private val activityStarter: ActivityStarter,
     @Main private val mainExecutor: Executor,
     private val iActivityManager: IActivityManager,
     private val logger: OngoingCallLogger,
     private val dumpManager: DumpManager,
-    private val statusBarWindowController: Optional<StatusBarWindowController>,
-    private val swipeStatusBarAwayGestureHandler: Optional<SwipeStatusBarAwayGestureHandler>,
+    private val statusBarWindowController: StatusBarWindowController,
+    private val swipeStatusBarAwayGestureHandler: SwipeStatusBarAwayGestureHandler,
     private val statusBarStateController: StatusBarStateController
-) : CallbackController<OngoingCallListener>, Dumpable {
+) : CallbackController<OngoingCallListener>, Dumpable, CoreStartable {
     private var isFullscreen: Boolean = false
     /** Non-null if there's an active call notification. */
     private var callNotificationInfo: CallNotificationInfo? = null
@@ -120,12 +119,10 @@
         }
     }
 
-    fun init() {
+    override fun start() {
         dumpManager.registerDumpable(this)
-        if (ongoingCallFlags.isStatusBarChipEnabled()) {
-            notifCollection.addCollectionListener(notifListener)
-            statusBarStateController.addCallback(statusBarStateListener)
-        }
+        notifCollection.addCollectionListener(notifListener)
+        statusBarStateController.addCallback(statusBarStateListener)
     }
 
     /**
@@ -138,7 +135,7 @@
         this.chipView = chipView
         val backgroundView: OngoingCallBackgroundContainer? =
             chipView.findViewById(R.id.ongoing_call_chip_background)
-        backgroundView?.maxHeightFetcher = { statusBarWindowController.get().statusBarHeight }
+        backgroundView?.maxHeightFetcher = { statusBarWindowController.statusBarHeight }
         if (hasOngoingCall()) {
             updateChip()
         }
@@ -197,9 +194,7 @@
 
             uidObserver.registerWithUid(currentCallNotificationInfo.uid)
             if (!currentCallNotificationInfo.statusBarSwipedAway) {
-                statusBarWindowController.ifPresent {
-                    it.setOngoingProcessRequiresStatusBarVisible(true)
-                }
+                statusBarWindowController.setOngoingProcessRequiresStatusBarVisible(true)
             }
             updateGestureListening()
             mListeners.forEach { l -> l.onOngoingCallStateChanged(animate = true) }
@@ -217,23 +212,19 @@
 
     private fun updateChipClickListener() {
         if (callNotificationInfo == null) { return }
-        if (isFullscreen && !ongoingCallFlags.isInImmersiveChipTapEnabled()) {
-            chipView?.setOnClickListener(null)
-        } else {
-            val currentChipView = chipView
-            val backgroundView =
-                currentChipView?.findViewById<View>(R.id.ongoing_call_chip_background)
-            val intent = callNotificationInfo?.intent
-            if (currentChipView != null && backgroundView != null && intent != null) {
-                currentChipView.setOnClickListener {
-                    logger.logChipClicked()
-                    activityStarter.postStartActivityDismissingKeyguard(
-                        intent,
-                        ActivityLaunchAnimator.Controller.fromView(
-                            backgroundView,
-                            InteractionJankMonitor.CUJ_STATUS_BAR_APP_LAUNCH_FROM_CALL_CHIP)
-                    )
-                }
+        val currentChipView = chipView
+        val backgroundView =
+            currentChipView?.findViewById<View>(R.id.ongoing_call_chip_background)
+        val intent = callNotificationInfo?.intent
+        if (currentChipView != null && backgroundView != null && intent != null) {
+            currentChipView.setOnClickListener {
+                logger.logChipClicked()
+                activityStarter.postStartActivityDismissingKeyguard(
+                    intent,
+                    ActivityLaunchAnimator.Controller.fromView(
+                        backgroundView,
+                        InteractionJankMonitor.CUJ_STATUS_BAR_APP_LAUNCH_FROM_CALL_CHIP)
+                )
             }
         }
     }
@@ -247,10 +238,10 @@
         if (callNotificationInfo == null ||
             callNotificationInfo?.statusBarSwipedAway == true ||
             !isFullscreen) {
-            swipeStatusBarAwayGestureHandler.ifPresent { it.removeOnGestureDetectedCallback(TAG) }
+            swipeStatusBarAwayGestureHandler.removeOnGestureDetectedCallback(TAG)
         } else {
-            swipeStatusBarAwayGestureHandler.ifPresent {
-                it.addOnGestureDetectedCallback(TAG) { _ -> onSwipeAwayGestureDetected() }
+            swipeStatusBarAwayGestureHandler.addOnGestureDetectedCallback(TAG) { _ ->
+                onSwipeAwayGestureDetected()
             }
         }
     }
@@ -258,8 +249,8 @@
     private fun removeChip() {
         callNotificationInfo = null
         tearDownChipView()
-        statusBarWindowController.ifPresent { it.setOngoingProcessRequiresStatusBarVisible(false) }
-        swipeStatusBarAwayGestureHandler.ifPresent { it.removeOnGestureDetectedCallback(TAG) }
+        statusBarWindowController.setOngoingProcessRequiresStatusBarVisible(false)
+        swipeStatusBarAwayGestureHandler.removeOnGestureDetectedCallback(TAG)
         mListeners.forEach { l -> l.onOngoingCallStateChanged(animate = true) }
         uidObserver.unregister()
     }
@@ -283,12 +274,8 @@
     private fun onSwipeAwayGestureDetected() {
         if (DEBUG) { Log.d(TAG, "Swipe away gesture detected") }
         callNotificationInfo = callNotificationInfo?.copy(statusBarSwipedAway = true)
-        statusBarWindowController.ifPresent {
-            it.setOngoingProcessRequiresStatusBarVisible(false)
-        }
-        swipeStatusBarAwayGestureHandler.ifPresent {
-            it.removeOnGestureDetectedCallback(TAG)
-        }
+        statusBarWindowController.setOngoingProcessRequiresStatusBarVisible(false)
+        swipeStatusBarAwayGestureHandler.removeOnGestureDetectedCallback(TAG)
     }
 
     private val statusBarStateListener = object : StatusBarStateController.StateListener {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallFlags.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallFlags.kt
deleted file mode 100644
index fcfcb8f..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallFlags.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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 com.android.systemui.statusbar.phone.ongoingcall
-
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
-import javax.inject.Inject
-
-@SysUISingleton
-class OngoingCallFlags @Inject constructor(private val featureFlags: FeatureFlags) {
-
-    fun isStatusBarChipEnabled(): Boolean =
-            featureFlags.isEnabled(Flags.ONGOING_CALL_STATUS_BAR_CHIP)
-
-    fun isInImmersiveEnabled(): Boolean = isStatusBarChipEnabled()
-            && featureFlags.isEnabled(Flags.ONGOING_CALL_IN_IMMERSIVE)
-
-    fun isInImmersiveChipTapEnabled(): Boolean = isInImmersiveEnabled()
-            && featureFlags.isEnabled(Flags.ONGOING_CALL_IN_IMMERSIVE_CHIP_TAP)
-}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
index decc457..929604b 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
@@ -810,7 +810,8 @@
                 ObservableTransitionState.Transition(
                     SceneKey.Lockscreen,
                     SceneKey.Bouncer,
-                    flowOf(.5f)
+                    flowOf(.5f),
+                    false,
                 )
             runCurrent()
             sceneInteractor.onSceneChanged(SceneModel(SceneKey.Bouncer, null), "reason")
@@ -822,7 +823,12 @@
             // keyguard.
             sceneInteractor.changeScene(SceneModel(SceneKey.Gone, null), "reason")
             sceneTransitionStateFlow.value =
-                ObservableTransitionState.Transition(SceneKey.Bouncer, SceneKey.Gone, flowOf(.5f))
+                ObservableTransitionState.Transition(
+                    SceneKey.Bouncer,
+                    SceneKey.Gone,
+                    flowOf(.5f),
+                    false
+                )
             runCurrent()
             sceneInteractor.onSceneChanged(SceneModel(SceneKey.Gone, null), "reason")
             sceneTransitionStateFlow.value = ObservableTransitionState.Idle(SceneKey.Gone)
@@ -834,7 +840,12 @@
             clearInvocations(viewMediatorCallback)
             sceneInteractor.changeScene(SceneModel(SceneKey.Bouncer, null), "reason")
             sceneTransitionStateFlow.value =
-                ObservableTransitionState.Transition(SceneKey.Gone, SceneKey.Bouncer, flowOf(.5f))
+                ObservableTransitionState.Transition(
+                    SceneKey.Gone,
+                    SceneKey.Bouncer,
+                    flowOf(.5f),
+                    false
+                )
             runCurrent()
             sceneInteractor.onSceneChanged(SceneModel(SceneKey.Bouncer, null), "reason")
             sceneTransitionStateFlow.value = ObservableTransitionState.Idle(SceneKey.Bouncer)
@@ -847,7 +858,12 @@
             underTest.onViewDetached()
             sceneInteractor.changeScene(SceneModel(SceneKey.Gone, null), "reason")
             sceneTransitionStateFlow.value =
-                ObservableTransitionState.Transition(SceneKey.Bouncer, SceneKey.Gone, flowOf(.5f))
+                ObservableTransitionState.Transition(
+                    SceneKey.Bouncer,
+                    SceneKey.Gone,
+                    flowOf(.5f),
+                    false
+                )
             runCurrent()
             sceneInteractor.onSceneChanged(SceneModel(SceneKey.Gone, null), "reason")
             sceneTransitionStateFlow.value = ObservableTransitionState.Idle(SceneKey.Gone)
@@ -860,7 +876,8 @@
                 ObservableTransitionState.Transition(
                     SceneKey.Gone,
                     SceneKey.Lockscreen,
-                    flowOf(.5f)
+                    flowOf(.5f),
+                    false,
                 )
             runCurrent()
             sceneInteractor.onSceneChanged(SceneModel(SceneKey.Lockscreen, null), "reason")
@@ -876,7 +893,8 @@
                 ObservableTransitionState.Transition(
                     SceneKey.Lockscreen,
                     SceneKey.Gone,
-                    flowOf(.5f)
+                    flowOf(.5f),
+                    false,
                 )
             runCurrent()
             sceneInteractor.onSceneChanged(SceneModel(SceneKey.Gone, null), "reason")
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt
index 14cdf2f..90e217f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt
@@ -217,6 +217,7 @@
                     fromScene = SceneKey.Gone,
                     toScene = SceneKey.Lockscreen,
                     progress = flowOf(0f),
+                    isUserInputDriven = false,
                 )
             runCurrent()
             assertThat(isAnimate).isFalse()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt
index d6b621e..7f4755d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt
@@ -23,8 +23,6 @@
 import androidx.constraintlayout.widget.ConstraintSet
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
-import com.android.systemui.flags.FakeFeatureFlags
-import com.android.systemui.flags.Flags
 import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
 import com.android.systemui.keyguard.shared.model.KeyguardSection
 import com.android.systemui.keyguard.ui.view.KeyguardRootView
@@ -66,8 +64,6 @@
     @Mock private lateinit var splitShadeGuidelines: SplitShadeGuidelines
     @Mock private lateinit var aodNotificationIconsSection: AodNotificationIconsSection
 
-    private val featureFlags = FakeFeatureFlags()
-
     @Before
     fun setup() {
         MockitoAnnotations.initMocks(this)
@@ -84,23 +80,13 @@
                 defaultNSSLSection,
                 splitShadeGuidelines,
                 aodNotificationIconsSection,
-                featureFlags,
             )
-        featureFlags.set(Flags.LAZY_INFLATE_KEYGUARD, false)
     }
 
     @Test
     fun replaceViews() {
         val constraintLayout = ConstraintLayout(context, null)
         underTest.replaceViews(null, constraintLayout)
-        underTest.sections.forEach { verify(it, never()).addViews(constraintLayout) }
-    }
-
-    @Test
-    fun replaceViews_lazyInflateFlagOn() {
-        featureFlags.set(Flags.LAZY_INFLATE_KEYGUARD, true)
-        val constraintLayout = ConstraintLayout(context, null)
-        underTest.replaceViews(null, constraintLayout)
         underTest.sections.forEach { verify(it).addViews(constraintLayout) }
     }
 
@@ -110,7 +96,6 @@
         val someSection = mock(KeyguardSection::class.java)
         whenever(prevBlueprint.sections)
             .thenReturn(underTest.sections.minus(defaultLockIconSection).plus(someSection))
-        featureFlags.set(Flags.LAZY_INFLATE_KEYGUARD, true)
         val constraintLayout = ConstraintLayout(context, null)
         underTest.replaceViews(prevBlueprint, constraintLayout)
         underTest.sections.minus(defaultLockIconSection).forEach {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java
similarity index 97%
rename from packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java
index 89405c1..c835146 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerImplTest.java
@@ -74,11 +74,11 @@
 @RunWith(AndroidTestingRunner.class)
 @RunWithLooper
 @SmallTest
-public class NavigationBarControllerTest extends SysuiTestCase {
+public class NavigationBarControllerImplTest extends SysuiTestCase {
 
     private static final int SECONDARY_DISPLAY = 1;
 
-    private NavigationBarController mNavigationBarController;
+    private NavigationBarControllerImpl mNavigationBarController;
     private NavigationBar mDefaultNavBar;
     private NavigationBar mSecondaryNavBar;
     private StaticMockitoSession mMockitoSession;
@@ -95,7 +95,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mNavigationBarController = spy(
-                new NavigationBarController(mContext,
+                new NavigationBarControllerImpl(mContext,
                         mock(OverviewProxyService.class),
                         mock(NavigationModeController.class),
                         mock(SysUiState.class),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarInflaterViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarInflaterViewTest.java
index 7369c82..52d02b6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarInflaterViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarInflaterViewTest.java
@@ -33,8 +33,6 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.assist.AssistManager;
 import com.android.systemui.navigationbar.buttons.ButtonDispatcher;
-import com.android.systemui.navigationbar.NavigationBarInflaterView;
-import com.android.systemui.navigationbar.NavigationModeController;
 import com.android.systemui.recents.OverviewProxyService;
 
 import org.junit.After;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
index 1536c17..b50032f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
@@ -73,6 +73,7 @@
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.test.TestScope
 import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runCurrent
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -705,12 +706,12 @@
     fun updateNoteTaskAsUser_sameUser_shouldUpdateShortcuts() {
         val user = UserHandle.CURRENT
         val controller = spy(createNoteTaskController())
-        doNothing().whenever(controller).updateNoteTaskAsUserInternal(any())
+        doNothing().whenever(controller).launchUpdateNoteTaskAsUser(any())
         whenever(controller.getCurrentRunningUser()).thenReturn(user)
 
         controller.updateNoteTaskAsUser(user)
 
-        verify(controller).updateNoteTaskAsUserInternal(user)
+        verify(controller).launchUpdateNoteTaskAsUser(user)
         verify(context, never()).startServiceAsUser(any(), any())
     }
 
@@ -718,12 +719,12 @@
     fun updateNoteTaskAsUser_differentUser_shouldUpdateShortcutsInUserProcess() {
         val user = UserHandle.CURRENT
         val controller = spy(createNoteTaskController(isEnabled = true))
-        doNothing().whenever(controller).updateNoteTaskAsUserInternal(any())
+        doNothing().whenever(controller).launchUpdateNoteTaskAsUser(any())
         whenever(controller.getCurrentRunningUser()).thenReturn(UserHandle.SYSTEM)
 
         controller.updateNoteTaskAsUser(user)
 
-        verify(controller, never()).updateNoteTaskAsUserInternal(any())
+        verify(controller, never()).launchUpdateNoteTaskAsUser(any())
         val intent = withArgCaptor { verify(context).startServiceAsUser(capture(), eq(user)) }
         assertThat(intent).hasComponentClass(NoteTaskControllerUpdateService::class.java)
     }
@@ -733,7 +734,8 @@
     @Test
     fun updateNoteTaskAsUserInternal_withNotesRole_withShortcuts_shouldUpdateShortcuts() {
         createNoteTaskController(isEnabled = true)
-            .updateNoteTaskAsUserInternal(userTracker.userHandle)
+            .launchUpdateNoteTaskAsUser(userTracker.userHandle)
+        testScope.runCurrent()
 
         val actualComponent = argumentCaptor<ComponentName>()
         verify(context.packageManager)
@@ -768,7 +770,8 @@
             .thenReturn(emptyList())
 
         createNoteTaskController(isEnabled = true)
-            .updateNoteTaskAsUserInternal(userTracker.userHandle)
+            .launchUpdateNoteTaskAsUser(userTracker.userHandle)
+        testScope.runCurrent()
 
         val argument = argumentCaptor<ComponentName>()
         verify(context.packageManager)
@@ -787,7 +790,8 @@
     @Test
     fun updateNoteTaskAsUserInternal_flagDisabled_shouldDisableShortcuts() {
         createNoteTaskController(isEnabled = false)
-            .updateNoteTaskAsUserInternal(userTracker.userHandle)
+            .launchUpdateNoteTaskAsUser(userTracker.userHandle)
+        testScope.runCurrent()
 
         val argument = argumentCaptor<ComponentName>()
         verify(context.packageManager)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInitializerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInitializerTest.kt
index 95bb3e0..7833007 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInitializerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInitializerTest.kt
@@ -22,6 +22,8 @@
 import android.testing.AndroidTestingRunner
 import android.view.KeyEvent
 import android.view.KeyEvent.ACTION_DOWN
+import android.view.KeyEvent.ACTION_UP
+import android.view.KeyEvent.KEYCODE_N
 import android.view.KeyEvent.KEYCODE_STYLUS_BUTTON_TAIL
 import androidx.test.filters.SmallTest
 import com.android.keyguard.KeyguardUpdateMonitor
@@ -30,7 +32,6 @@
 import com.android.systemui.statusbar.CommandQueue
 import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.mockito.any
-import com.android.systemui.util.mockito.argumentCaptor
 import com.android.systemui.util.mockito.eq
 import com.android.systemui.util.mockito.mock
 import com.android.systemui.util.mockito.whenever
@@ -43,7 +44,6 @@
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
 import org.mockito.Mock
 import org.mockito.Mockito.never
 import org.mockito.Mockito.times
@@ -66,6 +66,7 @@
 
     private val executor = FakeExecutor(FakeSystemClock())
     private val userTracker = FakeUserTracker()
+    private val handlerCallbacks = mutableListOf<Runnable>()
 
     @Before
     fun setUp() {
@@ -74,19 +75,27 @@
     }
 
     private fun createUnderTest(
-            isEnabled: Boolean,
-            bubbles: Bubbles?,
+        isEnabled: Boolean,
+        bubbles: Bubbles?,
     ): NoteTaskInitializer =
-            NoteTaskInitializer(
-                    controller = controller,
-                    commandQueue = commandQueue,
-                    optionalBubbles = Optional.ofNullable(bubbles),
-                    isEnabled = isEnabled,
-                    roleManager = roleManager,
-                    userTracker = userTracker,
-                    keyguardUpdateMonitor = keyguardMonitor,
-                    backgroundExecutor = executor,
-            )
+        NoteTaskInitializer(
+            controller = controller,
+            commandQueue = commandQueue,
+            optionalBubbles = Optional.ofNullable(bubbles),
+            isEnabled = isEnabled,
+            roleManager = roleManager,
+            userTracker = userTracker,
+            keyguardUpdateMonitor = keyguardMonitor,
+            backgroundExecutor = executor,
+        )
+
+    private fun createKeyEvent(
+        action: Int,
+        code: Int,
+        downTime: Long = 0L,
+        eventTime: Long = 0L,
+        metaState: Int = 0
+    ): KeyEvent = KeyEvent(downTime, eventTime, action, code, 0 /*repeat*/, metaState)
 
     @Test
     fun initialize_withUserUnlocked() {
@@ -120,12 +129,12 @@
         underTest.initialize()
 
         verifyZeroInteractions(
-                commandQueue,
-                bubbles,
-                controller,
-                roleManager,
-                userManager,
-                keyguardMonitor,
+            commandQueue,
+            bubbles,
+            controller,
+            roleManager,
+            userManager,
+            keyguardMonitor,
         )
     }
 
@@ -136,18 +145,23 @@
         underTest.initialize()
 
         verifyZeroInteractions(
-                commandQueue,
-                bubbles,
-                controller,
-                roleManager,
-                userManager,
-                keyguardMonitor,
+            commandQueue,
+            bubbles,
+            controller,
+            roleManager,
+            userManager,
+            keyguardMonitor,
         )
     }
 
     @Test
     fun initialize_handleSystemKey() {
-        val expectedKeyEvent = KeyEvent(ACTION_DOWN, KEYCODE_STYLUS_BUTTON_TAIL)
+        val expectedKeyEvent =
+            createKeyEvent(
+                ACTION_DOWN,
+                KEYCODE_N,
+                metaState = KeyEvent.META_META_ON or KeyEvent.META_CTRL_ON
+            )
         val underTest = createUnderTest(isEnabled = true, bubbles = bubbles)
         underTest.initialize()
         val callback = withArgCaptor { verify(commandQueue).addCallback(capture()) }
@@ -176,7 +190,7 @@
         underTest.initialize()
         val callback = withArgCaptor {
             verify(roleManager)
-                    .addOnRoleHoldersChangedListenerAsUser(any(), capture(), eq(UserHandle.ALL))
+                .addOnRoleHoldersChangedListenerAsUser(any(), capture(), eq(UserHandle.ALL))
         }
 
         callback.onRoleHoldersChanged(ROLE_NOTES, userTracker.userHandle)
@@ -203,4 +217,60 @@
 
         verify(controller, times(2)).updateNoteTaskForCurrentUserAndManagedProfiles()
     }
+
+    @Test
+    fun tailButtonGestureDetection_singlePress_shouldShowNoteTaskOnUp() {
+        val underTest = createUnderTest(isEnabled = true, bubbles = bubbles)
+        underTest.initialize()
+        val callback = withArgCaptor { verify(commandQueue).addCallback(capture()) }
+
+        callback.handleSystemKey(
+            createKeyEvent(ACTION_DOWN, KEYCODE_STYLUS_BUTTON_TAIL, downTime = 0, eventTime = 0)
+        )
+        verify(controller, never()).showNoteTask(any())
+
+        callback.handleSystemKey(
+            createKeyEvent(ACTION_UP, KEYCODE_STYLUS_BUTTON_TAIL, downTime = 0, eventTime = 50)
+        )
+
+        verify(controller).showNoteTask(any())
+    }
+
+    @Test
+    fun tailButtonGestureDetection_doublePress_shouldNotShowNoteTaskTwice() {
+        val underTest = createUnderTest(isEnabled = true, bubbles = bubbles)
+        underTest.initialize()
+        val callback = withArgCaptor { verify(commandQueue).addCallback(capture()) }
+
+        callback.handleSystemKey(
+            createKeyEvent(ACTION_DOWN, KEYCODE_STYLUS_BUTTON_TAIL, downTime = 0, eventTime = 0)
+        )
+        callback.handleSystemKey(
+            createKeyEvent(ACTION_UP, KEYCODE_STYLUS_BUTTON_TAIL, downTime = 0, eventTime = 50)
+        )
+        callback.handleSystemKey(
+            createKeyEvent(ACTION_DOWN, KEYCODE_STYLUS_BUTTON_TAIL, downTime = 99, eventTime = 99)
+        )
+        callback.handleSystemKey(
+            createKeyEvent(ACTION_UP, KEYCODE_STYLUS_BUTTON_TAIL, downTime = 99, eventTime = 150)
+        )
+
+        verify(controller, times(1)).showNoteTask(any())
+    }
+
+    @Test
+    fun tailButtonGestureDetection_longPress_shouldNotShowNoteTask() {
+        val underTest = createUnderTest(isEnabled = true, bubbles = bubbles)
+        underTest.initialize()
+        val callback = withArgCaptor { verify(commandQueue).addCallback(capture()) }
+
+        callback.handleSystemKey(
+            createKeyEvent(ACTION_DOWN, KEYCODE_STYLUS_BUTTON_TAIL, downTime = 0, eventTime = 0)
+        )
+        callback.handleSystemKey(
+            createKeyEvent(ACTION_UP, KEYCODE_STYLUS_BUTTON_TAIL, downTime = 0, eventTime = 1000)
+        )
+
+        verify(controller, never()).showNoteTask(any())
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt b/packages/SystemUI/tests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
index 78385cd..2662a10 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
@@ -433,6 +433,7 @@
                 fromScene = getCurrentSceneInUi(),
                 toScene = to.key,
                 progress = progressFlow,
+                isUserInputDriven = false,
             )
         runCurrent()
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt
index 181f8a7..ff28d2d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryTest.kt
@@ -119,6 +119,7 @@
                     fromScene = SceneKey.Lockscreen,
                     toScene = SceneKey.Shade,
                     progress = progress,
+                    isUserInputDriven = false,
                 )
             assertThat(reflectedTransitionState).isEqualTo(transitionState.value)
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
index ed716a9..afc0e69 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
@@ -86,6 +86,7 @@
                     fromScene = SceneKey.Lockscreen,
                     toScene = SceneKey.Shade,
                     progress = progress,
+                    isUserInputDriven = false,
                 )
             assertThat(reflectedTransitionState).isEqualTo(transitionState.value)
 
@@ -123,6 +124,7 @@
                     fromScene = underTest.desiredScene.value.key,
                     toScene = SceneKey.Shade,
                     progress = progress,
+                    isUserInputDriven = false,
                 )
             assertThat(transitionTo).isEqualTo(SceneKey.Shade)
 
@@ -158,7 +160,8 @@
                     ObservableTransitionState.Transition(
                         fromScene = SceneKey.Gone,
                         toScene = SceneKey.Lockscreen,
-                        progress = flowOf(0.5f)
+                        progress = flowOf(0.5f),
+                        isUserInputDriven = false,
                     )
                 )
             val transitioning by
@@ -176,7 +179,8 @@
                     ObservableTransitionState.Transition(
                         fromScene = SceneKey.Shade,
                         toScene = SceneKey.QuickSettings,
-                        progress = flowOf(0.5f)
+                        progress = flowOf(0.5f),
+                        isUserInputDriven = false,
                     )
                 )
             underTest.setTransitionState(transitionState)
@@ -192,7 +196,8 @@
                     ObservableTransitionState.Transition(
                         fromScene = SceneKey.Shade,
                         toScene = SceneKey.Lockscreen,
-                        progress = flowOf(0.5f)
+                        progress = flowOf(0.5f),
+                        isUserInputDriven = false,
                     )
                 )
             val transitioning by
@@ -219,7 +224,8 @@
                 ObservableTransitionState.Transition(
                     fromScene = SceneKey.Shade,
                     toScene = SceneKey.Lockscreen,
-                    progress = flowOf(0.5f)
+                    progress = flowOf(0.5f),
+                    isUserInputDriven = false,
                 )
             assertThat(transitioning).isTrue()
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt b/packages/SystemUI/tests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
index 145629a..16fdf8e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
@@ -109,6 +109,7 @@
                     fromScene = SceneKey.Gone,
                     toScene = SceneKey.Shade,
                     progress = flowOf(0.5f),
+                    isUserInputDriven = false,
                 )
             assertThat(isVisible).isTrue()
             sceneInteractor.onSceneChanged(SceneModel(SceneKey.Shade), "reason")
@@ -121,6 +122,7 @@
                     fromScene = SceneKey.Shade,
                     toScene = SceneKey.Gone,
                     progress = flowOf(0.5f),
+                    isUserInputDriven = false,
                 )
             assertThat(isVisible).isTrue()
             sceneInteractor.onSceneChanged(SceneModel(SceneKey.Gone), "reason")
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
index 6dadd4c3..227f653 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
@@ -59,6 +59,7 @@
 import com.android.keyguard.FaceAuthApiRequestReason;
 import com.android.systemui.DejankUtils;
 import com.android.systemui.R;
+import com.android.systemui.flags.Flags;
 import com.android.systemui.keyguard.shared.model.WakeSleepReason;
 import com.android.systemui.keyguard.shared.model.WakefulnessModel;
 import com.android.systemui.keyguard.shared.model.WakefulnessState;
@@ -1064,7 +1065,18 @@
         mEmptySpaceClickListenerCaptor.getValue().onEmptySpaceClicked(0, 0);
 
         verify(mUpdateMonitor, never()).requestFaceAuth(anyString());
+    }
 
+    @Test
+    public void nsslFlagEnabled_allowOnlyExternalTouches() {
+        when(mFeatureFlags.isEnabled(Flags.MIGRATE_NSSL)).thenReturn(true);
+
+        // This sets the dozing state that is read when onMiddleClicked is eventually invoked.
+        mTouchHandler.onTouch(mock(View.class), mDownMotionEvent);
+        verify(mQsController, never()).disallowTouches();
+
+        mNotificationPanelViewController.handleExternalInterceptTouch(mDownMotionEvent);
+        verify(mQsController).disallowTouches();
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt
index 39fe498..3da5f6a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt
@@ -48,6 +48,7 @@
 import com.android.systemui.log.BouncerLogger
 import com.android.systemui.power.domain.interactor.PowerInteractor
 import com.android.systemui.shade.NotificationShadeWindowView.InteractionEventHandler
+import com.android.systemui.statusbar.DragDownHelper
 import com.android.systemui.statusbar.LockscreenShadeTransitionController
 import com.android.systemui.statusbar.NotificationInsetsController
 import com.android.systemui.statusbar.NotificationShadeDepthController
@@ -124,6 +125,7 @@
     private lateinit var unfoldTransitionProgressProvider:
         Optional<UnfoldTransitionProgressProvider>
     @Mock lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor
+    @Mock lateinit var dragDownHelper: DragDownHelper
     @Mock
     lateinit var primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel
     @Mock lateinit var keyEventInteractor: KeyEventInteractor
@@ -137,6 +139,8 @@
 
     private lateinit var testScope: TestScope
 
+    private lateinit var featureFlags: FakeFeatureFlags
+
     @Before
     fun setUp() {
         MockitoAnnotations.initMocks(this)
@@ -150,12 +154,13 @@
         whenever(keyguardTransitionInteractor.lockscreenToDreamingTransition)
             .thenReturn(emptyFlow<TransitionStep>())
 
-        val featureFlags = FakeFeatureFlags()
+        featureFlags = FakeFeatureFlags()
         featureFlags.set(Flags.TRACKPAD_GESTURE_COMMON, true)
         featureFlags.set(Flags.TRACKPAD_GESTURE_FEATURES, false)
         featureFlags.set(Flags.SPLIT_SHADE_SUBPIXEL_OPTIMIZATION, true)
         featureFlags.set(Flags.REVAMPED_BOUNCER_MESSAGES, true)
         featureFlags.set(Flags.LOCKSCREEN_WALLPAPER_DREAM_ENABLED, false)
+        featureFlags.set(Flags.MIGRATE_NSSL, false)
 
         testScope = TestScope()
         fakeClock = FakeSystemClock()
@@ -206,6 +211,7 @@
                 keyEventInteractor,
             )
         underTest.setupExpandedStatusBar()
+        underTest.setDragDownHelper(dragDownHelper)
 
         interactionEventHandlerCaptor = ArgumentCaptor.forClass(InteractionEventHandler::class.java)
         verify(view).setInteractionEventHandler(interactionEventHandlerCaptor.capture())
@@ -347,9 +353,8 @@
         testScope.runTest {
             // GIVEN touch dispatcher in a state that returns true
             underTest.setStatusBarViewController(phoneStatusBarViewController)
-            whenever(keyguardUnlockAnimationController.isPlayingCannedUnlockAnimation()).thenReturn(
-                true
-            )
+            whenever(keyguardUnlockAnimationController.isPlayingCannedUnlockAnimation())
+                .thenReturn(true)
             assertThat(interactionEventHandler.handleDispatchTouchEvent(DOWN_EVENT)).isTrue()
 
             // WHEN launch animation is running for 2 seconds
@@ -381,6 +386,32 @@
     }
 
     @Test
+    fun shouldInterceptTouchEvent_notificationPanelViewControllerShouldIntercept() {
+        // GIVEN not dozing
+        whenever(sysuiStatusBarStateController.isDozing()).thenReturn(false)
+        // AND alternate bouncer doesn't want the touch
+        whenever(statusBarKeyguardViewManager.shouldInterceptTouchEvent(DOWN_EVENT))
+            .thenReturn(false)
+        // AND the lock icon doesn't want the touch
+        whenever(lockIconViewController.onInterceptTouchEvent(DOWN_EVENT)).thenReturn(false)
+        // AND the notification panel can accept touches
+        whenever(notificationPanelViewController.isFullyExpanded()).thenReturn(true)
+        whenever(dragDownHelper.isDragDownEnabled).thenReturn(true)
+        whenever(centralSurfaces.isBouncerShowing()).thenReturn(false)
+
+        // AND the drag down helper doesn't want the touch (to pull the shade down)
+        whenever(dragDownHelper.onInterceptTouchEvent(DOWN_EVENT)).thenReturn(false)
+
+        featureFlags.set(Flags.MIGRATE_NSSL, true)
+
+        // WHEN asked if should intercept touch
+        interactionEventHandler.shouldInterceptTouchEvent(DOWN_EVENT)
+
+        // Verify that NPVC gets a chance to use the touch
+        verify(notificationPanelViewController).handleExternalInterceptTouch(DOWN_EVENT)
+    }
+
+    @Test
     fun testGetKeyguardMessageArea() =
         testScope.runTest {
             underTest.keyguardMessageArea
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt
index 3031658..04c4b45 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt
@@ -164,6 +164,7 @@
         featureFlags.set(Flags.SPLIT_SHADE_SUBPIXEL_OPTIMIZATION, true)
         featureFlags.set(Flags.REVAMPED_BOUNCER_MESSAGES, true)
         featureFlags.set(Flags.LOCKSCREEN_WALLPAPER_DREAM_ENABLED, false)
+        featureFlags.set(Flags.MIGRATE_NSSL, false)
         testScope = TestScope()
         controller =
             NotificationShadeWindowViewController(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt
index d4b69fa..342b1c5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt
@@ -623,6 +623,7 @@
                         fromScene = SceneKey.Lockscreen,
                         toScene = key,
                         progress = progress,
+                        isUserInputDriven = false,
                     )
                 )
             sceneInteractor.setTransitionState(transitionState)
@@ -659,6 +660,7 @@
                         fromScene = key,
                         toScene = SceneKey.Lockscreen,
                         progress = progress,
+                        isUserInputDriven = false,
                     )
                 )
             sceneInteractor.setTransitionState(transitionState)
@@ -694,6 +696,7 @@
                         fromScene = SceneKey.Lockscreen,
                         toScene = SceneKey.Shade,
                         progress = progress,
+                        isUserInputDriven = false,
                     )
                 )
             sceneInteractor.setTransitionState(transitionState)
@@ -936,4 +939,192 @@
             // THEN user is not interacting
             assertThat(actual).isFalse()
         }
+    @Test
+    fun userInteracting_idle() =
+        testScope.runTest() {
+            // GIVEN an interacting flow based on transitions to and from a scene
+            val key = SceneKey.Shade
+            val interactingFlow = underTest.sceneBasedInteracting(sceneInteractor, key)
+            val interacting by collectLastValue(interactingFlow)
+
+            // WHEN transition state is idle
+            val transitionState =
+                MutableStateFlow<ObservableTransitionState>(ObservableTransitionState.Idle(key))
+            sceneInteractor.setTransitionState(transitionState)
+
+            // THEN interacting is false
+            assertThat(interacting).isFalse()
+        }
+
+    @Test
+    fun userInteracting_transitioning_toScene_programmatic() =
+        testScope.runTest() {
+            // GIVEN an interacting flow based on transitions to and from a scene
+            val key = SceneKey.QuickSettings
+            val interactingFlow = underTest.sceneBasedInteracting(sceneInteractor, key)
+            val interacting by collectLastValue(interactingFlow)
+
+            // WHEN transition state is starting to move to the scene
+            val progress = MutableStateFlow(0f)
+            val transitionState =
+                MutableStateFlow<ObservableTransitionState>(
+                    ObservableTransitionState.Transition(
+                        fromScene = SceneKey.Lockscreen,
+                        toScene = key,
+                        progress = progress,
+                        isUserInputDriven = false,
+                    )
+                )
+            sceneInteractor.setTransitionState(transitionState)
+
+            // THEN interacting is false
+            assertThat(interacting).isFalse()
+
+            // WHEN transition state is partially to the scene
+            progress.value = .4f
+
+            // THEN interacting is false
+            assertThat(interacting).isFalse()
+
+            // WHEN transition completes
+            progress.value = 1f
+
+            // THEN interacting is false
+            assertThat(interacting).isFalse()
+        }
+
+    @Test
+    fun userInteracting_transitioning_toScene_userInputDriven() =
+        testScope.runTest() {
+            // GIVEN an interacting flow based on transitions to and from a scene
+            val key = SceneKey.QuickSettings
+            val interactingFlow = underTest.sceneBasedInteracting(sceneInteractor, key)
+            val interacting by collectLastValue(interactingFlow)
+
+            // WHEN transition state is starting to move to the scene
+            val progress = MutableStateFlow(0f)
+            val transitionState =
+                MutableStateFlow<ObservableTransitionState>(
+                    ObservableTransitionState.Transition(
+                        fromScene = SceneKey.Lockscreen,
+                        toScene = key,
+                        progress = progress,
+                        isUserInputDriven = true,
+                    )
+                )
+            sceneInteractor.setTransitionState(transitionState)
+
+            // THEN interacting is true
+            assertThat(interacting).isTrue()
+
+            // WHEN transition state is partially to the scene
+            progress.value = .4f
+
+            // THEN interacting is true
+            assertThat(interacting).isTrue()
+
+            // WHEN transition completes
+            progress.value = 1f
+
+            // THEN interacting is true
+            assertThat(interacting).isTrue()
+        }
+
+    @Test
+    fun userInteracting_transitioning_fromScene_programmatic() =
+        testScope.runTest() {
+            // GIVEN an interacting flow based on transitions to and from a scene
+            val key = SceneKey.QuickSettings
+            val interactingFlow = underTest.sceneBasedInteracting(sceneInteractor, key)
+            val interacting by collectLastValue(interactingFlow)
+
+            // WHEN transition state is starting to move to the scene
+            val progress = MutableStateFlow(0f)
+            val transitionState =
+                MutableStateFlow<ObservableTransitionState>(
+                    ObservableTransitionState.Transition(
+                        fromScene = key,
+                        toScene = SceneKey.Lockscreen,
+                        progress = progress,
+                        isUserInputDriven = false,
+                    )
+                )
+            sceneInteractor.setTransitionState(transitionState)
+
+            // THEN interacting is false
+            assertThat(interacting).isFalse()
+
+            // WHEN transition state is partially to the scene
+            progress.value = .4f
+
+            // THEN interacting is false
+            assertThat(interacting).isFalse()
+
+            // WHEN transition completes
+            progress.value = 1f
+
+            // THEN interacting is false
+            assertThat(interacting).isFalse()
+        }
+
+    @Test
+    fun userInteracting_transitioning_fromScene_userInputDriven() =
+        testScope.runTest() {
+            // GIVEN an interacting flow based on transitions to and from a scene
+            val key = SceneKey.QuickSettings
+            val interactingFlow = underTest.sceneBasedInteracting(sceneInteractor, key)
+            val interacting by collectLastValue(interactingFlow)
+
+            // WHEN transition state is starting to move to the scene
+            val progress = MutableStateFlow(0f)
+            val transitionState =
+                MutableStateFlow<ObservableTransitionState>(
+                    ObservableTransitionState.Transition(
+                        fromScene = key,
+                        toScene = SceneKey.Lockscreen,
+                        progress = progress,
+                        isUserInputDriven = true,
+                    )
+                )
+            sceneInteractor.setTransitionState(transitionState)
+
+            // THEN interacting is true
+            assertThat(interacting).isTrue()
+
+            // WHEN transition state is partially to the scene
+            progress.value = .4f
+
+            // THEN interacting is true
+            assertThat(interacting).isTrue()
+
+            // WHEN transition completes
+            progress.value = 1f
+
+            // THEN interacting is true
+            assertThat(interacting).isTrue()
+        }
+
+    @Test
+    fun userInteracting_transitioning_toAndFromDifferentScenes() =
+        testScope.runTest() {
+            // GIVEN an interacting flow based on transitions to and from a scene
+            val interactingFlow = underTest.sceneBasedInteracting(sceneInteractor, SceneKey.Shade)
+            val interacting by collectLastValue(interactingFlow)
+
+            // WHEN transition state is starting to between different scenes
+            val progress = MutableStateFlow(0f)
+            val transitionState =
+                MutableStateFlow<ObservableTransitionState>(
+                    ObservableTransitionState.Transition(
+                        fromScene = SceneKey.Lockscreen,
+                        toScene = SceneKey.QuickSettings,
+                        progress = progress,
+                        isUserInputDriven = true,
+                    )
+                )
+            sceneInteractor.setTransitionState(transitionState)
+
+            // THEN interacting is false
+            assertThat(interacting).isFalse()
+        }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt
index a09e844..0925858 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt
@@ -83,7 +83,8 @@
                     ObservableTransitionState.Transition(
                         fromScene = SceneKey.Shade,
                         toScene = SceneKey.QuickSettings,
-                        progress = MutableStateFlow(0.5f)
+                        progress = MutableStateFlow(0.5f),
+                        isUserInputDriven = false,
                     )
                 )
             )
@@ -100,7 +101,8 @@
                     ObservableTransitionState.Transition(
                         fromScene = SceneKey.QuickSettings,
                         toScene = SceneKey.Shade,
-                        progress = MutableStateFlow(0.5f)
+                        progress = MutableStateFlow(0.5f),
+                        isUserInputDriven = false,
                     )
                 )
             )
@@ -117,7 +119,8 @@
                     ObservableTransitionState.Transition(
                         fromScene = SceneKey.Gone,
                         toScene = SceneKey.Shade,
-                        progress = MutableStateFlow(0.5f)
+                        progress = MutableStateFlow(0.5f),
+                        isUserInputDriven = false,
                     )
                 )
             )
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceTest.java b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceTest.java
index 88d853e..8f06e63 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceTest.java
@@ -181,29 +181,30 @@
         String ACTION = "testAction";
     }
 
-    public void assertInstances(Integer allocated, Integer created) {
-        // Run the garbage collector to finalize and deallocate outstanding
-        // instances. Since the GC doesn't always appear to want to run
-        // completely when we ask, we ask it 10 times in a short loop.
-        for (int i = 0; i < 10; i++) {
+    private void assertInstances(int allocated, int created) {
+        // If there are more than the expected number of allocated instances, then we run the
+        // garbage collector to finalize and deallocate any outstanding non-referenced instances.
+        // Since the GC doesn't always appear to want to run completely when we ask, we do this up
+        // to 10 times before failing the test.
+        for (int i = 0; mCounter.getAllocatedInstances() > allocated && i < 10; i++) {
             System.runFinalization();
             System.gc();
         }
 
-        mCounter.assertInstances(allocated, created);
+        assertEquals(allocated, mCounter.getAllocatedInstances());
+        assertEquals(created, mCounter.getCreatedInstances());
     }
 
     public static class RefCounter {
         public final AtomicInteger mAllocatedInstances = new AtomicInteger();
         public final AtomicInteger mCreatedInstances = new AtomicInteger();
 
-        public void assertInstances(Integer allocated, Integer created) {
-            if (allocated != null) {
-                assertEquals(allocated.intValue(), mAllocatedInstances.get());
-            }
-            if (created != null) {
-                assertEquals(created.intValue(), mCreatedInstances.get());
-            }
+        public int getAllocatedInstances() {
+            return mAllocatedInstances.get();
+        }
+
+        public int getCreatedInstances() {
+            return mCreatedInstances.get();
         }
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/data/repository/FakeStatusBarModeRepository.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/data/repository/FakeStatusBarModeRepository.kt
new file mode 100644
index 0000000..bc62e5c
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/data/repository/FakeStatusBarModeRepository.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.data.repository
+
+import kotlinx.coroutines.flow.MutableStateFlow
+
+class FakeStatusBarModeRepository : StatusBarModeRepository {
+    override val isTransientShown = MutableStateFlow(false)
+
+    override fun showTransient() {
+        isTransientShown.value = true
+    }
+    override fun clearTransient() {
+        isTransientShown.value = false
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/data/repository/StatusBarModeRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/data/repository/StatusBarModeRepositoryImplTest.kt
new file mode 100644
index 0000000..fa018fd
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/data/repository/StatusBarModeRepositoryImplTest.kt
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.data.repository
+
+import android.view.WindowInsets
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.statusbar.CommandQueue
+import com.android.systemui.util.mockito.argumentCaptor
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.mockito.Mockito.verify
+
+@SmallTest
+class StatusBarModeRepositoryImplTest : SysuiTestCase() {
+    private val commandQueue = mock<CommandQueue>()
+
+    private val underTest =
+        StatusBarModeRepositoryImpl(
+                DISPLAY_ID,
+                commandQueue,
+            )
+            .apply { this.start() }
+
+    private val commandQueueCallback: CommandQueue.Callbacks
+        get() {
+            val callbackCaptor = argumentCaptor<CommandQueue.Callbacks>()
+            verify(commandQueue).addCallback(callbackCaptor.capture())
+            return callbackCaptor.value
+        }
+
+    @Test
+    fun isTransientShown_commandQueueShow_wrongDisplayId_notUpdated() {
+        commandQueueCallback.showTransient(
+            DISPLAY_ID + 1,
+            WindowInsets.Type.statusBars(),
+            /* isGestureOnSystemBar= */ false,
+        )
+
+        assertThat(underTest.isTransientShown.value).isFalse()
+    }
+
+    @Test
+    fun isTransientShown_commandQueueShow_notStatusBarType_notUpdated() {
+        commandQueueCallback.showTransient(
+            DISPLAY_ID,
+            WindowInsets.Type.navigationBars(),
+            /* isGestureOnSystemBar= */ false,
+        )
+
+        assertThat(underTest.isTransientShown.value).isFalse()
+    }
+
+    @Test
+    fun isTransientShown_commandQueueShow_true() {
+        commandQueueCallback.showTransient(
+            DISPLAY_ID,
+            WindowInsets.Type.statusBars(),
+            /* isGestureOnSystemBar= */ false,
+        )
+
+        assertThat(underTest.isTransientShown.value).isTrue()
+    }
+
+    @Test
+    fun isTransientShown_commandQueueShow_statusBarAndOtherTypes_true() {
+        commandQueueCallback.showTransient(
+            DISPLAY_ID,
+            WindowInsets.Type.statusBars().or(WindowInsets.Type.navigationBars()),
+            /* isGestureOnSystemBar= */ false,
+        )
+
+        assertThat(underTest.isTransientShown.value).isTrue()
+    }
+
+    @Test
+    fun isTransientShown_commandQueueAbort_wrongDisplayId_notUpdated() {
+        // Start as true
+        commandQueueCallback.showTransient(
+            DISPLAY_ID,
+            WindowInsets.Type.statusBars(),
+            /* isGestureOnSystemBar= */ false,
+        )
+        assertThat(underTest.isTransientShown.value).isTrue()
+
+        // GIVEN the wrong display ID
+        commandQueueCallback.abortTransient(DISPLAY_ID + 1, WindowInsets.Type.statusBars())
+
+        // THEN the old value remains
+        assertThat(underTest.isTransientShown.value).isTrue()
+    }
+
+    @Test
+    fun isTransientShown_commandQueueAbort_notStatusBarType_notUpdated() {
+        // Start as true
+        commandQueueCallback.showTransient(
+            DISPLAY_ID,
+            WindowInsets.Type.statusBars(),
+            /* isGestureOnSystemBar= */ false,
+        )
+        assertThat(underTest.isTransientShown.value).isTrue()
+
+        // GIVEN the wrong type
+        commandQueueCallback.abortTransient(DISPLAY_ID, WindowInsets.Type.navigationBars())
+
+        // THEN the old value remains
+        assertThat(underTest.isTransientShown.value).isTrue()
+    }
+
+    @Test
+    fun isTransientShown_commandQueueAbort_false() {
+        // Start as true
+        commandQueueCallback.showTransient(
+            DISPLAY_ID,
+            WindowInsets.Type.statusBars(),
+            /* isGestureOnSystemBar= */ false,
+        )
+        assertThat(underTest.isTransientShown.value).isTrue()
+
+        commandQueueCallback.abortTransient(DISPLAY_ID, WindowInsets.Type.statusBars())
+
+        assertThat(underTest.isTransientShown.value).isFalse()
+    }
+
+    @Test
+    fun isTransientShown_commandQueueAbort_statusBarAndOtherTypes_false() {
+        // Start as true
+        commandQueueCallback.showTransient(
+            DISPLAY_ID,
+            WindowInsets.Type.statusBars(),
+            /* isGestureOnSystemBar= */ false,
+        )
+        assertThat(underTest.isTransientShown.value).isTrue()
+
+        commandQueueCallback.abortTransient(
+            DISPLAY_ID,
+            WindowInsets.Type.statusBars().or(WindowInsets.Type.captionBar()),
+        )
+
+        assertThat(underTest.isTransientShown.value).isFalse()
+    }
+
+    @Test
+    fun isTransientShown_showTransient_true() {
+        underTest.showTransient()
+
+        assertThat(underTest.isTransientShown.value).isTrue()
+    }
+
+    @Test
+    fun isTransientShown_clearTransient_false() {
+        // Start as true
+        commandQueueCallback.showTransient(
+            DISPLAY_ID,
+            WindowInsets.Type.statusBars(),
+            /* isGestureOnSystemBar= */ false,
+        )
+        assertThat(underTest.isTransientShown.value).isTrue()
+
+        underTest.clearTransient()
+
+        assertThat(underTest.isTransientShown.value).isFalse()
+    }
+
+    private companion object {
+        const val DISPLAY_ID = 5
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
index 6b944ae..26c0fd6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
@@ -82,6 +82,7 @@
 import com.android.internal.logging.testing.FakeMetricsLogger;
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.TestScopeProvider;
 import com.android.keyguard.ViewMediatorCallback;
 import com.android.systemui.InitController;
 import com.android.systemui.R;
@@ -145,6 +146,7 @@
 import com.android.systemui.statusbar.StatusBarState;
 import com.android.systemui.statusbar.StatusBarStateControllerImpl;
 import com.android.systemui.statusbar.core.StatusBarInitializer;
+import com.android.systemui.statusbar.data.repository.FakeStatusBarModeRepository;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.NotificationActivityStarter;
@@ -177,6 +179,7 @@
 import com.android.systemui.util.WallpaperController;
 import com.android.systemui.util.concurrency.FakeExecutor;
 import com.android.systemui.util.concurrency.MessageRouterImpl;
+import com.android.systemui.util.kotlin.JavaAdapter;
 import com.android.systemui.util.time.FakeSystemClock;
 import com.android.systemui.volume.VolumeComponent;
 import com.android.wm.shell.bubbles.Bubbles;
@@ -452,6 +455,7 @@
                         emptySet()),
                 mStatusBarWindowController,
                 mStatusBarWindowStateController,
+                new FakeStatusBarModeRepository(),
                 mKeyguardUpdateMonitor,
                 mStatusBarSignalPolicy,
                 mPulseExpansionHandler,
@@ -470,6 +474,7 @@
                 new DisplayMetrics(),
                 mMetricsLogger,
                 mShadeLogger,
+                new JavaAdapter(TestScopeProvider.getTestScope()),
                 mUiBgExecutor,
                 mNotificationPanelViewController,
                 mNotificationMediaManager,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt
index 711e4ac..6430856 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt
@@ -84,7 +84,6 @@
     private lateinit var controller: OngoingCallController
     private lateinit var notifCollectionListener: NotifCollectionListener
 
-    @Mock private lateinit var mockOngoingCallFlags: OngoingCallFlags
     @Mock private lateinit var mockSwipeStatusBarAwayGestureHandler:
         SwipeStatusBarAwayGestureHandler
     @Mock private lateinit var mockOngoingCallListener: OngoingCallListener
@@ -103,24 +102,22 @@
         }
 
         MockitoAnnotations.initMocks(this)
-        `when`(mockOngoingCallFlags.isStatusBarChipEnabled()).thenReturn(true)
         val notificationCollection = mock(CommonNotifCollection::class.java)
 
         controller = OngoingCallController(
                 context,
                 notificationCollection,
-                mockOngoingCallFlags,
                 clock,
                 mockActivityStarter,
                 mainExecutor,
                 mockIActivityManager,
                 OngoingCallLogger(uiEventLoggerFake),
                 DumpManager(),
-                Optional.of(mockStatusBarWindowController),
-                Optional.of(mockSwipeStatusBarAwayGestureHandler),
+                mockStatusBarWindowController,
+                mockSwipeStatusBarAwayGestureHandler,
                 mockStatusBarStateController,
             )
-        controller.init()
+        controller.start()
         controller.addCallback(mockOngoingCallListener)
         controller.setChipView(chipView)
 
@@ -494,42 +491,7 @@
     }
 
     @Test
-    fun fullscreenIsTrue_thenCallNotificationAdded_chipNotClickable() {
-        `when`(mockOngoingCallFlags.isInImmersiveChipTapEnabled()).thenReturn(false)
-
-        getStateListener().onFullscreenStateChanged(/* isFullscreen= */ true)
-        notifCollectionListener.onEntryUpdated(createOngoingCallNotifEntry())
-
-        assertThat(chipView.hasOnClickListeners()).isFalse()
-    }
-
-    @Test
-    fun callNotificationAdded_thenFullscreenIsTrue_chipNotClickable() {
-        `when`(mockOngoingCallFlags.isInImmersiveChipTapEnabled()).thenReturn(false)
-
-        notifCollectionListener.onEntryUpdated(createOngoingCallNotifEntry())
-        getStateListener().onFullscreenStateChanged(/* isFullscreen= */ true)
-
-        assertThat(chipView.hasOnClickListeners()).isFalse()
-    }
-
-    @Test
-    fun fullscreenChangesToFalse_chipClickable() {
-        `when`(mockOngoingCallFlags.isInImmersiveChipTapEnabled()).thenReturn(false)
-
-        notifCollectionListener.onEntryUpdated(createOngoingCallNotifEntry())
-        // First, update to true
-        getStateListener().onFullscreenStateChanged(/* isFullscreen= */ true)
-        // Then, update to false
-        getStateListener().onFullscreenStateChanged(/* isFullscreen= */ false)
-
-        assertThat(chipView.hasOnClickListeners()).isTrue()
-    }
-
-    @Test
-    fun fullscreenIsTrue_butChipClickInImmersiveEnabled_chipClickable() {
-        `when`(mockOngoingCallFlags.isInImmersiveChipTapEnabled()).thenReturn(true)
-
+    fun fullscreenIsTrue_chipStillClickable() {
         notifCollectionListener.onEntryUpdated(createOngoingCallNotifEntry())
         getStateListener().onFullscreenStateChanged(/* isFullscreen= */ true)
 
diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java
index 838aae8..cd87908 100644
--- a/services/core/java/android/content/pm/PackageManagerInternal.java
+++ b/services/core/java/android/content/pm/PackageManagerInternal.java
@@ -112,7 +112,14 @@
      */
     public static final int INTEGRITY_VERIFICATION_REJECT = 0;
 
-    /** Observer called whenever the list of packages changes */
+    /**
+     * Observer called whenever the list of packages changes.
+     *
+     * @deprecated please use {@link com.android.internal.content.PackageMonitor} instead.
+     * PackageMonitor covers more installation and uninstallation corner cases than
+     * PackageListObserver.
+     */
+    @Deprecated
     public interface PackageListObserver {
         /** A package was added to the system. */
         default void onPackageAdded(@NonNull String packageName, int uid) {}
@@ -723,7 +730,12 @@
      * notified if a package is updated.
      * <p>The package list will not be updated automatically as packages are
      * installed / uninstalled. Any changes must be handled within the observer.
+     *
+     * @deprecated please use {@link com.android.internal.content.PackageMonitor} instead.
+     * PackageMonitor covers more installation and uninstallation corner cases than
+     * PackageListObserver.
      */
+    @Deprecated
     public abstract @NonNull PackageList getPackageList(@Nullable PackageListObserver observer);
 
     /**
@@ -733,7 +745,12 @@
      * <p>Does nothing if the observer isn't currently registered.
      * <p>Observers are notified asynchronously and it's possible for an observer to be
      * invoked after its been removed.
+     *
+     * @deprecated please use {@link com.android.internal.content.PackageMonitor} instead.
+     * PackageMonitor covers more installation and uninstallation corner cases than
+     * PackageListObserver.
      */
+    @Deprecated
     public abstract void removePackageListObserver(@NonNull PackageListObserver observer);
 
     /**
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 93fe0c9..553b085 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -97,6 +97,11 @@
 import static android.os.Process.ZYGOTE_POLICY_FLAG_EMPTY;
 
 import static com.android.internal.messages.nano.SystemMessageProto.SystemMessage.NOTE_FOREGROUND_SERVICE_BG_LAUNCH;
+import static com.android.internal.util.FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_DELEGATE;
+import static com.android.internal.util.FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA;
+import static com.android.internal.util.FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NONE;
+import static com.android.internal.util.FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_START_FOREGROUND_SERVICE;
+import static com.android.internal.util.FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_START_SERVICE;
 import static com.android.internal.util.FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__STATE__DENIED;
 import static com.android.internal.util.FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__STATE__ENTER;
 import static com.android.internal.util.FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__STATE__EXIT;
@@ -122,6 +127,7 @@
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 
 import android.Manifest;
+import android.Manifest.permission;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -901,7 +907,10 @@
                 showFgsBgRestrictedNotificationLocked(r);
                 logFGSStateChangeLocked(r,
                         FOREGROUND_SERVICE_STATE_CHANGED__STATE__DENIED,
-                        0, FGS_STOP_REASON_UNKNOWN, FGS_TYPE_POLICY_CHECK_UNKNOWN);
+                        0, FGS_STOP_REASON_UNKNOWN, FGS_TYPE_POLICY_CHECK_UNKNOWN,
+                        FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA,
+                        false /* fgsRestrictionRecalculated */
+                );
                 if (CompatChanges.isChangeEnabled(FGS_START_EXCEPTION_CHANGE_ID, callingUid)) {
                     throw new ForegroundServiceStartNotAllowedException(msg);
                 }
@@ -2066,6 +2075,7 @@
 
             boolean alreadyStartedOp = false;
             boolean stopProcStatsOp = false;
+            final boolean origFgRequired = r.fgRequired;
             if (r.fgRequired) {
                 if (DEBUG_SERVICE || DEBUG_BACKGROUND_CHECK) {
                     Slog.i(TAG, "Service called startForeground() as required: " + r);
@@ -2117,6 +2127,9 @@
                 // Whether to extend the SHORT_SERVICE time out.
                 boolean extendShortServiceTimeout = false;
 
+                // Whether setFgsRestrictionLocked() is called in here. Only used for logging.
+                boolean fgsRestrictionRecalculated = false;
+
                 int fgsTypeCheckCode = FGS_TYPE_POLICY_CHECK_UNKNOWN;
                 if (!ignoreForeground) {
                     if (foregroundServiceType == FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
@@ -2182,6 +2195,7 @@
                                 r.appInfo.uid, r.intent.getIntent(), r, r.userId,
                                 BackgroundStartPrivileges.NONE,
                                 false /* isBindService */);
+                        fgsRestrictionRecalculated = true;
                         if (!r.isFgsAllowedStart()) {
                             Slog.w(TAG_SERVICE, "FGS type change to/from SHORT_SERVICE: "
                                     + " BFSL DENIED.");
@@ -2246,6 +2260,7 @@
                                         r.appInfo.uid, r.intent.getIntent(), r, r.userId,
                                         BackgroundStartPrivileges.NONE,
                                         false /* isBindService */);
+                                fgsRestrictionRecalculated = true;
                                 final String temp = "startForegroundDelayMs:" + delayMs;
                                 if (r.mInfoAllowStartForeground != null) {
                                     r.mInfoAllowStartForeground += "; " + temp;
@@ -2266,6 +2281,25 @@
                                 r.appInfo.uid, r.intent.getIntent(), r, r.userId,
                                 BackgroundStartPrivileges.NONE,
                                 false /* isBindService */);
+                        fgsRestrictionRecalculated = true;
+                    }
+
+                    // When startForeground() is called on a bound service, without having
+                    // it started (i.e. no Context.startService() or startForegroundService() was
+                    // called.)
+                    // called on it, then we probably didn't call setFgsRestrictionLocked()
+                    // in startService(). If fgsRestrictionRecalculated is false, then we
+                    // didn't call setFgsRestrictionLocked() here either.
+                    //
+                    // In this situation, we call setFgsRestrictionLocked() with
+                    // forBoundFgs = false, so we'd set the FGS allowed reason to the
+                    // by-bindings fields, so we can put it in the log, without affecting the
+                    // logic.
+                    if (!fgsRestrictionRecalculated && !r.startRequested) {
+                        setFgsRestrictionLocked(r.serviceInfo.packageName, r.app.getPid(),
+                                r.appInfo.uid, r.intent.getIntent(), r, r.userId,
+                                BackgroundStartPrivileges.NONE,
+                                false /* isBindService */, true /* forBoundFgs */);
                     }
 
                     // If the foreground service is not started from TOP process, do not allow it to
@@ -2291,7 +2325,10 @@
                             ignoreForeground = true;
                             logFGSStateChangeLocked(r,
                                     FOREGROUND_SERVICE_STATE_CHANGED__STATE__DENIED,
-                                    0, FGS_STOP_REASON_UNKNOWN, FGS_TYPE_POLICY_CHECK_UNKNOWN);
+                                    0, FGS_STOP_REASON_UNKNOWN, FGS_TYPE_POLICY_CHECK_UNKNOWN,
+                                    FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA,
+                                    false /* fgsRestrictionRecalculated */
+                            );
                             if (CompatChanges.isChangeEnabled(FGS_START_EXCEPTION_CHANGE_ID,
                                     r.appInfo.uid)) {
                                 throw new ForegroundServiceStartNotAllowedException(msg);
@@ -2331,7 +2368,10 @@
                         if (fgsTypeResult.second != null) {
                             logFGSStateChangeLocked(r,
                                     FOREGROUND_SERVICE_STATE_CHANGED__STATE__DENIED,
-                                    0, FGS_STOP_REASON_UNKNOWN, fgsTypeResult.first);
+                                    0, FGS_STOP_REASON_UNKNOWN, fgsTypeResult.first,
+                                    FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA,
+                                    false /* fgsRestrictionRecalculated */
+                            );
                             throw fgsTypeResult.second;
                         }
                     }
@@ -2403,9 +2443,24 @@
                                 AppOpsManager.ATTRIBUTION_CHAIN_ID_NONE);
                         registerAppOpCallbackLocked(r);
                         mAm.updateForegroundServiceUsageStats(r.name, r.userId, true);
+
+                        int fgsStartApi = FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NONE;
+                        if (r.startRequested) {
+                            if (origFgRequired) {
+                                fgsStartApi =
+                                        FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_START_FOREGROUND_SERVICE;
+                            } else {
+                                fgsStartApi =
+                                        FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_START_SERVICE;
+                            }
+                        }
+
                         logFGSStateChangeLocked(r,
                                 FOREGROUND_SERVICE_STATE_CHANGED__STATE__ENTER,
-                                0, FGS_STOP_REASON_UNKNOWN, fgsTypeCheckCode);
+                                0, FGS_STOP_REASON_UNKNOWN, fgsTypeCheckCode,
+                                fgsStartApi,
+                                fgsRestrictionRecalculated
+                        );
                         synchronized (mFGSLogger) {
                             mFGSLogger.logForegroundServiceStart(r.appInfo.uid, 0, r);
                         }
@@ -2499,7 +2554,10 @@
                         r.mFgsExitTime > r.mFgsEnterTime
                                 ? (int) (r.mFgsExitTime - r.mFgsEnterTime) : 0,
                         FGS_STOP_REASON_STOP_FOREGROUND,
-                        FGS_TYPE_POLICY_CHECK_UNKNOWN);
+                        FGS_TYPE_POLICY_CHECK_UNKNOWN,
+                        FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA,
+                        false /* fgsRestrictionRecalculated */
+                );
 
                 synchronized (mFGSLogger) {
                     mFGSLogger.logForegroundServiceStop(r.appInfo.uid, r);
@@ -3338,7 +3396,10 @@
                     FOREGROUND_SERVICE_STATE_CHANGED__STATE__TIMED_OUT,
                     nowUptime > sr.mFgsEnterTime ? (int) (nowUptime - sr.mFgsEnterTime) : 0,
                     FGS_STOP_REASON_UNKNOWN,
-                    FGS_TYPE_POLICY_CHECK_UNKNOWN);
+                    FGS_TYPE_POLICY_CHECK_UNKNOWN,
+                    FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA,
+                    false /* fgsRestrictionRecalculated */
+            );
             try {
                 sr.app.getThread().scheduleTimeoutService(sr, sr.getShortFgsInfo().getStartId());
             } catch (RemoteException e) {
@@ -5705,7 +5766,10 @@
                     r.mFgsExitTime > r.mFgsEnterTime
                             ? (int) (r.mFgsExitTime - r.mFgsEnterTime) : 0,
                     FGS_STOP_REASON_STOP_SERVICE,
-                    FGS_TYPE_POLICY_CHECK_UNKNOWN);
+                    FGS_TYPE_POLICY_CHECK_UNKNOWN,
+                    FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA,
+                    false /* fgsRestrictionRecalculated */
+            );
             synchronized (mFGSLogger) {
                 mFGSLogger.logForegroundServiceStop(r.appInfo.uid, r);
             }
@@ -7452,6 +7516,13 @@
         }
     }
 
+    private void setFgsRestrictionLocked(String callingPackage,
+            int callingPid, int callingUid, Intent intent, ServiceRecord r, int userId,
+            BackgroundStartPrivileges backgroundStartPrivileges, boolean isBindService) {
+        setFgsRestrictionLocked(callingPackage, callingPid, callingUid, intent, r, userId,
+                backgroundStartPrivileges, isBindService, /*forBoundFgs*/ false);
+    }
+
     /**
      * There are two FGS restrictions:
      * In R, mAllowWhileInUsePermissionInFgs is to allow while-in-use permissions in foreground
@@ -7463,11 +7534,14 @@
      * @param intent intent to start/bind service.
      * @param r the service to start.
      * @param isBindService True if it's called from bindService().
+     * @param forBoundFgs set to true if it's called from Service.startForeground() for a
+     *                    service that's not started but bound.
      * @return true if allow, false otherwise.
      */
     private void setFgsRestrictionLocked(String callingPackage,
             int callingPid, int callingUid, Intent intent, ServiceRecord r, int userId,
-            BackgroundStartPrivileges backgroundStartPrivileges, boolean isBindService) {
+            BackgroundStartPrivileges backgroundStartPrivileges, boolean isBindService,
+            boolean forBoundFgs) {
 
         @ReasonCode int allowWIU;
         @ReasonCode int allowStart;
@@ -7511,9 +7585,19 @@
             r.mAllowWIUInBindService = allowWIU;
             r.mAllowStartInBindService = allowStart;
         } else {
-            r.mAllowWhileInUsePermissionInFgsReasonNoBinding = allowWIU;
-            r.mAllowStartForegroundNoBinding = allowStart;
-
+            if (!forBoundFgs) {
+                // This is for "normal" situation.
+                r.mAllowWhileInUsePermissionInFgsReasonNoBinding = allowWIU;
+                r.mAllowStartForegroundNoBinding = allowStart;
+            } else {
+                // This logic is only for logging, so we only update the "by-binding" fields.
+                if (r.mAllowWIUByBindings == REASON_DENIED) {
+                    r.mAllowWIUByBindings = allowWIU;
+                }
+                if (r.mAllowStartByBindings == REASON_DENIED) {
+                    r.mAllowStartByBindings = allowStart;
+                }
+            }
             // Also do a binding client check, unless called from bindService().
             if (r.mAllowWIUByBindings == REASON_DENIED) {
                 r.mAllowWIUByBindings =
@@ -8137,7 +8221,10 @@
      */
     private void logFGSStateChangeLocked(ServiceRecord r, int state, int durationMs,
             @FgsStopReason int fgsStopReason,
-            @ForegroundServicePolicyCheckCode int fgsTypeCheckCode) {
+            @ForegroundServicePolicyCheckCode int fgsTypeCheckCode,
+            int fgsStartApi, // from ForegroundServiceStateChanged.FgsStartApi
+            boolean fgsRestrictionRecalculated
+    ) {
         if (!ActivityManagerUtils.shouldSamplePackageForAtom(
                 r.packageName, mAm.mConstants.mFgsAtomSampleRate)) {
             return;
@@ -8194,7 +8281,9 @@
                 r.mAllowWIUByBindings,
                 r.mAllowStartForegroundNoBinding,
                 r.mAllowStartInBindService,
-                r.mAllowStartByBindings);
+                r.mAllowStartByBindings,
+                fgsStartApi,
+                fgsRestrictionRecalculated);
 
         int event = 0;
         if (state == FOREGROUND_SERVICE_STATE_CHANGED__STATE__ENTER) {
@@ -8373,7 +8462,10 @@
         }
         logFGSStateChangeLocked(r,
                 FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__STATE__ENTER,
-                0, FGS_STOP_REASON_UNKNOWN, FGS_TYPE_POLICY_CHECK_UNKNOWN);
+                0, FGS_STOP_REASON_UNKNOWN, FGS_TYPE_POLICY_CHECK_UNKNOWN,
+                FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_DELEGATE,
+                false /* fgsRestrictionRecalculated */
+        );
         // Notify the caller.
         if (connection != null) {
             mAm.mHandler.post(() -> {
diff --git a/services/core/java/com/android/server/am/AnrTimer.java b/services/core/java/com/android/server/am/AnrTimer.java
index cd6f009..378a386 100644
--- a/services/core/java/com/android/server/am/AnrTimer.java
+++ b/services/core/java/com/android/server/am/AnrTimer.java
@@ -38,11 +38,13 @@
 import com.android.internal.annotations.Keep;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.ProcessCpuTracker;
+import com.android.internal.util.RingBuffer;
 
 import java.io.PrintWriter;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -75,7 +77,7 @@
  *
  * @hide
  */
-abstract class AnrTimer<V> {
+class AnrTimer<V> {
 
     /**
      * The log tag.
@@ -139,6 +141,8 @@
         final String tag;
         /** A partial stack that localizes the caller of the operation. */
         final StackTraceElement[] stack;
+        /** The date, in local time, the error was created. */
+        final String date;
 
         Error(@NonNull String issue, @NonNull String operation, @NonNull String tag,
                 @NonNull StackTraceElement[] stack, @NonNull String arg) {
@@ -147,21 +151,17 @@
             this.tag = tag;
             this.stack = stack;
             this.arg = arg;
+            this.date = new Date().toString();
         }
     }
 
     /**
      * A list of errors detected during processing.  Errors correspond to "timer not found"
      * conditions.  The stack trace identifies the source of the call.  The list is
-     * first-in/first-out, and the size is limited to MAX_SAVED_ERROR_COUNT.
+     * first-in/first-out, and the size is limited to 20.
      */
     @GuardedBy("sErrors")
-    private static final ArrayList<Error> sErrors = new ArrayList<>();
-
-    /**
-     * The maximum number of errors that are saved in the sErrors list.
-     */
-    private static final int MAX_SAVED_ERROR_COUNT = 20;
+    private static final RingBuffer<Error> sErrors = new RingBuffer<>(Error.class, 20);
 
     /**
      * A record of a single anr timer.  The pid and uid are retained for reference but they do not
@@ -420,7 +420,7 @@
                 if (extension > 0) {
                     post(t, extension);
                 } else {
-                    onExpiredLocked(t, now());
+                    onExpiredLocked(t);
                 }
             }
             return true;
@@ -706,7 +706,7 @@
      * The notifier that a timer has fired.  The timer is not modified.
      */
     @GuardedBy("mLock")
-    private void onExpiredLocked(@NonNull Timer timer, long when) {
+    private void onExpiredLocked(@NonNull Timer timer) {
         if (DEBUG) report(timer, "expire");
         traceBegin(timer, "expired");
         mHandler.sendMessage(Message.obtain(mHandler, mWhat, timer.arg));
@@ -757,12 +757,7 @@
         // This should be enough to isolate the location of the call.
         StackTraceElement[] location = Arrays.copyOfRange(s, 6, 9);
         synchronized (sErrors) {
-            // Ensure the error list does not grow beyond the limit.
-            while (sErrors.size() >= MAX_SAVED_ERROR_COUNT) {
-                sErrors.remove(0);
-            }
-            // Add the new error to the list.
-            sErrors.add(new Error(errorMsg, operation, mLabel, location, what));
+            sErrors.append(new Error(errorMsg, operation, mLabel, location, what));
         }
         if (DEBUG) Log.w(TAG, operation + " " + errorMsg + " " + mLabel + " timer " + what);
         mTotalErrors++;
@@ -790,6 +785,7 @@
     private static void dump(IndentingPrintWriter ipw, int seq, Error err) {
         ipw.format("%2d: op:%s tag:%s issue:%s arg:%s\n", seq, err.operation, err.tag,
                 err.issue, err.arg);
+        ipw.format("    date:%s\n", err.date);
         ipw.increaseIndent();
         for (int i = 0; i < err.stack.length; i++) {
             ipw.println("    " + err.stack[i].toString());
@@ -801,15 +797,15 @@
      * Dump all errors to the output stream.
      */
     private static void dumpErrors(IndentingPrintWriter ipw) {
-        ArrayList<Error> errors;
+        Error errors[];
         synchronized (sErrors) {
             if (sErrors.size() == 0) return;
-            errors = (ArrayList<Error>) sErrors.clone();
+            errors = sErrors.toArray();
         }
         ipw.println("Errors");
         ipw.increaseIndent();
-        for (int i = 0; i < errors.size(); i++) {
-            dump(ipw, i, errors.get(i));
+        for (int i = 0; i < errors.length; i++) {
+            if (errors[i] != null) dump(ipw, i, errors[i]);
         }
         ipw.decreaseIndent();
     }
diff --git a/services/core/java/com/android/server/am/BroadcastProcessQueue.java b/services/core/java/com/android/server/am/BroadcastProcessQueue.java
index c35a3b2..5d31d15 100644
--- a/services/core/java/com/android/server/am/BroadcastProcessQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastProcessQueue.java
@@ -1347,8 +1347,8 @@
      * Set the timeout flag to indicate that an ANR timer has been started.  A value of true means a
      * timer is running; a value of false means there is no timer running.
      */
-    void setTimeoutScheduled(boolean timeoutStarted) {
-        mTimeoutScheduled = timeoutStarted;
+    void setTimeoutScheduled(boolean timeoutScheduled) {
+        mTimeoutScheduled = timeoutScheduled;
     }
 
     /**
diff --git a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
index 6a41628..a3dac6d 100644
--- a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
+++ b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
@@ -1183,7 +1183,7 @@
     }
 
     private class BroadcastAnrTimer extends AnrTimer<BroadcastProcessQueue> {
-        BroadcastAnrTimer(Handler handler) {
+        BroadcastAnrTimer(@NonNull Handler handler) {
             super(Objects.requireNonNull(handler),
                     MSG_DELIVERY_TIMEOUT, "BROADCAST_TIMEOUT", true);
         }
diff --git a/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java b/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java
index f6859d1..e0a71d4 100644
--- a/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java
+++ b/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java
@@ -27,6 +27,8 @@
 import static android.app.ActivityManager.FOREGROUND_SERVICE_API_TYPE_USB;
 import static android.os.Process.INVALID_UID;
 
+import static com.android.internal.util.FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA;
+
 import android.annotation.IntDef;
 import android.app.ActivityManager;
 import android.app.ActivityManager.ForegroundServiceApiType;
@@ -520,7 +522,10 @@
                 r.mAllowWIUByBindings,
                 r.mAllowStartForegroundNoBinding,
                 r.mAllowStartInBindService,
-                r.mAllowStartByBindings);
+                r.mAllowStartByBindings,
+                FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA,
+                false
+        );
     }
 
     /**
@@ -578,7 +583,10 @@
                 0,
                 0,
                 0,
-                0);
+                0,
+                FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA,
+                false
+        );
     }
 
     /**
diff --git a/services/core/java/com/android/server/biometrics/AuthenticationStatsCollector.java b/services/core/java/com/android/server/biometrics/AuthenticationStatsCollector.java
index 6edbfb7..4df2581 100644
--- a/services/core/java/com/android/server/biometrics/AuthenticationStatsCollector.java
+++ b/services/core/java/com/android/server/biometrics/AuthenticationStatsCollector.java
@@ -57,6 +57,7 @@
     @NonNull private final FaceManager mFaceManager;
     @NonNull private final FingerprintManager mFingerprintManager;
 
+    private final boolean mEnabled;
     private final float mThreshold;
     private final int mModality;
 
@@ -80,6 +81,7 @@
     public AuthenticationStatsCollector(@NonNull Context context, int modality,
             @NonNull BiometricNotification biometricNotification) {
         mContext = context;
+        mEnabled = context.getResources().getBoolean(R.bool.config_biometricFrrNotificationEnabled);
         mThreshold = context.getResources()
                 .getFraction(R.fraction.config_biometricNotificationFrrThreshold, 1, 1);
         mUserAuthenticationStatsMap = new HashMap<>();
@@ -110,6 +112,11 @@
     /** Update total authentication and rejected attempts. */
     public void authenticate(int userId, boolean authenticated) {
 
+        // Don't collect data if the feature is disabled.
+        if (!mEnabled) {
+            return;
+        }
+
         // Don't collect data for single-modality devices or user has both biometrics enrolled.
         if (isSingleModalityDevice()
                 || (hasEnrolledFace(userId) && hasEnrolledFingerprint(userId))) {
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 540ddd2..df45001 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -119,6 +119,7 @@
 import android.os.UserManager;
 import android.provider.DeviceConfigInterface;
 import android.provider.Settings;
+import android.sysprop.DisplayProperties;
 import android.text.TextUtils;
 import android.util.ArraySet;
 import android.util.EventLog;
@@ -488,6 +489,9 @@
 
     private boolean mBootCompleted = false;
 
+    // If we would like to keep a particular eye on a package, we can set the package name.
+    private final boolean mExtraDisplayEventLogging;
+
     private final BroadcastReceiver mIdleModeReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -571,6 +575,8 @@
         mOverlayProperties = SurfaceControl.getOverlaySupport();
         mSystemReady = false;
         mConfigParameterProvider = new DeviceConfigParameterProvider(DeviceConfigInterface.REAL);
+        final String name = DisplayProperties.debug_vri_package().orElse(null);
+        mExtraDisplayEventLogging = !TextUtils.isEmpty(name);
     }
 
     public void setupSchedulerPolicies() {
@@ -2919,9 +2925,10 @@
     // Delivers display event notifications to callbacks.
     private void deliverDisplayEvent(int displayId, ArraySet<Integer> uids,
             @DisplayEvent int event) {
-        if (DEBUG) {
+        if (DEBUG || mExtraDisplayEventLogging) {
             Slog.d(TAG, "Delivering display event: displayId="
-                    + displayId + ", event=" + event);
+                    + displayId + ", event=" + event
+                    + (uids != null ? ", uids=" + uids : ""));
         }
 
         // Grab the lock and copy the callbacks.
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
index 0cfdaf2..10b6052 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
@@ -195,8 +195,12 @@
         mApplicationKeyStorage = applicationKeyStorage;
         mTestCertHelper = testOnlyInsecureCertificateHelper;
         mCleanupManager = cleanupManager;
-        // Clears data for removed users.
-        mCleanupManager.verifyKnownUsers();
+        try {
+            // Clears data for removed users.
+            mCleanupManager.verifyKnownUsers();
+        } catch (Exception e) {
+            Log.e(TAG, "Failed to verify known users", e);
+        }
         try {
             mRecoverableKeyGenerator = RecoverableKeyGenerator.newInstance(mDatabase);
         } catch (NoSuchAlgorithmException e) {
diff --git a/services/core/java/com/android/server/notification/PermissionHelper.java b/services/core/java/com/android/server/notification/PermissionHelper.java
index 85c140c..e14f7c0 100644
--- a/services/core/java/com/android/server/notification/PermissionHelper.java
+++ b/services/core/java/com/android/server/notification/PermissionHelper.java
@@ -16,7 +16,6 @@
 
 package com.android.server.notification;
 
-import static android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
 import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED;
 import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET;
 import static android.content.pm.PackageManager.GET_PERMISSIONS;
@@ -203,7 +202,6 @@
                         Context.DEVICE_ID_DEFAULT, userId, TAG);
             }
             int flagMask = FLAG_PERMISSION_USER_SET | FLAG_PERMISSION_USER_FIXED;
-            flagMask = userSet || !grant ? flagMask | FLAG_PERMISSION_GRANTED_BY_DEFAULT : flagMask;
             if (userSet) {
                 mPermManager.updatePermissionFlags(packageName, NOTIFICATION_PERMISSION, flagMask,
                         FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, userId);
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 4d38239..b420acd 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -4773,7 +4773,7 @@
             case KeyEvent.KEYCODE_STYLUS_BUTTON_SECONDARY:
             case KeyEvent.KEYCODE_STYLUS_BUTTON_TERTIARY:
             case KeyEvent.KEYCODE_STYLUS_BUTTON_TAIL: {
-                if (down && mStylusButtonsEnabled) {
+                if (mStylusButtonsEnabled) {
                     sendSystemKeyToStatusBarAsync(event);
                 }
                 result &= ~ACTION_PASS_TO_USER;
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 216369b..52dafc2 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -7319,6 +7319,12 @@
         }
         return false;
     }
+
+    /**
+     * @return true if a solid color splash screen must be used
+     *         false when an icon splash screen can be used, but the final decision for whether to
+     *               use an icon or solid color splash screen will be made by WmShell.
+     */
     private boolean shouldUseSolidColorSplashScreen(ActivityRecord sourceRecord,
             boolean startActivity, ActivityOptions options, int resolvedTheme) {
         if (sourceRecord == null && !startActivity) {
@@ -7332,39 +7338,36 @@
         }
 
         // setSplashScreenStyle decide in priority of windowSplashScreenBehavior.
-        if (options != null) {
-            final int optionsStyle = options.getSplashScreenStyle();
-            if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_SOLID_COLOR) {
-                return true;
-            } else if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_ICON
+        final int optionsStyle = options != null ? options.getSplashScreenStyle() :
+                SplashScreen.SPLASH_SCREEN_STYLE_UNDEFINED;
+        if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_SOLID_COLOR) {
+            return true;
+        } else if (optionsStyle == SplashScreen.SPLASH_SCREEN_STYLE_ICON
                     || isIconStylePreferred(resolvedTheme)) {
-                return false;
-            }
-            // Choose the default behavior for Launcher and SystemUI when the SplashScreen style is
-            // not specified in the ActivityOptions.
-            if (mLaunchSourceType == LAUNCH_SOURCE_TYPE_HOME
-                    || launchedFromUid == Process.SHELL_UID) {
-                return false;
-            } else if (mLaunchSourceType == LAUNCH_SOURCE_TYPE_SYSTEMUI) {
-                return true;
-            }
-        } else if (isIconStylePreferred(resolvedTheme)) {
             return false;
         }
-        if (sourceRecord == null) {
-            sourceRecord = searchCandidateLaunchingActivity();
-        }
 
-        if (sourceRecord != null && !sourceRecord.isActivityTypeHome()) {
-            return sourceRecord.mSplashScreenStyleSolidColor;
-        }
+        // Choose the default behavior when neither the ActivityRecord nor the activity theme have
+        // specified a splash screen style.
 
-        // If this activity was launched from Launcher or System for first start, never use a
-        // solid color splash screen.
-        // Need to check sourceRecord before in case this activity is launched from service.
-        return !startActivity || !(mLaunchSourceType == LAUNCH_SOURCE_TYPE_SYSTEM
-                || mLaunchSourceType == LAUNCH_SOURCE_TYPE_HOME
-                || launchedFromUid == Process.SHELL_UID);
+        if (mLaunchSourceType == LAUNCH_SOURCE_TYPE_HOME || launchedFromUid == Process.SHELL_UID) {
+            return false;
+        } else if (mLaunchSourceType == LAUNCH_SOURCE_TYPE_SYSTEMUI) {
+            return true;
+        } else {
+            // Need to check sourceRecord in case this activity is launched from a service.
+            if (sourceRecord == null) {
+                sourceRecord = searchCandidateLaunchingActivity();
+            }
+
+            if (sourceRecord != null) {
+                return sourceRecord.mSplashScreenStyleSolidColor;
+            }
+
+            // Use an icon if the activity was launched from System for the first start.
+            // Otherwise, must use solid color splash screen.
+            return mLaunchSourceType != LAUNCH_SOURCE_TYPE_SYSTEM || !startActivity;
+        }
     }
 
     private int getSplashscreenTheme(ActivityOptions options) {
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 9c9c63f..f38f6b0 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -1843,8 +1843,12 @@
             RemoteCallback navigationObserver, BackAnimationAdapter adapter) {
         mAmInternal.enforceCallingPermission(START_TASKS_FROM_RECENTS,
                 "startBackNavigation()");
-
-        return mBackNavigationController.startBackNavigation(navigationObserver, adapter);
+        final long origId = Binder.clearCallingIdentity();
+        try {
+            return mBackNavigationController.startBackNavigation(navigationObserver, adapter);
+        } finally {
+            Binder.restoreCallingIdentity(origId);
+        }
     }
 
     /**
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index e523119..9bfc553 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -795,17 +795,13 @@
             return false;
         }
 
-        // Try pausing the existing resumed activity in the same TaskFragment if any.
-        final TaskFragment taskFragment = r.getTaskFragment();
-        if (taskFragment != null && taskFragment.getResumedActivity() != null) {
-            if (taskFragment.startPausing(mUserLeaving, false /* uiSleeping */, r, "realStart")) {
-                return false;
-            }
+        // Try pausing the existing resumed activity in the Task if any.
+        final Task task = r.getTask();
+        if (task.pauseActivityIfNeeded(r, "realStart")) {
+            return false;
         }
 
-        final Task task = r.getTask();
         final Task rootTask = task.getRootTask();
-
         beginDeferResume();
         // The LaunchActivityItem also contains process configuration, so the configuration change
         // from WindowProcessController#setProcess can be deferred. The major reason is that if
diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java
index 3639e1b..d2d6552 100644
--- a/services/core/java/com/android/server/wm/LetterboxUiController.java
+++ b/services/core/java/com/android/server/wm/LetterboxUiController.java
@@ -661,6 +661,10 @@
     @ScreenOrientation
     int overrideOrientationIfNeeded(@ScreenOrientation int candidate) {
         if (shouldApplyUserFullscreenOverride()) {
+            Slog.v(TAG, "Requested orientation " + screenOrientationToString(candidate) + " for "
+                    + mActivityRecord + " is overridden to "
+                    + screenOrientationToString(SCREEN_ORIENTATION_USER)
+                    + " by user aspect ratio settings.");
             return SCREEN_ORIENTATION_USER;
         }
 
@@ -668,6 +672,14 @@
         // orientation.
         candidate = mActivityRecord.mWmService.mapOrientationRequest(candidate);
 
+        if (shouldApplyUserMinAspectRatioOverride() && !isFixedOrientation(candidate)) {
+            Slog.v(TAG, "Requested orientation " + screenOrientationToString(candidate) + " for "
+                    + mActivityRecord + " is overridden to "
+                    + screenOrientationToString(SCREEN_ORIENTATION_PORTRAIT)
+                    + " by user aspect ratio settings.");
+            return SCREEN_ORIENTATION_PORTRAIT;
+        }
+
         if (FALSE.equals(mBooleanPropertyAllowOrientationOverride)) {
             return candidate;
         }
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index de197a1..b4b8a74 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -1262,6 +1262,37 @@
         return null;
     }
 
+    boolean pauseActivityIfNeeded(@Nullable ActivityRecord resuming, @NonNull String reason) {
+        if (!isLeafTask()) {
+            return false;
+        }
+
+        final int[] someActivityPaused = {0};
+        // Check if the direct child resumed activity in the leaf task needed to be paused if
+        // the leaf task is not a leaf task fragment.
+        if (!isLeafTaskFragment()) {
+            final ActivityRecord top = topRunningActivity();
+            final ActivityRecord resumedActivity = getResumedActivity();
+            if (resumedActivity != null && top.getTaskFragment() != this) {
+                // Pausing the resumed activity because it is occluded by other task fragment.
+                if (startPausing(false /* uiSleeping*/, resuming, reason)) {
+                    someActivityPaused[0]++;
+                }
+            }
+        }
+
+        forAllLeafTaskFragments((taskFrag) -> {
+            final ActivityRecord resumedActivity = taskFrag.getResumedActivity();
+            if (resumedActivity != null && !taskFrag.canBeResumed(resuming)) {
+                if (taskFrag.startPausing(false /* uiSleeping*/, resuming, reason)) {
+                    someActivityPaused[0]++;
+                }
+            }
+        }, true /* traverseTopToBottom */);
+
+        return someActivityPaused[0] > 0;
+    }
+
     void updateTaskMovement(boolean toTop, boolean toBottom, int position) {
         EventLogTags.writeWmTaskMoved(mTaskId, getRootTaskId(), getDisplayId(), toTop ? 1 : 0,
                 position);
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index 9af12ad..ae794a8 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -1271,27 +1271,9 @@
     boolean pauseBackTasks(ActivityRecord resuming) {
         final int[] someActivityPaused = {0};
         forAllLeafTasks(leafTask -> {
-            // Check if the direct child resumed activity in the leaf task needed to be paused if
-            // the leaf task is not a leaf task fragment.
-            if (!leafTask.isLeafTaskFragment()) {
-                final ActivityRecord top = topRunningActivity();
-                final ActivityRecord resumedActivity = leafTask.getResumedActivity();
-                if (resumedActivity != null && top.getTaskFragment() != leafTask) {
-                    // Pausing the resumed activity because it is occluded by other task fragment.
-                    if (leafTask.startPausing(false /* uiSleeping*/, resuming, "pauseBackTasks")) {
-                        someActivityPaused[0]++;
-                    }
-                }
+            if (leafTask.pauseActivityIfNeeded(resuming, "pauseBackTasks")) {
+                someActivityPaused[0]++;
             }
-
-            leafTask.forAllLeafTaskFragments((taskFrag) -> {
-                final ActivityRecord resumedActivity = taskFrag.getResumedActivity();
-                if (resumedActivity != null && !taskFrag.canBeResumed(resuming)) {
-                    if (taskFrag.startPausing(false /* uiSleeping*/, resuming, "pauseBackTasks")) {
-                        someActivityPaused[0]++;
-                    }
-                }
-            }, true /* traverseTopToBottom */);
         }, true /* traverseTopToBottom */);
         return someActivityPaused[0] > 0;
     }
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 881fdec..bbafa25 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -1614,13 +1614,6 @@
             }
         }
 
-        // Take task snapshots before the animation so that we can capture IME before it gets
-        // transferred. If transition is transient, IME won't be moved during the transition and
-        // the tasks are still live, so we take the snapshot at the end of the transition instead.
-        if (mTransientLaunches == null) {
-            mController.mSnapshotController.onTransactionReady(mType, mTargets);
-        }
-
         // This is non-null only if display has changes. It handles the visible windows that don't
         // need to be participated in the transition.
         for (int i = 0; i < mTargetDisplays.size(); ++i) {
@@ -1671,6 +1664,16 @@
 
         reportStartReasonsToLogger();
 
+        // Take snapshots for closing tasks/activities before the animation finished but after
+        // dispatching onTransitionReady, so IME (if there is) can be captured together and the
+        // time spent on snapshot won't delay the start of animation. Note that if this transition
+        // is transient (mTransientLaunches != null), the snapshot will be captured at the end of
+        // the transition, because IME won't move be moved during the transition and the tasks are
+        // still live.
+        if (mTransientLaunches == null) {
+            mController.mSnapshotController.onTransactionReady(mType, mTargets);
+        }
+
         // Since we created root-leash but no longer reference it from core, release it now
         info.releaseAnimSurfaces();
 
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 561848e..8fe104c 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2493,6 +2493,14 @@
                 outInsetsState.set(win.getCompatInsetsState(), true /* copySources */);
             }
 
+            // TODO (b/298562855): Remove this after identifying the reason why the frame is empty.
+            if (win.mAttrs.providedInsets != null && win.getFrame().isEmpty()) {
+                Slog.w(TAG, "Empty frame of " + win
+                        + " configChanged=" + configChanged
+                        + " frame=" + win.getFrame().toShortString()
+                        + " attrs=" + attrs);
+            }
+
             ProtoLog.v(WM_DEBUG_FOCUS, "Relayout of %s: focusMayChange=%b",
                     win, focusMayChange);
 
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
index 82d39d6..a4adf58 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
@@ -35,7 +35,7 @@
 import android.credentials.CreateCredentialRequest;
 import android.credentials.CredentialOption;
 import android.credentials.CredentialProviderInfo;
-import android.credentials.GetCandidateCredentialsRequest;
+import android.credentials.GetCandidateCredentialsException;
 import android.credentials.GetCredentialException;
 import android.credentials.GetCredentialRequest;
 import android.credentials.IClearCredentialStateCallback;
@@ -303,9 +303,9 @@
             ComponentName compName = ComponentName.unflattenFromString(serviceName);
             if (compName == null) {
                 Slog.w(
-                    TAG,
-                    "Primary provider component name unflatten from string error: "
-                            + serviceName);
+                        TAG,
+                        "Primary provider component name unflatten from string error: "
+                                + serviceName);
                 continue;
             }
             services.add(compName);
@@ -474,13 +474,55 @@
     final class CredentialManagerServiceStub extends ICredentialManager.Stub {
         @Override
         public ICancellationSignal getCandidateCredentials(
-                GetCandidateCredentialsRequest request,
+                GetCredentialRequest request,
                 IGetCandidateCredentialsCallback callback,
                 final String callingPackage) {
             Slog.i(TAG, "starting getCandidateCredentials with callingPackage: "
                     + callingPackage);
-            // TODO(): Implement
-            return CancellationSignal.createTransport();
+            ICancellationSignal cancelTransport = CancellationSignal.createTransport();
+
+            final int userId = UserHandle.getCallingUserId();
+            final int callingUid = Binder.getCallingUid();
+
+            // New request session, scoped for this request only.
+            final GetCandidateRequestSession session =
+                    new GetCandidateRequestSession(
+                            getContext(),
+                            mSessionManager,
+                            mLock,
+                            userId,
+                            callingUid,
+                            callback,
+                            request,
+                            constructCallingAppInfo(callingPackage, userId, request.getOrigin()),
+                            getEnabledProvidersForUser(userId),
+                            CancellationSignal.fromTransport(cancelTransport)
+                    );
+            addSessionLocked(userId, session);
+
+            List<ProviderSession> providerSessions =
+                    initiateProviderSessions(
+                            session,
+                            request.getCredentialOptions().stream()
+                                    .map(CredentialOption::getType)
+                                    .collect(Collectors.toList()));
+
+            if (providerSessions.isEmpty()) {
+                try {
+                    callback.onError(
+                            GetCandidateCredentialsException.TYPE_NO_CREDENTIAL,
+                            "No credentials available on this device.");
+                } catch (RemoteException e) {
+                    Slog.i(
+                            TAG,
+                            "Issue invoking onError on IGetCredentialCallback "
+                                    + "callback: "
+                                    + e.getMessage());
+                }
+            }
+
+            invokeProviderSessions(providerSessions);
+            return cancelTransport;
         }
 
         @Override
@@ -737,7 +779,7 @@
 
         @Override
         public void setEnabledProviders(
-                List<String>  primaryProviders, List<String> providers, int userId,
+                List<String> primaryProviders, List<String> providers, int userId,
                 ISetEnabledProvidersCallback callback) {
             final int callingUid = Binder.getCallingUid();
             if (!hasWriteSecureSettingsPermission()) {
@@ -862,9 +904,9 @@
                     ApiName.GET_CREDENTIAL_PROVIDER_SERVICES,
                     ApiStatus.SUCCESS, callingUid);
             return CredentialProviderInfoFactory
-            .getCredentialProviderServices(
-                mContext, userId, providerFilter, getEnabledProvidersForUser(userId),
-                getPrimaryProvidersForUserId(mContext, userId));
+                    .getCredentialProviderServices(
+                            mContext, userId, providerFilter, getEnabledProvidersForUser(userId),
+                            getPrimaryProvidersForUserId(mContext, userId));
 
         }
 
@@ -894,13 +936,14 @@
 
         private Set<ComponentName> getEnabledProvidersForUser(int userId) {
             final int resolvedUserId = ActivityManager.handleIncomingUser(
-                Binder.getCallingPid(), Binder.getCallingUid(),
-                userId, false, false,
-                "getEnabledProvidersForUser", null);
+                    Binder.getCallingPid(), Binder.getCallingUid(),
+                    userId, false, false,
+                    "getEnabledProvidersForUser", null);
 
             Set<ComponentName> enabledProviders = new HashSet<>();
             String directValue = Settings.Secure.getStringForUser(
-                mContext.getContentResolver(), Settings.Secure.CREDENTIAL_SERVICE, resolvedUserId);
+                    mContext.getContentResolver(), Settings.Secure.CREDENTIAL_SERVICE,
+                    resolvedUserId);
 
             if (!TextUtils.isEmpty(directValue)) {
                 String[] components = directValue.split(":");
diff --git a/services/credentials/java/com/android/server/credentials/GetCandidateRequestSession.java b/services/credentials/java/com/android/server/credentials/GetCandidateRequestSession.java
new file mode 100644
index 0000000..6d9b7e8
--- /dev/null
+++ b/services/credentials/java/com/android/server/credentials/GetCandidateRequestSession.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.credentials;
+
+import android.annotation.Nullable;
+import android.content.ComponentName;
+import android.content.Context;
+import android.credentials.CredentialProviderInfo;
+import android.credentials.GetCandidateCredentialsException;
+import android.credentials.GetCandidateCredentialsResponse;
+import android.credentials.GetCredentialRequest;
+import android.credentials.IGetCandidateCredentialsCallback;
+import android.credentials.ui.GetCredentialProviderData;
+import android.credentials.ui.ProviderData;
+import android.credentials.ui.RequestInfo;
+import android.os.CancellationSignal;
+import android.os.RemoteException;
+import android.service.credentials.CallingAppInfo;
+import android.util.Slog;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Central session for a single getCandidateCredentials request. This class listens to the
+ * responses from providers, and updates the provider(s) state.
+ */
+public class GetCandidateRequestSession extends RequestSession<GetCredentialRequest,
+        IGetCandidateCredentialsCallback, GetCandidateCredentialsResponse>
+        implements ProviderSession.ProviderInternalCallback<GetCandidateCredentialsResponse> {
+    private static final String TAG = "GetCandidateRequestSession";
+
+    public GetCandidateRequestSession(
+            Context context, SessionLifetime sessionCallback,
+            Object lock, int userId, int callingUid,
+            IGetCandidateCredentialsCallback callback, GetCredentialRequest request,
+            CallingAppInfo callingAppInfo, Set<ComponentName> enabledProviders,
+            CancellationSignal cancellationSignal) {
+        super(context, sessionCallback, lock, userId, callingUid, request, callback,
+                RequestInfo.TYPE_GET, callingAppInfo, enabledProviders,
+                cancellationSignal, 0L);
+    }
+
+    /**
+     * Creates a new provider session, and adds it list of providers that are contributing to
+     * this session.
+     *
+     * @return the provider session created within this request session, for the given provider
+     * info.
+     */
+    @Override
+    @Nullable
+    public ProviderSession initiateProviderSession(CredentialProviderInfo providerInfo,
+            RemoteCredentialService remoteCredentialService) {
+        ProviderGetSession providerGetCandidateSessions = ProviderGetSession
+                .createNewSession(mContext, mUserId, providerInfo,
+                        this, remoteCredentialService);
+        if (providerGetCandidateSessions != null) {
+            Slog.d(TAG, "In startProviderSession - provider session created and "
+                    + "being added for: " + providerInfo.getComponentName());
+            mProviders.put(providerGetCandidateSessions.getComponentName().flattenToString(),
+                    providerGetCandidateSessions);
+        }
+        return providerGetCandidateSessions;
+    }
+
+    /**
+     * Even though there is no UI involved, this is called when all providers are ready
+     * in our current flow. Eventually can completely separate UI and non UI flows.
+     */
+    @Override
+    protected void launchUiWithProviderData(ArrayList<ProviderData> providerDataList) {
+        if (providerDataList == null || providerDataList.isEmpty()) {
+            respondToClientWithErrorAndFinish(
+                    GetCandidateCredentialsException.TYPE_NO_CREDENTIAL,
+                    "No credentials found");
+            return;
+        }
+
+        List<GetCredentialProviderData> candidateProviderDataList = new ArrayList<>();
+        for (ProviderData providerData : providerDataList) {
+            candidateProviderDataList.add((GetCredentialProviderData) (providerData));
+        }
+        respondToClientWithResponseAndFinish(new GetCandidateCredentialsResponse(
+                candidateProviderDataList));
+    }
+
+    @Override
+    protected void invokeClientCallbackSuccess(GetCandidateCredentialsResponse response)
+            throws RemoteException {
+        mClientCallback.onResponse(response);
+    }
+
+    @Override
+    protected void invokeClientCallbackError(String errorType, String errorMsg)
+            throws RemoteException {
+        mClientCallback.onError(errorType, errorMsg);
+    }
+
+    @Override
+    public void onFinalErrorReceived(ComponentName componentName, String errorType,
+            String message) {
+        // Not applicable for session without UI
+    }
+
+    @Override
+    public void onUiCancellation(boolean isUserCancellation) {
+        // Not applicable for session without UI
+    }
+
+    @Override
+    public void onUiSelectorInvocationFailure() {
+        // Not applicable for session without UI
+    }
+
+    @Override
+    public void onProviderStatusChanged(ProviderSession.Status status,
+            ComponentName componentName, ProviderSession.CredentialsSource source) {
+        Slog.d(TAG, "in onStatusChanged with status: " + status + ", and source: " + source);
+
+        // For any other status, we check if all providers are done and then invoke UI if needed
+        if (!isAnyProviderPending()) {
+            // If all provider responses have been received, we can either need the UI,
+            // or we need to respond with error. The only other case is the entry being
+            // selected after the UI has been invoked which has a separate code path.
+            if (isUiInvocationNeeded()) {
+                Slog.d(TAG, "in onProviderStatusChanged - isUiInvocationNeeded");
+                getProviderDataAndInitiateUi();
+            } else {
+                respondToClientWithErrorAndFinish(
+                        GetCandidateCredentialsException.TYPE_NO_CREDENTIAL,
+                        "No credentials available");
+            }
+        }
+    }
+
+    @Override
+    public void onFinalResponseReceived(ComponentName componentName,
+            GetCandidateCredentialsResponse response) {
+        // Not applicable for session without UI
+    }
+}
diff --git a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
index 3c1432a..3eb6718 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
@@ -119,6 +119,42 @@
         return null;
     }
 
+    /** Creates a new provider session to be used by the request session. */
+    @Nullable
+    public static ProviderGetSession createNewSession(
+            Context context,
+            @UserIdInt int userId,
+            CredentialProviderInfo providerInfo,
+            GetCandidateRequestSession getRequestSession,
+            RemoteCredentialService remoteCredentialService) {
+        android.credentials.GetCredentialRequest filteredRequest =
+                filterOptions(providerInfo.getCapabilities(),
+                        getRequestSession.mClientRequest,
+                        providerInfo);
+        if (filteredRequest != null) {
+            Map<String, CredentialOption> beginGetOptionToCredentialOptionMap =
+                    new HashMap<>();
+            return new ProviderGetSession(
+                    context,
+                    providerInfo,
+                    getRequestSession,
+                    userId,
+                    remoteCredentialService,
+                    constructQueryPhaseRequest(
+                            filteredRequest, getRequestSession.mClientAppInfo,
+                            getRequestSession.mClientRequest.alwaysSendAppInfoToProvider(),
+                            beginGetOptionToCredentialOptionMap),
+                    filteredRequest,
+                    getRequestSession.mClientAppInfo,
+                    beginGetOptionToCredentialOptionMap,
+                    getRequestSession.mHybridService
+            );
+        }
+        Slog.i(TAG, "Unable to create provider session for: "
+                + providerInfo.getComponentName());
+        return null;
+    }
+
     private static BeginGetCredentialRequest constructQueryPhaseRequest(
             android.credentials.GetCredentialRequest filteredRequest,
             CallingAppInfo callingAppInfo,
@@ -192,7 +228,7 @@
 
     public ProviderGetSession(Context context,
             CredentialProviderInfo info,
-            ProviderInternalCallback<GetCredentialResponse> callbacks,
+            ProviderInternalCallback callbacks,
             int userId, RemoteCredentialService remoteCredentialService,
             BeginGetCredentialRequest beginGetRequest,
             android.credentials.GetCredentialRequest completeGetRequest,
diff --git a/services/tests/PermissionServiceMockingTests/src/com/android/server/permission/test/AppIdPermissionPolicyTest.kt b/services/tests/PermissionServiceMockingTests/src/com/android/server/permission/test/AppIdPermissionPolicyTest.kt
index 3ab2547..3cf57a3 100644
--- a/services/tests/PermissionServiceMockingTests/src/com/android/server/permission/test/AppIdPermissionPolicyTest.kt
+++ b/services/tests/PermissionServiceMockingTests/src/com/android/server/permission/test/AppIdPermissionPolicyTest.kt
@@ -1445,6 +1445,192 @@
             .isEqualTo(expectedNewFlags)
     }
 
+    @Test
+    fun testOnPackageAdded_runtimeExistingImplicitPermissions_sourceFlagsNotInherited() {
+        val oldImplicitPermissionFlags = PermissionFlags.USER_FIXED
+        testInheritImplicitPermissionStates(
+            implicitPermissionFlags = oldImplicitPermissionFlags,
+            isNewInstallAndNewPermission = false
+        )
+
+        val actualFlags = getPermissionFlags(APP_ID_1, USER_ID_0, PERMISSION_NAME_0)
+        val expectedNewFlags = oldImplicitPermissionFlags or PermissionFlags.IMPLICIT_GRANTED or
+            PermissionFlags.APP_OP_REVOKED
+        assertWithMessage(
+            "After onPackageAdded() is called for a package that requests a permission that is" +
+                " implicit, existing and runtime, it should not inherit the runtime flags from" +
+                " the source permission. Hence the actual permission flags $actualFlags should" +
+                " match the expected flags $expectedNewFlags"
+        )
+            .that(actualFlags)
+            .isEqualTo(expectedNewFlags)
+    }
+
+    @Test
+    fun testOnPackageAdded_nonRuntimeNewImplicitPermissions_sourceFlagsNotInherited() {
+        testInheritImplicitPermissionStates(
+            implicitPermissionProtectionLevel = PermissionInfo.PROTECTION_NORMAL
+        )
+
+        val actualFlags = getPermissionFlags(APP_ID_1, USER_ID_0, PERMISSION_NAME_0)
+        val expectedNewFlags = PermissionFlags.INSTALL_GRANTED
+        assertWithMessage(
+            "After onPackageAdded() is called for a package that requests a permission that is" +
+                " implicit, new and non-runtime, it should not inherit the runtime flags from" +
+                " the source permission. Hence the actual permission flags $actualFlags should" +
+                " match the expected flags $expectedNewFlags"
+        )
+            .that(actualFlags)
+            .isEqualTo(expectedNewFlags)
+    }
+
+    @Test
+    fun testOnPackageAdded_runtimeNewImplicitPermissions_sourceFlagsInherited() {
+        val sourceRuntimeFlags = PermissionFlags.RUNTIME_GRANTED or PermissionFlags.USER_SET
+        testInheritImplicitPermissionStates(sourceRuntimeFlags = sourceRuntimeFlags)
+
+        val actualFlags = getPermissionFlags(APP_ID_1, USER_ID_0, PERMISSION_NAME_0)
+        val expectedNewFlags = sourceRuntimeFlags or PermissionFlags.IMPLICIT_GRANTED or
+            PermissionFlags.IMPLICIT
+        assertWithMessage(
+            "After onPackageAdded() is called for a package that requests a permission that is" +
+                " implicit, new and runtime, it should inherit the runtime flags from" +
+                " the source permission. Hence the actual permission flags $actualFlags should" +
+                " match the expected flags $expectedNewFlags"
+        )
+            .that(actualFlags)
+            .isEqualTo(expectedNewFlags)
+    }
+
+    @Test
+    fun testOnPackageAdded_grantingNewFromRevokeImplicitPermissions_onlySourceFlagsInherited() {
+        val sourceRuntimeFlags = PermissionFlags.RUNTIME_GRANTED or PermissionFlags.USER_SET
+        testInheritImplicitPermissionStates(
+            implicitPermissionFlags = PermissionFlags.POLICY_FIXED,
+            sourceRuntimeFlags = sourceRuntimeFlags,
+            isAnySourcePermissionNonRuntime = false
+        )
+
+        val actualFlags = getPermissionFlags(APP_ID_1, USER_ID_0, PERMISSION_NAME_0)
+        val expectedNewFlags = sourceRuntimeFlags or PermissionFlags.IMPLICIT
+        assertWithMessage(
+            "After onPackageAdded() is called for a package that requests a permission that is" +
+                " implicit, existing, runtime and revoked, it should only inherit runtime flags" +
+                " from source permission. Hence the actual permission flags $actualFlags should" +
+                " match the expected flags $expectedNewFlags"
+        )
+            .that(actualFlags)
+            .isEqualTo(expectedNewFlags)
+    }
+
+    /**
+     * If it's a media implicit permission (one of RETAIN_IMPLICIT_FLAGS_PERMISSIONS), we want to
+     * remove the IMPLICIT flag so that they will be granted when they are no longer implicit.
+     * (instead of revoking it)
+     */
+    @Test
+    fun testOnPackageAdded_mediaImplicitPermissions_getsImplicitFlagRemoved() {
+        val sourceRuntimeFlags = PermissionFlags.RUNTIME_GRANTED or PermissionFlags.USER_SET
+        testInheritImplicitPermissionStates(
+            implicitPermissionName = PERMISSION_ACCESS_MEDIA_LOCATION,
+            sourceRuntimeFlags = sourceRuntimeFlags
+        )
+
+        val actualFlags = getPermissionFlags(APP_ID_1, USER_ID_0, PERMISSION_ACCESS_MEDIA_LOCATION)
+        val expectedNewFlags = sourceRuntimeFlags or PermissionFlags.IMPLICIT_GRANTED
+        assertWithMessage(
+            "After onPackageAdded() is called for a package that requests a media permission that" +
+                " is implicit, new and runtime, it should inherit the runtime flags from" +
+                " the source permission and have the IMPLICIT flag removed. Hence the actual" +
+                " permission flags $actualFlags should match the expected flags $expectedNewFlags"
+        )
+            .that(actualFlags)
+            .isEqualTo(expectedNewFlags)
+    }
+
+    private fun testInheritImplicitPermissionStates(
+        implicitPermissionName: String = PERMISSION_NAME_0,
+        implicitPermissionFlags: Int = 0,
+        implicitPermissionProtectionLevel: Int = PermissionInfo.PROTECTION_DANGEROUS,
+        sourceRuntimeFlags: Int = PermissionFlags.RUNTIME_GRANTED or PermissionFlags.USER_SET,
+        isAnySourcePermissionNonRuntime: Boolean = true,
+        isNewInstallAndNewPermission: Boolean = true
+    ) {
+        val implicitPermission = mockParsedPermission(
+            implicitPermissionName,
+            PACKAGE_NAME_0,
+            protectionLevel = implicitPermissionProtectionLevel,
+        )
+        // For source from non-runtime in order to grant by implicit
+        val sourcePermission1 = mockParsedPermission(
+            PERMISSION_NAME_1,
+            PACKAGE_NAME_0,
+            protectionLevel = if (isAnySourcePermissionNonRuntime) {
+                PermissionInfo.PROTECTION_NORMAL
+            } else {
+                PermissionInfo.PROTECTION_DANGEROUS
+            }
+        )
+        // For inheriting runtime flags
+        val sourcePermission2 = mockParsedPermission(
+            PERMISSION_NAME_2,
+            PACKAGE_NAME_0,
+            protectionLevel = PermissionInfo.PROTECTION_DANGEROUS,
+        )
+        val permissionOwnerPackageState = mockPackageState(
+            APP_ID_0,
+            mockAndroidPackage(
+                PACKAGE_NAME_0,
+                permissions = listOf(implicitPermission, sourcePermission1, sourcePermission2)
+            )
+        )
+        val installedPackageState = mockPackageState(
+            APP_ID_1,
+            mockAndroidPackage(
+                PACKAGE_NAME_1,
+                requestedPermissions = setOf(
+                    implicitPermissionName,
+                    PERMISSION_NAME_1,
+                    PERMISSION_NAME_2
+                ),
+                implicitPermissions = setOf(implicitPermissionName)
+            )
+        )
+        oldState.mutateExternalState().setImplicitToSourcePermissions(
+            MutableIndexedMap<String, IndexedListSet<String>>().apply {
+                put(implicitPermissionName, MutableIndexedListSet<String>().apply {
+                    add(PERMISSION_NAME_1)
+                    add(PERMISSION_NAME_2)
+                })
+            }
+        )
+        addPackageState(permissionOwnerPackageState)
+        addPermission(implicitPermission)
+        addPermission(sourcePermission1)
+        addPermission(sourcePermission2)
+        if (!isNewInstallAndNewPermission) {
+            addPackageState(installedPackageState)
+            setPermissionFlags(APP_ID_1, USER_ID_0, implicitPermissionName, implicitPermissionFlags)
+        }
+        setPermissionFlags(APP_ID_1, USER_ID_0, PERMISSION_NAME_2, sourceRuntimeFlags)
+
+        mutateState {
+            if (isNewInstallAndNewPermission) {
+                addPackageState(installedPackageState)
+                setPermissionFlags(
+                    APP_ID_1,
+                    USER_ID_0,
+                    implicitPermissionName,
+                    implicitPermissionFlags,
+                    newState
+                )
+            }
+            with(appIdPermissionPolicy) {
+                onPackageAdded(installedPackageState)
+            }
+        }
+    }
+
     /**
      * Setup simple package states for testing evaluatePermissionState().
      * permissionOwnerPackageState is definer of permissionName with APP_ID_0.
@@ -1734,6 +1920,7 @@
 
         private const val PERMISSION_NAME_0 = "permissionName0"
         private const val PERMISSION_NAME_1 = "permissionName1"
+        private const val PERMISSION_NAME_2 = "permissionName2"
         private const val PERMISSION_READ_EXTERNAL_STORAGE =
             Manifest.permission.READ_EXTERNAL_STORAGE
         private const val PERMISSION_POST_NOTIFICATIONS =
@@ -1742,6 +1929,8 @@
             Manifest.permission.BLUETOOTH_CONNECT
         private const val PERMISSION_ACCESS_BACKGROUND_LOCATION =
             Manifest.permission.ACCESS_BACKGROUND_LOCATION
+        private const val PERMISSION_ACCESS_MEDIA_LOCATION =
+            Manifest.permission.ACCESS_MEDIA_LOCATION
 
         private const val USER_ID_0 = 0
     }
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/AuthenticationStatsCollectorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/AuthenticationStatsCollectorTest.java
index a11a8f5..d2e83e9 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/AuthenticationStatsCollectorTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/AuthenticationStatsCollectorTest.java
@@ -87,6 +87,8 @@
     public void setUp() {
 
         when(mContext.getResources()).thenReturn(mResources);
+        when(mResources.getBoolean(eq(R.bool.config_biometricFrrNotificationEnabled)))
+                .thenReturn(true);
         when(mResources.getFraction(eq(R.fraction.config_biometricNotificationFrrThreshold),
                 anyInt(), anyInt())).thenReturn(FRR_THRESHOLD);
 
@@ -110,7 +112,6 @@
                 0 /* modality */, mBiometricNotification);
     }
 
-
     @Test
     public void authenticate_authenticationSucceeded_mapShouldBeUpdated() {
         // Assert that the user doesn't exist in the map initially.
@@ -342,4 +343,32 @@
         // Assert that notification count has been updated.
         assertThat(authenticationStats.getEnrollmentNotifications()).isEqualTo(1);
     }
+
+    @Test
+    public void authenticate_featureDisabled_mapMustNotBeUpdated() {
+        // Disable the feature.
+        when(mResources.getBoolean(eq(R.bool.config_biometricFrrNotificationEnabled)))
+                .thenReturn(false);
+        AuthenticationStatsCollector authenticationStatsCollector =
+                new AuthenticationStatsCollector(mContext, 0 /* modality */,
+                        mBiometricNotification);
+
+        authenticationStatsCollector.setAuthenticationStatsForUser(USER_ID_1,
+                new AuthenticationStats(USER_ID_1, 500 /* totalAttempts */,
+                        400 /* rejectedAttempts */, 0 /* enrollmentNotifications */,
+                        0 /* modality */));
+
+        authenticationStatsCollector.authenticate(USER_ID_1, false /* authenticated */);
+
+        // Assert that no notification should be sent.
+        verify(mBiometricNotification, never()).sendFaceEnrollNotification(any());
+        verify(mBiometricNotification, never()).sendFpEnrollNotification(any());
+        // Assert that data hasn't been updated.
+        AuthenticationStats authenticationStats = authenticationStatsCollector
+                .getAuthenticationStatsForUser(USER_ID_1);
+        assertThat(authenticationStats.getTotalAttempts()).isEqualTo(500);
+        assertThat(authenticationStats.getRejectedAttempts()).isEqualTo(400);
+        assertThat(authenticationStats.getEnrollmentNotifications()).isEqualTo(0);
+        assertThat(authenticationStats.getFrr()).isWithin(0f).of(0.8f);
+    }
 }
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
index 318f932..3034942 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
@@ -248,8 +248,7 @@
         verify(mPermManager).grantRuntimePermission(
                 "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT,
-                FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
+                USER_FLAG_MASK, FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
@@ -267,8 +266,7 @@
         verify(mPermManager).grantRuntimePermission(
                 "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT,
-                FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
+                USER_FLAG_MASK, FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
@@ -282,8 +280,7 @@
                 eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
                 eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT,
-                FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
+                USER_FLAG_MASK, FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
@@ -310,8 +307,7 @@
                 eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
                 eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT, 0,
-                true, Context.DEVICE_ID_DEFAULT, 10);
+                USER_FLAG_MASK, 0, true, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java
index 0566f46..381b27b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java
@@ -811,6 +811,28 @@
                 /* candidate */ SCREEN_ORIENTATION_PORTRAIT), SCREEN_ORIENTATION_PORTRAIT);
     }
 
+    @Test
+    public void testOverrideOrientationIfNeeded_userAspectRatioApplied_unspecifiedOverridden() {
+        spyOn(mController);
+        doReturn(true).when(mController).shouldApplyUserMinAspectRatioOverride();
+
+        assertEquals(mController.overrideOrientationIfNeeded(
+                /* candidate */ SCREEN_ORIENTATION_UNSPECIFIED), SCREEN_ORIENTATION_PORTRAIT);
+
+        // unchanged if orientation is specified
+        assertEquals(mController.overrideOrientationIfNeeded(
+                /* candidate */ SCREEN_ORIENTATION_LANDSCAPE), SCREEN_ORIENTATION_LANDSCAPE);
+    }
+
+    @Test
+    public void testOverrideOrientationIfNeeded_userAspectRatioNotApplied_returnsUnchanged() {
+        spyOn(mController);
+        doReturn(false).when(mController).shouldApplyUserMinAspectRatioOverride();
+
+        assertEquals(mController.overrideOrientationIfNeeded(
+                /* candidate */ SCREEN_ORIENTATION_UNSPECIFIED), SCREEN_ORIENTATION_UNSPECIFIED);
+    }
+
     // shouldApplyUser...Override
     @Test
     public void testShouldApplyUserFullscreenOverride_trueProperty_returnsFalse() throws Exception {