<?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 8.0.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.0.0-beta03">

    <issue
        id="WrongConstant"
        message="Must be one of: VolumeProviderCompat.VOLUME_CONTROL_FIXED, VolumeProviderCompat.VOLUME_CONTROL_RELATIVE, VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE"
        errorLine1="        return new VolumeProviderCompat(player.getVolumeControlType(), player.getMaxVolume(),"
        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaSessionLegacyStub.java"/>
    </issue>

    <issue
        id="WrongConstant"
        message="Must be one of: SessionResult.RESULT_SUCCESS, BaseResult.RESULT_ERROR_UNKNOWN, BaseResult.RESULT_ERROR_INVALID_STATE, BaseResult.RESULT_ERROR_BAD_VALUE, BaseResult.RESULT_ERROR_PERMISSION_DENIED, BaseResult.RESULT_ERROR_IO, BaseResult.RESULT_INFO_SKIPPED, RemoteResult.RESULT_ERROR_SESSION_DISCONNECTED, BaseResult.RESULT_ERROR_NOT_SUPPORTED, RemoteResult.RESULT_ERROR_SESSION_AUTHENTICATION_EXPIRED, RemoteResult.RESULT_ERROR_SESSION_PREMIUM_ACCOUNT_REQUIRED, RemoteResult.RESULT_ERROR_SESSION_CONCURRENT_STREAM_LIMIT, RemoteResult.RESULT_ERROR_SESSION_PARENTAL_CONTROL_RESTRICTED, RemoteResult.RESULT_ERROR_SESSION_NOT_AVAILABLE_IN_REGION, RemoteResult.RESULT_ERROR_SESSION_SKIP_LIMIT_REACHED, RemoteResult.RESULT_ERROR_SESSION_SETUP_REQUIRED, but could be BaseResult.RESULT_SUCCESS"
        errorLine1="        return new SessionResult(result.getResultCode(), null, result.getMediaItem(),"
        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/SessionResult.java"/>
    </issue>

    <issue
        id="BanThreadSleep"
        message="Uses Thread.sleep()"
        errorLine1="        Thread.sleep(TIMEOUT_MS);"
        errorLine2="               ~~~~~">
        <location
            file="src/androidTest/java/androidx/media2/session/MediaBrowserLegacyTest.java"/>
    </issue>

    <issue
        id="BanThreadSleep"
        message="Uses Thread.sleep()"
        errorLine1="        Thread.sleep(TIMEOUT_MS);"
        errorLine2="               ~~~~~">
        <location
            file="src/androidTest/java/androidx/media2/session/MediaBrowserLegacyTest.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setTimeDiff(Long timeDiff) {"
        errorLine2="                            ~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaController.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public IBinder onBind(@NonNull Intent intent) {"
        errorLine2="           ~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaLibraryService.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public MediaSessionCompat getSessionCompat() {"
        errorLine2="           ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaSession.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaItem convertToMediaItem(MediaBrowserCompat.MediaItem item) {"
        errorLine2="                  ~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaItem convertToMediaItem(MediaBrowserCompat.MediaItem item) {"
        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaItem convertToMediaItem(QueueItem item) {"
        errorLine2="                  ~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaItem convertToMediaItem(QueueItem item) {"
        errorLine2="                                               ~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static List&lt;MediaItem> convertMediaItemListToMediaItemList("
        errorLine2="                  ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            List&lt;MediaBrowserCompat.MediaItem> items) {"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static List&lt;MediaItem> convertQueueItemListToMediaItemList(List&lt;QueueItem> items) {"
        errorLine2="                  ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static List&lt;MediaItem> convertQueueItemListToMediaItemList(List&lt;QueueItem> items) {"
        errorLine2="                                                                      ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaDescriptionCompat createMediaDescriptionCompat(String mediaId) {"
        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaDescriptionCompat createMediaDescriptionCompat(String mediaId) {"
        errorLine2="                                                                      ~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static List&lt;QueueItem> convertToQueueItemList(List&lt;MediaItem> items) {"
        errorLine2="                  ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static List&lt;QueueItem> convertToQueueItemList(List&lt;MediaItem> items) {"
        errorLine2="                                                         ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static List&lt;MediaItem> convertParcelImplListSliceToMediaItemList("
        errorLine2="                  ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            ParcelImplListSlice listSlice) {"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static &lt;T extends Parcelable> List&lt;T> truncateListBySize(final List&lt;T> list,"
        errorLine2="                                         ~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static &lt;T extends Parcelable> List&lt;T> truncateListBySize(final List&lt;T> list,"
        errorLine2="                                                                          ~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaMetadata convertToMediaMetadata(CharSequence queueTitle) {"
        errorLine2="                  ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaMetadata convertToMediaMetadata(CharSequence queueTitle) {"
        errorLine2="                                                       ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaMetadataCompat convertToMediaMetadataCompat(MediaMetadata metadata) {"
        errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaMetadataCompat convertToMediaMetadataCompat(MediaMetadata metadata) {"
        errorLine2="                                                                   ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static Rating convertToRating(RatingCompat ratingCompat) {"
        errorLine2="                  ~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static Rating convertToRating(RatingCompat ratingCompat) {"
        errorLine2="                                         ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static RatingCompat convertToRatingCompat(Rating rating) {"
        errorLine2="                  ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static RatingCompat convertToRatingCompat(Rating rating) {"
        errorLine2="                                                     ~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static List&lt;ParcelImpl> convertCommandButtonListToParcelImplList("
        errorLine2="                  ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            List&lt;CommandButton> commandButtonList) {"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static ParcelImplListSlice convertMediaItemListToParcelImplListSlice("
        errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            List&lt;MediaItem> mediaItemList) {"
        errorLine2="            ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static int convertToPlayerState(PlaybackStateCompat state) {"
        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static MediaController.PlaybackInfo toPlaybackInfo2("
        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            MediaControllerCompat.PlaybackInfo info) {"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static boolean isUnparcelableBundle(Bundle bundle) {"
        errorLine2="                                               ~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static void keepUnparcelableBundlesOnly(final List&lt;Bundle> bundles) {"
        errorLine2="                                                         ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/MediaUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public ComponentName getComponentName() {"
        errorLine2="           ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/SessionToken.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public Object getBinder() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/SessionToken.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        void onSessionTokenCreated(MediaSessionCompat.Token compatToken, SessionToken sessionToken);"
        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/SessionToken.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        void onSessionTokenCreated(MediaSessionCompat.Token compatToken, SessionToken sessionToken);"
        errorLine2="                                                                         ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media2/session/SessionToken.java"/>
    </issue>

</issues>
