// Signature format: 3.0
package androidx.slice.builders {

  @RequiresApi(19) public class GridRowBuilder {
    ctor public GridRowBuilder();
    method public androidx.slice.builders.GridRowBuilder addCell(androidx.slice.builders.GridRowBuilder.CellBuilder);
    method public androidx.slice.builders.GridRowBuilder setContentDescription(CharSequence);
    method public androidx.slice.builders.GridRowBuilder setLayoutDirection(int);
    method public androidx.slice.builders.GridRowBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.GridRowBuilder setSeeMoreAction(android.app.PendingIntent);
    method public androidx.slice.builders.GridRowBuilder setSeeMoreAction(androidx.remotecallback.RemoteCallback);
    method public androidx.slice.builders.GridRowBuilder setSeeMoreCell(androidx.slice.builders.GridRowBuilder.CellBuilder);
  }

  public static class GridRowBuilder.CellBuilder {
    ctor public GridRowBuilder.CellBuilder();
    method public androidx.slice.builders.GridRowBuilder.CellBuilder addImage(androidx.core.graphics.drawable.IconCompat, int);
    method public androidx.slice.builders.GridRowBuilder.CellBuilder addImage(androidx.core.graphics.drawable.IconCompat?, int, boolean);
    method public androidx.slice.builders.GridRowBuilder.CellBuilder addText(CharSequence);
    method public androidx.slice.builders.GridRowBuilder.CellBuilder addText(CharSequence?, boolean);
    method public androidx.slice.builders.GridRowBuilder.CellBuilder addTitleText(CharSequence);
    method public androidx.slice.builders.GridRowBuilder.CellBuilder addTitleText(CharSequence?, boolean);
    method public androidx.slice.builders.GridRowBuilder.CellBuilder setContentDescription(CharSequence);
    method public androidx.slice.builders.GridRowBuilder.CellBuilder setContentIntent(android.app.PendingIntent);
    method public androidx.slice.builders.GridRowBuilder.CellBuilder setContentIntent(androidx.remotecallback.RemoteCallback);
  }

  @RequiresApi(19) public class ListBuilder extends androidx.slice.builders.TemplateSliceBuilder {
    ctor public ListBuilder(android.content.Context, android.net.Uri, long);
    ctor @RequiresApi(26) public ListBuilder(android.content.Context, android.net.Uri, java.time.Duration?);
    method public androidx.slice.builders.ListBuilder addAction(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.ListBuilder addGridRow(androidx.slice.builders.GridRowBuilder);
    method public androidx.slice.builders.ListBuilder addInputRange(androidx.slice.builders.ListBuilder.InputRangeBuilder);
    method public androidx.slice.builders.ListBuilder addRange(androidx.slice.builders.ListBuilder.RangeBuilder);
    method public androidx.slice.builders.ListBuilder addRow(androidx.slice.builders.ListBuilder.RowBuilder);
    method public androidx.slice.builders.ListBuilder addSelection(androidx.slice.builders.SelectionBuilder);
    method public androidx.slice.builders.ListBuilder setAccentColor(@ColorInt int);
    method public androidx.slice.builders.ListBuilder setHeader(androidx.slice.builders.ListBuilder.HeaderBuilder);
    method public androidx.slice.builders.ListBuilder setIsError(boolean);
    method public androidx.slice.builders.ListBuilder setKeywords(java.util.Set<java.lang.String!>!);
    method public androidx.slice.builders.ListBuilder setLayoutDirection(int);
    method public androidx.slice.builders.ListBuilder setSeeMoreAction(android.app.PendingIntent);
    method public androidx.slice.builders.ListBuilder setSeeMoreAction(androidx.remotecallback.RemoteCallback);
    method public androidx.slice.builders.ListBuilder setSeeMoreRow(androidx.slice.builders.ListBuilder.RowBuilder);
    field public static final int ICON_IMAGE = 0; // 0x0
    field public static final long INFINITY = -1L; // 0xffffffffffffffffL
    field public static final int LARGE_IMAGE = 2; // 0x2
    field public static final int RANGE_MODE_DETERMINATE = 0; // 0x0
    field public static final int RANGE_MODE_INDETERMINATE = 1; // 0x1
    field public static final int RAW_IMAGE_LARGE = 4; // 0x4
    field public static final int RAW_IMAGE_SMALL = 3; // 0x3
    field public static final int SMALL_IMAGE = 1; // 0x1
    field public static final int UNKNOWN_IMAGE = 5; // 0x5
  }

  public static class ListBuilder.HeaderBuilder {
    ctor public ListBuilder.HeaderBuilder();
    method public androidx.slice.builders.ListBuilder.HeaderBuilder setContentDescription(CharSequence);
    method public androidx.slice.builders.ListBuilder.HeaderBuilder setLayoutDirection(int);
    method public androidx.slice.builders.ListBuilder.HeaderBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSubtitle(CharSequence);
    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSubtitle(CharSequence, boolean);
    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSummary(CharSequence);
    method public androidx.slice.builders.ListBuilder.HeaderBuilder setSummary(CharSequence, boolean);
    method public androidx.slice.builders.ListBuilder.HeaderBuilder setTitle(CharSequence);
    method public androidx.slice.builders.ListBuilder.HeaderBuilder setTitle(CharSequence, boolean);
  }

  public static class ListBuilder.InputRangeBuilder {
    ctor public ListBuilder.InputRangeBuilder();
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder addEndItem(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder addEndItem(androidx.slice.builders.SliceAction, boolean);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setContentDescription(CharSequence);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setInputAction(android.app.PendingIntent);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setInputAction(androidx.remotecallback.RemoteCallback);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setLayoutDirection(int);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setMax(int);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setMin(int);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setSubtitle(CharSequence);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setThumb(androidx.core.graphics.drawable.IconCompat);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setTitle(CharSequence);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat, int);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat, int, boolean);
    method public androidx.slice.builders.ListBuilder.InputRangeBuilder setValue(int);
  }

  public static class ListBuilder.RangeBuilder {
    ctor public ListBuilder.RangeBuilder();
    method public androidx.slice.builders.ListBuilder.RangeBuilder setContentDescription(CharSequence);
    method public androidx.slice.builders.ListBuilder.RangeBuilder setLayoutDirection(int);
    method public androidx.slice.builders.ListBuilder.RangeBuilder setMax(int);
    method public androidx.slice.builders.ListBuilder.RangeBuilder setMode(int);
    method public androidx.slice.builders.ListBuilder.RangeBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.ListBuilder.RangeBuilder setSubtitle(CharSequence);
    method public androidx.slice.builders.ListBuilder.RangeBuilder setTitle(CharSequence);
    method public androidx.slice.builders.ListBuilder.RangeBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat, int);
    method public androidx.slice.builders.ListBuilder.RangeBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat, int, boolean);
    method public androidx.slice.builders.ListBuilder.RangeBuilder setValue(int);
  }

  public static class ListBuilder.RowBuilder {
    ctor public ListBuilder.RowBuilder();
    ctor public ListBuilder.RowBuilder(android.net.Uri!);
    method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(long);
    method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat, int);
    method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
    method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction, boolean);
    method public androidx.slice.builders.ListBuilder.RowBuilder setContentDescription(CharSequence);
    method public androidx.slice.builders.ListBuilder.RowBuilder setLayoutDirection(int);
    method public androidx.slice.builders.ListBuilder.RowBuilder setPrimaryAction(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(CharSequence);
    method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(CharSequence?, boolean);
    method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence);
    method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence?, boolean);
    method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(long);
    method public androidx.slice.builders.ListBuilder.RowBuilder! setTitleItem(androidx.core.graphics.drawable.IconCompat, int);
    method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
    method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction, boolean);
  }

  @RequiresApi(19) public class SelectionBuilder {
    ctor public SelectionBuilder();
    method public androidx.slice.builders.SelectionBuilder! addOption(String!, CharSequence!);
    method public androidx.slice.builders.SelectionBuilder! setContentDescription(CharSequence?);
    method public androidx.slice.builders.SelectionBuilder! setInputAction(android.app.PendingIntent);
    method public androidx.slice.builders.SelectionBuilder! setInputAction(androidx.remotecallback.RemoteCallback);
    method public androidx.slice.builders.SelectionBuilder! setLayoutDirection(int);
    method public androidx.slice.builders.SelectionBuilder! setPrimaryAction(androidx.slice.builders.SliceAction);
    method public androidx.slice.builders.SelectionBuilder! setSelectedOption(String!);
    method public androidx.slice.builders.SelectionBuilder! setSubtitle(CharSequence?);
    method public androidx.slice.builders.SelectionBuilder! setTitle(CharSequence?);
  }

  @RequiresApi(19) public class SliceAction implements androidx.slice.core.SliceAction {
    method public static androidx.slice.builders.SliceAction! create(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
    method public static androidx.slice.builders.SliceAction! create(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
    method public static androidx.slice.builders.SliceAction! createDeeplink(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
    method public static androidx.slice.builders.SliceAction! createDeeplink(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
    method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, CharSequence, boolean);
    method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, CharSequence, boolean);
    method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
    method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
    method public android.app.PendingIntent getAction();
    method public CharSequence? getContentDescription();
    method public androidx.core.graphics.drawable.IconCompat? getIcon();
    method public int getImageMode();
    method public int getPriority();
    method public CharSequence getTitle();
    method public boolean isActivity();
    method public boolean isChecked();
    method public boolean isDefaultToggle();
    method public boolean isToggle();
    method public androidx.slice.builders.SliceAction setChecked(boolean);
    method public androidx.slice.builders.SliceAction setContentDescription(CharSequence);
    method public androidx.slice.builders.SliceAction setPriority(@IntRange(from=0) int);
  }

  @RequiresApi(19) public abstract class TemplateSliceBuilder {
    method public androidx.slice.Slice build();
  }

}

