Condition.java revision ef5693bb73ab90cc30ec9b11ee78f4351a36719a
17340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock/** 27340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * Copyright (c) 2014, The Android Open Source Project 37340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * 47340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 57340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * you may not use this file except in compliance with the License. 67340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * You may obtain a copy of the License at 77340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * 87340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * http://www.apache.org/licenses/LICENSE-2.0 97340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * 107340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * Unless required by applicable law or agreed to in writing, software 117340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 127340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * See the License for the specific language governing permissions and 147340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * limitations under the License. 157340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock */ 167340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 177340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockpackage android.service.notification; 187340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 19e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlockimport android.content.Context; 207340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockimport android.net.Uri; 217340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockimport android.os.Parcel; 227340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockimport android.os.Parcelable; 237340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 247340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockimport java.util.Objects; 257340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 267340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock/** 277340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * Condition information from condition providers. 287340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * 297340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock * @hide 307340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock */ 317340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockpublic class Condition implements Parcelable { 327340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 33e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock public static final String SCHEME = "condition"; 34e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock 35e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock public static final int STATE_FALSE = 0; 36e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock public static final int STATE_TRUE = 1; 37e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock public static final int STATE_UNKNOWN = 2; 38e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock public static final int STATE_ERROR = 3; 39e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock 407340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public static final int FLAG_RELEVANT_NOW = 1 << 0; 417340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public static final int FLAG_RELEVANT_ALWAYS = 1 << 1; 427340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 437340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public final Uri id; 44ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock public final String summary; 45ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock public final String line1; 46ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock public final String line2; 47ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock public final int icon; 48ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock public final int state; 49ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock public final int flags; 50ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock 51ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock public Condition(Uri id, String summary, String line1, String line2, int icon, 52ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock int state, int flags) { 537340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock if (id == null) throw new IllegalArgumentException("id is required"); 54ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock if (summary == null) throw new IllegalArgumentException("summary is required"); 55ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock if (line1 == null) throw new IllegalArgumentException("line1 is required"); 56ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock if (line2 == null) throw new IllegalArgumentException("line2 is required"); 57e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock if (!isValidState(state)) throw new IllegalArgumentException("state is invalid: " + state); 587340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock this.id = id; 59ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock this.summary = summary; 60ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock this.line1 = line1; 61ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock this.line2 = line2; 62ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock this.icon = icon; 637340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock this.state = state; 647340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock this.flags = flags; 657340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 667340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 677340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock private Condition(Parcel source) { 68e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock this((Uri)source.readParcelable(Condition.class.getClassLoader()), 69e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock source.readString(), 70ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock source.readString(), 71ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock source.readString(), 72ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock source.readInt(), 73e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock source.readInt(), 74e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock source.readInt()); 75e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock } 76e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock 77e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock private static boolean isValidState(int state) { 78e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock return state >= STATE_FALSE && state <= STATE_ERROR; 797340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 807340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 817340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock @Override 827340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public void writeToParcel(Parcel dest, int flags) { 837340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock dest.writeParcelable(id, 0); 84ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock dest.writeString(summary); 85ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock dest.writeString(line1); 86ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock dest.writeString(line2); 87ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock dest.writeInt(icon); 88e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock dest.writeInt(state); 893b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock dest.writeInt(this.flags); 907340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 917340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 927340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock @Override 937340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public String toString() { 947340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock return new StringBuilder(Condition.class.getSimpleName()).append('[') 957340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock .append("id=").append(id) 96ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock .append(",summary=").append(summary) 97ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock .append(",line1=").append(line1) 98ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock .append(",line2=").append(line2) 99ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock .append(",icon=").append(icon) 100e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock .append(",state=").append(stateToString(state)) 1017340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock .append(",flags=").append(flags) 1027340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock .append(']').toString(); 1037340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 1047340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 105e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock public static String stateToString(int state) { 106e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock if (state == STATE_FALSE) return "STATE_FALSE"; 107e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock if (state == STATE_TRUE) return "STATE_TRUE"; 108e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock if (state == STATE_UNKNOWN) return "STATE_UNKNOWN"; 109e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock if (state == STATE_ERROR) return "STATE_ERROR"; 110e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock throw new IllegalArgumentException("state is invalid: " + state); 111e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock } 112e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock 1133b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock public static String relevanceToString(int flags) { 1143b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock final boolean now = (flags & FLAG_RELEVANT_NOW) != 0; 1153b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock final boolean always = (flags & FLAG_RELEVANT_ALWAYS) != 0; 1163b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock if (!now && !always) return "NONE"; 1173b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock if (now && always) return "NOW, ALWAYS"; 1183b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock return now ? "NOW" : "ALWAYS"; 1193b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock } 1203b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock 1217340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock @Override 1227340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public boolean equals(Object o) { 1237340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock if (!(o instanceof Condition)) return false; 1247340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock if (o == this) return true; 1257340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock final Condition other = (Condition) o; 1267340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock return Objects.equals(other.id, id) 127ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock && Objects.equals(other.summary, summary) 128ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock && Objects.equals(other.line1, line1) 129ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock && Objects.equals(other.line2, line2) 130ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock && other.icon == icon 1317340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock && other.state == state 1327340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock && other.flags == flags; 1337340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 1347340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 1357340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock @Override 1367340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public int hashCode() { 137ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock return Objects.hash(id, summary, line1, line2, icon, state, flags); 1387340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 1397340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 1407340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock @Override 1417340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public int describeContents() { 1427340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock return 0; 1437340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 1447340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 1457340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public Condition copy() { 1467340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock final Parcel parcel = Parcel.obtain(); 1477340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock try { 1487340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock writeToParcel(parcel, 0); 1497340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock parcel.setDataPosition(0); 1507340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock return new Condition(parcel); 1517340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } finally { 1527340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock parcel.recycle(); 1537340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 1547340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 1557340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 156e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock public static Uri.Builder newId(Context context) { 157e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock return new Uri.Builder().scheme(SCHEME).authority(context.getPackageName()); 158e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock } 159e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock 160e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock public static boolean isValidId(Uri id, String pkg) { 161e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock return id != null && id.getScheme().equals(SCHEME) && id.getAuthority().equals(pkg); 162e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock } 163e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock 1647340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public static final Parcelable.Creator<Condition> CREATOR 1657340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock = new Parcelable.Creator<Condition>() { 1667340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock @Override 1677340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public Condition createFromParcel(Parcel source) { 1687340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock return new Condition(source); 1697340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 1707340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock 1717340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock @Override 1727340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock public Condition[] newArray(int size) { 1737340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock return new Condition[size]; 1747340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock } 1757340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock }; 1767340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock} 177