NotificationChannel.java revision 59e152e92e6ebb71bab974973ce29b4f8d11f7cf
185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds/*
285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * Copyright (C) 2016 The Android Open Source Project
385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds *
485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * Licensed under the Apache License, Version 2.0 (the "License");
585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * you may not use this file except in compliance with the License.
685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * You may obtain a copy of the License at
785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds *
885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds *      http://www.apache.org/licenses/LICENSE-2.0
985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds *
1085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * Unless required by applicable law or agreed to in writing, software
1185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * distributed under the License is distributed on an "AS IS" BASIS,
1285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * See the License for the specific language governing permissions and
1485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * limitations under the License.
1585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds */
16b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldspackage android.app;
17b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
18b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport org.json.JSONException;
19b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport org.json.JSONObject;
20b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport org.xmlpull.v1.XmlPullParser;
21b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport org.xmlpull.v1.XmlSerializer;
22b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
23b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.annotation.SystemApi;
2459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynoldsimport android.app.NotificationManager;
25b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.net.Uri;
26b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.os.Parcel;
27b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.os.Parcelable;
28b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.service.notification.NotificationListenerService;
29b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.text.TextUtils;
30b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
31b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport java.io.IOException;
32f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynoldsimport java.util.Arrays;
33b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
34b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds/**
35b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * A representation of settings that apply to a collection of similarly themed notifications.
36b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */
37b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldspublic final class NotificationChannel implements Parcelable {
38b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
39b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
40b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * The id of the default channel for an app. All notifications posted without a notification
41b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * channel specified are posted to this channel.
42b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
43b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
44b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
45b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String TAG_CHANNEL = "channel";
46b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_NAME = "name";
47b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_ID = "id";
484036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    private static final String ATT_DELETED = "deleted";
49b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_PRIORITY = "priority";
50b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_VISIBILITY = "visibility";
51b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_IMPORTANCE = "importance";
52b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_LIGHTS = "lights";
5359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    //TODO: add support for light colors
5459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    private static final String ATT_LIGHT_COLOR = "light_color";
55b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_VIBRATION = "vibration";
56f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private static final String ATT_VIBRATION_ENABLED = "vibration_enabled";
570c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    private static final String ATT_SOUND = "sound";
580c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    //TODO: add audio attributes support
590c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    private static final String ATT_AUDIO_ATTRIBUTES = "audio_attributes";
60baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    private static final String ATT_SHOW_BADGE = "show_badge";
6185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    private static final String ATT_USER_LOCKED = "locked";
6259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    private static final String ATT_GROUP = "group";
63f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private static final String DELIMITER = ",";
6485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
6585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
6685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
6785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
6885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @SystemApi
6985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_PRIORITY = 0x00000001;
7085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
7185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
7285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
7385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @SystemApi
7485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_VISIBILITY = 0x00000002;
7585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
7685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
7785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
7885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @SystemApi
7985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_IMPORTANCE = 0x00000004;
8085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
8185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
8285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
8385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @SystemApi
8485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_LIGHTS = 0x00000008;
8585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
8685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
8785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
8885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @SystemApi
8985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_VIBRATION = 0x00000010;
9085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
9185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
9285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
9385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @SystemApi
940c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    public static final int USER_LOCKED_SOUND = 0x00000020;
95b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
96baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    /**
97baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * @hide
98baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     */
99baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    @SystemApi
100baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    public static final int USER_LOCKED_ALLOWED = 0x00000040;
101baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
102baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    /**
103baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * @hide
104baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     */
105baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    @SystemApi
106baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    public static final int USER_LOCKED_SHOW_BADGE = 0x00000080;
107baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
108baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    /**
109baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * @hide
110baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     */
111baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    @SystemApi
112baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    public static final int[] LOCKABLE_FIELDS = new int[] {
113baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_PRIORITY,
114baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_VISIBILITY,
115baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_IMPORTANCE,
116baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_LIGHTS,
117baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_VIBRATION,
118baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_SOUND,
119baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_ALLOWED,
120baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_SHOW_BADGE
121baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    };
122baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
123baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
124b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final int DEFAULT_VISIBILITY =
12585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds            NotificationManager.VISIBILITY_NO_OVERRIDE;
126b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final int DEFAULT_IMPORTANCE =
12785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds            NotificationManager.IMPORTANCE_UNSPECIFIED;
1284036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    private static final boolean DEFAULT_DELETED = false;
129924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds    private static final boolean DEFAULT_SHOW_BADGE = true;
130b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
131b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private final String mId;
132b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private CharSequence mName;
133b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private int mImportance = DEFAULT_IMPORTANCE;
134b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private boolean mBypassDnd;
135b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private int mLockscreenVisibility = DEFAULT_VISIBILITY;
1360c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    private Uri mSound;
137b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private boolean mLights;
138f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private long[] mVibration;
13985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    private int mUserLockedFields;
140f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private boolean mVibrationEnabled;
141924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds    private boolean mShowBadge = DEFAULT_SHOW_BADGE;
1424036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    private boolean mDeleted = DEFAULT_DELETED;
14359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    private String mGroup;
144b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
145b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
146b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Creates a notification channel.
147b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     *
148b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @param id The id of the channel. Must be unique per package.
149b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @param name The user visible name of the channel.
15085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @param importance The importance of the channel. This controls how interruptive notifications
15185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     *                   posted to this channel are. See e.g.
15285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     *                   {@link NotificationManager#IMPORTANCE_DEFAULT}.
153b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
15485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public NotificationChannel(String id, CharSequence name, int importance) {
155b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        this.mId = id;
156b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        this.mName = name;
15785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        this.mImportance = importance;
158b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
159b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
160b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    protected NotificationChannel(Parcel in) {
161b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (in.readByte() != 0) {
162b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            mId = in.readString();
163b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } else {
164b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            mId = null;
165b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
166b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        mName = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
167b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        mImportance = in.readInt();
168b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        mBypassDnd = in.readByte() != 0;
169b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        mLockscreenVisibility = in.readInt();
170b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (in.readByte() != 0) {
1710c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            mSound = Uri.CREATOR.createFromParcel(in);
172b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } else {
1730c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            mSound = null;
174b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
175b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        mLights = in.readByte() != 0;
176f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        mVibration = in.createLongArray();
17785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        mUserLockedFields = in.readInt();
178f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        mVibrationEnabled = in.readByte() != 0;
179baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        mShowBadge = in.readByte() != 0;
1804036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        mDeleted = in.readByte() != 0;
18159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (in.readByte() != 0) {
18259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            mGroup = in.readString();
18359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        } else {
18459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            mGroup = null;
18559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
186b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
187b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
188b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @Override
189b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public void writeToParcel(Parcel dest, int flags) {
190b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (mId != null) {
191b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeByte((byte) 1);
192b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeString(mId);
193b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } else {
194b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeByte((byte) 0);
195b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
196b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        TextUtils.writeToParcel(mName, dest, flags);
197b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        dest.writeInt(mImportance);
198b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        dest.writeByte(mBypassDnd ? (byte) 1 : (byte) 0);
199b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        dest.writeInt(mLockscreenVisibility);
2000c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        if (mSound != null) {
201b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeByte((byte) 1);
2020c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            mSound.writeToParcel(dest, 0);
203b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } else {
204b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeByte((byte) 0);
205b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
206b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        dest.writeByte(mLights ? (byte) 1 : (byte) 0);
207f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        dest.writeLongArray(mVibration);
20885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        dest.writeInt(mUserLockedFields);
209f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        dest.writeByte(mVibrationEnabled ? (byte) 1 : (byte) 0);
210baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        dest.writeByte(mShowBadge ? (byte) 1 : (byte) 0);
2114036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        dest.writeByte(mDeleted ? (byte) 1 : (byte) 0);
21259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (mGroup != null) {
21359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            dest.writeByte((byte) 1);
21459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            dest.writeString(mGroup);
21559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        } else {
21659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            dest.writeByte((byte) 0);
21759e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
218b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
219b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
220b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
221b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @hide
222b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
223b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @SystemApi
22485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public void lockFields(int field) {
22585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        mUserLockedFields |= field;
226b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
227b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
2284036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    /**
2294036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds     * @hide
2304036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds     */
2314036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    @SystemApi
2324036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    public void setDeleted(boolean deleted) {
2334036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        mDeleted = deleted;
2344036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    }
2354036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds
23685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    // Modifiable by a notification ranker.
237b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
238b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
239baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * Sets whether or not notifications posted to this channel can interrupt the user in
24085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * {@link android.app.NotificationManager.Policy#INTERRUPTION_FILTER_PRIORITY} mode.
241baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     *
242baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * Only modifiable by the system and notification ranker.
243b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
244b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public void setBypassDnd(boolean bypassDnd) {
245b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        this.mBypassDnd = bypassDnd;
246b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
247b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
248b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
249baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * Sets whether notifications posted to this channel appear on the lockscreen or not, and if so,
250baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * whether they appear in a redacted form. See e.g. {@link Notification#VISIBILITY_SECRET}.
25185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     *
252baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * Only modifiable by the system and notification ranker.
253b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
254b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public void setLockscreenVisibility(int lockscreenVisibility) {
255b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        this.mLockscreenVisibility = lockscreenVisibility;
256b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
257b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
25885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
25985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * Sets the level of interruption of this notification channel.
26085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     *
261baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * Only modifiable by the system and notification ranker.
262baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     *
26385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @param importance the amount the user should be interrupted by notifications from this
26485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     *                   channel. See e.g.
26585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     *                   {@link android.app.NotificationManager#IMPORTANCE_DEFAULT}.
26685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
26785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public void setImportance(int importance) {
26885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        this.mImportance = importance;
26985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    }
27085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
2718f488d3f2f754bc6e8f4e87f40031a3f6a0b00dbJulia Reynolds    // Modifiable by apps on channel creation.
272b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
273b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
27459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * Sets what group this channel belongs to.
27559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     *
27659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * Group information is only used for presentation, not for behavior.
27759e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     *
27859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * @param groupId the id of a group created by
27959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * {@link NotificationManager#createNotificationChannelGroup(NotificationChannelGroup)}.
28059e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     */
28159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    public void setGroup(String groupId) {
28259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        this.mGroup = groupId;
28359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    }
28459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds
28559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    /**
286f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     * Sets whether notifications posted to this channel can appear as application icon badges
287f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     * in a Launcher.
288f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     *
289f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     * @param showBadge true if badges should be allowed to be shown.
290f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     */
291f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds    public void setShowBadge(boolean showBadge) {
292f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds        this.mShowBadge = showBadge;
293f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds    }
294f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds
295f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds    /**
2960c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds     * Sets the sound that should be played for notifications posted to this channel if
2970c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds     * the notifications don't supply a sound. Only modifiable before the channel is submitted
29885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * to the NotificationManager.
299b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
3000c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    public void setSound(Uri sound) {
3010c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        this.mSound = sound;
302b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
303b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
304b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
305b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Sets whether notifications posted to this channel should display notification lights,
30685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * on devices that support that feature. Only modifiable before the channel is submitted to
30785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * the NotificationManager.
308b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
309b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public void setLights(boolean lights) {
310b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        this.mLights = lights;
311b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
312b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
313b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
314f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * Sets whether notification posted to this channel should vibrate. The vibration pattern can
315f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * be set with {@link #setVibrationPattern(long[])}. Only modifiable before the channel is
316f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * submitted to the NotificationManager.
317f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     */
318f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    public void enableVibration(boolean vibration) {
319f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        this.mVibrationEnabled = vibration;
320f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    }
321f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds
322f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    /**
323f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * Sets whether notification posted to this channel should vibrate. Only modifiable before the
324f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * channel is submitted to the NotificationManager.
325b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
326f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    public void setVibrationPattern(long[] vibrationPattern) {
327f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        this.mVibration = vibrationPattern;
328b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
329b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
330b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
331b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns the id of this channel.
332b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
333b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public String getId() {
334b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mId;
335b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
336b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
337b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
338b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns the user visible name of this channel.
339b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
340b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public CharSequence getName() {
341b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mName;
342b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
343b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
344b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
345b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns the user specified importance {e.g. @link NotificationManager#IMPORTANCE_LOW} for
346b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * notifications posted to this channel.
347b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
348b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public int getImportance() {
349b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mImportance;
350b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
351b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
352b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
353b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Whether or not notifications posted to this channel can bypass the Do Not Disturb
354b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * {@link NotificationManager#INTERRUPTION_FILTER_PRIORITY} mode.
355b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
356b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public boolean canBypassDnd() {
357b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mBypassDnd;
358b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
359b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
360b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
361b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns the notification sound for this channel.
362b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
3630c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    public Uri getSound() {
3640c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        return mSound;
365b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
366b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
367b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
368b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns whether notifications posted to this channel trigger notification lights.
369b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
370b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public boolean shouldShowLights() {
371b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mLights;
372b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
373b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
374b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
375b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns whether notifications posted to this channel always vibrate.
376b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
377b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public boolean shouldVibrate() {
378f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        return mVibrationEnabled;
379f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    }
380f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds
381f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    /**
382f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * Returns the vibration pattern for notifications posted to this channel. Will be ignored if
383f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * vibration is not enabled ({@link #shouldVibrate()}.
384f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     */
385f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    public long[] getVibrationPattern() {
386b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mVibration;
387b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
388b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
389b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
39085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * Returns whether or not notifications posted to this channel are shown on the lockscreen in
39185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * full or redacted form.
392b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
393b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public int getLockscreenVisibility() {
394b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mLockscreenVisibility;
395b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
396b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
397b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
398baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * Returns whether notifications posted to this channel can appear as badges in a Launcher
399baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * application.
400924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds     *
401924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds     * Note that badging may be disabled for other reasons.
402baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     */
403baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    public boolean canShowBadge() {
404baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        return mShowBadge;
405baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    }
406baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
407baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    /**
40859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * Returns what group this channel belongs to.
40959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     *
41059e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * This is used only for visually grouping channels in the UI.
41159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     */
41259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    public String getGroup() {
41359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        return mGroup;
41459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    }
41559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds
41659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    /**
4174036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds     * @hide
418baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     */
4194036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    @SystemApi
4204036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    public boolean isDeleted() {
4214036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        return mDeleted;
422baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    }
423baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
424baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    /**
425b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @hide
426b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
427b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @SystemApi
42885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public int getUserLockedFields() {
42985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        return mUserLockedFields;
43085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    }
43185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
43285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
43385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
43485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
43585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @SystemApi
436b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public void populateFromXml(XmlPullParser parser) {
43785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        // Name, id, and importance are set in the constructor.
438b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        setBypassDnd(Notification.PRIORITY_DEFAULT
439b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                != safeInt(parser, ATT_PRIORITY, Notification.PRIORITY_DEFAULT));
440b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        setLockscreenVisibility(safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY));
4410c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        setSound(safeUri(parser, ATT_SOUND));
442b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        setLights(safeBool(parser, ATT_LIGHTS, false));
443f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        enableVibration(safeBool(parser, ATT_VIBRATION_ENABLED, false));
444f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        setVibrationPattern(safeLongArray(parser, ATT_VIBRATION, null));
445baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        setShowBadge(safeBool(parser, ATT_SHOW_BADGE, false));
4464036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        setDeleted(safeBool(parser, ATT_DELETED, false));
44759e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        setGroup(parser.getAttributeValue(null, ATT_GROUP));
44885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        lockFields(safeInt(parser, ATT_USER_LOCKED, 0));
449b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
450b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
451b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
452b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @hide
453b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
454b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @SystemApi
455b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public void writeXml(XmlSerializer out) throws IOException {
456b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        out.startTag(null, TAG_CHANNEL);
457b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        out.attribute(null, ATT_ID, getId());
458b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        out.attribute(null, ATT_NAME, getName().toString());
459b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (getImportance() != DEFAULT_IMPORTANCE) {
460b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            out.attribute(
461b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                    null, ATT_IMPORTANCE, Integer.toString(getImportance()));
462b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
463b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (canBypassDnd()) {
464b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            out.attribute(
465b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                    null, ATT_PRIORITY, Integer.toString(Notification.PRIORITY_MAX));
466b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
467b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (getLockscreenVisibility() != DEFAULT_VISIBILITY) {
468b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            out.attribute(null, ATT_VISIBILITY,
469b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                    Integer.toString(getLockscreenVisibility()));
470b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
4710c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        if (getSound() != null) {
4720c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            out.attribute(null, ATT_SOUND, getSound().toString());
473b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
474b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (shouldShowLights()) {
475b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            out.attribute(null, ATT_LIGHTS, Boolean.toString(shouldShowLights()));
476b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
477b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (shouldVibrate()) {
478f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            out.attribute(null, ATT_VIBRATION_ENABLED, Boolean.toString(shouldVibrate()));
479f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        }
480f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        if (getVibrationPattern() != null) {
481f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            out.attribute(null, ATT_VIBRATION, longArrayToString(getVibrationPattern()));
482b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
48385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        if (getUserLockedFields() != 0) {
48485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds            out.attribute(null, ATT_USER_LOCKED, Integer.toString(getUserLockedFields()));
48585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        }
486baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        if (canShowBadge()) {
487baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            out.attribute(null, ATT_SHOW_BADGE, Boolean.toString(canShowBadge()));
488baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        }
4894036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        if (isDeleted()) {
4904036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds            out.attribute(null, ATT_DELETED, Boolean.toString(isDeleted()));
4914036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        }
49259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getGroup() != null) {
49359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            out.attribute(null, ATT_GROUP, getGroup());
49459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
49585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
496b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        out.endTag(null, TAG_CHANNEL);
497b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
498b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
499b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
500b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @hide
501b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
502b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @SystemApi
503b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public JSONObject toJson() throws JSONException {
504b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        JSONObject record = new JSONObject();
505b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        record.put(ATT_ID, getId());
506b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        record.put(ATT_NAME, getName());
507b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (getImportance() != DEFAULT_IMPORTANCE) {
508b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            record.put(ATT_IMPORTANCE,
509b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                    NotificationListenerService.Ranking.importanceToString(getImportance()));
510b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
511b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (canBypassDnd()) {
512b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            record.put(ATT_PRIORITY, Notification.PRIORITY_MAX);
513b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
514b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (getLockscreenVisibility() != DEFAULT_VISIBILITY) {
515b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            record.put(ATT_VISIBILITY, Notification.visibilityToString(getLockscreenVisibility()));
516b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
5170c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        if (getSound() != null) {
5180c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            record.put(ATT_SOUND, getSound().toString());
519b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
520b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        record.put(ATT_LIGHTS, Boolean.toString(shouldShowLights()));
521f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        record.put(ATT_VIBRATION_ENABLED, Boolean.toString(shouldVibrate()));
52285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        record.put(ATT_USER_LOCKED, Integer.toString(getUserLockedFields()));
523f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        record.put(ATT_VIBRATION, longArrayToString(getVibrationPattern()));
524baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        record.put(ATT_SHOW_BADGE, Boolean.toString(canShowBadge()));
5254036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        record.put(ATT_DELETED, Boolean.toString(isDeleted()));
52659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        record.put(ATT_GROUP, getGroup());
527b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return record;
528b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
529b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
530b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static Uri safeUri(XmlPullParser parser, String att) {
531b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        final String val = parser.getAttributeValue(null, att);
532b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return val == null ? null : Uri.parse(val);
533b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
534b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
535b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static int safeInt(XmlPullParser parser, String att, int defValue) {
536b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        final String val = parser.getAttributeValue(null, att);
537b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return tryParseInt(val, defValue);
538b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
539b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
540b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static int tryParseInt(String value, int defValue) {
541b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (TextUtils.isEmpty(value)) return defValue;
542b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        try {
543b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            return Integer.parseInt(value);
544b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } catch (NumberFormatException e) {
545b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            return defValue;
546b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
547b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
548b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
549b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static boolean safeBool(XmlPullParser parser, String att, boolean defValue) {
550b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        final String value = parser.getAttributeValue(null, att);
551b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (TextUtils.isEmpty(value)) return defValue;
552b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return Boolean.parseBoolean(value);
553b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
554b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
555f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private static long[] safeLongArray(XmlPullParser parser, String att, long[] defValue) {
556f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        final String attributeValue = parser.getAttributeValue(null, att);
557f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        if (TextUtils.isEmpty(attributeValue)) return defValue;
558f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        String[] values = attributeValue.split(DELIMITER);
559f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        long[] longValues = new long[values.length];
560f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        for (int i = 0; i < values.length; i++) {
561f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            try {
562f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds                longValues[i] = Long.parseLong(values[i]);
563f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            } catch (NumberFormatException e) {
564f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds                longValues[i] = 0;
565f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            }
566f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        }
567f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        return longValues;
568f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    }
569f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds
570f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private static String longArrayToString(long[] values) {
571f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        StringBuffer sb = new StringBuffer();
57259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (values != null) {
57359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            for (int i = 0; i < values.length - 1; i++) {
57459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds                sb.append(values[i]).append(DELIMITER);
57559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            }
57659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            sb.append(values[values.length - 1]);
577f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        }
578f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        return sb.toString();
579f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    }
580f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds
581b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public static final Creator<NotificationChannel> CREATOR = new Creator<NotificationChannel>() {
582b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        @Override
583b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        public NotificationChannel createFromParcel(Parcel in) {
584b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            return new NotificationChannel(in);
585b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
586b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
587b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        @Override
588b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        public NotificationChannel[] newArray(int size) {
589b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            return new NotificationChannel[size];
590b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
591b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    };
592b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
593b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @Override
594b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public int describeContents() {
595b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return 0;
596b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
597b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
598b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @Override
599b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public boolean equals(Object o) {
600b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (this == o) return true;
601b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (o == null || getClass() != o.getClass()) return false;
602b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
603b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        NotificationChannel that = (NotificationChannel) o;
604b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
60559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getImportance() != that.getImportance()) return false;
606b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (mBypassDnd != that.mBypassDnd) return false;
60759e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getLockscreenVisibility() != that.getLockscreenVisibility()) return false;
608b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (mLights != that.mLights) return false;
60959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getUserLockedFields() != that.getUserLockedFields()) return false;
610f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        if (mVibrationEnabled != that.mVibrationEnabled) return false;
611baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        if (mShowBadge != that.mShowBadge) return false;
61259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (isDeleted() != that.isDeleted()) return false;
61359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getId() != null ? !getId().equals(that.getId()) : that.getId() != null) return false;
61459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null) {
61559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            return false;
61659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
61759e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getSound() != null ? !getSound().equals(that.getSound()) : that.getSound() != null) {
61859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            return false;
61959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
62059e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (!Arrays.equals(mVibration, that.mVibration)) return false;
62159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        return getGroup() != null ? getGroup().equals(that.getGroup()) : that.getGroup() == null;
62285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
62385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    }
62485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
62585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @Override
62685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public int hashCode() {
62759e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        int result = getId() != null ? getId().hashCode() : 0;
62859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + (getName() != null ? getName().hashCode() : 0);
62959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + getImportance();
63085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        result = 31 * result + (mBypassDnd ? 1 : 0);
63159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + getLockscreenVisibility();
63259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + (getSound() != null ? getSound().hashCode() : 0);
63385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        result = 31 * result + (mLights ? 1 : 0);
634f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        result = 31 * result + Arrays.hashCode(mVibration);
63559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + getUserLockedFields();
636f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        result = 31 * result + (mVibrationEnabled ? 1 : 0);
637baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        result = 31 * result + (mShowBadge ? 1 : 0);
63859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + (isDeleted() ? 1 : 0);
63959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + (getGroup() != null ? getGroup().hashCode() : 0);
64085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        return result;
641b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
642b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
643b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @Override
644b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public String toString() {
645b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return "NotificationChannel{" +
646b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                "mId='" + mId + '\'' +
647b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                ", mName=" + mName +
648b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                ", mImportance=" + mImportance +
649b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                ", mBypassDnd=" + mBypassDnd +
650b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                ", mLockscreenVisibility=" + mLockscreenVisibility +
6510c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds                ", mSound=" + mSound +
652b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                ", mLights=" + mLights +
653f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds                ", mVibration=" + Arrays.toString(mVibration) +
65485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds                ", mUserLockedFields=" + mUserLockedFields +
655f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds                ", mVibrationEnabled=" + mVibrationEnabled +
656baff400fa5a93d157934818982fcf534327f9830Julia Reynolds                ", mShowBadge=" + mShowBadge +
6574036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds                ", mDeleted=" + mDeleted +
65859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds                ", mGroup='" + mGroup + '\'' +
659b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                '}';
660b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
661b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds}
662