<?xml version="1.0" encoding="UTF-8"?>
<issues format="5" by="lint 4.2.0-alpha15" client="gradle" variant="debug" version="4.2.0-alpha15">

    <issue
        id="DefaultLocale"
        message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
        errorLine1="                .append(Integer.toHexString(mFlags).toUpperCase());"
        errorLine2="                                                    ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplBase.java"
            line="179"
            column="53"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#CONTENT_TYPE_UNKNOWN`"
        errorLine1="    public static final int CONTENT_TYPE_UNKNOWN = AudioAttributes.CONTENT_TYPE_UNKNOWN;"
        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="74"
            column="52"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#CONTENT_TYPE_SPEECH`"
        errorLine1="    public static final int CONTENT_TYPE_SPEECH = AudioAttributes.CONTENT_TYPE_SPEECH;"
        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="76"
            column="51"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#CONTENT_TYPE_MUSIC`"
        errorLine1="    public static final int CONTENT_TYPE_MUSIC = AudioAttributes.CONTENT_TYPE_MUSIC;"
        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="78"
            column="50"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#CONTENT_TYPE_MOVIE`"
        errorLine1="    public static final int CONTENT_TYPE_MOVIE = AudioAttributes.CONTENT_TYPE_MOVIE;"
        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="83"
            column="50"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#CONTENT_TYPE_SONIFICATION`"
        errorLine1="    public static final int CONTENT_TYPE_SONIFICATION = AudioAttributes.CONTENT_TYPE_SONIFICATION;"
        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="90"
            column="57"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_UNKNOWN`"
        errorLine1="    public static final int USAGE_UNKNOWN = AudioAttributes.USAGE_UNKNOWN;"
        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="93"
            column="45"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_MEDIA`"
        errorLine1="    public static final int USAGE_MEDIA = AudioAttributes.USAGE_MEDIA;"
        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="95"
            column="43"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_VOICE_COMMUNICATION`"
        errorLine1="    public static final int USAGE_VOICE_COMMUNICATION = AudioAttributes.USAGE_VOICE_COMMUNICATION;"
        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="97"
            column="57"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_VOICE_COMMUNICATION_SIGNALLING`"
        errorLine1="             AudioAttributes.USAGE_VOICE_COMMUNICATION_SIGNALLING;"
        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="103"
            column="14"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_ALARM`"
        errorLine1="    public static final int USAGE_ALARM = AudioAttributes.USAGE_ALARM;"
        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="105"
            column="43"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_NOTIFICATION`"
        errorLine1="    public static final int USAGE_NOTIFICATION = AudioAttributes.USAGE_NOTIFICATION;"
        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="110"
            column="50"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_NOTIFICATION_RINGTONE`"
        errorLine1="             AudioAttributes.USAGE_NOTIFICATION_RINGTONE;"
        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="113"
            column="14"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_REQUEST`"
        errorLine1="             AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST;"
        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="119"
            column="14"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_INSTANT`"
        errorLine1="             AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT;"
        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="125"
            column="14"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_DELAYED`"
        errorLine1="             AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_DELAYED;"
        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="131"
            column="14"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_NOTIFICATION_EVENT`"
        errorLine1="    public static final int USAGE_NOTIFICATION_EVENT = AudioAttributes.USAGE_NOTIFICATION_EVENT;"
        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="136"
            column="56"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_ASSISTANCE_ACCESSIBILITY`"
        errorLine1="             AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY;"
        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="139"
            column="14"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_ASSISTANCE_NAVIGATION_GUIDANCE`"
        errorLine1="             AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE;"
        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="142"
            column="14"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_ASSISTANCE_SONIFICATION`"
        errorLine1="             AudioAttributes.USAGE_ASSISTANCE_SONIFICATION;"
        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="145"
            column="14"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 21 (current min is 14): `android.media.AudioAttributes#USAGE_GAME`"
        errorLine1="    public static final int USAGE_GAME = AudioAttributes.USAGE_GAME;"
        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="147"
            column="42"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 26 (current min is 14): `android.media.AudioAttributes#USAGE_ASSISTANT`"
        errorLine1="    public static final int USAGE_ASSISTANT = AudioAttributes.USAGE_ASSISTANT;"
        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="155"
            column="47"/>
    </issue>

    <issue
        id="InlinedApi"
        message="Field requires API level 19 (current min is 14): `android.media.AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE`"
        errorLine1="            AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE;"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioManagerCompat.java"
            line="68"
            column="13"/>
    </issue>

    <issue
        id="UnusedAttribute"
        message="Attribute `layoutDirection` is only used in API level 17 and higher (current min is 14)"
        errorLine1="        android:layoutDirection=&quot;ltr&quot;"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media.xml"
            line="50"
            column="9"/>
    </issue>

    <issue
        id="UnusedAttribute"
        message="Attribute `layoutDirection` is only used in API level 17 and higher (current min is 14)"
        errorLine1="        android:layoutDirection=&quot;ltr&quot;"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_custom.xml"
            line="97"
            column="9"/>
    </issue>

    <issue
        id="UnusedAttribute"
        message="Attribute `layoutDirection` is only used in API level 17 and higher (current min is 14)"
        errorLine1="        android:layoutDirection=&quot;ltr&quot;"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_narrow.xml"
            line="56"
            column="9"/>
    </issue>

    <issue
        id="UnusedAttribute"
        message="Attribute `layoutDirection` is only used in API level 17 and higher (current min is 14)"
        errorLine1="        android:layoutDirection=&quot;ltr&quot;"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_narrow_custom.xml"
            line="103"
            column="9"/>
    </issue>

    <issue
        id="UnusedAttribute"
        message="Attribute `layoutDirection` is only used in API level 17 and higher (current min is 14)"
        errorLine1="        android:layoutDirection=&quot;ltr&quot;"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_media.xml"
            line="38"
            column="9"/>
    </issue>

    <issue
        id="UnusedAttribute"
        message="Attribute `layoutDirection` is only used in API level 17 and higher (current min is 14)"
        errorLine1="        android:layoutDirection=&quot;ltr&quot;"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_media_custom.xml"
            line="87"
            column="9"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.AudioAttributesImplApi21.Builder is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            mFwkBuilder = new AudioAttributes.Builder();"
        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi21.java"
            line="133"
            column="27"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.AudioAttributesImplApi21.Builder is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            mFwkBuilder = new AudioAttributes.Builder((AudioAttributes) aa);"
        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi21.java"
            line="137"
            column="27"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.AudioAttributesImplApi21.Builder is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            return new AudioAttributesImplApi21(mFwkBuilder.build());"
        errorLine2="                                                            ~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi21.java"
            line="143"
            column="61"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.AudioAttributesImplApi21.Builder is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            mFwkBuilder.setUsage(usage);"
        errorLine2="                        ~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi21.java"
            line="153"
            column="25"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.AudioAttributesImplApi21.Builder is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            mFwkBuilder.setContentType(contentType);"
        errorLine2="                        ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi21.java"
            line="160"
            column="25"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.AudioAttributesImplApi21.Builder is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            mFwkBuilder.setFlags(flags);"
        errorLine2="                        ~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi21.java"
            line="167"
            column="25"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.AudioAttributesImplApi21.Builder is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            mFwkBuilder.setLegacyStreamType(streamType);"
        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi21.java"
            line="174"
            column="25"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.AudioAttributesImplApi26.Builder is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            return new AudioAttributesImplApi26(mFwkBuilder.build());"
        errorLine2="                                                            ~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi26.java"
            line="65"
            column="61"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.AudioAttributesImplApi26.Builder is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            mFwkBuilder.setUsage(usage);"
        errorLine2="                        ~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi26.java"
            line="71"
            column="25"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 26, the call containing class androidx.media.AudioFocusRequestCompat is not annotated with @RequiresApi(x) where x is at least 26. Either annotate the containing class with at least @RequiresApi(26) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(26)."
        errorLine1="                    new AudioFocusRequest.Builder(mFocusGain)"
        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioFocusRequestCompat.java"
            line="84"
            column="21"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 26, the call containing class androidx.media.AudioFocusRequestCompat is not annotated with @RequiresApi(x) where x is at least 26. Either annotate the containing class with at least @RequiresApi(26) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(26)."
        errorLine1="                            .setAudioAttributes(getAudioAttributes())"
        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioFocusRequestCompat.java"
            line="85"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 26, the call containing class androidx.media.AudioFocusRequestCompat is not annotated with @RequiresApi(x) where x is at least 26. Either annotate the containing class with at least @RequiresApi(26) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(26)."
        errorLine1="                            .setWillPauseWhenDucked(mPauseOnDuck)"
        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioFocusRequestCompat.java"
            line="86"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 26, the call containing class androidx.media.AudioFocusRequestCompat is not annotated with @RequiresApi(x) where x is at least 26. Either annotate the containing class with at least @RequiresApi(26) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(26)."
        errorLine1="                            .setOnAudioFocusChangeListener("
        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioFocusRequestCompat.java"
            line="87"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 26, the call containing class androidx.media.AudioFocusRequestCompat is not annotated with @RequiresApi(x) where x is at least 26. Either annotate the containing class with at least @RequiresApi(26) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(26)."
        errorLine1="                            .build();"
        errorLine2="                             ~~~~~">
        <location
            file="src/main/java/androidx/media/AudioFocusRequestCompat.java"
            line="89"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 26, the call containing class androidx.media.AudioManagerCompat is not annotated with @RequiresApi(x) where x is at least 26. Either annotate the containing class with at least @RequiresApi(26) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(26)."
        errorLine1="            return audioManager.requestAudioFocus(focusRequest.getAudioFocusRequest());"
        errorLine2="                                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioManagerCompat.java"
            line="91"
            column="33"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 26, the call containing class androidx.media.AudioManagerCompat is not annotated with @RequiresApi(x) where x is at least 26. Either annotate the containing class with at least @RequiresApi(26) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(26)."
        errorLine1="            return audioManager.abandonAudioFocusRequest(focusRequest.getAudioFocusRequest());"
        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioManagerCompat.java"
            line="120"
            column="33"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 28, the call containing class androidx.media.AudioManagerCompat is not annotated with @RequiresApi(x) where x is at least 28. Either annotate the containing class with at least @RequiresApi(28) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(28)."
        errorLine1="            return audioManager.getStreamMinVolume(streamType);"
        errorLine2="                                ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioManagerCompat.java"
            line="148"
            column="33"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaBrowserCompat.MediaItem is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            int flags = itemFwk.getFlags();"
        errorLine2="                                ~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="499"
            column="33"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaBrowserCompat.MediaItem is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    MediaDescriptionCompat.fromMediaDescription(itemFwk.getDescription());"
        errorLine2="                                                                        ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="501"
            column="73"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class null is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    mServiceFwk.setSessionToken((MediaSession.Token) token.getToken());"
        errorLine2="                                ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="335"
            column="33"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.MediaBrowserServiceCompat.MediaBrowserServiceImplApi21.MediaBrowserServiceApi21 is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                return browserRootCompat == null ? null : new MediaBrowserService.BrowserRoot("
        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="506"
            column="59"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 26, the call containing class androidx.media.session.MediaButtonReceiver is not annotated with @RequiresApi(x) where x is at least 26. Either annotate the containing class with at least @RequiresApi(26) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(26)."
        errorLine1="            context.startForegroundService(intent);"
        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="297"
            column="21"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.MediaControllerCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                controllerFwk = new MediaController(activity, (MediaSession.Token) sessionTokenObj);"
        errorLine2="                                ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="168"
            column="33"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.MediaControllerCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            activity.setMediaController(controllerFwk);"
        errorLine2="                     ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="170"
            column="22"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.MediaControllerCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            MediaController controllerFwk = activity.getMediaController();"
        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="191"
            column="54"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.MediaControllerCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            MediaSession.Token sessionTokenFwk = controllerFwk.getSessionToken();"
        errorLine2="                                                               ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="195"
            column="64"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 29, the call containing class android.support.v4.media.session.MediaControllerCompat.MediaControllerImplApi21 is not annotated with @RequiresApi(x) where x is at least 29. Either annotate the containing class with at least @RequiresApi(29) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(29)."
        errorLine1="                mSessionInfo = mControllerFwk.getSessionInfo();"
        errorLine2="                                              ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="2264"
            column="47"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 24, the call containing class android.support.v4.media.session.MediaControllerCompat.TransportControlsApi21 is not annotated with @RequiresApi(x) where x is at least 24. Either annotate the containing class with at least @RequiresApi(24) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(24)."
        errorLine1="                mControlsFwk.prepare();"
        errorLine2="                             ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="2388"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 24, the call containing class android.support.v4.media.session.MediaControllerCompat.TransportControlsApi21 is not annotated with @RequiresApi(x) where x is at least 24. Either annotate the containing class with at least @RequiresApi(24) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(24)."
        errorLine1="                mControlsFwk.prepareFromMediaId(mediaId, extras);"
        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="2397"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 24, the call containing class android.support.v4.media.session.MediaControllerCompat.TransportControlsApi21 is not annotated with @RequiresApi(x) where x is at least 24. Either annotate the containing class with at least @RequiresApi(24) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(24)."
        errorLine1="                mControlsFwk.prepareFromSearch(query, extras);"
        errorLine2="                             ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="2409"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 24, the call containing class android.support.v4.media.session.MediaControllerCompat.TransportControlsApi21 is not annotated with @RequiresApi(x) where x is at least 24. Either annotate the containing class with at least @RequiresApi(24) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(24)."
        errorLine1="                mControlsFwk.prepareFromUri(uri, extras);"
        errorLine2="                             ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="2421"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 29, the call containing class android.support.v4.media.session.MediaControllerCompat.TransportControlsApi21 is not annotated with @RequiresApi(x) where x is at least 29. Either annotate the containing class with at least @RequiresApi(29) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(29)."
        errorLine1="                mControlsFwk.setPlaybackSpeed(speed);"
        errorLine2="                             ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="2489"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 23, the call containing class android.support.v4.media.session.MediaControllerCompat.TransportControlsApi21 is not annotated with @RequiresApi(x) where x is at least 23. Either annotate the containing class with at least @RequiresApi(23) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(23)."
        errorLine1="                mControlsFwk.playFromUri(uri, extras);"
        errorLine2="                             ~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="2531"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="        MediaDescription.Builder bob = new MediaDescription.Builder();"
        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="339"
            column="40"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="        bob.setMediaId(mMediaId);"
        errorLine2="            ~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="340"
            column="13"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="        bob.setTitle(mTitle);"
        errorLine2="            ~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="341"
            column="13"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="        bob.setSubtitle(mSubtitle);"
        errorLine2="            ~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="342"
            column="13"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="        bob.setDescription(mDescription);"
        errorLine2="            ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="343"
            column="13"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="        bob.setIconBitmap(mIcon);"
        errorLine2="            ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="344"
            column="13"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="        bob.setIconUri(mIconUri);"
        errorLine2="            ~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="345"
            column="13"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="        bob.setExtras(extras);"
        errorLine2="            ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="358"
            column="13"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 23, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 23. Either annotate the containing class with at least @RequiresApi(23) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(23)."
        errorLine1="            bob.setMediaUri(mMediaUri);"
        errorLine2="                ~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="360"
            column="17"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="        mDescriptionFwk = bob.build();"
        errorLine2="                              ~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="362"
            column="31"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            bob.setMediaId(description.getMediaId());"
        errorLine2="                                       ~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="383"
            column="40"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            bob.setTitle(description.getTitle());"
        errorLine2="                                     ~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="384"
            column="38"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            bob.setSubtitle(description.getSubtitle());"
        errorLine2="                                        ~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="385"
            column="41"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            bob.setDescription(description.getDescription());"
        errorLine2="                                           ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="386"
            column="44"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            bob.setIconBitmap(description.getIconBitmap());"
        errorLine2="                                          ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="387"
            column="43"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            bob.setIconUri(description.getIconUri());"
        errorLine2="                                       ~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="388"
            column="40"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            Bundle extras = description.getExtras();"
        errorLine2="                                        ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="389"
            column="41"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 23, the call containing class android.support.v4.media.MediaDescriptionCompat is not annotated with @RequiresApi(x) where x is at least 23. Either annotate the containing class with at least @RequiresApi(23) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(23)."
        errorLine1="                bob.setMediaUri(description.getMediaUri());"
        errorLine2="                                            ~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="415"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 29, the call containing class android.support.v4.media.session.MediaSessionCompat is not annotated with @RequiresApi(x) where x is at least 29. Either annotate the containing class with at least @RequiresApi(29) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(29)."
        errorLine1="            return new MediaSession(context, tag, sessionInfo);"
        errorLine2="                   ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="603"
            column="20"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.MediaSessionCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            return new MediaSession(context, tag);"
        errorLine2="                   ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="605"
            column="20"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.MediaSessionCompat.QueueItem is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            mItemFwk = new MediaSession.QueueItem("
        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2220"
            column="24"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.MediaSessionCompat.QueueItem is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            Object descriptionObj = queueItemObj.getDescription();"
        errorLine2="                                                 ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2241"
            column="50"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.MediaSessionCompat.QueueItem is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            long id = queueItemObj.getQueueId();"
        errorLine2="                                   ~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2244"
            column="36"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 22, the call containing class android.support.v4.media.session.MediaSessionCompat.MediaSessionImplApi21 is not annotated with @RequiresApi(x) where x is at least 22. Either annotate the containing class with at least @RequiresApi(22) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(22)."
        errorLine1="                mSessionFwk.setRatingType(type);"
        errorLine2="                            ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="3963"
            column="29"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 16, the call containing class androidx.media.app.NotificationCompat.MediaStyle is not annotated with @RequiresApi(x) where x is at least 16. Either annotate the containing class with at least @RequiresApi(16) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(16)."
        errorLine1="                builder.getBuilder().setStyle("
        errorLine2="                                     ~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="211"
            column="38"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.app.NotificationCompat.MediaStyle is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                        fillInMediaStyle(new Notification.MediaStyle()));"
        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="212"
            column="42"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.app.NotificationCompat.MediaStyle is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                style.setShowActionsInCompactView(mActionsToShowInCompact);"
        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="221"
            column="23"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.app.NotificationCompat.MediaStyle is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                style.setMediaSession((MediaSession.Token) mToken.getToken());"
        errorLine2="                      ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="224"
            column="23"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 15, the call containing class androidx.media.app.NotificationCompat.MediaStyle is not annotated with @RequiresApi(x) where x is at least 15. Either annotate the containing class with at least @RequiresApi(15) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(15)."
        errorLine1="                button.setContentDescription(R.id.action0, action.getTitle());"
        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="288"
            column="24"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 16, the call containing class androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle is not annotated with @RequiresApi(x) where x is at least 16. Either annotate the containing class with at least @RequiresApi(16) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(16)."
        errorLine1="                builder.getBuilder().setStyle("
        errorLine2="                                     ~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="389"
            column="38"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 24, the call containing class androidx.media.app.NotificationCompat.DecoratedMediaCustomViewStyle is not annotated with @RequiresApi(x) where x is at least 24. Either annotate the containing class with at least @RequiresApi(24) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(24)."
        errorLine1="                        fillInMediaStyle(new Notification.DecoratedMediaCustomViewStyle()));"
        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="390"
            column="42"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            List&lt;PlaybackState.CustomAction> customActionFwks = stateFwk.getCustomActions();"
        errorLine2="                                                                         ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="800"
            column="74"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 22, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 22. Either annotate the containing class with at least @RequiresApi(22) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(22)."
        errorLine1="                extras = stateFwk.getExtras();"
        errorLine2="                                  ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="810"
            column="35"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    stateFwk.getState(),"
        errorLine2="                             ~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="816"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    stateFwk.getPosition(),"
        errorLine2="                             ~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="817"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    stateFwk.getBufferedPosition(),"
        errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="818"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    stateFwk.getPlaybackSpeed(),"
        errorLine2="                             ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="819"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    stateFwk.getActions(),"
        errorLine2="                             ~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="820"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    stateFwk.getErrorMessage(),"
        errorLine2="                             ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="822"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    stateFwk.getLastPositionUpdateTime(),"
        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="823"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                    stateFwk.getActiveQueueItemId(),"
        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="825"
            column="30"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            PlaybackState.Builder builder = new PlaybackState.Builder();"
        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="844"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            builder.setState(mState, mPosition, mSpeed, mUpdateTime);"
        errorLine2="                    ~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="845"
            column="21"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            builder.setBufferedPosition(mBufferedPosition);"
        errorLine2="                    ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="846"
            column="21"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            builder.setActions(mActions);"
        errorLine2="                    ~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="847"
            column="21"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            builder.setErrorMessage(mErrorMessage);"
        errorLine2="                    ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="848"
            column="21"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                builder.addCustomAction("
        errorLine2="                        ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="850"
            column="25"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            builder.setActiveQueueItemId(mActiveItemId);"
        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="853"
            column="21"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 22, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 22. Either annotate the containing class with at least @RequiresApi(22) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(22)."
        errorLine1="                builder.setExtras(mExtras);"
        errorLine2="                        ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="855"
            column="25"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            mStateFwk = builder.build();"
        errorLine2="                                ~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="857"
            column="33"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat.CustomAction is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            Bundle extras = customActionFwk.getExtras();"
        errorLine2="                                            ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="936"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat.CustomAction is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                            customActionFwk.getAction(),"
        errorLine2="                                            ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="940"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat.CustomAction is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                            customActionFwk.getName(),"
        errorLine2="                                            ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="941"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat.CustomAction is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="                            customActionFwk.getIcon(),"
        errorLine2="                                            ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="942"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat.CustomAction is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            PlaybackState.CustomAction.Builder builder = new PlaybackState.CustomAction.Builder("
        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="963"
            column="58"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat.CustomAction is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            builder.setExtras(mExtras);"
        errorLine2="                    ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="965"
            column="21"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class android.support.v4.media.session.PlaybackStateCompat.CustomAction is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            return builder.build();"
        errorLine2="                           ~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="966"
            column="28"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="            final int ratingStyle = ((Rating) ratingObj).getRatingStyle();"
        errorLine2="                                                         ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="334"
            column="58"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="            if (((Rating) ratingObj).isRated()) {"
        errorLine2="                                     ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="336"
            column="38"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="                        rating = newHeartRating(((Rating) ratingObj).hasHeart());"
        errorLine2="                                                                     ~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="339"
            column="70"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="                        rating = newThumbRating(((Rating) ratingObj).isThumbUp());"
        errorLine2="                                                                     ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="342"
            column="70"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="                                ((Rating) ratingObj).getStarRating());"
        errorLine2="                                                     ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="348"
            column="54"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="                                ((Rating) ratingObj).getPercentRating());"
        errorLine2="                                                     ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="352"
            column="54"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="                        mRatingObj = Rating.newHeartRating(hasHeart());"
        errorLine2="                                            ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="380"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="                        mRatingObj = Rating.newThumbRating(isThumbUp());"
        errorLine2="                                            ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="383"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="                        mRatingObj = Rating.newStarRating(mRatingStyle,"
        errorLine2="                                            ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="388"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="                        mRatingObj = Rating.newPercentageRating(getPercentRating());"
        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="392"
            column="45"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 19, the call containing class android.support.v4.media.RatingCompat is not annotated with @RequiresApi(x) where x is at least 19. Either annotate the containing class with at least @RequiresApi(19) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(19)."
        errorLine1="                mRatingObj = Rating.newUnratedRating(mRatingStyle);"
        errorLine2="                                    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="398"
            column="37"/>
    </issue>

    <issue
        id="UnsafeNewApiCall"
        message="This call is to a method from API 21, the call containing class androidx.media.VolumeProviderCompat is not annotated with @RequiresApi(x) where x is at least 21. Either annotate the containing class with at least @RequiresApi(21) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(21)."
        errorLine1="            volumeProviderFwk.setCurrentVolume(currentVolume);"
        errorLine2="                              ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/VolumeProviderCompat.java"
            line="146"
            column="31"/>
    </issue>

    <issue
        id="ParcelClassLoader"
        message="Passing null here (to use the default class loader) will not work if you are restoring your own classes. Consider using for example `getClass().getClassLoader()` instead."
        errorLine1="                            inner = in.readParcelable(null);"
        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2120"
            column="40"/>
    </issue>

    <issue
        id="SwitchIntDef"
        message="Unexpected constant; expected one of: `AudioAttributesCompat.USAGE_ALARM`, `AudioAttributesCompat.USAGE_ASSISTANCE_ACCESSIBILITY`, `AudioAttributesCompat.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE`, `AudioAttributesCompat.USAGE_ASSISTANCE_SONIFICATION`, `AudioAttributesCompat.USAGE_ASSISTANT`, `AudioAttributesCompat.USAGE_GAME`, `AudioAttributesCompat.USAGE_MEDIA`, `AudioAttributesCompat.USAGE_NOTIFICATION`, `AudioAttributesCompat.USAGE_NOTIFICATION_COMMUNICATION_DELAYED`, `AudioAttributesCompat.USAGE_NOTIFICATION_COMMUNICATION_INSTANT`, `AudioAttributesCompat.USAGE_NOTIFICATION_COMMUNICATION_REQUEST`, `AudioAttributesCompat.USAGE_NOTIFICATION_EVENT`, `AudioAttributesCompat.USAGE_NOTIFICATION_RINGTONE`, `AudioAttributesCompat.USAGE_UNKNOWN`, `AudioAttributesCompat.USAGE_VOICE_COMMUNICATION`, `AudioAttributesCompat.USAGE_VOICE_COMMUNICATION_SIGNALLING`"
        errorLine1="                case USAGE_VIRTUAL_SOURCE:"
        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplBase.java"
            line="224"
            column="22"/>
    </issue>

    <issue
        id="SwitchIntDef"
        message="Switch statement on an `int` with known associated constant missing case `RATING_NONE`"
        errorLine1="        switch(ratingStyle) {"
        errorLine2="        ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="159"
            column="9"/>
    </issue>

    <issue
        id="SwitchIntDef"
        message="Switch statement on an `int` with known associated constant missing case `Rating.RATING_3_STARS`, `Rating.RATING_4_STARS`, `Rating.RATING_5_STARS`, `Rating.RATING_HEART`, `Rating.RATING_NONE`, `Rating.RATING_PERCENTAGE`, `Rating.RATING_THUMB_UP_DOWN`"
        errorLine1="                switch (ratingStyle) {"
        errorLine2="                ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="337"
            column="17"/>
    </issue>

    <issue
        id="SwitchIntDef"
        message="Unexpected constant; expected one of: `Rating.RATING_3_STARS`, `Rating.RATING_4_STARS`, `Rating.RATING_5_STARS`, `Rating.RATING_HEART`, `Rating.RATING_NONE`, `Rating.RATING_PERCENTAGE`, `Rating.RATING_THUMB_UP_DOWN`"
        errorLine1="                    case RATING_HEART:"
        errorLine2="                         ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="338"
            column="26"/>
    </issue>

    <issue
        id="SwitchIntDef"
        message="Unexpected constant; expected one of: `Rating.RATING_3_STARS`, `Rating.RATING_4_STARS`, `Rating.RATING_5_STARS`, `Rating.RATING_HEART`, `Rating.RATING_NONE`, `Rating.RATING_PERCENTAGE`, `Rating.RATING_THUMB_UP_DOWN`"
        errorLine1="                    case RATING_THUMB_UP_DOWN:"
        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="341"
            column="26"/>
    </issue>

    <issue
        id="SwitchIntDef"
        message="Unexpected constant; expected one of: `Rating.RATING_3_STARS`, `Rating.RATING_4_STARS`, `Rating.RATING_5_STARS`, `Rating.RATING_HEART`, `Rating.RATING_NONE`, `Rating.RATING_PERCENTAGE`, `Rating.RATING_THUMB_UP_DOWN`"
        errorLine1="                    case RATING_3_STARS:"
        errorLine2="                         ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="344"
            column="26"/>
    </issue>

    <issue
        id="SwitchIntDef"
        message="Unexpected constant; expected one of: `Rating.RATING_3_STARS`, `Rating.RATING_4_STARS`, `Rating.RATING_5_STARS`, `Rating.RATING_HEART`, `Rating.RATING_NONE`, `Rating.RATING_PERCENTAGE`, `Rating.RATING_THUMB_UP_DOWN`"
        errorLine1="                    case RATING_4_STARS:"
        errorLine2="                         ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="345"
            column="26"/>
    </issue>

    <issue
        id="SwitchIntDef"
        message="Unexpected constant; expected one of: `Rating.RATING_3_STARS`, `Rating.RATING_4_STARS`, `Rating.RATING_5_STARS`, `Rating.RATING_HEART`, `Rating.RATING_NONE`, `Rating.RATING_PERCENTAGE`, `Rating.RATING_THUMB_UP_DOWN`"
        errorLine1="                    case RATING_5_STARS:"
        errorLine2="                         ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="346"
            column="26"/>
    </issue>

    <issue
        id="SwitchIntDef"
        message="Unexpected constant; expected one of: `Rating.RATING_3_STARS`, `Rating.RATING_4_STARS`, `Rating.RATING_5_STARS`, `Rating.RATING_HEART`, `Rating.RATING_NONE`, `Rating.RATING_PERCENTAGE`, `Rating.RATING_THUMB_UP_DOWN`"
        errorLine1="                    case RATING_PERCENTAGE:"
        errorLine2="                         ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="350"
            column="26"/>
    </issue>

    <issue
        id="ObsoleteLayoutParam"
        message="Invalid layout param in a `LinearLayout`: `layout_toLeftOf`"
        errorLine1="        android:layout_toLeftOf=&quot;@id/cancel_action&quot;"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_media_custom.xml"
            line="36"
            column="9"/>
    </issue>

    <issue
        id="ObsoleteLayoutParam"
        message="Invalid layout param in a `LinearLayout`: `layout_toStartOf`"
        errorLine1="        android:layout_toStartOf=&quot;@id/cancel_action&quot;>"
        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_media_custom.xml"
            line="37"
            column="9"/>
    </issue>

    <issue
        id="HandlerLeak"
        message="This `Handler` class should be static or leaks might occur (androidx.media.MediaBrowserServiceCompat.ServiceHandler)"
        errorLine1="    private final class ServiceHandler extends Handler {"
        errorLine2="                        ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="661"
            column="25"/>
    </issue>

    <issue
        id="DisableBaselineAlignment"
        message="Set `android:baselineAligned=&quot;false&quot;` on this element for better performance"
        errorLine1="    &lt;LinearLayout"
        errorLine2="     ~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_custom.xml"
            line="34"
            column="6"/>
    </issue>

    <issue
        id="DisableBaselineAlignment"
        message="Set `android:baselineAligned=&quot;false&quot;` on this element for better performance"
        errorLine1="    &lt;LinearLayout"
        errorLine2="     ~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_narrow_custom.xml"
            line="38"
            column="6"/>
    </issue>

    <issue
        id="DisableBaselineAlignment"
        message="Set `android:baselineAligned=&quot;false&quot;` on this element for better performance"
        errorLine1="    &lt;LinearLayout"
        errorLine2="     ~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_media_custom.xml"
            line="28"
            column="6"/>
    </issue>

    <issue
        id="InefficientWeight"
        message="Use a `layout_width` of `0dp` instead of `match_parent` for better performance"
        errorLine1="            android:layout_width=&quot;match_parent&quot;"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_custom.xml"
            line="47"
            column="13"/>
    </issue>

    <issue
        id="InefficientWeight"
        message="Use a `layout_width` of `0dp` instead of `match_parent` for better performance"
        errorLine1="            android:layout_width=&quot;match_parent&quot;"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_narrow_custom.xml"
            line="51"
            column="13"/>
    </issue>

    <issue
        id="InefficientWeight"
        message="Use a `layout_width` of `0dp` instead of `match_parent` for better performance"
        errorLine1="            android:layout_width=&quot;match_parent&quot;"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_media_custom.xml"
            line="40"
            column="13"/>
    </issue>

    <issue
        id="NestedWeights"
        message="Nested weights are bad for performance"
        errorLine1="            android:layout_weight=&quot;1&quot;"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_media_custom.xml"
            line="42"
            column="13"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="&lt;ImageButton xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
        errorLine2=" ~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_media_action.xml"
            line="17"
            column="2"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="&lt;ImageButton xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
        errorLine2=" ~~~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_media_cancel_action.xml"
            line="18"
            column="2"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="    &lt;ImageView"
        errorLine2="     ~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media.xml"
            line="54"
            column="6"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="    &lt;ImageView"
        errorLine2="     ~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_custom.xml"
            line="101"
            column="6"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="    &lt;ImageView android:id=&quot;@+id/icon&quot;"
        errorLine2="     ~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_narrow.xml"
            line="24"
            column="6"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="    &lt;ImageView"
        errorLine2="     ~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_narrow.xml"
            line="60"
            column="6"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="    &lt;ImageView android:id=&quot;@+id/icon&quot;"
        errorLine2="     ~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_narrow_custom.xml"
            line="24"
            column="6"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="    &lt;ImageView"
        errorLine2="     ~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_big_media_narrow_custom.xml"
            line="107"
            column="6"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="    &lt;ImageView android:id=&quot;@+id/end_padder&quot;"
        errorLine2="     ~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_media.xml"
            line="47"
            column="6"/>
    </issue>

    <issue
        id="ContentDescription"
        message="Missing `contentDescription` attribute on image"
        errorLine1="    &lt;ImageView android:id=&quot;@+id/end_padder&quot;"
        errorLine2="     ~~~~~~~~~">
        <location
            file="src/main/res/layout/notification_template_media_custom.xml"
            line="96"
            column="6"/>
    </issue>

    <issue
        id="LambdaLast"
        message="Functional interface parameters (such as parameter 1, &quot;listener&quot;, in androidx.media.AudioFocusRequestCompat.Builder.setOnAudioFocusChangeListener) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
        errorLine1="                @NonNull OnAudioFocusChangeListener listener, @NonNull Handler handler) {"
        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioFocusRequestCompat.java"
            line="310"
            column="63"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public AudioAttributesImpl mImpl;"
        errorLine2="           ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="242"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder(AudioAttributesCompat aa) {"
        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="390"
            column="24"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public AudioAttributesCompat build() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="408"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setUsage(@AttributeUsage int usage) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="434"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setContentType(@AttributeContentType int contentType) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="451"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setFlags(int flags) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="465"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setLegacyStreamType(int streamType) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesCompat.java"
            line="485"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public AudioAttributes mAudioAttributes;"
        errorLine2="           ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioAttributesImplApi21.java"
            line="42"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public AudioFocusRequestCompat build() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/AudioFocusRequestCompat.java"
            line="370"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public MediaBrowserCompat(Context context, ComponentName serviceComponent,"
        errorLine2="                              ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="190"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public MediaBrowserCompat(Context context, ComponentName serviceComponent,"
        errorLine2="                                               ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="190"
            column="48"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="            ConnectionCallback callback, Bundle rootHints) {"
        errorLine2="            ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="191"
            column="13"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="            ConnectionCallback callback, Bundle rootHints) {"
        errorLine2="                                         ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="191"
            column="42"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void search(@NonNull final String query, final Bundle extras,"
        errorLine2="                                                          ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="410"
            column="59"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void sendCustomAction(@NonNull String action, Bundle extras,"
        errorLine2="                                                         ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="432"
            column="58"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static MediaItem fromMediaItem(Object itemObj) {"
        errorLine2="                      ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="494"
            column="23"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static MediaItem fromMediaItem(Object itemObj) {"
        errorLine2="                                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="494"
            column="47"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static List&lt;MediaItem> fromMediaItemList(List&lt;?> itemList) {"
        errorLine2="                      ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="515"
            column="23"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static List&lt;MediaItem> fromMediaItemList(List&lt;?> itemList) {"
        errorLine2="                                                        ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="515"
            column="57"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void writeToParcel(Parcel out, int flags) {"
        errorLine2="                                  ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="557"
            column="35"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onItemLoaded(MediaItem item) {"
        errorLine2="                                 ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="883"
            column="34"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onSearchResult(@NonNull String query, Bundle extras,"
        errorLine2="                                                          ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="922"
            column="59"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onError(@NonNull String query, Bundle extras) {"
        errorLine2="                                                   ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="933"
            column="52"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onProgressUpdate(String action, Bundle extras, Bundle data) {"
        errorLine2="                                     ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="949"
            column="38"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onProgressUpdate(String action, Bundle extras, Bundle data) {"
        errorLine2="                                                    ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="949"
            column="53"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onProgressUpdate(String action, Bundle extras, Bundle data) {"
        errorLine2="                                                                   ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="949"
            column="68"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onResult(String action, Bundle extras, Bundle resultData) {"
        errorLine2="                             ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="959"
            column="30"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onResult(String action, Bundle extras, Bundle resultData) {"
        errorLine2="                                            ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="959"
            column="45"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onResult(String action, Bundle extras, Bundle resultData) {"
        errorLine2="                                                           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="959"
            column="60"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onError(String action, Bundle extras, Bundle data) {"
        errorLine2="                            ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="970"
            column="29"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onError(String action, Bundle extras, Bundle data) {"
        errorLine2="                                           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="970"
            column="44"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onError(String action, Bundle extras, Bundle data) {"
        errorLine2="                                                          ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
            line="970"
            column="59"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static boolean areSameOptions(Bundle options1, Bundle options2) {"
        errorLine2="                                         ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
            line="31"
            column="42"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static boolean areSameOptions(Bundle options1, Bundle options2) {"
        errorLine2="                                                          ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
            line="31"
            column="59"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static boolean hasDuplicatedItems(Bundle options1, Bundle options2) {"
        errorLine2="                                             ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
            line="48"
            column="46"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static boolean hasDuplicatedItems(Bundle options1, Bundle options2) {"
        errorLine2="                                                              ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
            line="48"
            column="63"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void sendResult(T result) {"
        errorLine2="                               ~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="848"
            column="32"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void sendProgressUpdate(Bundle extras) {"
        errorLine2="                                       ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="863"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void sendError(Bundle extras) {"
        errorLine2="                              ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="878"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void attachToBaseContext(Context base) {"
        errorLine2="                                    ~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1306"
            column="37"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public IBinder onBind(Intent intent) {"
        errorLine2="           ~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1328"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public IBinder onBind(Intent intent) {"
        errorLine2="                          ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1328"
            column="27"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {"
        errorLine2="                     ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1333"
            column="22"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {"
        errorLine2="                                        ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1333"
            column="41"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {"
        errorLine2="                                                            ~~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1333"
            column="61"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void onSubscribe(String id, Bundle option) {"
        errorLine2="                            ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1424"
            column="29"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void onSubscribe(String id, Bundle option) {"
        errorLine2="                                       ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1424"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void onUnsubscribe(String id) {"
        errorLine2="                              ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1434"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void onLoadItem(String itemId, @NonNull Result&lt;MediaBrowserCompat.MediaItem> result) {"
        errorLine2="                           ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1455"
            column="28"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void onSearch(@NonNull String query, Bundle extras,"
        errorLine2="                                                ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1481"
            column="49"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void onCustomAction(@NonNull String action, Bundle extras,"
        errorLine2="                                                       ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1506"
            column="56"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setSessionToken(MediaSessionCompat.Token token) {"
        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1519"
            column="33"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public final Bundle getBrowserRootHints() {"
        errorLine2="                 ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1554"
            column="18"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public String getRootId() {"
        errorLine2="               ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1962"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Bundle getExtras() {"
        errorLine2="               ~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
            line="1969"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void onReceive(Context context, Intent intent) {"
        errorLine2="                          ~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="103"
            column="27"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void onReceive(Context context, Intent intent) {"
        errorLine2="                                           ~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="103"
            column="44"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {"
        errorLine2="                  ~~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="188"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {"
        errorLine2="                                        ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="188"
            column="41"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {"
        errorLine2="                                                                               ~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="188"
            column="80"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static PendingIntent buildMediaButtonPendingIntent(Context context,"
        errorLine2="                  ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="221"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static PendingIntent buildMediaButtonPendingIntent(Context context,"
        errorLine2="                                                              ~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="221"
            column="63"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static PendingIntent buildMediaButtonPendingIntent(Context context,"
        errorLine2="                  ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="254"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static PendingIntent buildMediaButtonPendingIntent(Context context,"
        errorLine2="                                                              ~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="254"
            column="63"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="            ComponentName mbrComponent, @MediaKeyAction long action) {"
        errorLine2="            ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="255"
            column="13"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static ComponentName getMediaButtonReceiverComponent(Context context) {"
        errorLine2="                  ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="279"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static ComponentName getMediaButtonReceiverComponent(Context context) {"
        errorLine2="                                                                ~~~~~~~">
        <location
            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
            line="279"
            column="65"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="            MediaControllerCompat mediaController) {"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="161"
            column="13"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static MediaControllerCompat getMediaController(@NonNull Activity activity) {"
        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="185"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public MediaControllerCompat(Context context, @NonNull MediaSessionCompat session) {"
        errorLine2="                                 ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="234"
            column="34"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public MediaControllerCompat(Context context, @NonNull MediaSessionCompat.Token sessionToken) {"
        errorLine2="                                 ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="253"
            column="34"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public TransportControls getTransportControls() {"
        errorLine2="           ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="271"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public boolean dispatchMediaButtonEvent(KeyEvent keyEvent) {"
        errorLine2="                                            ~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="282"
            column="45"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public PlaybackStateCompat getPlaybackState() {"
        errorLine2="           ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="299"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public MediaMetadataCompat getMetadata() {"
        errorLine2="           ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="308"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public List&lt;QueueItem> getQueue() {"
        errorLine2="           ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="318"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void addQueueItem(MediaDescriptionCompat description) {"
        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="334"
            column="30"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void addQueueItem(MediaDescriptionCompat description, int index) {"
        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="354"
            column="30"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void removeQueueItem(MediaDescriptionCompat description) {"
        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="371"
            column="33"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public CharSequence getQueueTitle() {"
        errorLine2="           ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="401"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Bundle getExtras() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="408"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public PlaybackInfo getPlaybackInfo() {"
        errorLine2="           ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="488"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public PendingIntent getSessionActivity() {"
        errorLine2="           ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="498"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public MediaSessionCompat.Token getSessionToken() {"
        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="507"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void registerCallback(@NonNull Callback callback, Handler handler) {"
        errorLine2="                                                             ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="575"
            column="62"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public String getPackageName() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="653"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Object getMediaController() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="683"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onSessionEvent(String event, Bundle extras) {"
        errorLine2="                                   ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="728"
            column="36"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onSessionEvent(String event, Bundle extras) {"
        errorLine2="                                                 ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="728"
            column="50"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPlaybackStateChanged(PlaybackStateCompat state) {"
        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="736"
            column="44"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onMetadataChanged(MediaMetadataCompat metadata) {"
        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="745"
            column="39"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onQueueChanged(List&lt;QueueItem> queue) {"
        errorLine2="                                   ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="756"
            column="36"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onQueueTitleChanged(CharSequence title) {"
        errorLine2="                                        ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="766"
            column="41"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onExtrasChanged(Bundle extras) {"
        errorLine2="                                    ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="775"
            column="37"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onAudioInfoChanged(PlaybackInfo info) {"
        errorLine2="                                       ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="783"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public IMediaControllerCallback getIControllerCallback() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="821"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void prepareFromMediaId(String mediaId, Bundle extras);"
        errorLine2="                                                ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1168"
            column="49"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void prepareFromMediaId(String mediaId, Bundle extras);"
        errorLine2="                                                                ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1168"
            column="65"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void prepareFromSearch(String query, Bundle extras);"
        errorLine2="                                               ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1180"
            column="48"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void prepareFromSearch(String query, Bundle extras);"
        errorLine2="                                                             ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1180"
            column="62"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void prepareFromUri(Uri uri, Bundle extras);"
        errorLine2="                                            ~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1191"
            column="45"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void prepareFromUri(Uri uri, Bundle extras);"
        errorLine2="                                                     ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1191"
            column="54"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void playFromMediaId(String mediaId, Bundle extras);"
        errorLine2="                                             ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1205"
            column="46"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void playFromMediaId(String mediaId, Bundle extras);"
        errorLine2="                                                             ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1205"
            column="62"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void playFromSearch(String query, Bundle extras);"
        errorLine2="                                            ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1216"
            column="45"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void playFromSearch(String query, Bundle extras);"
        errorLine2="                                                          ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1216"
            column="59"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void playFromUri(Uri uri, Bundle extras);"
        errorLine2="                                         ~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1225"
            column="42"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void playFromUri(Uri uri, Bundle extras);"
        errorLine2="                                                  ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1225"
            column="51"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void setRating(RatingCompat rating);"
        errorLine2="                                       ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1281"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void setRating(RatingCompat rating, Bundle extras);"
        errorLine2="                                       ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1295"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void setRating(RatingCompat rating, Bundle extras);"
        errorLine2="                                                            ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1295"
            column="61"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void sendCustomAction(PlaybackStateCompat.CustomAction customAction,"
        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1341"
            column="47"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="                Bundle args);"
        errorLine2="                ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1342"
            column="17"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void sendCustomAction(String action, Bundle args);"
        errorLine2="                                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1360"
            column="47"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void sendCustomAction(String action, Bundle args);"
        errorLine2="                                                             ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
            line="1360"
            column="62"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
        errorLine2="                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="304"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Object getMediaDescription() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="335"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) {"
        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="379"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) {"
        errorLine2="                                                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="379"
            column="63"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setMediaId(@Nullable String mediaId) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="468"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setTitle(@Nullable CharSequence title) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="479"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setSubtitle(@Nullable CharSequence subtitle) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="490"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setDescription(@Nullable CharSequence description) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="502"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setIconBitmap(@Nullable Bitmap icon) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="514"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setIconUri(@Nullable Uri iconUri) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="526"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setExtras(@Nullable Bundle extras) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="537"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setMediaUri(@Nullable Uri mediaUri) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="548"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaDescriptionCompat build() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
            line="559"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public boolean containsKey(String key) {"
        errorLine2="                               ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="374"
            column="32"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public CharSequence getText(@TextKey String key) {"
        errorLine2="           ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="386"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public CharSequence getText(@TextKey String key) {"
        errorLine2="                                         ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="386"
            column="42"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public String getString(@TextKey String key) {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="398"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public String getString(@TextKey String key) {"
        errorLine2="                                     ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="398"
            column="38"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public long getLong(@LongKey String key) {"
        errorLine2="                                 ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="413"
            column="34"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public RatingCompat getRating(@RatingKey String key) {"
        errorLine2="           ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="424"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public RatingCompat getRating(@RatingKey String key) {"
        errorLine2="                                             ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="424"
            column="46"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Bitmap getBitmap(@BitmapKey String key) {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="448"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Bitmap getBitmap(@BitmapKey String key) {"
        errorLine2="                                       ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="448"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public MediaDescriptionCompat getDescription() {"
        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="464"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
        errorLine2="                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="552"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Set&lt;String> keySet() {"
        errorLine2="           ~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="570"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Bundle getBundle() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="580"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static MediaMetadataCompat fromMediaMetadata(Object metadataObj) {"
        errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="597"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static MediaMetadataCompat fromMediaMetadata(Object metadataObj) {"
        errorLine2="                                                        ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="597"
            column="57"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Object getMediaMetadata() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="621"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder(MediaMetadataCompat source) {"
        errorLine2="                       ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="667"
            column="24"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder(MediaMetadataCompat source, int maxBitmapSize) {"
        errorLine2="                       ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="683"
            column="24"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putText(@TextKey String key, CharSequence value) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="722"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putText(@TextKey String key, CharSequence value) {"
        errorLine2="                                        ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="722"
            column="41"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putText(@TextKey String key, CharSequence value) {"
        errorLine2="                                                    ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="722"
            column="53"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putString(@TextKey String key, String value) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="759"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putString(@TextKey String key, String value) {"
        errorLine2="                                          ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="759"
            column="43"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putString(@TextKey String key, String value) {"
        errorLine2="                                                      ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="759"
            column="55"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putLong(@LongKey String key, long value) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="789"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putLong(@LongKey String key, long value) {"
        errorLine2="                                        ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="789"
            column="41"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putRating(@RatingKey String key, RatingCompat value) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="813"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putRating(@RatingKey String key, RatingCompat value) {"
        errorLine2="                                            ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="813"
            column="45"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putRating(@RatingKey String key, RatingCompat value) {"
        errorLine2="                                                        ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="813"
            column="57"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putBitmap(@BitmapKey String key, Bitmap value) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="848"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putBitmap(@BitmapKey String key, Bitmap value) {"
        errorLine2="                                            ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="848"
            column="45"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder putBitmap(@BitmapKey String key, Bitmap value) {"
        errorLine2="                                                        ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="848"
            column="57"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaMetadataCompat build() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
            line="864"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setCallback(Callback callback) {"
        errorLine2="                            ~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="619"
            column="29"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setCallback(Callback callback, Handler handler) {"
        errorLine2="                            ~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="635"
            column="29"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setCallback(Callback callback, Handler handler) {"
        errorLine2="                                               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="635"
            column="48"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setSessionActivity(PendingIntent pi) {"
        errorLine2="                                   ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="651"
            column="36"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setMediaButtonReceiver(PendingIntent mbr) {"
        errorLine2="                                       ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="668"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setPlaybackToRemote(VolumeProviderCompat volumeProvider) {"
        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="710"
            column="37"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void sendSessionEvent(String event, Bundle extras) {"
        errorLine2="                                 ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="754"
            column="34"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void sendSessionEvent(String event, Bundle extras) {"
        errorLine2="                                               ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="754"
            column="48"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Token getSessionToken() {"
        errorLine2="           ~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="784"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public MediaControllerCompat getController() {"
        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="794"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setPlaybackState(PlaybackStateCompat state) {"
        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="803"
            column="34"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setMetadata(MediaMetadataCompat metadata) {"
        errorLine2="                            ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="815"
            column="29"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setQueue(List&lt;QueueItem> queue) {"
        errorLine2="                         ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="831"
            column="26"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setQueueTitle(CharSequence title) {"
        errorLine2="                              ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="855"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setExtras(Bundle extras) {"
        errorLine2="                          ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="924"
            column="27"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Object getMediaSession() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="938"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Object getRemoteControlClient() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="952"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public String getCallingPackage() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="988"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void addOnActiveChangeListener(OnActiveChangeListener listener) {"
        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="999"
            column="43"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void removeOnActiveChangeListener(OnActiveChangeListener listener) {"
        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1012"
            column="46"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static MediaSessionCompat fromMediaSession(Context context, Object mediaSession) {"
        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1035"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static MediaSessionCompat fromMediaSession(Context context, Object mediaSession) {"
        errorLine2="                                                      ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1035"
            column="55"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static MediaSessionCompat fromMediaSession(Context context, Object mediaSession) {"
        errorLine2="                                                                       ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1035"
            column="72"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onCommand(String command, Bundle extras, ResultReceiver cb) {"
        errorLine2="                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1168"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onCommand(String command, Bundle extras, ResultReceiver cb) {"
        errorLine2="                                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1168"
            column="47"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onCommand(String command, Bundle extras, ResultReceiver cb) {"
        errorLine2="                                                             ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1168"
            column="62"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public boolean onMediaButtonEvent(Intent mediaButtonEvent) {"
        errorLine2="                                          ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1182"
            column="43"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPrepareFromMediaId(String mediaId, Bundle extras) {"
        errorLine2="                                         ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1275"
            column="42"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPrepareFromMediaId(String mediaId, Bundle extras) {"
        errorLine2="                                                         ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1275"
            column="58"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPrepareFromSearch(String query, Bundle extras) {"
        errorLine2="                                        ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1285"
            column="41"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPrepareFromSearch(String query, Bundle extras) {"
        errorLine2="                                                      ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1285"
            column="55"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPrepareFromUri(Uri uri, Bundle extras) {"
        errorLine2="                                     ~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1293"
            column="38"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPrepareFromUri(Uri uri, Bundle extras) {"
        errorLine2="                                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1293"
            column="47"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPlayFromMediaId(String mediaId, Bundle extras) {"
        errorLine2="                                      ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1306"
            column="39"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPlayFromMediaId(String mediaId, Bundle extras) {"
        errorLine2="                                                      ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1306"
            column="55"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPlayFromSearch(String query, Bundle extras) {"
        errorLine2="                                     ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1315"
            column="38"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPlayFromSearch(String query, Bundle extras) {"
        errorLine2="                                                   ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1315"
            column="52"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPlayFromUri(Uri uri, Bundle extras) {"
        errorLine2="                                  ~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1321"
            column="35"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onPlayFromUri(Uri uri, Bundle extras) {"
        errorLine2="                                           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1321"
            column="44"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onSetRating(RatingCompat rating) {"
        errorLine2="                                ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1380"
            column="33"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onSetRating(RatingCompat rating, Bundle extras) {"
        errorLine2="                                ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1389"
            column="33"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onSetRating(RatingCompat rating, Bundle extras) {"
        errorLine2="                                                     ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1389"
            column="54"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onCustomAction(String action, Bundle extras) {"
        errorLine2="                                   ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1460"
            column="36"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onCustomAction(String action, Bundle extras) {"
        errorLine2="                                                  ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1460"
            column="51"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onAddQueueItem(MediaDescriptionCompat description) {"
        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1470"
            column="36"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onAddQueueItem(MediaDescriptionCompat description, int index) {"
        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1482"
            column="36"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void onRemoveQueueItem(MediaDescriptionCompat description) {"
        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1493"
            column="39"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static Token fromToken(Object token) {"
        errorLine2="                      ~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1953"
            column="23"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static Token fromToken(Object token) {"
        errorLine2="                                      ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1953"
            column="39"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static Token fromToken(Object token, IMediaSession extraBinder) {"
        errorLine2="                      ~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1971"
            column="23"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static Token fromToken(Object token, IMediaSession extraBinder) {"
        errorLine2="                                      ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1971"
            column="39"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static Token fromToken(Object token, IMediaSession extraBinder) {"
        errorLine2="                                                    ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1971"
            column="53"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void writeToParcel(Parcel dest, int flags) {"
        errorLine2="                                  ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="1988"
            column="35"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Object getToken() {"
        errorLine2="               ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2032"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public IMediaSession getExtraBinder() {"
        errorLine2="               ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2040"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void setExtraBinder(IMediaSession extraBinder) {"
        errorLine2="                                   ~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2050"
            column="36"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public VersionedParcelable getSession2Token() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2060"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void setSession2Token(VersionedParcelable session2Token) {"
        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2070"
            column="38"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Bundle toBundle() {"
        errorLine2="               ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2080"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static Token fromBundle(Bundle tokenBundle) {"
        errorLine2="                      ~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2102"
            column="23"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static Token fromBundle(Bundle tokenBundle) {"
        errorLine2="                                       ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2102"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public QueueItem(MediaDescriptionCompat description, long id) {"
        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2157"
            column="26"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaDescriptionCompat getDescription() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2184"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void writeToParcel(Parcel dest, int flags) {"
        errorLine2="                                  ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2196"
            column="35"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Object getQueueItem() {"
        errorLine2="               ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2216"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static QueueItem fromQueueItem(Object queueItem) {"
        errorLine2="                      ~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2236"
            column="23"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static QueueItem fromQueueItem(Object queueItem) {"
        errorLine2="                                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2236"
            column="47"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static List&lt;QueueItem> fromQueueItemList(List&lt;?> itemList) {"
        errorLine2="                      ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2258"
            column="23"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static List&lt;QueueItem> fromQueueItemList(List&lt;?> itemList) {"
        errorLine2="                                                        ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
            line="2258"
            column="57"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="                android.media.session.MediaSessionManager.RemoteUserInfo remoteUserInfo) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/MediaSessionManager.java"
            line="184"
            column="17"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static MediaSessionCompat.Token getMediaSession(Notification notification) {"
        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="101"
            column="23"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static MediaSessionCompat.Token getMediaSession(Notification notification) {"
        errorLine2="                                                               ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="101"
            column="64"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaStyle(androidx.core.app.NotificationCompat.Builder builder) {"
        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="138"
            column="27"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaStyle setShowActionsInCompactView(int...actions) {"
        errorLine2="               ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="148"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaStyle setShowActionsInCompactView(int...actions) {"
        errorLine2="                                                      ~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="148"
            column="55"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaStyle setMediaSession(MediaSessionCompat.Token token) {"
        errorLine2="               ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="157"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaStyle setMediaSession(MediaSessionCompat.Token token) {"
        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="157"
            column="43"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaStyle setShowCancelButton(boolean show) {"
        errorLine2="               ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="186"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaStyle setCancelButtonIntent(PendingIntent pendingIntent) {"
        errorLine2="               ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="199"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public MediaStyle setCancelButtonIntent(PendingIntent pendingIntent) {"
        errorLine2="                                                ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="199"
            column="49"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="209"
            column="27"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="               ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="234"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="234"
            column="44"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="               ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="302"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="302"
            column="47"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="387"
            column="27"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="               ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="401"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="401"
            column="44"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="               ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="443"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="443"
            column="47"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="               ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="475"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/app/NotificationCompat.java"
            line="475"
            column="51"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public ParcelableVolumeInfo(Parcel from) {"
        errorLine2="                                ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"
            line="44"
            column="33"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
        errorLine2="                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"
            line="58"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
        errorLine2="                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="608"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public long getCurrentPosition(Long timeDiff) {"
        errorLine2="                                   ~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="669"
            column="36"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public List&lt;PlaybackStateCompat.CustomAction> getCustomActions() {"
        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="730"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public CharSequence getErrorMessage() {"
        errorLine2="           ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="763"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static PlaybackStateCompat fromPlaybackState(Object stateObj) {"
        errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="797"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static PlaybackStateCompat fromPlaybackState(Object stateObj) {"
        errorLine2="                                                        ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="797"
            column="57"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Object getPlaybackState() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="842"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public void writeToParcel(Parcel dest, int flags) {"
        errorLine2="                                  ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="906"
            column="35"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static PlaybackStateCompat.CustomAction fromCustomAction(Object customActionObj) {"
        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="929"
            column="23"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public static PlaybackStateCompat.CustomAction fromCustomAction(Object customActionObj) {"
        errorLine2="                                                                        ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="929"
            column="73"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Object getCustomAction() {"
        errorLine2="               ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="958"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public String getAction() {"
        errorLine2="               ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="988"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public CharSequence getName() {"
        errorLine2="               ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="997"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Bundle getExtras() {"
        errorLine2="               ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1020"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="            public Builder(String action, CharSequence name, int icon) {"
        errorLine2="                           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1054"
            column="28"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="            public Builder(String action, CharSequence name, int icon) {"
        errorLine2="                                          ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1054"
            column="43"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="            public Builder setExtras(Bundle extras) {"
        errorLine2="                   ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1081"
            column="20"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="            public Builder setExtras(Bundle extras) {"
        errorLine2="                                     ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1081"
            column="38"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="            public CustomAction build() {"
        errorLine2="                   ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1092"
            column="20"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder(PlaybackStateCompat source) {"
        errorLine2="                       ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1127"
            column="24"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setState(@State int state, long position, float playbackSpeed) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1174"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setState(@State int state, long position, float playbackSpeed,"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1212"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setBufferedPosition(long bufferPosition) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1228"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setActions(@Actions long capabilities) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1262"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder addCustomAction(String action, String name, int icon) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1287"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder addCustomAction(String action, String name, int icon) {"
        errorLine2="                                       ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1287"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder addCustomAction(String action, String name, int icon) {"
        errorLine2="                                                      ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1287"
            column="55"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder addCustomAction(PlaybackStateCompat.CustomAction customAction) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1302"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder addCustomAction(PlaybackStateCompat.CustomAction customAction) {"
        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1302"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setActiveQueueItemId(long id) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1318"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setErrorMessage(CharSequence errorMessage) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1331"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setErrorMessage(CharSequence errorMessage) {"
        errorLine2="                                       ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1331"
            column="40"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setErrorMessage(@ErrorCode int errorCode, CharSequence errorMessage) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1344"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setErrorMessage(@ErrorCode int errorCode, CharSequence errorMessage) {"
        errorLine2="                                                                 ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1344"
            column="66"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setExtras(Bundle extras) {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1356"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public Builder setExtras(Bundle extras) {"
        errorLine2="                                 ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1356"
            column="34"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public PlaybackStateCompat build() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
            line="1364"
            column="16"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
        errorLine2="                              ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="126"
            column="31"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static RatingCompat newUnratedRating(@Style int ratingStyle) {"
        errorLine2="                  ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="158"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static RatingCompat newHeartRating(boolean hasHeart) {"
        errorLine2="                  ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="179"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static RatingCompat newThumbRating(boolean thumbIsUp) {"
        errorLine2="                  ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="190"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static RatingCompat newStarRating(@StarStyle int starRatingStyle,"
        errorLine2="                  ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="206"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static RatingCompat newPercentageRating(float percent) {"
        errorLine2="                  ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="237"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static RatingCompat fromRating(Object ratingObj) {"
        errorLine2="                  ~~~~~~~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="332"
            column="19"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public static RatingCompat fromRating(Object ratingObj) {"
        errorLine2="                                          ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="332"
            column="43"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Object getRating() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/android/support/v4/media/RatingCompat.java"
            line="375"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public void setCallback(Callback callback) {"
        errorLine2="                            ~~~~~~~~">
        <location
            file="src/main/java/androidx/media/VolumeProviderCompat.java"
            line="188"
            column="29"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="    public Object getVolumeProvider() {"
        errorLine2="           ~~~~~~">
        <location
            file="src/main/java/androidx/media/VolumeProviderCompat.java"
            line="200"
            column="12"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
        errorLine1="        public abstract void onVolumeChanged(VolumeProviderCompat volumeProvider);"
        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/media/VolumeProviderCompat.java"
            line="236"
            column="46"/>
    </issue>

</issues>
