/** * Copyright (c) 2015, 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.annotation.Nullable; import android.app.NotificationManager.InterruptionFilter; import android.content.ComponentName; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; import android.service.notification.Condition; import android.service.notification.ZenPolicy; import java.util.Objects; /** * Rule instance information for zen mode. */ public final class AutomaticZenRule implements Parcelable { /* @hide */ private static final int ENABLED = 1; /* @hide */ private static final int DISABLED = 0; private boolean enabled = false; private String name; private @InterruptionFilter int interruptionFilter; private Uri conditionId; private ComponentName owner; private ComponentName configurationActivity; private long creationTime; private ZenPolicy mZenPolicy; private boolean mModified = false; private String mPkg; /** * Creates an automatic zen rule. * * @param name The name of the rule. * @param owner The Condition Provider service that owns this rule. * @param interruptionFilter The interruption filter defines which notifications are allowed to * interrupt the user (e.g. via sound & vibration) while this rule * is active. * @param enabled Whether the rule is enabled. * @deprecated use {@link #AutomaticZenRule(String, ComponentName, ComponentName, Uri, * ZenPolicy, int, boolean)}. */ @Deprecated public AutomaticZenRule(String name, ComponentName owner, Uri conditionId, int interruptionFilter, boolean enabled) { this(name, owner, null, conditionId, null, interruptionFilter, enabled); } /** * Creates an automatic zen rule. * * @param name The name of the rule. * @param owner The Condition Provider service that owns this rule. This can be null if you're * using {@link NotificationManager#setAutomaticZenRuleState(String, Condition)} * instead of {@link android.service.notification.ConditionProviderService}. * @param configurationActivity An activity that handles * {@link NotificationManager#ACTION_AUTOMATIC_ZEN_RULE} that shows * the user * more information about this rule and/or allows them to * configure it. This is required if you are not using a * {@link android.service.notification.ConditionProviderService}. * If you are, it overrides the information specified in your * manifest. * @param conditionId A representation of the state that should cause your app to apply the * given interruption filter. * @param interruptionFilter The interruption filter defines which notifications are allowed to * interrupt the user (e.g. via sound & vibration) while this rule * is active. * @param policy The policy defines which notifications are allowed to interrupt the user * while this rule is active. This overrides the global policy while this rule is * action ({@link Condition#STATE_TRUE}). * @param enabled Whether the rule is enabled. */ public AutomaticZenRule(@NonNull String name, @Nullable ComponentName owner, @Nullable ComponentName configurationActivity, @NonNull Uri conditionId, @Nullable ZenPolicy policy, int interruptionFilter, boolean enabled) { this.name = name; this.owner = owner; this.configurationActivity = configurationActivity; this.conditionId = conditionId; this.interruptionFilter = interruptionFilter; this.enabled = enabled; this.mZenPolicy = policy; } /** * @hide */ public AutomaticZenRule(String name, ComponentName owner, ComponentName configurationActivity, Uri conditionId, ZenPolicy policy, int interruptionFilter, boolean enabled, long creationTime) { this(name, owner, configurationActivity, conditionId, policy, interruptionFilter, enabled); this.creationTime = creationTime; } public AutomaticZenRule(Parcel source) { enabled = source.readInt() == ENABLED; if (source.readInt() == ENABLED) { name = source.readString(); } interruptionFilter = source.readInt(); conditionId = source.readParcelable(null); owner = source.readParcelable(null); configurationActivity = source.readParcelable(null); creationTime = source.readLong(); mZenPolicy = source.readParcelable(null); mModified = source.readInt() == ENABLED; mPkg = source.readString(); } /** * Returns the {@link ComponentName} of the condition provider service that owns this rule. */ public ComponentName getOwner() { return owner; } /** * Returns the {@link ComponentName} of the activity that shows configuration options * for this rule. */ public @Nullable ComponentName getConfigurationActivity() { return configurationActivity; } /** * Returns the representation of the state that causes this rule to become active. */ public Uri getConditionId() { return conditionId; } /** * Returns the interruption filter that is applied when this rule is active. */ public int getInterruptionFilter() { return interruptionFilter; } /** * Returns the name of this rule. */ public String getName() { return name; } /** * Returns whether this rule is enabled. */ public boolean isEnabled() { return enabled; } /** * Returns whether this rule's name has been modified by the user. * @hide */ public boolean isModified() { return mModified; } /** * Gets the zen policy. */ public ZenPolicy getZenPolicy() { return mZenPolicy == null ? null : this.mZenPolicy.copy(); } /** * Returns the time this rule was created, represented as milliseconds since the epoch. */ public long getCreationTime() { return creationTime; } /** * Sets the representation of the state that causes this rule to become active. */ public void setConditionId(Uri conditionId) { this.conditionId = conditionId; } /** * Sets the interruption filter that is applied when this rule is active. * @param interruptionFilter The do not disturb mode to enter when this rule is active. */ public void setInterruptionFilter(@InterruptionFilter int interruptionFilter) { this.interruptionFilter = interruptionFilter; } /** * Sets the name of this rule. */ public void setName(String name) { this.name = name; } /** * Enables this rule. */ public void setEnabled(boolean enabled) { this.enabled = enabled; } /** * Sets modified state of this rule. * @hide */ public void setModified(boolean modified) { this.mModified = modified; } /** * Sets the zen policy. */ public void setZenPolicy(ZenPolicy zenPolicy) { this.mZenPolicy = (zenPolicy == null ? null : zenPolicy.copy()); } /** * Sets the configuration activity - an activity that handles * {@link NotificationManager#ACTION_AUTOMATIC_ZEN_RULE} that shows the user more information * about this rule and/or allows them to configure it. This is required to be non-null for rules * that are not backed by {@link android.service.notification.ConditionProviderService}. */ public void setConfigurationActivity(@Nullable ComponentName componentName) { this.configurationActivity = componentName; } /** * @hide */ public void setPackageName(String pkgName) { mPkg = pkgName; } /** * @hide */ public String getPackageName() { return mPkg; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(enabled ? ENABLED : DISABLED); if (name != null) { dest.writeInt(1); dest.writeString(name); } else { dest.writeInt(0); } dest.writeInt(interruptionFilter); dest.writeParcelable(conditionId, 0); dest.writeParcelable(owner, 0); dest.writeParcelable(configurationActivity, 0); dest.writeLong(creationTime); dest.writeParcelable(mZenPolicy, 0); dest.writeInt(mModified ? ENABLED : DISABLED); dest.writeString(mPkg); } @Override public String toString() { return new StringBuilder(AutomaticZenRule.class.getSimpleName()).append('[') .append("enabled=").append(enabled) .append(",name=").append(name) .append(",interruptionFilter=").append(interruptionFilter) .append(",pkg=").append(mPkg) .append(",conditionId=").append(conditionId) .append(",owner=").append(owner) .append(",configActivity=").append(configurationActivity) .append(",creationTime=").append(creationTime) .append(",mZenPolicy=").append(mZenPolicy) .append(']').toString(); } @Override public boolean equals(@Nullable Object o) { if (!(o instanceof AutomaticZenRule)) return false; if (o == this) return true; final AutomaticZenRule other = (AutomaticZenRule) o; return other.enabled == enabled && other.mModified == mModified && Objects.equals(other.name, name) && other.interruptionFilter == interruptionFilter && Objects.equals(other.conditionId, conditionId) && Objects.equals(other.owner, owner) && Objects.equals(other.mZenPolicy, mZenPolicy) && Objects.equals(other.configurationActivity, configurationActivity) && Objects.equals(other.mPkg, mPkg) && other.creationTime == creationTime; } @Override public int hashCode() { return Objects.hash(enabled, name, interruptionFilter, conditionId, owner, configurationActivity, mZenPolicy, mModified, creationTime, mPkg); } public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public AutomaticZenRule createFromParcel(Parcel source) { return new AutomaticZenRule(source); } @Override public AutomaticZenRule[] newArray(int size) { return new AutomaticZenRule[size]; } }; }