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
191d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynoldsimport android.annotation.IntDef;
20a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynoldsimport android.annotation.SystemApi;
211d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynoldsimport android.app.AutomaticZenRule;
22e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlockimport android.content.Context;
237340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockimport android.net.Uri;
247340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockimport android.os.Parcel;
257340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockimport android.os.Parcelable;
267340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
271d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynoldsimport java.lang.annotation.Retention;
281d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynoldsimport java.lang.annotation.RetentionPolicy;
297340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlockimport java.util.Objects;
307340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
317340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock/**
321d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds * The current condition of an {@link android.app.AutomaticZenRule}, provided by the
331d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds * {@link ConditionProviderService} that owns the rule. Used to tell the system to enter Do Not
341d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds * Disturb mode and request that the system exit Do Not Disturb mode.
357340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock */
36ad41a6f0def1dfef9fb5ad1a7bed355760eed6beJulia Reynoldspublic final class Condition implements Parcelable {
377340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
381d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
39e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    public static final String SCHEME = "condition";
40e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock
411d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    /** @hide */
421d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @IntDef({STATE_FALSE, STATE_TRUE, STATE_TRUE, STATE_ERROR})
431d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @Retention(RetentionPolicy.SOURCE)
441d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    public @interface State {}
451d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds
461d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    /**
471d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * Indicates that Do Not Disturb should be turned off. Note that all Conditions from all
481d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * {@link ConditionProviderService} providers must be off for Do Not Disturb to be turned off on
491d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * the device.
501d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     */
51e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    public static final int STATE_FALSE = 0;
521d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    /**
531d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * Indicates that Do Not Disturb should be turned on.
541d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     */
55e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    public static final int STATE_TRUE = 1;
561d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds
571d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
58e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    public static final int STATE_UNKNOWN = 2;
591d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
60e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    public static final int STATE_ERROR = 3;
61e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock
621d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
637340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public static final int FLAG_RELEVANT_NOW = 1 << 0;
641d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
657340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public static final int FLAG_RELEVANT_ALWAYS = 1 << 1;
667340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
67a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds    /**
681d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * The URI representing the rule being updated.
69a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds     * See {@link android.app.AutomaticZenRule#getConditionId()}.
70a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds     */
717340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public final Uri id;
72a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds
73a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds    /**
74a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds     * A summary of what the rule encoded in {@link #id} means when it is enabled. User visible
75a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds     * if the state of the condition is {@link #STATE_TRUE}.
76a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds     */
77ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock    public final String summary;
78a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds
791d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
80ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock    public final String line1;
811d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
82ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock    public final String line2;
83a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds
84a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds    /**
851d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * The state of this condition. {@link #STATE_TRUE} will enable Do Not Disturb mode.
861d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * {@link #STATE_FALSE} will turn Do Not Disturb off for this rule. Note that Do Not Disturb
871d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * might still be enabled globally if other conditions are in a {@link #STATE_TRUE} state.
88a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds     */
891d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @State
90ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock    public final int state;
91a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds
92a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds    @SystemApi
93ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock    public final int flags;
94a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds    @SystemApi
95a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds    public final int icon;
96a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds
971d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    /**
981d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * An object representing the current state of a {@link android.app.AutomaticZenRule}.
991d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * @param id the {@link android.app.AutomaticZenRule#getConditionId()} of the zen rule
1001d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     * @param summary a user visible description of the rule state.
1011d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds     */
1021d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    public Condition(Uri id, String summary, int state) {
1031d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds        this(id, summary, "", "", -1, state, FLAG_RELEVANT_ALWAYS);
104a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds    }
105ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock
106a62496d8f7cb9048331451af07466b1edc568c7dJulia Reynolds    @SystemApi
107ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock    public Condition(Uri id, String summary, String line1, String line2, int icon,
108ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock            int state, int flags) {
1097340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        if (id == null) throw new IllegalArgumentException("id is required");
110ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        if (summary == null) throw new IllegalArgumentException("summary is required");
111e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock        if (!isValidState(state)) throw new IllegalArgumentException("state is invalid: " + state);
1127340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        this.id = id;
113ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        this.summary = summary;
114ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        this.line1 = line1;
115ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        this.line2 = line2;
116ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        this.icon = icon;
1177340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        this.state = state;
1187340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        this.flags = flags;
1197340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    }
1207340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
1211d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    public Condition(Parcel source) {
122e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock        this((Uri)source.readParcelable(Condition.class.getClassLoader()),
123e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock                source.readString(),
124ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock                source.readString(),
125ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock                source.readString(),
126ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock                source.readInt(),
127e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock                source.readInt(),
128e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock                source.readInt());
129e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    }
130e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock
131e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    private static boolean isValidState(int state) {
132e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock        return state >= STATE_FALSE && state <= STATE_ERROR;
1337340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    }
1347340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
1357340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    @Override
1367340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public void writeToParcel(Parcel dest, int flags) {
1377340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        dest.writeParcelable(id, 0);
138ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        dest.writeString(summary);
139ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        dest.writeString(line1);
140ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        dest.writeString(line2);
141ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        dest.writeInt(icon);
142e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock        dest.writeInt(state);
1433b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock        dest.writeInt(this.flags);
1447340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    }
1457340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
1467340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    @Override
1477340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public String toString() {
1487340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        return new StringBuilder(Condition.class.getSimpleName()).append('[')
1497340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            .append("id=").append(id)
150ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock            .append(",summary=").append(summary)
151ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock            .append(",line1=").append(line1)
152ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock            .append(",line2=").append(line2)
153ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock            .append(",icon=").append(icon)
154e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock            .append(",state=").append(stateToString(state))
1557340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            .append(",flags=").append(flags)
1567340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            .append(']').toString();
1577340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    }
1587340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
1591d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
160e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    public static String stateToString(int state) {
161e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock        if (state == STATE_FALSE) return "STATE_FALSE";
162e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock        if (state == STATE_TRUE) return "STATE_TRUE";
163e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock        if (state == STATE_UNKNOWN) return "STATE_UNKNOWN";
164e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock        if (state == STATE_ERROR) return "STATE_ERROR";
165e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock        throw new IllegalArgumentException("state is invalid: " + state);
166e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    }
167e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock
1681d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
1693b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock    public static String relevanceToString(int flags) {
1703b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock        final boolean now = (flags & FLAG_RELEVANT_NOW) != 0;
1713b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock        final boolean always = (flags & FLAG_RELEVANT_ALWAYS) != 0;
1723b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock        if (!now && !always) return "NONE";
1733b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock        if (now && always) return "NOW, ALWAYS";
1743b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock        return now ? "NOW" : "ALWAYS";
1753b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock    }
1763b98b3f1f85aff0c84ebef4dd497c146d1b4d248John Spurlock
1777340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    @Override
1787340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public boolean equals(Object o) {
1797340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        if (!(o instanceof Condition)) return false;
1807340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        if (o == this) return true;
1817340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        final Condition other = (Condition) o;
1827340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        return Objects.equals(other.id, id)
183ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock                && Objects.equals(other.summary, summary)
184ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock                && Objects.equals(other.line1, line1)
185ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock                && Objects.equals(other.line2, line2)
186ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock                && other.icon == icon
1877340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock                && other.state == state
1887340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock                && other.flags == flags;
1897340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    }
1907340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
1917340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    @Override
1927340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public int hashCode() {
193ef5693bb73ab90cc30ec9b11ee78f4351a36719aJohn Spurlock        return Objects.hash(id, summary, line1, line2, icon, state, flags);
1947340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    }
1957340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
1967340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    @Override
1977340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public int describeContents() {
1987340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        return 0;
1997340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    }
2007340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
2011d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
2027340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public Condition copy() {
2037340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        final Parcel parcel = Parcel.obtain();
2047340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        try {
2057340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            writeToParcel(parcel, 0);
2067340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            parcel.setDataPosition(0);
2077340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            return new Condition(parcel);
2087340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        } finally {
2097340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            parcel.recycle();
2107340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        }
2117340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    }
2127340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
2131d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
214e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    public static Uri.Builder newId(Context context) {
2151d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds        return new Uri.Builder()
2161d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds                .scheme(Condition.SCHEME)
2171d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds                .authority(context.getPackageName());
218e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    }
219e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock
2201d6d16d6995099afa506ecac38019a5bb8eacd86Julia Reynolds    @SystemApi
221e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    public static boolean isValidId(Uri id, String pkg) {
2223e0770163686c1be83959d681976dafaf25272e1John Spurlock        return id != null && SCHEME.equals(id.getScheme()) && pkg.equals(id.getAuthority());
223e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock    }
224e77bb36d48b6b8b5c3bb6a1195aca469bb237919John Spurlock
2257340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    public static final Parcelable.Creator<Condition> CREATOR
2267340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            = new Parcelable.Creator<Condition>() {
2277340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        @Override
2287340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        public Condition createFromParcel(Parcel source) {
2297340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            return new Condition(source);
2307340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        }
2317340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock
2327340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        @Override
2337340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        public Condition[] newArray(int size) {
2347340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock            return new Condition[size];
2357340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock        }
2367340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock    };
2377340fc8665ae3f9f1978f42aa0e5e1da85036158John Spurlock}
238