NotificationChannel.java revision 62b4224757cf60fe57d8c9b0d43ab357f4df056d
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 android.annotation.SystemApi;
196503bd8e33dbf6e8357256d43c6e1158e32a0268Jeff Sharkeyimport android.app.NotificationManager.Importance;
201d97e6a0c1341e3a6d8547fa843cb60ce6677a11Julia Reynoldsimport android.content.Intent;
21619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynoldsimport android.media.AudioAttributes;
22b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.net.Uri;
23b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.os.Parcel;
24b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.os.Parcelable;
25184b86da382b8e24cdd0e5629e70d7057d418883Julia Reynoldsimport android.provider.Settings;
26b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.service.notification.NotificationListenerService;
27b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.text.TextUtils;
2862b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adamsimport android.util.proto.ProtoOutputStream;
29b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
300f17000fb3b417fbc6129b47385c5f3c3dfd2de5Julia Reynoldsimport org.json.JSONException;
310f17000fb3b417fbc6129b47385c5f3c3dfd2de5Julia Reynoldsimport org.json.JSONObject;
320f17000fb3b417fbc6129b47385c5f3c3dfd2de5Julia Reynoldsimport org.xmlpull.v1.XmlPullParser;
330f17000fb3b417fbc6129b47385c5f3c3dfd2de5Julia Reynoldsimport org.xmlpull.v1.XmlSerializer;
340f17000fb3b417fbc6129b47385c5f3c3dfd2de5Julia Reynolds
35b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport java.io.IOException;
36f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynoldsimport java.util.Arrays;
37b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
38b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds/**
39b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * A representation of settings that apply to a collection of similarly themed notifications.
40b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */
41b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldspublic final class NotificationChannel implements Parcelable {
42b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
43b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
44bad42976009ffb61010136ed8055f9e0f6d2e416Julia Reynolds     * The id of the default channel for an app. This id is reserved by the system. All
45bad42976009ffb61010136ed8055f9e0f6d2e416Julia Reynolds     * notifications posted from apps targeting {@link android.os.Build.VERSION_CODES#N_MR1} or
46bad42976009ffb61010136ed8055f9e0f6d2e416Julia Reynolds     * earlier without a notification channel specified are posted to this channel.
47b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
48b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
49b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
502c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    /**
512c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * The maximum length for text fields in a NotificationChannel. Fields will be truncated at this
522c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * limit.
532c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     */
542c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    private static final int MAX_TEXT_LENGTH = 1000;
552c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds
56b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String TAG_CHANNEL = "channel";
57b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_NAME = "name";
582c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    private static final String ATT_DESC = "desc";
59b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_ID = "id";
604036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    private static final String ATT_DELETED = "deleted";
61b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_PRIORITY = "priority";
62b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_VISIBILITY = "visibility";
63b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_IMPORTANCE = "importance";
64b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_LIGHTS = "lights";
6559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    private static final String ATT_LIGHT_COLOR = "light_color";
66b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final String ATT_VIBRATION = "vibration";
67f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private static final String ATT_VIBRATION_ENABLED = "vibration_enabled";
680c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    private static final String ATT_SOUND = "sound";
69619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    private static final String ATT_USAGE = "usage";
70619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    private static final String ATT_FLAGS = "flags";
71619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    private static final String ATT_CONTENT_TYPE = "content_type";
72baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    private static final String ATT_SHOW_BADGE = "show_badge";
7385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    private static final String ATT_USER_LOCKED = "locked";
7459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    private static final String ATT_GROUP = "group";
75f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds    private static final String ATT_BLOCKABLE_SYSTEM = "blockable_system";
76f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private static final String DELIMITER = ",";
7785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
7885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
7985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
8085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
8185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_PRIORITY = 0x00000001;
8285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
8385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
8485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
8585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_VISIBILITY = 0x00000002;
8685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
8785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
8885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
8985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_IMPORTANCE = 0x00000004;
9085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
9185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
9285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
9385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_LIGHTS = 0x00000008;
9485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
9585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
9685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
9785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public static final int USER_LOCKED_VIBRATION = 0x00000010;
9885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
9985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
10085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
1010c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    public static final int USER_LOCKED_SOUND = 0x00000020;
102b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
103baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    /**
104baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * @hide
105baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     */
106baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    public static final int USER_LOCKED_SHOW_BADGE = 0x00000080;
107baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
108baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    /**
109baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * @hide
110baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     */
111baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    public static final int[] LOCKABLE_FIELDS = new int[] {
112baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_PRIORITY,
113baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_VISIBILITY,
114baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_IMPORTANCE,
115baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_LIGHTS,
116baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_VIBRATION,
117baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            USER_LOCKED_SOUND,
118619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            USER_LOCKED_SHOW_BADGE,
119baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    };
120baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
121529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds    private static final int DEFAULT_LIGHT_COLOR = 0;
122b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final int DEFAULT_VISIBILITY =
12385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds            NotificationManager.VISIBILITY_NO_OVERRIDE;
124b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static final int DEFAULT_IMPORTANCE =
12585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds            NotificationManager.IMPORTANCE_UNSPECIFIED;
1264036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    private static final boolean DEFAULT_DELETED = false;
127924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds    private static final boolean DEFAULT_SHOW_BADGE = true;
128b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
129b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private final String mId;
1302c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    private String mName;
1312c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    private String mDesc;
132b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private int mImportance = DEFAULT_IMPORTANCE;
133b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private boolean mBypassDnd;
134b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private int mLockscreenVisibility = DEFAULT_VISIBILITY;
135184b86da382b8e24cdd0e5629e70d7057d418883Julia Reynolds    private Uri mSound = Settings.System.DEFAULT_NOTIFICATION_URI;
136b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private boolean mLights;
137529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds    private int mLightColor = DEFAULT_LIGHT_COLOR;
138f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private long[] mVibration;
13962b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams    // Bitwise representation of fields that have been changed by the user, preventing the app from
14062b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams    // making changes to these fields.
14185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    private int mUserLockedFields;
142f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private boolean mVibrationEnabled;
143924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds    private boolean mShowBadge = DEFAULT_SHOW_BADGE;
1444036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    private boolean mDeleted = DEFAULT_DELETED;
14559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    private String mGroup;
146619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    private AudioAttributes mAudioAttributes = Notification.AUDIO_ATTRIBUTES_DEFAULT;
14762b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams    // If this is a blockable system notification channel.
148f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds    private boolean mBlockableSystem = false;
149b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
150b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
151b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Creates a notification channel.
152b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     *
1532c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * @param id The id of the channel. Must be unique per package. The value may be truncated if
1542c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     *           it is too long.
1552c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * @param name The user visible name of the channel. You can rename this channel when the system
1561d97e6a0c1341e3a6d8547fa843cb60ce6677a11Julia Reynolds     *             locale changes by listening for the {@link Intent#ACTION_LOCALE_CHANGED}
1572c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     *             broadcast. The recommended maximum length is 40 characters; the value may be
1582c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     *             truncated if it is too long.
15985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @param importance The importance of the channel. This controls how interruptive notifications
16030e06bb668f2e4b024c4ebc2a131de91c96de5ebJeff Sharkey     *                   posted to this channel are.
161b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
16230e06bb668f2e4b024c4ebc2a131de91c96de5ebJeff Sharkey    public NotificationChannel(String id, CharSequence name, @Importance int importance) {
1632c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        this.mId = getTrimmedString(id);
1642c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        this.mName = name != null ? getTrimmedString(name.toString()) : null;
16585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        this.mImportance = importance;
166b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
167b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
168bad42976009ffb61010136ed8055f9e0f6d2e416Julia Reynolds    /**
169bad42976009ffb61010136ed8055f9e0f6d2e416Julia Reynolds     * @hide
170bad42976009ffb61010136ed8055f9e0f6d2e416Julia Reynolds     */
171b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    protected NotificationChannel(Parcel in) {
172b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (in.readByte() != 0) {
173b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            mId = in.readString();
174b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } else {
175b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            mId = null;
176b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
1772c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        if (in.readByte() != 0) {
1782c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            mName = in.readString();
1792c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        } else {
1802c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            mName = null;
1812c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        }
1822c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        if (in.readByte() != 0) {
1832c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            mDesc = in.readString();
1842c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        } else {
1852c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            mDesc = null;
1862c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        }
187b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        mImportance = in.readInt();
188b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        mBypassDnd = in.readByte() != 0;
189b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        mLockscreenVisibility = in.readInt();
190b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (in.readByte() != 0) {
1910c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            mSound = Uri.CREATOR.createFromParcel(in);
192b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } else {
1930c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            mSound = null;
194b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
195b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        mLights = in.readByte() != 0;
196f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        mVibration = in.createLongArray();
19785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        mUserLockedFields = in.readInt();
198f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        mVibrationEnabled = in.readByte() != 0;
199baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        mShowBadge = in.readByte() != 0;
2004036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        mDeleted = in.readByte() != 0;
20159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (in.readByte() != 0) {
20259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            mGroup = in.readString();
20359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        } else {
20459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            mGroup = null;
20559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
206619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        mAudioAttributes = in.readInt() > 0 ? AudioAttributes.CREATOR.createFromParcel(in) : null;
207529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        mLightColor = in.readInt();
208f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        mBlockableSystem = in.readBoolean();
209b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
210b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
211b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @Override
212b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public void writeToParcel(Parcel dest, int flags) {
213b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (mId != null) {
214b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeByte((byte) 1);
215b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeString(mId);
216b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } else {
217b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeByte((byte) 0);
218b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
2192c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        if (mName != null) {
2202c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            dest.writeByte((byte) 1);
2212c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            dest.writeString(mName);
2222c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        } else {
2232c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            dest.writeByte((byte) 0);
2242c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        }
2252c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        if (mDesc != null) {
2262c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            dest.writeByte((byte) 1);
2272c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            dest.writeString(mDesc);
2282c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        } else {
2292c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            dest.writeByte((byte) 0);
2302c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        }
231b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        dest.writeInt(mImportance);
232b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        dest.writeByte(mBypassDnd ? (byte) 1 : (byte) 0);
233b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        dest.writeInt(mLockscreenVisibility);
2340c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        if (mSound != null) {
235b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeByte((byte) 1);
2360c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            mSound.writeToParcel(dest, 0);
237b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } else {
238b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            dest.writeByte((byte) 0);
239b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
240b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        dest.writeByte(mLights ? (byte) 1 : (byte) 0);
241f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        dest.writeLongArray(mVibration);
24285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        dest.writeInt(mUserLockedFields);
243f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        dest.writeByte(mVibrationEnabled ? (byte) 1 : (byte) 0);
244baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        dest.writeByte(mShowBadge ? (byte) 1 : (byte) 0);
2454036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        dest.writeByte(mDeleted ? (byte) 1 : (byte) 0);
24659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (mGroup != null) {
24759e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            dest.writeByte((byte) 1);
24859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            dest.writeString(mGroup);
24959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        } else {
25059e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            dest.writeByte((byte) 0);
25159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
252619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        if (mAudioAttributes != null) {
253619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            dest.writeInt(1);
254619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            mAudioAttributes.writeToParcel(dest, 0);
255619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        } else {
256619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            dest.writeInt(0);
257619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        }
258529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        dest.writeInt(mLightColor);
259f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        dest.writeBoolean(mBlockableSystem);
260b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
261b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
262b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
263b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @hide
264b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
26585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public void lockFields(int field) {
26685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        mUserLockedFields |= field;
267b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
268b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
2694036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    /**
2704036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds     * @hide
2714036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds     */
272e0b25746267972b370a1c773ad18d146ee8163c3Julia Reynolds    public void unlockFields(int field) {
273e0b25746267972b370a1c773ad18d146ee8163c3Julia Reynolds        mUserLockedFields &= ~field;
274e0b25746267972b370a1c773ad18d146ee8163c3Julia Reynolds    }
275e0b25746267972b370a1c773ad18d146ee8163c3Julia Reynolds
276e0b25746267972b370a1c773ad18d146ee8163c3Julia Reynolds    /**
277e0b25746267972b370a1c773ad18d146ee8163c3Julia Reynolds     * @hide
278e0b25746267972b370a1c773ad18d146ee8163c3Julia Reynolds     */
2794036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    public void setDeleted(boolean deleted) {
2804036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        mDeleted = deleted;
2814036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    }
2824036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds
283f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds    /**
284f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds     * @hide
285f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds     */
286f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds    public void setBlockableSystem(boolean blockableSystem) {
287f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        mBlockableSystem = blockableSystem;
288f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds    }
2892c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    // Modifiable by apps post channel creation
290b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
291b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
2922c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * Sets the user visible name of this channel.
293baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     *
2942c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * <p>The recommended maximum length is 40 characters; the value may be truncated if it is too
2952c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * long.
296b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
2972c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    public void setName(CharSequence name) {
2982c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        mName = name != null ? getTrimmedString(name.toString()) : null;
299b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
300b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
301b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
3022c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * Sets the user visible description of this channel.
30385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     *
3042c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * <p>The recommended maximum length is 300 characters; the value may be truncated if it is too
3052c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * long.
306b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
3072c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    public void setDescription(String description) {
3082c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        mDesc = getTrimmedString(description);
309b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
310b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
3112c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    private String getTrimmedString(String input) {
3122c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        if (input != null && input.length() > MAX_TEXT_LENGTH) {
3132c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            return input.substring(0, MAX_TEXT_LENGTH);
3142c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        }
3152c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        return input;
31685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    }
31785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
3188f488d3f2f754bc6e8f4e87f40031a3f6a0b00dbJulia Reynolds    // Modifiable by apps on channel creation.
319b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
320b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
32159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * Sets what group this channel belongs to.
32259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     *
32359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * Group information is only used for presentation, not for behavior.
32459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     *
325619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * Only modifiable before the channel is submitted to
326619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * {@link NotificationManager#notify(String, int, Notification)}.
327619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     *
32859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * @param groupId the id of a group created by
32959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * {@link NotificationManager#createNotificationChannelGroup(NotificationChannelGroup)}.
33059e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     */
33159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    public void setGroup(String groupId) {
33259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        this.mGroup = groupId;
33359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    }
33459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds
33559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    /**
336f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     * Sets whether notifications posted to this channel can appear as application icon badges
337f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     * in a Launcher.
338f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     *
339f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     * @param showBadge true if badges should be allowed to be shown.
340f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds     */
341f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds    public void setShowBadge(boolean showBadge) {
342f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds        this.mShowBadge = showBadge;
343f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds    }
344f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds
345f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds    /**
346619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * Sets the sound that should be played for notifications posted to this channel and its
347184b86da382b8e24cdd0e5629e70d7057d418883Julia Reynolds     * audio attributes. Notification channels with an {@link #getImportance() importance} of at
348184b86da382b8e24cdd0e5629e70d7057d418883Julia Reynolds     * least {@link NotificationManager#IMPORTANCE_DEFAULT} should have a sound.
349619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     *
350619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * Only modifiable before the channel is submitted to
351619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * {@link NotificationManager#notify(String, int, Notification)}.
352b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
353619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    public void setSound(Uri sound, AudioAttributes audioAttributes) {
3540c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        this.mSound = sound;
355619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        this.mAudioAttributes = audioAttributes;
356b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
357b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
358b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
359b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Sets whether notifications posted to this channel should display notification lights,
360619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * on devices that support that feature.
361619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     *
362619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * Only modifiable before the channel is submitted to
363619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * {@link NotificationManager#notify(String, int, Notification)}.
364b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
365529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds    public void enableLights(boolean lights) {
366b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        this.mLights = lights;
367b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
368b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
369b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
370529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds     * Sets the notification light color for notifications posted to this channel, if lights are
371529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds     * {@link #enableLights(boolean) enabled} on this channel and the device supports that feature.
372529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds     *
373529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds     * Only modifiable before the channel is submitted to
374529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds     * {@link NotificationManager#notify(String, int, Notification)}.
375529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds     */
376529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds    public void setLightColor(int argb) {
377529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        this.mLightColor = argb;
378529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds    }
379529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds
380529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds    /**
381f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * Sets whether notification posted to this channel should vibrate. The vibration pattern can
382619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * be set with {@link #setVibrationPattern(long[])}.
383619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     *
384619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * Only modifiable before the channel is submitted to
385619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * {@link NotificationManager#notify(String, int, Notification)}.
386f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     */
387f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    public void enableVibration(boolean vibration) {
388f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        this.mVibrationEnabled = vibration;
389f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    }
390f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds
391f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    /**
392a33f5c4312ce708933454dfd1b154ccc46be099cJulia Reynolds     * Sets the vibration pattern for notifications posted to this channel. If the provided
393a33f5c4312ce708933454dfd1b154ccc46be099cJulia Reynolds     * pattern is valid (non-null, non-empty), will {@link #enableVibration(boolean)} enable
394a33f5c4312ce708933454dfd1b154ccc46be099cJulia Reynolds     * vibration} as well. Otherwise, vibration will be disabled.
395619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     *
396619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * Only modifiable before the channel is submitted to
397619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * {@link NotificationManager#notify(String, int, Notification)}.
398b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
399f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    public void setVibrationPattern(long[] vibrationPattern) {
400a33f5c4312ce708933454dfd1b154ccc46be099cJulia Reynolds        this.mVibrationEnabled = vibrationPattern != null && vibrationPattern.length > 0;
401f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        this.mVibration = vibrationPattern;
402b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
403b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
404b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
4056503bd8e33dbf6e8357256d43c6e1158e32a0268Jeff Sharkey     * Sets the level of interruption of this notification channel. Only
4066503bd8e33dbf6e8357256d43c6e1158e32a0268Jeff Sharkey     * modifiable before the channel is submitted to
4072c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * {@link NotificationManager#notify(String, int, Notification)}.
4082c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     *
4096503bd8e33dbf6e8357256d43c6e1158e32a0268Jeff Sharkey     * @param importance the amount the user should be interrupted by
4106503bd8e33dbf6e8357256d43c6e1158e32a0268Jeff Sharkey     *            notifications from this channel.
4112c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     */
4126503bd8e33dbf6e8357256d43c6e1158e32a0268Jeff Sharkey    public void setImportance(@Importance int importance) {
4132c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        this.mImportance = importance;
4142c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    }
4152c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds
4162c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    // Modifiable by a notification ranker.
4172c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds
4182c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    /**
4192c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * Sets whether or not notifications posted to this channel can interrupt the user in
4202c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * {@link android.app.NotificationManager.Policy#INTERRUPTION_FILTER_PRIORITY} mode.
4212c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     *
4222c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * Only modifiable by the system and notification ranker.
4232c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     */
4242c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    public void setBypassDnd(boolean bypassDnd) {
4252c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        this.mBypassDnd = bypassDnd;
4262c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    }
4272c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds
4282c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    /**
4292c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * Sets whether notifications posted to this channel appear on the lockscreen or not, and if so,
4302c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * whether they appear in a redacted form. See e.g. {@link Notification#VISIBILITY_SECRET}.
4312c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     *
4322c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * Only modifiable by the system and notification ranker.
4332c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     */
4342c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    public void setLockscreenVisibility(int lockscreenVisibility) {
4352c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        this.mLockscreenVisibility = lockscreenVisibility;
4362c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    }
4372c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds
4382c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    /**
439b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns the id of this channel.
440b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
441b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public String getId() {
442b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mId;
443b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
444b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
445b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
446b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns the user visible name of this channel.
447b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
4482c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    public CharSequence getName() {
449b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mName;
450b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
451b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
452b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
4532c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     * Returns the user visible description of this channel.
4542c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds     */
4552c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    public String getDescription() {
4562c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        return mDesc;
4572c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    }
4582c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds
4592c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds    /**
460184b86da382b8e24cdd0e5629e70d7057d418883Julia Reynolds     * Returns the user specified importance e.g. {@link NotificationManager#IMPORTANCE_LOW} for
461b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * notifications posted to this channel.
462b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
463b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public int getImportance() {
464b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mImportance;
465b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
466b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
467b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
468b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Whether or not notifications posted to this channel can bypass the Do Not Disturb
469b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * {@link NotificationManager#INTERRUPTION_FILTER_PRIORITY} mode.
470b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
471b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public boolean canBypassDnd() {
472b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mBypassDnd;
473b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
474b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
475b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
476b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns the notification sound for this channel.
477b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
4780c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds    public Uri getSound() {
4790c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        return mSound;
480b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
481b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
482b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
483619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     * Returns the audio attributes for sound played by notifications posted to this channel.
484619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds     */
485619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    public AudioAttributes getAudioAttributes() {
486619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        return mAudioAttributes;
487619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    }
488619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds
489619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    /**
490b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns whether notifications posted to this channel trigger notification lights.
491b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
492b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public boolean shouldShowLights() {
493b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mLights;
494b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
495b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
496b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
497529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds     * Returns the notification light color for notifications posted to this channel. Irrelevant
498529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds     * unless {@link #shouldShowLights()}.
499529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds     */
500529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds    public int getLightColor() {
501529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        return mLightColor;
502529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds    }
503529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds
504529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds    /**
505b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * Returns whether notifications posted to this channel always vibrate.
506b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
507b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public boolean shouldVibrate() {
508f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        return mVibrationEnabled;
509f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    }
510f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds
511f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    /**
512f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * Returns the vibration pattern for notifications posted to this channel. Will be ignored if
513f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     * vibration is not enabled ({@link #shouldVibrate()}.
514f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds     */
515f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    public long[] getVibrationPattern() {
516b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mVibration;
517b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
518b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
519b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
52085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * Returns whether or not notifications posted to this channel are shown on the lockscreen in
52185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * full or redacted form.
522b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
523b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public int getLockscreenVisibility() {
524b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return mLockscreenVisibility;
525b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
526b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
527b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
528baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * Returns whether notifications posted to this channel can appear as badges in a Launcher
529baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     * application.
530924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds     *
531924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds     * Note that badging may be disabled for other reasons.
532baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     */
533baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    public boolean canShowBadge() {
534baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        return mShowBadge;
535baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    }
536baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
537baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    /**
53859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * Returns what group this channel belongs to.
53959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     *
54059e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     * This is used only for visually grouping channels in the UI.
54159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds     */
54259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    public String getGroup() {
54359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        return mGroup;
54459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    }
54559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds
54659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds    /**
5474036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds     * @hide
548baff400fa5a93d157934818982fcf534327f9830Julia Reynolds     */
5494036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    @SystemApi
5504036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds    public boolean isDeleted() {
5514036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        return mDeleted;
552baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    }
553baff400fa5a93d157934818982fcf534327f9830Julia Reynolds
554baff400fa5a93d157934818982fcf534327f9830Julia Reynolds    /**
555b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @hide
556b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
557b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @SystemApi
55885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public int getUserLockedFields() {
55985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        return mUserLockedFields;
56085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    }
56185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
56285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    /**
56385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     * @hide
56485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds     */
565f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds    public boolean isBlockableSystem() {
566f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        return mBlockableSystem;
567f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds    }
568f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds
569f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds    /**
570f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds     * @hide
571f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds     */
57285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @SystemApi
573b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public void populateFromXml(XmlPullParser parser) {
57485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        // Name, id, and importance are set in the constructor.
5752c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        setDescription(parser.getAttributeValue(null, ATT_DESC));
576b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        setBypassDnd(Notification.PRIORITY_DEFAULT
577b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                != safeInt(parser, ATT_PRIORITY, Notification.PRIORITY_DEFAULT));
578b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        setLockscreenVisibility(safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY));
579619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        setSound(safeUri(parser, ATT_SOUND), safeAudioAttributes(parser));
580529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        enableLights(safeBool(parser, ATT_LIGHTS, false));
581529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        setLightColor(safeInt(parser, ATT_LIGHT_COLOR, DEFAULT_LIGHT_COLOR));
582f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        setVibrationPattern(safeLongArray(parser, ATT_VIBRATION, null));
583745c15477b22f88af303065e18025af386582736Julia Reynolds        enableVibration(safeBool(parser, ATT_VIBRATION_ENABLED, false));
584baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        setShowBadge(safeBool(parser, ATT_SHOW_BADGE, false));
5854036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        setDeleted(safeBool(parser, ATT_DELETED, false));
58659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        setGroup(parser.getAttributeValue(null, ATT_GROUP));
58785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        lockFields(safeInt(parser, ATT_USER_LOCKED, 0));
588f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        setBlockableSystem(safeBool(parser, ATT_BLOCKABLE_SYSTEM, false));
589b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
590b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
591b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
592b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @hide
593b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
594b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @SystemApi
595b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public void writeXml(XmlSerializer out) throws IOException {
596b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        out.startTag(null, TAG_CHANNEL);
597b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        out.attribute(null, ATT_ID, getId());
5985a31193497fa923e24bc5c9796b40fdfae604d31Julia Reynolds        if (getName() != null) {
5995a31193497fa923e24bc5c9796b40fdfae604d31Julia Reynolds            out.attribute(null, ATT_NAME, getName().toString());
6005a31193497fa923e24bc5c9796b40fdfae604d31Julia Reynolds        }
6012c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        if (getDescription() != null) {
6022c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            out.attribute(null, ATT_DESC, getDescription());
6032c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        }
604b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (getImportance() != DEFAULT_IMPORTANCE) {
605b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            out.attribute(
606b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                    null, ATT_IMPORTANCE, Integer.toString(getImportance()));
607b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
608b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (canBypassDnd()) {
609b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            out.attribute(
610b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                    null, ATT_PRIORITY, Integer.toString(Notification.PRIORITY_MAX));
611b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
612b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (getLockscreenVisibility() != DEFAULT_VISIBILITY) {
613b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            out.attribute(null, ATT_VISIBILITY,
614b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                    Integer.toString(getLockscreenVisibility()));
615b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
6160c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        if (getSound() != null) {
6170c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            out.attribute(null, ATT_SOUND, getSound().toString());
618b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
619619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        if (getAudioAttributes() != null) {
620619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            out.attribute(null, ATT_USAGE, Integer.toString(getAudioAttributes().getUsage()));
621619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            out.attribute(null, ATT_CONTENT_TYPE,
622619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds                    Integer.toString(getAudioAttributes().getContentType()));
623619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            out.attribute(null, ATT_FLAGS, Integer.toString(getAudioAttributes().getFlags()));
624619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        }
625b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (shouldShowLights()) {
626b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            out.attribute(null, ATT_LIGHTS, Boolean.toString(shouldShowLights()));
627b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
628529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        if (getLightColor() != DEFAULT_LIGHT_COLOR) {
629529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds            out.attribute(null, ATT_LIGHT_COLOR, Integer.toString(getLightColor()));
630529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        }
631b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (shouldVibrate()) {
632f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            out.attribute(null, ATT_VIBRATION_ENABLED, Boolean.toString(shouldVibrate()));
633f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        }
634f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        if (getVibrationPattern() != null) {
635f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            out.attribute(null, ATT_VIBRATION, longArrayToString(getVibrationPattern()));
636b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
63785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        if (getUserLockedFields() != 0) {
63885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds            out.attribute(null, ATT_USER_LOCKED, Integer.toString(getUserLockedFields()));
63985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        }
640baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        if (canShowBadge()) {
641baff400fa5a93d157934818982fcf534327f9830Julia Reynolds            out.attribute(null, ATT_SHOW_BADGE, Boolean.toString(canShowBadge()));
642baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        }
6434036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        if (isDeleted()) {
6444036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds            out.attribute(null, ATT_DELETED, Boolean.toString(isDeleted()));
6454036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        }
64659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getGroup() != null) {
64759e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            out.attribute(null, ATT_GROUP, getGroup());
64859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
649f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        if (isBlockableSystem()) {
650f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds            out.attribute(null, ATT_BLOCKABLE_SYSTEM, Boolean.toString(isBlockableSystem()));
651f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        }
65285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
653b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        out.endTag(null, TAG_CHANNEL);
654b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
655b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
656b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    /**
657b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     * @hide
658b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds     */
659b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @SystemApi
660b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public JSONObject toJson() throws JSONException {
661b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        JSONObject record = new JSONObject();
662b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        record.put(ATT_ID, getId());
663b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        record.put(ATT_NAME, getName());
6642c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        record.put(ATT_DESC, getDescription());
665b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (getImportance() != DEFAULT_IMPORTANCE) {
666b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            record.put(ATT_IMPORTANCE,
667b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds                    NotificationListenerService.Ranking.importanceToString(getImportance()));
668b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
669b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (canBypassDnd()) {
670b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            record.put(ATT_PRIORITY, Notification.PRIORITY_MAX);
671b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
672b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (getLockscreenVisibility() != DEFAULT_VISIBILITY) {
673b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            record.put(ATT_VISIBILITY, Notification.visibilityToString(getLockscreenVisibility()));
674b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
6750c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds        if (getSound() != null) {
6760c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds            record.put(ATT_SOUND, getSound().toString());
677b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
678619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        if (getAudioAttributes() != null) {
679619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            record.put(ATT_USAGE, Integer.toString(getAudioAttributes().getUsage()));
680619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            record.put(ATT_CONTENT_TYPE,
681619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds                    Integer.toString(getAudioAttributes().getContentType()));
682619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            record.put(ATT_FLAGS, Integer.toString(getAudioAttributes().getFlags()));
683619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        }
684b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        record.put(ATT_LIGHTS, Boolean.toString(shouldShowLights()));
685529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        record.put(ATT_LIGHT_COLOR, Integer.toString(getLightColor()));
686f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        record.put(ATT_VIBRATION_ENABLED, Boolean.toString(shouldVibrate()));
68785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        record.put(ATT_USER_LOCKED, Integer.toString(getUserLockedFields()));
688f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        record.put(ATT_VIBRATION, longArrayToString(getVibrationPattern()));
689baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        record.put(ATT_SHOW_BADGE, Boolean.toString(canShowBadge()));
6904036e8d4c636ae36f28585d283b522a7a97eaf72Julia Reynolds        record.put(ATT_DELETED, Boolean.toString(isDeleted()));
69159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        record.put(ATT_GROUP, getGroup());
692f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        record.put(ATT_BLOCKABLE_SYSTEM, isBlockableSystem());
693b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return record;
694b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
695b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
696619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    private static AudioAttributes safeAudioAttributes(XmlPullParser parser) {
697619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        int usage = safeInt(parser, ATT_USAGE, AudioAttributes.USAGE_NOTIFICATION);
698619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        int contentType = safeInt(parser, ATT_CONTENT_TYPE,
699619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds                AudioAttributes.CONTENT_TYPE_SONIFICATION);
700619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        int flags = safeInt(parser, ATT_FLAGS, 0);
701619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        return new AudioAttributes.Builder()
702619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds                .setUsage(usage)
703619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds                .setContentType(contentType)
704619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds                .setFlags(flags)
705619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds                .build();
706619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds    }
707619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds
708b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static Uri safeUri(XmlPullParser parser, String att) {
709b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        final String val = parser.getAttributeValue(null, att);
710b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return val == null ? null : Uri.parse(val);
711b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
712b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
713b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static int safeInt(XmlPullParser parser, String att, int defValue) {
714b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        final String val = parser.getAttributeValue(null, att);
715b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return tryParseInt(val, defValue);
716b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
717b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
718b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static int tryParseInt(String value, int defValue) {
719b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (TextUtils.isEmpty(value)) return defValue;
720b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        try {
721b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            return Integer.parseInt(value);
722b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        } catch (NumberFormatException e) {
723b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            return defValue;
724b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
725b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
726b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
727b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    private static boolean safeBool(XmlPullParser parser, String att, boolean defValue) {
728b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        final String value = parser.getAttributeValue(null, att);
729b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (TextUtils.isEmpty(value)) return defValue;
730b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return Boolean.parseBoolean(value);
731b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
732b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
733f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private static long[] safeLongArray(XmlPullParser parser, String att, long[] defValue) {
734f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        final String attributeValue = parser.getAttributeValue(null, att);
735f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        if (TextUtils.isEmpty(attributeValue)) return defValue;
736f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        String[] values = attributeValue.split(DELIMITER);
737f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        long[] longValues = new long[values.length];
738f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        for (int i = 0; i < values.length; i++) {
739f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            try {
740f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds                longValues[i] = Long.parseLong(values[i]);
741f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            } catch (NumberFormatException e) {
742f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds                longValues[i] = 0;
743f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds            }
744f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        }
745f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        return longValues;
746f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    }
747f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds
748f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    private static String longArrayToString(long[] values) {
749f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        StringBuffer sb = new StringBuffer();
7500f17000fb3b417fbc6129b47385c5f3c3dfd2de5Julia Reynolds        if (values != null && values.length > 0) {
75159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            for (int i = 0; i < values.length - 1; i++) {
75259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds                sb.append(values[i]).append(DELIMITER);
75359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            }
75459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            sb.append(values[values.length - 1]);
755f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        }
756f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        return sb.toString();
757f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds    }
758f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds
759b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public static final Creator<NotificationChannel> CREATOR = new Creator<NotificationChannel>() {
760b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        @Override
761b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        public NotificationChannel createFromParcel(Parcel in) {
762b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            return new NotificationChannel(in);
763b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
764b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
765b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        @Override
766b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        public NotificationChannel[] newArray(int size) {
767b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds            return new NotificationChannel[size];
768b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        }
769b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    };
770b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
771b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @Override
772b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public int describeContents() {
773b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        return 0;
774b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
775b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
776b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @Override
777b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public boolean equals(Object o) {
778b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (this == o) return true;
779b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (o == null || getClass() != o.getClass()) return false;
780b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
781b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        NotificationChannel that = (NotificationChannel) o;
782b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
78359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getImportance() != that.getImportance()) return false;
784b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (mBypassDnd != that.mBypassDnd) return false;
78559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getLockscreenVisibility() != that.getLockscreenVisibility()) return false;
786b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds        if (mLights != that.mLights) return false;
787529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        if (getLightColor() != that.getLightColor()) return false;
78859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getUserLockedFields() != that.getUserLockedFields()) return false;
789f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        if (mVibrationEnabled != that.mVibrationEnabled) return false;
790baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        if (mShowBadge != that.mShowBadge) return false;
79159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (isDeleted() != that.isDeleted()) return false;
792f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        if (isBlockableSystem() != that.isBlockableSystem()) return false;
79359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getId() != null ? !getId().equals(that.getId()) : that.getId() != null) return false;
79459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null) {
79559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            return false;
79659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
7972c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        if (getDescription() != null ? !getDescription().equals(that.getDescription())
7982c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds                : that.getDescription() != null) {
7992c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds            return false;
8002c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        }
80159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (getSound() != null ? !getSound().equals(that.getSound()) : that.getSound() != null) {
80259e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds            return false;
80359e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        }
80459e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        if (!Arrays.equals(mVibration, that.mVibration)) return false;
805619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        if (getGroup() != null ? !getGroup().equals(that.getGroup()) : that.getGroup() != null) {
806619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds            return false;
807619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        }
808619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        return getAudioAttributes() != null ? getAudioAttributes().equals(that.getAudioAttributes())
809619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds                : that.getAudioAttributes() == null;
81085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
81185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    }
81285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds
81385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    @Override
81485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds    public int hashCode() {
81559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        int result = getId() != null ? getId().hashCode() : 0;
81659e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + (getName() != null ? getName().hashCode() : 0);
8172c891c92fabb0ef8fdb77870b0272c156c71c7f0Julia Reynolds        result = 31 * result + (getDescription() != null ? getDescription().hashCode() : 0);
81859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + getImportance();
81985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        result = 31 * result + (mBypassDnd ? 1 : 0);
82059e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + getLockscreenVisibility();
82159e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + (getSound() != null ? getSound().hashCode() : 0);
82285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        result = 31 * result + (mLights ? 1 : 0);
823529e3329e68963eff0dd1cf40d938a9953cd5060Julia Reynolds        result = 31 * result + getLightColor();
824f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        result = 31 * result + Arrays.hashCode(mVibration);
82559e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + getUserLockedFields();
826f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds        result = 31 * result + (mVibrationEnabled ? 1 : 0);
827baff400fa5a93d157934818982fcf534327f9830Julia Reynolds        result = 31 * result + (mShowBadge ? 1 : 0);
82859e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + (isDeleted() ? 1 : 0);
82959e152e92e6ebb71bab974973ce29b4f8d11f7cfJulia Reynolds        result = 31 * result + (getGroup() != null ? getGroup().hashCode() : 0);
830619a69f722b75241b372cf7b01b45b2dd1c862faJulia Reynolds        result = 31 * result + (getAudioAttributes() != null ? getAudioAttributes().hashCode() : 0);
831f732159cf8d6a4e1cd17542a3a2cf020ad6919a3Julia Reynolds        result = 31 * result + (isBlockableSystem() ? 1 : 0);
83285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds        return result;
833b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
834b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds
835b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    @Override
836b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    public String toString() {
837005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds        return "NotificationChannel{"
838005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + "mId='" + mId + '\''
839005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mName=" + mName
840005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mDescription=" + (!TextUtils.isEmpty(mDesc) ? "hasDescription " : "")
841005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mImportance=" + mImportance
842005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mBypassDnd=" + mBypassDnd
843005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mLockscreenVisibility=" + mLockscreenVisibility
844005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mSound=" + mSound
845005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mLights=" + mLights
846005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mLightColor=" + mLightColor
847005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mVibration=" + Arrays.toString(mVibration)
848005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mUserLockedFields=" + Integer.toHexString(mUserLockedFields)
849005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mVibrationEnabled=" + mVibrationEnabled
850005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mShowBadge=" + mShowBadge
851005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mDeleted=" + mDeleted
852005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mGroup='" + mGroup + '\''
853005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mAudioAttributes=" + mAudioAttributes
854005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + ", mBlockableSystem=" + mBlockableSystem
855005c8b9098120526fa69f98bce3a5e1f79e3699bJulia Reynolds                + '}';
856b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds    }
85762b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams
85862b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams    /** @hide */
85962b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams    public void toProto(ProtoOutputStream proto) {
86062b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.ID, mId);
86162b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.NAME, mName);
86262b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.DESCRIPTION, mDesc);
86362b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.IMPORTANCE, mImportance);
86462b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.CAN_BYPASS_DND, mBypassDnd);
86562b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.LOCKSCREEN_VISIBILITY, mLockscreenVisibility);
86662b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        if (mSound != null) {
86762b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams            proto.write(NotificationChannelProto.SOUND, mSound.toString());
86862b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        }
86962b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.USE_LIGHTS, mLights);
87062b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.LIGHT_COLOR, mLightColor);
87162b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        if (mVibration != null) {
87262b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams            for (long v : mVibration) {
87362b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams                proto.write(NotificationChannelProto.VIBRATION, v);
87462b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams            }
87562b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        }
87662b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.USER_LOCKED_FIELDS, mUserLockedFields);
87762b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.IS_VIBRATION_ENABLED, mVibrationEnabled);
87862b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.SHOW_BADGE, mShowBadge);
87962b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.IS_DELETED, mDeleted);
88062b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.GROUP, mGroup);
88162b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        if (mAudioAttributes != null) {
88262b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams            long aToken = proto.start(NotificationChannelProto.AUDIO_ATTRIBUTES);
88362b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams            mAudioAttributes.toProto(proto);
88462b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams            proto.end(aToken);
88562b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        }
88662b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams        proto.write(NotificationChannelProto.IS_BLOCKABLE_SYSTEM, mBlockableSystem);
88762b4224757cf60fe57d8c9b0d43ab357f4df056dKweku Adams    }
888b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds}
889