• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2015, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.app;
18 
19 import android.app.NotificationManager.InterruptionFilter;
20 import android.content.ComponentName;
21 import android.net.Uri;
22 import android.os.Parcel;
23 import android.os.Parcelable;
24 
25 import java.util.Objects;
26 
27 /**
28  * Rule instance information for zen mode.
29  */
30 public final class AutomaticZenRule implements Parcelable {
31 
32     private boolean enabled = false;
33     private String name;
34     private @InterruptionFilter int interruptionFilter;
35     private Uri conditionId;
36     private ComponentName owner;
37     private long creationTime;
38 
39     /**
40      * Creates an automatic zen rule.
41      *
42      * @param name The name of the rule.
43      * @param owner The Condition Provider service that owns this rule.
44      * @param conditionId A representation of the state that should cause the Condition Provider
45      *                    service to apply the given interruption filter.
46      * @param interruptionFilter The interruption filter defines which notifications are allowed to
47      *                           interrupt the user (e.g. via sound & vibration) while this rule
48      *                           is active.
49      * @param enabled Whether the rule is enabled.
50      */
AutomaticZenRule(String name, ComponentName owner, Uri conditionId, int interruptionFilter, boolean enabled)51     public AutomaticZenRule(String name, ComponentName owner, Uri conditionId,
52             int interruptionFilter, boolean enabled) {
53         this.name = name;
54         this.owner = owner;
55         this.conditionId = conditionId;
56         this.interruptionFilter = interruptionFilter;
57         this.enabled = enabled;
58     }
59 
60     /**
61      * @SystemApi
62      * @hide
63      */
AutomaticZenRule(String name, ComponentName owner, Uri conditionId, int interruptionFilter, boolean enabled, long creationTime)64     public AutomaticZenRule(String name, ComponentName owner, Uri conditionId,
65             int interruptionFilter, boolean enabled, long creationTime) {
66         this(name, owner, conditionId, interruptionFilter, enabled);
67         this.creationTime = creationTime;
68     }
69 
AutomaticZenRule(Parcel source)70     public AutomaticZenRule(Parcel source) {
71         enabled = source.readInt() == 1;
72         if (source.readInt() == 1) {
73             name = source.readString();
74         }
75         interruptionFilter = source.readInt();
76         conditionId = source.readParcelable(null);
77         owner = source.readParcelable(null);
78         creationTime = source.readLong();
79     }
80 
81     /**
82      * Returns the {@link ComponentName} of the condition provider service that owns this rule.
83      */
getOwner()84     public ComponentName getOwner() {
85         return owner;
86     }
87 
88     /**
89      * Returns the representation of the state that causes this rule to become active.
90      */
getConditionId()91     public Uri getConditionId() {
92         return conditionId;
93     }
94 
95     /**
96      * Returns the interruption filter that is applied when this rule is active.
97      */
getInterruptionFilter()98     public int getInterruptionFilter() {
99         return interruptionFilter;
100     }
101 
102     /**
103      * Returns the name of this rule.
104      */
getName()105     public String getName() {
106         return name;
107     }
108 
109     /**
110      * Returns whether this rule is enabled.
111      */
isEnabled()112     public boolean isEnabled() {
113         return enabled;
114     }
115 
116     /**
117      * Returns the time this rule was created, represented as milliseconds since the epoch.
118      */
getCreationTime()119     public long getCreationTime() {
120       return creationTime;
121     }
122 
123     /**
124      * Sets the representation of the state that causes this rule to become active.
125      */
setConditionId(Uri conditionId)126     public void setConditionId(Uri conditionId) {
127         this.conditionId = conditionId;
128     }
129 
130     /**
131      * Sets the interruption filter that is applied when this rule is active.
132      * @param interruptionFilter The do not disturb mode to enter when this rule is active.
133      */
setInterruptionFilter(@nterruptionFilter int interruptionFilter)134     public void setInterruptionFilter(@InterruptionFilter int interruptionFilter) {
135         this.interruptionFilter = interruptionFilter;
136     }
137 
138     /**
139      * Sets the name of this rule.
140      */
setName(String name)141     public void setName(String name) {
142         this.name = name;
143     }
144 
145     /**
146      * Enables this rule.
147      */
setEnabled(boolean enabled)148     public void setEnabled(boolean enabled) {
149         this.enabled = enabled;
150     }
151 
152     @Override
describeContents()153     public int describeContents() {
154         return 0;
155     }
156 
157     @Override
writeToParcel(Parcel dest, int flags)158     public void writeToParcel(Parcel dest, int flags) {
159         dest.writeInt(enabled ? 1 : 0);
160         if (name != null) {
161             dest.writeInt(1);
162             dest.writeString(name);
163         } else {
164             dest.writeInt(0);
165         }
166         dest.writeInt(interruptionFilter);
167         dest.writeParcelable(conditionId, 0);
168         dest.writeParcelable(owner, 0);
169         dest.writeLong(creationTime);
170     }
171 
172     @Override
toString()173     public String toString() {
174         return new StringBuilder(AutomaticZenRule.class.getSimpleName()).append('[')
175                 .append("enabled=").append(enabled)
176                 .append(",name=").append(name)
177                 .append(",interruptionFilter=").append(interruptionFilter)
178                 .append(",conditionId=").append(conditionId)
179                 .append(",owner=").append(owner)
180                 .append(",creationTime=").append(creationTime)
181                 .append(']').toString();
182     }
183 
184     @Override
equals(Object o)185     public boolean equals(Object o) {
186         if (!(o instanceof AutomaticZenRule)) return false;
187         if (o == this) return true;
188         final AutomaticZenRule other = (AutomaticZenRule) o;
189         return other.enabled == enabled
190                 && Objects.equals(other.name, name)
191                 && other.interruptionFilter == interruptionFilter
192                 && Objects.equals(other.conditionId, conditionId)
193                 && Objects.equals(other.owner, owner)
194                 && other.creationTime == creationTime;
195     }
196 
197     @Override
hashCode()198     public int hashCode() {
199         return Objects.hash(enabled, name, interruptionFilter, conditionId, owner, creationTime);
200     }
201 
202     public static final Parcelable.Creator<AutomaticZenRule> CREATOR
203             = new Parcelable.Creator<AutomaticZenRule>() {
204         @Override
205         public AutomaticZenRule createFromParcel(Parcel source) {
206             return new AutomaticZenRule(source);
207         }
208         @Override
209         public AutomaticZenRule[] newArray(int size) {
210             return new AutomaticZenRule[size];
211         }
212     };
213 }
214