|  | /* | 
|  | * 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; | 
|  | import java.util.Objects; | 
|  |  | 
|  | /** | 
|  | * 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 boolean equals(Object o) { | 
|  | if (this == o) return true; | 
|  | if (!(o instanceof RemoteAction)) return false; | 
|  | RemoteAction that = (RemoteAction) o; | 
|  | return mEnabled == that.mEnabled | 
|  | && mShouldShowIcon == that.mShouldShowIcon | 
|  | && mIcon.equals(that.mIcon) | 
|  | && mTitle.equals(that.mTitle) | 
|  | && mContentDescription.equals(that.mContentDescription) | 
|  | && mActionIntent.equals(that.mActionIntent); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public int hashCode() { | 
|  | return Objects.hash(mIcon, mTitle, mContentDescription, mActionIntent, mEnabled, | 
|  | mShouldShowIcon); | 
|  | } | 
|  |  | 
|  | @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]; | 
|  | } | 
|  | }; | 
|  | } |