blob: 80a477eb8c5d06de4c5345df19f2f7463be1a699 [file] [log] [blame]
/*
* Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.slice.builders.impl;
import static androidx.annotation.RestrictTo.Scope.LIBRARY;
import android.app.PendingIntent;
import android.net.Uri;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.builders.SliceAction;
import java.util.List;
/**
* @hide
*/
@RestrictTo(LIBRARY)
public interface ListBuilder {
/**
* Add a row to list builder.
*/
void addRow(TemplateBuilderImpl impl);
/**
* Add a grid row to the list builder.
*/
void addGridRow(TemplateBuilderImpl impl);
/**
* Adds a header to this template.
* <p>
* The header should contain a title that is representative of the content in this slice along
* with an intent that links to the app activity associated with this content.
*/
void setHeader(TemplateBuilderImpl impl);
/**
* Adds an action to this template. Actions added with this method are grouped together and
* may be shown on the template in large or small formats.
*/
void addAction(SliceAction action);
/**
* Add an input range row to the list builder.
*/
void addInputRange(TemplateBuilderImpl builder);
/**
* Add a range row to the list builder.
*/
void addRange(TemplateBuilderImpl builder);
/**
* If all content in a slice cannot be shown, the row added here will be displayed where the
* content is cut off. This row should have an affordance to take the user to an activity to
* see all of the content.
* <p>
* Only one see more affordance can be added, this throws {@link IllegalStateException} if
* a row or action has been previously added.
* </p>
*/
void setSeeMoreRow(TemplateBuilderImpl builder);
/**
* If all content in a slice cannot be shown, a "see more" affordance will be displayed where
* the content is cut off. The action added here should take the user to an activity to see
* all of the content, and will be invoked when the "see more" affordance is tapped.
* <p>
* Only one see more affordance can be added, this throws {@link IllegalStateException} if
* a row or action has been previously added.
* </p>
*/
void setSeeMoreAction(PendingIntent intent);
/**
* Sets the color to tint items displayed by this template (e.g. icons).
*/
void setColor(@ColorInt int color);
/**
* Sets keywords to associate with this slice.
*/
void setKeywords(List<String> keywords);
/**
* Sets the time-to-live for this slice, i.e. how long the data contained in the slice
* can remain fresh.
*
* @param ttl the length in milliseconds that this content can live for.
*/
void setTtl(long ttl);
/**
* Create a builder that implements {@link RowBuilder}.
*/
TemplateBuilderImpl createRowBuilder();
/**
* Create a builder that implements {@link RowBuilder}.
*/
TemplateBuilderImpl createRowBuilder(Uri uri);
/**
* Create a builder that implements {@link GridRowBuilder}.
*/
TemplateBuilderImpl createGridBuilder();
/**
* Create a builder that implements {@link HeaderBuilder}.
*/
TemplateBuilderImpl createHeaderBuilder();
/**
* Create a builder that implements {@link HeaderBuilder}.
*/
TemplateBuilderImpl createHeaderBuilder(Uri uri);
/**
* Create a builder that implements {@link InputRangeBuilder}.
*/
TemplateBuilderImpl createInputRangeBuilder();
/**
* Create a builder that implements {@link RangeBuilder}.
*/
TemplateBuilderImpl createRangeBuilder();
/**
* Builder to construct a range.
*/
interface RangeBuilder {
/**
* Set the lower limit.
*/
void setMin(int min);
/**
* Set the upper limit.
*/
void setMax(int max);
/**
* Set the current value.
*/
void setValue(int value);
/**
* Set the title.
*/
void setTitle(@NonNull CharSequence title);
/**
* Set the subtitle.
*/
void setSubtitle(@NonNull CharSequence title);
/**
* Set the primary action.
*/
void setPrimaryAction(@NonNull SliceAction action);
/**
* Sets the content description.
*/
void setContentDescription(CharSequence description);
}
/**
* Builder to construct an input range.
*/
interface InputRangeBuilder extends RangeBuilder {
/**
* Set the {@link PendingIntent} to send when the value changes.
*/
void setInputAction(@NonNull PendingIntent action);
/**
* Set the {@link IconCompat} to be displayed as the thumb on the input range.
*/
void setThumb(@NonNull IconCompat thumb);
}
/**
*/
interface RowBuilder {
/**
* Sets the title item to be the provided timestamp. Only one timestamp can be added, if
* one is already added this will throw {@link IllegalArgumentException}.
* <p>
* There can only be one title item, this will replace any other title
* items that may have been set.
*/
void setTitleItem(long timeStamp);
/**
* Sets the title item to be the provided icon. There can only be one title item, this
* will replace any other title items that may have been set.
* @param icon the image to display.
* @param imageMode the mode that image should be displayed in.
*/
void setTitleItem(IconCompat icon, int imageMode);
/**
* Sets the title item to be the provided icon. There can only be one title item, this
* will replace any other title items that may have been set.
* <p>
* When set to true, the parameter {@code isLoading} indicates that the app is doing work
* to load this content in the background, in this case the template displays a placeholder
* until updated.
* @param icon the image to display.
* @param imageMode the mode that image should be displayed in.
* @param isLoading whether this content is being loaded in the background.
*/
void setTitleItem(IconCompat icon, int imageMode, boolean isLoading);
/**
* Sets the title item to be a tappable icon. There can only be one title item, this will
* replace any other title items that may have been set.
*/
void setTitleItem(SliceAction action);
/**
* Sets the title item to be a tappable icon. There can only be one title item, this will
* replace any other title items that may have been set.
* <p>
* When set to true, the parameter {@code isLoading} indicates that the app is doing work
* to load this content in the background, in this case the template displays a placeholder
* until updated.
*/
void setTitleItem(SliceAction action, boolean isLoading);
/**
* Sets the action to be invoked if the user taps on the main content of the template.
*/
void setPrimaryAction(SliceAction action);
/**
* Sets the title text.
*/
void setTitle(CharSequence title);
/**
* Sets the title text.
* <p>
* When set to true, the parameter {@code isLoading} indicates that the app is doing work
* to load this content in the background, in this case the template displays a placeholder
* until updated.
*/
void setTitle(CharSequence title, boolean isLoading);
/**
* Sets the subtitle text.
*/
void setSubtitle(CharSequence subtitle);
/**
* Sets the subtitle text.
* <p>
* When set to true, the parameter {@code isLoading} indicates that the app is doing work
* to load this content in the background, in this case the template displays a placeholder
* until updated.
*/
void setSubtitle(CharSequence subtitle, boolean isLoading);
/**
* Adds a timestamp to be displayed at the end of the row.
*/
void addEndItem(long timeStamp);
/**
* Adds an icon to be displayed at the end of the row.
* @param icon the image to display.
* @param imageMode the mode that image should be displayed in.
*/
void addEndItem(IconCompat icon, int imageMode);
/**
* Adds an icon to be displayed at the end of the row.
* <p>
* When set to true, the parameter {@code isLoading} indicates that the app is doing work
* to load this content in the background, in this case the template displays a placeholder
* until updated.
* @param icon the image to display.
* @param imageMode the mode that image should be displayed in.
* @param isLoading whether this content is being loaded in the background.
*/
void addEndItem(IconCompat icon, int imageMode, boolean isLoading);
/**
* Adds a tappable icon to be displayed at the end of the row.
*/
void addEndItem(SliceAction action);
/**
* Adds a tappable icon to be displayed at the end of the row.
* <p>
* When set to true, the parameter {@code isLoading} indicates that the app is doing work
* to load this content in the background, in this case the template displays a placeholder
* until updated.
*/
void addEndItem(SliceAction action, boolean isLoading);
/**
* Sets the content description for this row.
*/
void setContentDescription(CharSequence description);
}
/**
* Builder to construct a header. A header is displayed at the top of a list and can have
* a title, subtitle, and an action.
*/
public interface HeaderBuilder {
/**
* Sets the title to be shown in this header.
*/
void setTitle(CharSequence title, boolean isLoading);
/**
* Sets the subtitle to be shown in this header.
*/
void setSubtitle(CharSequence subtitle, boolean isLoading);
/**
* Sets the summary subtitle to be shown in this header. If unset, the normal subtitle
* will be used. The summary is used when the parent template is presented in a
* small format.
*/
void setSummary(CharSequence summarySubtitle, boolean isLoading);
/**
* Sets the action to invoke when the header is activated.
*/
void setPrimaryAction(SliceAction action);
/**
* Sets the content description for the header.
*/
void setContentDescription(CharSequence description);
}
}