blob: b98c723d5f047b59f7dbdc73d220704a62291bb7 [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;
import static androidx.annotation.RestrictTo.Scope.LIBRARY;
import static androidx.slice.builders.ListBuilder.ICON_IMAGE;
import android.app.PendingIntent;
import android.graphics.drawable.Icon;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice;
import androidx.slice.core.SliceActionImpl;
/**
* Class representing an action, supports tappable icons, custom toggle icons, and default toggles.
*/
public class SliceAction implements androidx.slice.core.SliceAction {
private SliceActionImpl mSliceAction;
/**
* @deprecated TO BE REMOVED
*/
@Deprecated
@RequiresApi(23)
public SliceAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,
@NonNull CharSequence actionTitle) {
this(action, actionIcon, ICON_IMAGE, actionTitle);
}
/**
* @deprecated TO BE REMOVED
*/
@Deprecated
@RequiresApi(23)
public SliceAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,
@ListBuilder.ImageMode int imageMode, @NonNull CharSequence actionTitle) {
this(action, IconCompat.createFromIcon(actionIcon), imageMode, actionTitle);
}
/**
* @deprecated TO BE REMOVED
*/
@Deprecated
@RequiresApi(23)
public SliceAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,
@NonNull CharSequence actionTitle, boolean isChecked) {
this(action, IconCompat.createFromIcon(actionIcon), actionTitle, isChecked);
}
/**
* Construct a SliceAction representing a tappable icon.
*
* @param action the pending intent to invoke for this action.
* @param actionIcon the icon to display for this action.
* @param actionTitle the title for this action, also used for content description if one hasn't
* been set via {@link #setContentDescription(CharSequence)}.
*/
public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@NonNull CharSequence actionTitle) {
this(action, actionIcon, ICON_IMAGE, actionTitle);
}
/**
* Construct a SliceAction representing a tappable icon. Use this method to specify the
* format of the image, {@link ListBuilder#ICON_IMAGE} will be presented as a tintable icon.
* Note that there is no difference between {@link ListBuilder#SMALL_IMAGE} and
* {@link ListBuilder#LARGE_IMAGE} for actions; these will just be represented as an
* non-tintable image.
*
* @param action the pending intent to invoke for this action.
* @param actionIcon the icon to display for this action.
* @param imageMode the mode this icon should be displayed in.
* @param actionTitle the title for this action, also used for content description if one hasn't
* been set via {@link #setContentDescription(CharSequence)}.
*
* @see ListBuilder#ICON_IMAGE
* @see ListBuilder#SMALL_IMAGE
* @see ListBuilder#LARGE_IMAGE
*/
public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@ListBuilder.ImageMode int imageMode, @NonNull CharSequence actionTitle) {
mSliceAction = new SliceActionImpl(action, actionIcon, imageMode, actionTitle);
}
/**
* Construct a SliceAction representing a custom toggle icon.
*
* @param action the pending intent to invoke for this toggle.
* @param actionIcon the icon to display for this toggle, should have a checked and unchecked
* state.
* @param actionTitle the title for this toggle, also used for content description if one hasn't
* been set via {@link #setContentDescription(CharSequence)}.
* @param isChecked the state of the toggle.
*/
public SliceAction(@NonNull PendingIntent action, @NonNull IconCompat actionIcon,
@NonNull CharSequence actionTitle, boolean isChecked) {
mSliceAction = new SliceActionImpl(action, actionIcon, actionTitle, isChecked);
}
/**
* Construct a SliceAction representing a default toggle.
*
* @param action the pending intent to invoke for this toggle.
* @param actionTitle the title for this toggle, also used for content description if one hasn't
* been set via {@link #setContentDescription(CharSequence)}.
* @param isChecked the state of the toggle.
*/
public SliceAction(@NonNull PendingIntent action, @NonNull CharSequence actionTitle,
boolean isChecked) {
mSliceAction = new SliceActionImpl(action, actionTitle, isChecked);
}
/**
* @param description the content description for this action.
*/
@NonNull
@Override
public SliceAction setContentDescription(@NonNull CharSequence description) {
mSliceAction.setContentDescription(description);
return this;
}
/**
* @param isChecked whether the state of this action is checked or not; only used for toggle
* actions.
*/
@NonNull
@Override
public SliceAction setChecked(boolean isChecked) {
mSliceAction.setChecked(isChecked);
return this;
}
/**
* Sets the priority of this action, with the lowest priority having the highest ranking.
*/
@NonNull
@Override
public SliceAction setPriority(@IntRange(from = 0) int priority) {
mSliceAction.setPriority(priority);
return this;
}
/**
* @return the {@link PendingIntent} associated with this action.
*/
@NonNull
@Override
public PendingIntent getAction() {
return mSliceAction.getAction();
}
/**
* @return the {@link Icon} to display for this action. This can be null when the action
* represented is a default toggle.
*/
@Nullable
@Override
public IconCompat getIcon() {
return mSliceAction.getIcon();
}
/**
* @return the title for this action.
*/
@NonNull
@Override
public CharSequence getTitle() {
return mSliceAction.getTitle();
}
/**
* @return the content description to use for this action.
*/
@Nullable
@Override
public CharSequence getContentDescription() {
return mSliceAction.getContentDescription();
}
/**
* @return the priority associated with this action, -1 if unset.
*/
@Override
public int getPriority() {
return mSliceAction.getPriority();
}
/**
* @return whether this action represents a toggle (i.e. has a checked and unchecked state).
*/
@Override
public boolean isToggle() {
return mSliceAction.isToggle();
}
/**
* @return whether the state of this action is checked or not; only used for toggle actions.
*/
@Override
public boolean isChecked() {
return mSliceAction.isChecked();
}
/**
* @return the image mode to use for this action.
*/
@Override
public @ListBuilder.ImageMode int getImageMode() {
return mSliceAction.getImageMode();
}
/**
* @return whether this action is a toggle using the standard switch control.
*/
@Override
public boolean isDefaultToggle() {
return mSliceAction.isDefaultToggle();
}
/**
* @param builder this should be a new builder that has any additional hints the action might
* need.
* @return the slice representation of this action.
* @hide
*/
@RestrictTo(LIBRARY)
@NonNull
public Slice buildSlice(@NonNull Slice.Builder builder) {
return mSliceAction.buildSlice(builder);
}
/**
* @hide
*/
@RestrictTo(LIBRARY)
@NonNull
public SliceActionImpl getImpl() {
return mSliceAction;
}
}