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

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class ActionRow extends FrameLayout {"
        errorLine2="             ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ActionRow.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="class DisplayedListItems {"
        errorLine2="      ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/DisplayedListItems.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public @interface SliceRowType {}"
        errorLine2="                      ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/EventInfo.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static final int ROW_TYPE_DATE_PICK = 7;"
        errorLine2="                            ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/EventInfo.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static final int ROW_TYPE_TIME_PICK = 8;"
        errorLine2="                            ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/EventInfo.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public @interface SliceActionType{}"
        errorLine2="                      ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/EventInfo.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static final int ACTION_TYPE_DATE_PICK = 6;"
        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/EventInfo.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static final int ACTION_TYPE_TIME_PICK = 7;"
        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/EventInfo.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public @interface SliceButtonPosition {"
        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/EventInfo.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public GridContent(@NonNull SliceItem gridItem, int position) {"
        errorLine2="           ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public CharSequence getTitle() {"
        errorLine2="                        ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public ArrayList&lt;CellContent> getGridContent() {"
        errorLine2="                                  ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public SliceItem getContentIntent() {"
        errorLine2="                     ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public SliceItem getSeeMoreItem() {"
        errorLine2="                     ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public boolean isAllImages() {"
        errorLine2="                   ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getLargestImageMode() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getMaxCellLineCount() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public boolean hasImage() {"
        errorLine2="                   ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public boolean getIsLastIndex() { return mIsLastIndex; }"
        errorLine2="                   ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setIsLastIndex(boolean isLast) {"
        errorLine2="                ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getHeight(@NonNull SliceStyle style, @NonNull SliceViewPolicy policy) {"
        errorLine2="               ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static class CellContent {"
        errorLine2="                        ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected final View mForeground;"
        errorLine2="                         ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mRowIndex;"
        errorLine2="                  ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mRowCount;"
        errorLine2="                  ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mMaxCells = -1;"
        errorLine2="                  ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected @Nullable GridContent mGridContent;"
        errorLine2="                                    ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected final int mLargeImageHeight;"
        errorLine2="                        ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected final int mSmallImageSize;"
        errorLine2="                        ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected final int mSmallImageMinWidth;"
        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected final int mIconSize;"
        errorLine2="                        ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected final LinearLayout mViewContainer;"
        errorLine2="                                 ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setInsets(int l, int t, int r, int b) {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setTint(@ColorInt int tintColor) {"
        errorLine2="                ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void onClick(@NonNull View view) {"
        errorLine2="                ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public boolean onTouch(@NonNull View view, @NonNull MotionEvent event) {"
        errorLine2="                   ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getHiddenItemCount() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class ListContent extends SliceContent {"
        errorLine2="             ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ListContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class LocationBasedViewTracker implements Runnable, View.OnLayoutChangeListener {"
        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static void trackInputFocused(ViewGroup parent) {"
        errorLine2="                       ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static void trackA11yFocus(ViewGroup parent) {"
        errorLine2="                       ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class MessageView extends SliceChildView {"
        errorLine2="             ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/MessageView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class RemoteInputView extends LinearLayout implements View.OnClickListener, TextWatcher {"
        errorLine2="             ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setRevealParameters(int cx, int cy, int r) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static final boolean isConfirmKey(int keyCode) {"
        errorLine2="                                ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class RowContent extends SliceContent {"
        errorLine2="             ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
        errorLine2="               ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class RowStyle {"
        errorLine2="             ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowStyle.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected Set&lt;SliceItem> mLoadingActions = new HashSet&lt;>();"
        errorLine2="                             ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setStyle(SliceStyle styles, RowStyle rowStyle) {"
        errorLine2="                ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setInsets(int l, int t, int r, int b) {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setTint(@ColorInt int tintColor) {"
        errorLine2="                ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
        errorLine2="                ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setShowLastUpdated(boolean showLastUpdated) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setAllowTwoLines(boolean allowTwoLines) {"
        errorLine2="                ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setLastUpdated(long lastUpdated) {"
        errorLine2="                ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setLoadingActions(Set&lt;SliceItem> actions) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void resetView() {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class ShortcutView extends SliceChildView {"
        errorLine2="             ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class SliceActionView extends FrameLayout implements View.OnClickListener,"
        errorLine2="             ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setParents(SliceView parent, TemplateView templateView) {"
        errorLine2="                ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setInsets(int l, int t, int r, int b) {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceObserver(SliceView.OnSliceActionListener observer) {"
        errorLine2="                ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
        errorLine2="                ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceItems(List&lt;SliceContent> slices, int color, int mode) {"
        errorLine2="                ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setStyle(SliceStyle style) {"
        errorLine2="                ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setPolicy(SliceViewPolicy p) {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setShowLastUpdated(boolean showLastUpdated) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setLastUpdated(long lastUpdated) {"
        errorLine2="                ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setLoadingActions(Set&lt;SliceItem> actions) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
        errorLine2="                          ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void onSliceActionLoading(SliceItem actionItem, int position) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setAllowTwoLines(boolean allowTwoLines) {"
        errorLine2="                ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void notifyHeaderChanged() {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public SliceViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {"
        errorLine2="                           ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void onBindViewHolder(@NonNull SliceViewHolder holder, int position) {"
        errorLine2="                ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected static class SliceWrapper {"
        errorLine2="                           ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public class SliceViewHolder extends RecyclerView.ViewHolder implements View.OnTouchListener,"
        errorLine2="                 ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected SliceView.OnSliceActionListener mObserver;"
        errorLine2="                                              ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mMode;"
        errorLine2="                  ~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mTintColor = -1;"
        errorLine2="                  ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected boolean mShowLastUpdated;"
        errorLine2="                      ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected long mLastUpdated = -1;"
        errorLine2="                   ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mInsetStart;"
        errorLine2="                  ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mInsetTop;"
        errorLine2="                  ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mInsetEnd;"
        errorLine2="                  ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mInsetBottom;"
        errorLine2="                  ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected SliceActionView.SliceActionLoadingListener mLoadingListener;"
        errorLine2="                                                         ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected SliceStyle mSliceStyle;"
        errorLine2="                         ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected RowStyle mRowStyle;"
        errorLine2="                       ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected SliceViewPolicy mViewPolicy;"
        errorLine2="                              ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceContent(ListContent content) {"
        errorLine2="                ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setInsets(int l, int t, int r, int b) {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
        errorLine2="                ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getMode() {"
        errorLine2="               ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setTint(@ColorInt int tintColor) {"
        errorLine2="                ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setShowLastUpdated(boolean showLastUpdated) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setLastUpdated(long lastUpdated) {"
        errorLine2="                ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceActionLoadingListener(SliceActionView.SliceActionLoadingListener listener) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setActionLoading(SliceItem item) {"
        errorLine2="                ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setLoadingActions(Set&lt;SliceItem> loadingActions) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setAllowTwoLines(boolean allowTwoLines) {"
        errorLine2="                ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
        errorLine2="                          ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setStyle(SliceStyle styles, @NonNull RowStyle rowStyle) {"
        errorLine2="                ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setPolicy(@Nullable SliceViewPolicy policy) {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getHiddenItemCount() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected SliceItem mSliceItem;"
        errorLine2="                        ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected SliceItem mColorItem;"
        errorLine2="                        ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected SliceItem mLayoutDirItem;"
        errorLine2="                        ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected SliceItem mContentDescr;"
        errorLine2="                        ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    protected int mRowIndex;"
        errorLine2="                  ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public SliceContent(@Nullable SliceItem item, int rowIndex) {"
        errorLine2="           ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public SliceItem getSliceItem() {"
        errorLine2="                     ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getAccentColor() {"
        errorLine2="               ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getLayoutDir() {"
        errorLine2="               ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public CharSequence getContentDescription() {"
        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getRowIndex() { return mRowIndex; }"
        errorLine2="               ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
        errorLine2="               ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public boolean isValid() {"
        errorLine2="                   ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public SliceAction getShortcut(@Nullable Context context) {"
        errorLine2="                       ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static final SliceSpec OLD_BASIC = new SliceSpec(&quot;androidx.app.slice.BASIC&quot;, 1);"
        errorLine2="                                  ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static final SliceSpec OLD_LIST = new SliceSpec(&quot;androidx.app.slice.LIST&quot;, 1);"
        errorLine2="                                  ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static final Set&lt;SliceSpec> SUPPORTED_SPECS = new ArraySet&lt;>("
        errorLine2="                                       ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static CachedSliceLiveData fromStream(@NonNull Context context,"
        errorLine2="                                      ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        protected synchronized void loadInitialSlice() {"
        errorLine2="                                    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        protected void updateSlice() {"
        errorLine2="                       ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public @interface SliceLoadingState{}"
        errorLine2="                      ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceMetadata.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static List&lt;SliceAction> getSliceActions(@NonNull Slice slice) {"
        errorLine2="                                    ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceMetadata.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public boolean isExpired() {"
        errorLine2="                   ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceMetadata.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public boolean neverExpires() {"
        errorLine2="                   ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceMetadata.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public long getTimeToExpiry() {"
        errorLine2="                ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceMetadata.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public ListContent getListContent() {"
        errorLine2="                       ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceMetadata.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="class SliceMetrics {"
        errorLine2="      ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceMetrics.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="class SliceMetricsWrapper extends SliceMetrics {"
        errorLine2="      ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceMetricsWrapper.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public SliceStructure(SliceItem s) {"
        errorLine2="           ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceStructure.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public Uri getUri() {"
        errorLine2="               ~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceStructure.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class SliceStyle {"
        errorLine2="             ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
        errorLine2="                             ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static int parseImageMode(@NonNull SliceItem iconItem) {"
        errorLine2="                      ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        public void checkThrow(String format) {"
        errorLine2="                    ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        public @FormatMode int getActionMode() {"
        errorLine2="                               ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        public @FormatMode int getImageMode() {"
        errorLine2="                               ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        public int getMaxWidth() {"
        errorLine2="                   ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        public int getMaxHeight() {"
        errorLine2="                   ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        public Bitmap.CompressFormat getFormat() {"
        errorLine2="                                     ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        public int getQuality() {"
        errorLine2="                   ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        public SliceParseException(String s, Throwable e) {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="        public SliceParseException(String s) {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public @interface SliceMode {}"
        errorLine2="                      ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public boolean isSliceViewClickable() {"
        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setClickInfo(int[] info) {"
        errorLine2="                ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setMode(@SliceMode int mode, boolean animate) {"
        errorLine2="                ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setShowActionRow(boolean show) {"
        errorLine2="                ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public boolean isShowingActionRow() {"
        errorLine2="                   ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static String modeToString(@SliceMode int mode) {"
        errorLine2="                         ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public static final Comparator&lt;SliceAction> SLICE_ACTION_PRIORITY_COMPARATOR ="
        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    SliceViewManager() {"
        errorLine2="    ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceViewManager.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public abstract class SliceViewManagerBase extends SliceViewManager {"
        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceViewManagerBase.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="class SliceViewManagerCompat extends SliceViewManagerBase {"
        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceViewManagerCompat.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="class SliceViewManagerWrapper extends SliceViewManagerBase {"
        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceViewManagerWrapper.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class SliceViewPolicy {"
        errorLine2="             ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewPolicy.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="public class SliceViewUtil {"
        errorLine2="             ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="class SliceXml {"
        errorLine2="      ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceXml.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setInsets(int l, int t, int r, int b) {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void onForegroundActivated(MotionEvent event) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setPolicy(SliceViewPolicy policy) {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setActionLoading(SliceItem item) {"
        errorLine2="                ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setLoadingActions(Set&lt;SliceItem> loadingActions) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
        errorLine2="                          ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setTint(int tint) {"
        errorLine2="                ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
        errorLine2="                ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setSliceContent(ListContent sliceContent) {"
        errorLine2="                ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setStyle(SliceStyle style, @NonNull RowStyle rowStyle) {"
        errorLine2="                ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setShowLastUpdated(boolean showLastUpdated) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setLastUpdated(long lastUpdated) {"
        errorLine2="                ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void setAllowTwoLines(boolean allowTwoLines) {"
        errorLine2="                ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void resetView() {"
        errorLine2="                ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void onScrollingChanged(boolean newScrolling) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void onMaxHeightChanged(int newNewHeight) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void onMaxSmallChanged(int newMaxSmallHeight) {"
        errorLine2="                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public void onModeChanged(int newMode) {"
        errorLine2="                ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanHideAnnotation"
        message="@hide is not allowed in Javadoc"
        errorLine1="    public int getHiddenItemCount() {"
        errorLine2="               ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="BanSynchronizedMethods"
        message="Use of synchronized methods is not recommended"
        errorLine1="        /**"
        errorLine2="        ^">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="ClassVerificationFailure"
        message="This call references a method added in API level 20; however, the containing class androidx.slice.widget.ActionRow is reachable from earlier API levels and will fail run-time class verification."
        errorLine1="        if (input.getRemoteInput().getAllowFreeFormInput()) {"
        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ActionRow.java"/>
    </issue>

    <issue
        id="ClassVerificationFailure"
        message="This call references a method added in API level 21; however, the containing class androidx.slice.widget.GridRowView is reachable from earlier API levels and will fail run-time class verification."
        errorLine1="            mForeground.getBackground().setHotspot(x, y);"
        errorLine2="                                        ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/GridRowView.java"/>
    </issue>

    <issue
        id="ClassVerificationFailure"
        message="This call references a method added in API level 16; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
        errorLine1="            view.performAccessibilityAction(ACTION_ACCESSIBILITY_FOCUS, null);"
        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
    </issue>

    <issue
        id="ClassVerificationFailure"
        message="This call references a method added in API level 21; however, the containing class androidx.slice.widget.LocationBasedViewTracker is reachable from earlier API levels and will fail run-time class verification."
        errorLine1="            if (child.isAccessibilityFocused()) {"
        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
    </issue>

    <issue
        id="ClassVerificationFailure"
        message="This call references a method added in API level 24; however, the containing class androidx.slice.widget.RemoteInputView.RemoteEditText is reachable from earlier API levels and will fail run-time class verification."
        errorLine1="                return isTemporarilyDetached();"
        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="ClassVerificationFailure"
        message="This call references a method added in API level 21; however, the containing class androidx.slice.widget.SliceView is reachable from earlier API levels and will fail run-time class verification."
        errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
        errorLine2="        ~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="ClassVerificationFailure"
        message="This call references a method added in API level 21; however, the containing class androidx.slice.widget.TemplateView is reachable from earlier API levels and will fail run-time class verification."
        errorLine1="            mForeground.getBackground().setHotspot(x, y);"
        errorLine2="                                        ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public ActionRow(Context context, boolean fullActions) {"
        errorLine2="                     ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ActionRow.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
        errorLine2="                         ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ListContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
        errorLine2="                                           ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ListContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public DisplayedListItems getRowItems(int availableHeight, SliceStyle style,"
        errorLine2="           ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ListContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public DisplayedListItems getRowItems(int availableHeight, SliceStyle style,"
        errorLine2="                                                               ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ListContent.java"/>
    </issue>

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

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static int getRowType(SliceContent content, boolean isHeader,"
        errorLine2="                                 ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ListContent.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static int getListHeight(List&lt;SliceContent> listItems, SliceStyle style,"
        errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ListContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static int getListHeight(List&lt;SliceContent> listItems, SliceStyle style,"
        errorLine2="                                                                  ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ListContent.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static void trackInputFocused(ViewGroup parent) {"
        errorLine2="                                         ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static void trackA11yFocus(ViewGroup parent) {"
        errorLine2="                                      ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceItem(SliceContent content, boolean isHeader, int index,"
        errorLine2="                             ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/MessageView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            int rowCount, SliceView.OnSliceActionListener observer) {"
        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/MessageView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public RemoteInputView(Context context, AttributeSet attrs) {"
        errorLine2="                           ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public RemoteInputView(Context context, AttributeSet attrs) {"
        errorLine2="                                            ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static RemoteInputView inflate(Context context, ViewGroup root) {"
        errorLine2="                  ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static RemoteInputView inflate(Context context, ViewGroup root) {"
        errorLine2="                                          ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static RemoteInputView inflate(Context context, ViewGroup root) {"
        errorLine2="                                                           ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setRemoteInput(RemoteInput[] remoteInputs, RemoteInput remoteInput) {"
        errorLine2="                               ~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setRemoteInput(RemoteInput[] remoteInputs, RemoteInput remoteInput) {"
        errorLine2="                                                           ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        public RemoteEditText(Context context, AttributeSet attrs) {"
        errorLine2="                              ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        public RemoteEditText(Context context, AttributeSet attrs) {"
        errorLine2="                                               ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        protected void onVisibilityChanged(View changedView, int visibility) {"
        errorLine2="                                           ~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {"
        errorLine2="                                                                      ~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public RowContent(SliceItem rowSlice, int position) {"
        errorLine2="                      ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowContent.java"/>
    </issue>

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

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
        errorLine2="                         ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
        errorLine2="                                           ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public RowStyle(Context context, int resId, @NonNull SliceStyle sliceStyle) {"
        errorLine2="                    ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected Set&lt;SliceItem> mLoadingActions = new HashSet&lt;>();"
        errorLine2="              ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setStyle(SliceStyle styles, RowStyle rowStyle) {"
        errorLine2="                         ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setStyle(SliceStyle styles, RowStyle rowStyle) {"
        errorLine2="                                            ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
        errorLine2="                                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setLoadingActions(Set&lt;SliceItem> actions) {"
        errorLine2="                                  ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/RowView.java"/>
    </issue>

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

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setLoadingActions(Set&lt;SliceItem> actions) {"
        errorLine2="                                  ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
        errorLine2="           ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public SliceActionView(Context context, SliceStyle style, RowStyle rowStyle) {"
        errorLine2="                           ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public SliceActionView(Context context, SliceStyle style, RowStyle rowStyle) {"
        errorLine2="                                            ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public SliceActionView(Context context, SliceStyle style, RowStyle rowStyle) {"
        errorLine2="                                                              ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setAction(@NonNull SliceActionImpl action, EventInfo info,"
        errorLine2="                                                           ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            SliceView.OnSliceActionListener listener, int color,"
        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setParents(SliceView parent, TemplateView templateView) {"
        errorLine2="                           ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setParents(SliceView parent, TemplateView templateView) {"
        errorLine2="                                             ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceObserver(SliceView.OnSliceActionListener observer) {"
        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
        errorLine2="                                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceItems(List&lt;SliceContent> slices, int color, int mode) {"
        errorLine2="                              ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

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

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setLoadingActions(Set&lt;SliceItem> actions) {"
        errorLine2="                                  ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
        errorLine2="           ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void onSliceActionLoading(SliceItem actionItem, int position) {"
        errorLine2="                                     ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected SliceView.OnSliceActionListener mObserver;"
        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected SliceActionView.SliceActionLoadingListener mLoadingListener;"
        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected SliceStyle mSliceStyle;"
        errorLine2="              ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected RowStyle mRowStyle;"
        errorLine2="              ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected SliceViewPolicy mViewPolicy;"
        errorLine2="              ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
        errorLine2="                                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceActionLoadingListener(SliceActionView.SliceActionLoadingListener listener) {"
        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setLoadingActions(Set&lt;SliceItem> loadingActions) {"
        errorLine2="                                  ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
        errorLine2="           ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setStyle(SliceStyle styles, @NonNull RowStyle rowStyle) {"
        errorLine2="                         ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected SliceItem mSliceItem;"
        errorLine2="              ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected SliceItem mColorItem;"
        errorLine2="              ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected SliceItem mLayoutDirItem;"
        errorLine2="              ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected SliceItem mContentDescr;"
        errorLine2="              ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
        errorLine2="                         ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
        errorLine2="                                           ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceContent.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            @NonNull InputStream input, OnErrorListener listener) {"
        errorLine2="                                        ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            @NonNull InputStream input, OnErrorListener listener) {"
        errorLine2="                                        ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            SliceViewManager manager, @NonNull InputStream input, OnErrorListener listener) {"
        errorLine2="            ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            SliceViewManager manager, @NonNull InputStream input, OnErrorListener listener) {"
        errorLine2="                                                                  ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public boolean sendToggleAction(SliceAction toggleAction, boolean toggleValue)"
        errorLine2="                                    ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceMetadata.java"/>
    </issue>

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

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

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public SliceStyle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
        errorLine2="                      ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public SliceStyle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
        errorLine2="                                       ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getRowHeight(RowContent row, SliceViewPolicy policy) {"
        errorLine2="                            ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getRowHeight(RowContent row, SliceViewPolicy policy) {"
        errorLine2="                                            ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getGridHeight(GridContent grid, SliceViewPolicy policy) {"
        errorLine2="                             ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getGridHeight(GridContent grid, SliceViewPolicy policy) {"
        errorLine2="                                               ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getListHeight(ListContent list, SliceViewPolicy policy) {"
        errorLine2="                             ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getListHeight(ListContent list, SliceViewPolicy policy) {"
        errorLine2="                                               ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getListItemsHeight(List&lt;SliceContent> listItems, SliceViewPolicy policy) {"
        errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public int getListItemsHeight(List&lt;SliceContent> listItems, SliceViewPolicy policy) {"
        errorLine2="                                                                ~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public DisplayedListItems getListItemsForNonScrollingList(ListContent list,"
        errorLine2="                                                              ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
        errorLine2="                  ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
        errorLine2="                                     ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
        errorLine2="                                                      ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
        errorLine2="                                                                       ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

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

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

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

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

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

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        public SerializeOptions setImageConversionFormat(Bitmap.CompressFormat format,"
        errorLine2="               ~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        public SerializeOptions setImageConversionFormat(Bitmap.CompressFormat format,"
        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        void onSliceAction(Uri actionUri, Context context, Intent intent);"
        errorLine2="                           ~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        void onSliceAction(Uri actionUri, Context context, Intent intent);"
        errorLine2="                                          ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        void onSliceAction(Uri actionUri, Context context, Intent intent);"
        errorLine2="                                                           ~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        public SliceParseException(String s, Throwable e) {"
        errorLine2="                                   ~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="        public SliceParseException(String s, Throwable e) {"
        errorLine2="                                             ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/SliceUtils.java"/>
    </issue>

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

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public SliceView(Context context, @Nullable AttributeSet attrs) {"
        errorLine2="                     ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public SliceView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {"
        errorLine2="                     ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public SliceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
        errorLine2="                     ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public SliceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
        errorLine2="                                      ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setClickInfo(int[] info) {"
        errorLine2="                             ~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setOnClickListener(View.OnClickListener listener) {"
        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setOnLongClickListener(View.OnLongClickListener listener) {"
        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static String modeToString(@SliceMode int mode) {"
        errorLine2="                  ~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    protected void onVisibilityChanged(View changedView, int visibility) {"
        errorLine2="                                       ~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceView.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static Drawable getDrawable(@NonNull Context context, @AttrRes int attr) {"
        errorLine2="                  ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static IconCompat createIconFromDrawable(Drawable d) {"
        errorLine2="                  ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static IconCompat createIconFromDrawable(Drawable d) {"
        errorLine2="                                                    ~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            IconCompat icon, boolean isLarge, ViewGroup parent) {"
        errorLine2="            ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="            IconCompat icon, boolean isLarge, ViewGroup parent) {"
        errorLine2="                                              ~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static CharSequence getTimestampString(Context context, long time) {"
        errorLine2="                  ~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static CharSequence getTimestampString(Context context, long time) {"
        errorLine2="                                                  ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static void tintIndeterminateProgressBar(Context context, ProgressBar bar) {"
        errorLine2="                                                    ~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public static void tintIndeterminateProgressBar(Context context, ProgressBar bar) {"
        errorLine2="                                                                     ~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
    </issue>

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

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

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setLoadingActions(Set&lt;SliceItem> loadingActions) {"
        errorLine2="                                  ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public Set&lt;SliceItem> getLoadingActions() {"
        errorLine2="           ~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setSliceActions(List&lt;SliceAction> actions) {"
        errorLine2="                                ~~~~~~~~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

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

    <issue
        id="UnknownNullness"
        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
        errorLine1="    public void setStyle(SliceStyle style, @NonNull RowStyle rowStyle) {"
        errorLine2="                         ~~~~~~~~~~">
        <location
            file="src/main/java/androidx/slice/widget/TemplateView.java"/>
    </issue>

</issues>
