blob: 5a4244f86ca30f6c13e14f50ce459bc8921110fe [file] [log] [blame]
/*
* Copyright (C) 2016 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 android.app;
import android.annotation.NonNull;
import android.graphics.drawable.Icon;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import java.io.PrintWriter;
/**
* Represents a remote action that can be called from another process. The action can have an
* associated visualization including metadata like an icon or title.
*/
public final class RemoteAction implements Parcelable {
private static final String TAG = "RemoteAction";
private final Icon mIcon;
private final CharSequence mTitle;
private final CharSequence mContentDescription;
private final PendingIntent mActionIntent;
private boolean mEnabled;
private boolean mShouldShowIcon;
RemoteAction(Parcel in) {
mIcon = Icon.CREATOR.createFromParcel(in);
mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
mContentDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
mActionIntent = PendingIntent.CREATOR.createFromParcel(in);
mEnabled = in.readBoolean();
mShouldShowIcon = in.readBoolean();
}
public RemoteAction(@NonNull Icon icon, @NonNull CharSequence title,
@NonNull CharSequence contentDescription, @NonNull PendingIntent intent) {
if (icon == null || title == null || contentDescription == null || intent == null) {
throw new IllegalArgumentException("Expected icon, title, content description and " +
"action callback");
}
mIcon = icon;
mTitle = title;
mContentDescription = contentDescription;
mActionIntent = intent;
mEnabled = true;
mShouldShowIcon = true;
}
/**
* Sets whether this action is enabled.
*/
public void setEnabled(boolean enabled) {
mEnabled = enabled;
}
/**
* Return whether this action is enabled.
*/
public boolean isEnabled() {
return mEnabled;
}
/**
* Sets whether the icon should be shown.
*/
public void setShouldShowIcon(boolean shouldShowIcon) {
mShouldShowIcon = shouldShowIcon;
}
/**
* Return whether the icon should be shown.
*/
public boolean shouldShowIcon() {
return mShouldShowIcon;
}
/**
* Return an icon representing the action.
*/
public @NonNull Icon getIcon() {
return mIcon;
}
/**
* Return an title representing the action.
*/
public @NonNull CharSequence getTitle() {
return mTitle;
}
/**
* Return a content description representing the action.
*/
public @NonNull CharSequence getContentDescription() {
return mContentDescription;
}
/**
* Return the action intent.
*/
public @NonNull PendingIntent getActionIntent() {
return mActionIntent;
}
@Override
public RemoteAction clone() {
RemoteAction action = new RemoteAction(mIcon, mTitle, mContentDescription, mActionIntent);
action.setEnabled(mEnabled);
action.setShouldShowIcon(mShouldShowIcon);
return action;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
mIcon.writeToParcel(out, 0);
TextUtils.writeToParcel(mTitle, out, flags);
TextUtils.writeToParcel(mContentDescription, out, flags);
mActionIntent.writeToParcel(out, flags);
out.writeBoolean(mEnabled);
out.writeBoolean(mShouldShowIcon);
}
public void dump(String prefix, PrintWriter pw) {
pw.print(prefix);
pw.print("title=" + mTitle);
pw.print(" enabled=" + mEnabled);
pw.print(" contentDescription=" + mContentDescription);
pw.print(" icon=" + mIcon);
pw.print(" action=" + mActionIntent.getIntent());
pw.print(" shouldShowIcon=" + mShouldShowIcon);
pw.println();
}
public static final @android.annotation.NonNull Parcelable.Creator<RemoteAction> CREATOR =
new Parcelable.Creator<RemoteAction>() {
public RemoteAction createFromParcel(Parcel in) {
return new RemoteAction(in);
}
public RemoteAction[] newArray(int size) {
return new RemoteAction[size];
}
};
}