/* * Copyright (C) 2022 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.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; import static java.util.Objects.requireNonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.app.PendingIntent; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import androidx.annotation.RequiresApi; import java.util.Objects; /** * A static, stateless entry in the Safety Center. * *

Static entries have no changing severity level or associated issues. They provide simple links * or actions for safety-related features via {@link #getPendingIntent()}. * * @hide */ @SystemApi @RequiresApi(TIRAMISU) public final class SafetyCenterStaticEntry implements Parcelable { @NonNull public static final Creator CREATOR = new Creator() { @Override public SafetyCenterStaticEntry createFromParcel(Parcel in) { CharSequence title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); return new SafetyCenterStaticEntry.Builder(title) .setSummary(TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in)) .setPendingIntent(in.readTypedObject(PendingIntent.CREATOR)) .build(); } @Override public SafetyCenterStaticEntry[] newArray(int size) { return new SafetyCenterStaticEntry[size]; } }; @NonNull private final CharSequence mTitle; @Nullable private final CharSequence mSummary; @Nullable private final PendingIntent mPendingIntent; private SafetyCenterStaticEntry( @NonNull CharSequence title, @Nullable CharSequence summary, @Nullable PendingIntent pendingIntent) { mTitle = title; mSummary = summary; mPendingIntent = pendingIntent; } /** Returns the title that describes this entry. */ @NonNull public CharSequence getTitle() { return mTitle; } /** * Returns the optional summary text that describes this entry if present, or {@code null} * otherwise. */ @Nullable public CharSequence getSummary() { return mSummary; } /** * Returns the optional {@link PendingIntent} to execute when this entry is selected if present, * or {@code null} otherwise. */ @Nullable public PendingIntent getPendingIntent() { return mPendingIntent; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof SafetyCenterStaticEntry)) return false; SafetyCenterStaticEntry that = (SafetyCenterStaticEntry) o; return TextUtils.equals(mTitle, that.mTitle) && TextUtils.equals(mSummary, that.mSummary) && Objects.equals(mPendingIntent, that.mPendingIntent); } @Override public int hashCode() { return Objects.hash(mTitle, mSummary, mPendingIntent); } @Override public String toString() { return "SafetyCenterStaticEntry{" + "mTitle=" + mTitle + ", mSummary=" + mSummary + ", mPendingIntent=" + mPendingIntent + '}'; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { TextUtils.writeToParcel(mTitle, dest, flags); TextUtils.writeToParcel(mSummary, dest, flags); dest.writeTypedObject(mPendingIntent, flags); } /** Builder class for {@link SafetyCenterStaticEntry}. */ public static final class Builder { @NonNull private CharSequence mTitle; @Nullable private CharSequence mSummary; @Nullable private PendingIntent mPendingIntent; /** * Creates a {@link Builder} for a {@link SafetyCenterEntry}. * * @param title a title that describes this static entry */ public Builder(@NonNull CharSequence title) { mTitle = requireNonNull(title); } /** * Creates a {@link Builder} with the values from the given {@link SafetyCenterStaticEntry}. */ public Builder(@NonNull SafetyCenterStaticEntry safetyCenterStaticEntry) { mTitle = safetyCenterStaticEntry.mTitle; mSummary = safetyCenterStaticEntry.mSummary; mPendingIntent = safetyCenterStaticEntry.mPendingIntent; } /** Sets the title for this entry. */ @NonNull public Builder setTitle(@NonNull CharSequence title) { mTitle = requireNonNull(title); return this; } /** Sets the optional summary text for this entry. */ @NonNull public Builder setSummary(@Nullable CharSequence summary) { mSummary = summary; return this; } /** Sets the optional {@link PendingIntent} to execute when this entry is selected. */ @NonNull public Builder setPendingIntent(@Nullable PendingIntent pendingIntent) { mPendingIntent = pendingIntent; return this; } /** Creates the {@link SafetyCenterStaticEntry} defined by this {@link Builder}. */ @NonNull public SafetyCenterStaticEntry build() { return new SafetyCenterStaticEntry(mTitle, mSummary, mPendingIntent); } } }