content: /*
   * 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.service.notification;
  
  import android.annotation.SystemApi;
  import android.annotation.TestApi;
  import android.os.Parcel;
  import android.os.Parcelable;
  
  /**
   * Represents an option to be shown to users for snoozing a notification until a given context
   * instead of for a fixed amount of time.
   * @hide
   */
  @SystemApi
  @TestApi
  public final class SnoozeCriterion implements Parcelable {
      private final String mId;
      private final CharSequence mExplanation;
      private final CharSequence mConfirmation;
  
      public SnoozeCriterion(String id, CharSequence explanation, CharSequence confirmation) {
          mId = id;
          mExplanation = explanation;
          mConfirmation = confirmation;
      }
  
      protected SnoozeCriterion(Parcel in) {
          if (in.readByte() != 0) {
              mId = in.readString();
          } else {
              mId = null;
          }
          if (in.readByte() != 0) {
              mExplanation = in.readCharSequence();
          } else {
              mExplanation = null;
          }
          if (in.readByte() != 0) {
              mConfirmation = in.readCharSequence();
          } else {
              mConfirmation = null;
          }
      }
  
      /**
       * Returns the id of this criterion.
       */
      public String getId() {
          return mId;
      }
  
      /**
       * Returns the user visible explanation of how long a notification will be snoozed if
       * this criterion is chosen.
       */
      public CharSequence getExplanation() {
          return mExplanation;
      }
  
      /**
       * Returns the user visible confirmation message shown when this criterion is chosen.
       */
      public CharSequence getConfirmation() {
          return mConfirmation;
      }
  
      public static final @android.annotation.NonNull Creator<SnoozeCriterion> CREATOR = new Creator<SnoozeCriterion>() {
          @Override
          public SnoozeCriterion createFromParcel(Parcel in) {
              return new SnoozeCriterion(in);
          }
  
          @Override
          public SnoozeCriterion[] newArray(int size) {
              return new SnoozeCriterion[size];
          }
      };
  
      @Override
      public int describeContents() {
          return 0;
      }
  
      @Override
      public void writeToParcel(Parcel dest, int flags) {
          if (mId != null) {
              dest.writeByte((byte) 1);
              dest.writeString(mId);
          } else {
              dest.writeByte((byte) 0);
          }
          if (mExplanation != null) {
              dest.writeByte((byte) 1);
              dest.writeCharSequence(mExplanation);
          } else {
              dest.writeByte((byte) 0);
          }
          if (mConfirmation != null) {
              dest.writeByte((byte) 1);
              dest.writeCharSequence(mConfirmation);
          } else {
              dest.writeByte((byte) 0);
          }
      }
  
      @Override
      public boolean equals(Object o) {
          if (this == o) return true;
          if (o == null || getClass() != o.getClass()) return false;
  
          SnoozeCriterion that = (SnoozeCriterion) o;
  
          if (mId != null ? !mId.equals(that.mId) : that.mId != null) return false;
          if (mExplanation != null ? !mExplanation.equals(that.mExplanation)
                  : that.mExplanation != null) {
              return false;
          }
          return mConfirmation != null ? mConfirmation.equals(that.mConfirmation)
                  : that.mConfirmation == null;
  
      }
  
      @Override
      public int hashCode() {
          int result = mId != null ? mId.hashCode() : 0;
          result = 31 * result + (mExplanation != null ? mExplanation.hashCode() : 0);
          result = 31 * result + (mConfirmation != null ? mConfirmation.hashCode() : 0);
          return result;
      }
  }
  