NotificationChannel.java revision f35e3976e3c01077f8d8d0938d2ba0b3e5b80613
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; 24b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.net.Uri; 25b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.os.Parcel; 26b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.os.Parcelable; 27b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.service.notification.NotificationListenerService; 28b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport android.text.TextUtils; 29b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 30b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldsimport java.io.IOException; 31f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynoldsimport java.util.Arrays; 32b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 33b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds/** 34b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * A representation of settings that apply to a collection of similarly themed notifications. 35b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 36b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynoldspublic final class NotificationChannel implements Parcelable { 37b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 38b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 39b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * The id of the default channel for an app. All notifications posted without a notification 40b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * channel specified are posted to this channel. 41b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 42b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public static final String DEFAULT_CHANNEL_ID = "miscellaneous"; 43b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 44b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final String TAG_CHANNEL = "channel"; 45b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final String ATT_NAME = "name"; 46b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final String ATT_ID = "id"; 47b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final String ATT_PRIORITY = "priority"; 48b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final String ATT_VISIBILITY = "visibility"; 49b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final String ATT_IMPORTANCE = "importance"; 50b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final String ATT_LIGHTS = "lights"; 51b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final String ATT_VIBRATION = "vibration"; 52f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds private static final String ATT_VIBRATION_ENABLED = "vibration_enabled"; 530c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds private static final String ATT_SOUND = "sound"; 540c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds //TODO: add audio attributes support 550c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds private static final String ATT_AUDIO_ATTRIBUTES = "audio_attributes"; 56baff400fa5a93d157934818982fcf534327f9830Julia Reynolds private static final String ATT_SHOW_BADGE = "show_badge"; 5785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds private static final String ATT_USER_LOCKED = "locked"; 58baff400fa5a93d157934818982fcf534327f9830Julia Reynolds private static final String ATT_ALLOWED = "allowed"; 59f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds private static final String DELIMITER = ","; 6085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds 6185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds /** 6285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * @hide 6385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds */ 6485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds @SystemApi 6585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public static final int USER_LOCKED_PRIORITY = 0x00000001; 6685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds /** 6785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * @hide 6885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds */ 6985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds @SystemApi 7085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public static final int USER_LOCKED_VISIBILITY = 0x00000002; 7185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds /** 7285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * @hide 7385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds */ 7485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds @SystemApi 7585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public static final int USER_LOCKED_IMPORTANCE = 0x00000004; 7685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds /** 7785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * @hide 7885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds */ 7985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds @SystemApi 8085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public static final int USER_LOCKED_LIGHTS = 0x00000008; 8185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds /** 8285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * @hide 8385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds */ 8485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds @SystemApi 8585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public static final int USER_LOCKED_VIBRATION = 0x00000010; 8685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds /** 8785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * @hide 8885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds */ 8985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds @SystemApi 900c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds public static final int USER_LOCKED_SOUND = 0x00000020; 91b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 92baff400fa5a93d157934818982fcf534327f9830Julia Reynolds /** 93baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * @hide 94baff400fa5a93d157934818982fcf534327f9830Julia Reynolds */ 95baff400fa5a93d157934818982fcf534327f9830Julia Reynolds @SystemApi 96baff400fa5a93d157934818982fcf534327f9830Julia Reynolds public static final int USER_LOCKED_ALLOWED = 0x00000040; 97baff400fa5a93d157934818982fcf534327f9830Julia Reynolds 98baff400fa5a93d157934818982fcf534327f9830Julia Reynolds /** 99baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * @hide 100baff400fa5a93d157934818982fcf534327f9830Julia Reynolds */ 101baff400fa5a93d157934818982fcf534327f9830Julia Reynolds @SystemApi 102baff400fa5a93d157934818982fcf534327f9830Julia Reynolds public static final int USER_LOCKED_SHOW_BADGE = 0x00000080; 103baff400fa5a93d157934818982fcf534327f9830Julia Reynolds 104baff400fa5a93d157934818982fcf534327f9830Julia Reynolds /** 105baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * @hide 106baff400fa5a93d157934818982fcf534327f9830Julia Reynolds */ 107baff400fa5a93d157934818982fcf534327f9830Julia Reynolds @SystemApi 108baff400fa5a93d157934818982fcf534327f9830Julia Reynolds public static final int[] LOCKABLE_FIELDS = new int[] { 109baff400fa5a93d157934818982fcf534327f9830Julia Reynolds USER_LOCKED_PRIORITY, 110baff400fa5a93d157934818982fcf534327f9830Julia Reynolds USER_LOCKED_VISIBILITY, 111baff400fa5a93d157934818982fcf534327f9830Julia Reynolds USER_LOCKED_IMPORTANCE, 112baff400fa5a93d157934818982fcf534327f9830Julia Reynolds USER_LOCKED_LIGHTS, 113baff400fa5a93d157934818982fcf534327f9830Julia Reynolds USER_LOCKED_VIBRATION, 114baff400fa5a93d157934818982fcf534327f9830Julia Reynolds USER_LOCKED_SOUND, 115baff400fa5a93d157934818982fcf534327f9830Julia Reynolds USER_LOCKED_ALLOWED, 116baff400fa5a93d157934818982fcf534327f9830Julia Reynolds USER_LOCKED_SHOW_BADGE 117baff400fa5a93d157934818982fcf534327f9830Julia Reynolds }; 118baff400fa5a93d157934818982fcf534327f9830Julia Reynolds 119baff400fa5a93d157934818982fcf534327f9830Julia Reynolds 120b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final int DEFAULT_VISIBILITY = 12185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds NotificationManager.VISIBILITY_NO_OVERRIDE; 122b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static final int DEFAULT_IMPORTANCE = 12385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds NotificationManager.IMPORTANCE_UNSPECIFIED; 124baff400fa5a93d157934818982fcf534327f9830Julia Reynolds private static final boolean DEFAULT_ALLOWED = true; 125b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 126b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private final String mId; 127b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private CharSequence mName; 128b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private int mImportance = DEFAULT_IMPORTANCE; 129b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private boolean mBypassDnd; 130b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private int mLockscreenVisibility = DEFAULT_VISIBILITY; 1310c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds private Uri mSound; 132b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private boolean mLights; 133f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds private long[] mVibration; 13485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds private int mUserLockedFields; 135f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds private boolean mVibrationEnabled; 136baff400fa5a93d157934818982fcf534327f9830Julia Reynolds private boolean mShowBadge; 137baff400fa5a93d157934818982fcf534327f9830Julia Reynolds private boolean mAllowed = DEFAULT_ALLOWED; 138b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 139b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 140b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * Creates a notification channel. 141b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * 142b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * @param id The id of the channel. Must be unique per package. 143b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * @param name The user visible name of the channel. 14485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * @param importance The importance of the channel. This controls how interruptive notifications 14585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * posted to this channel are. See e.g. 14685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * {@link NotificationManager#IMPORTANCE_DEFAULT}. 147b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 14885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public NotificationChannel(String id, CharSequence name, int importance) { 149b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds this.mId = id; 150b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds this.mName = name; 15185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds this.mImportance = importance; 152b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 153b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 154b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds protected NotificationChannel(Parcel in) { 155b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (in.readByte() != 0) { 156b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds mId = in.readString(); 157b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } else { 158b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds mId = null; 159b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 160b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds mName = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 161b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds mImportance = in.readInt(); 162b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds mBypassDnd = in.readByte() != 0; 163b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds mLockscreenVisibility = in.readInt(); 164b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (in.readByte() != 0) { 1650c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds mSound = Uri.CREATOR.createFromParcel(in); 166b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } else { 1670c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds mSound = null; 168b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 169b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds mLights = in.readByte() != 0; 170f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds mVibration = in.createLongArray(); 17185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds mUserLockedFields = in.readInt(); 172f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds mVibrationEnabled = in.readByte() != 0; 173baff400fa5a93d157934818982fcf534327f9830Julia Reynolds mShowBadge = in.readByte() != 0; 174baff400fa5a93d157934818982fcf534327f9830Julia Reynolds mAllowed = in.readByte() != 0; 175b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 176b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 177b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @Override 178b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public void writeToParcel(Parcel dest, int flags) { 179b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (mId != null) { 180b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds dest.writeByte((byte) 1); 181b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds dest.writeString(mId); 182b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } else { 183b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds dest.writeByte((byte) 0); 184b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 185b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds TextUtils.writeToParcel(mName, dest, flags); 186b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds dest.writeInt(mImportance); 187b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds dest.writeByte(mBypassDnd ? (byte) 1 : (byte) 0); 188b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds dest.writeInt(mLockscreenVisibility); 1890c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds if (mSound != null) { 190b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds dest.writeByte((byte) 1); 1910c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds mSound.writeToParcel(dest, 0); 192b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } else { 193b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds dest.writeByte((byte) 0); 194b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 195b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds dest.writeByte(mLights ? (byte) 1 : (byte) 0); 196f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds dest.writeLongArray(mVibration); 19785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds dest.writeInt(mUserLockedFields); 198f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds dest.writeByte(mVibrationEnabled ? (byte) 1 : (byte) 0); 199baff400fa5a93d157934818982fcf534327f9830Julia Reynolds dest.writeByte(mShowBadge ? (byte) 1 : (byte) 0); 200baff400fa5a93d157934818982fcf534327f9830Julia Reynolds dest.writeByte(mAllowed ? (byte) 1 : (byte) 0); 201b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 202b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 203b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 204b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * @hide 205b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 206b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @SystemApi 20785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public void lockFields(int field) { 20885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds mUserLockedFields |= field; 209b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 210b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 21185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds // Modifiable by a notification ranker. 212b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 213b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 214baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * Sets whether or not notifications posted to this channel can interrupt the user in 21585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * {@link android.app.NotificationManager.Policy#INTERRUPTION_FILTER_PRIORITY} mode. 216baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * 217baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * Only modifiable by the system and notification ranker. 218b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 219b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public void setBypassDnd(boolean bypassDnd) { 220b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds this.mBypassDnd = bypassDnd; 221b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 222b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 223b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 224baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * Sets whether notifications posted to this channel appear on the lockscreen or not, and if so, 225baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * whether they appear in a redacted form. See e.g. {@link Notification#VISIBILITY_SECRET}. 22685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * 227baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * Only modifiable by the system and notification ranker. 228b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 229b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public void setLockscreenVisibility(int lockscreenVisibility) { 230b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds this.mLockscreenVisibility = lockscreenVisibility; 231b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 232b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 23385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds /** 23485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * Sets the level of interruption of this notification channel. 23585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * 236baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * Only modifiable by the system and notification ranker. 237baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * 23885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * @param importance the amount the user should be interrupted by notifications from this 23985769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * channel. See e.g. 24085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * {@link android.app.NotificationManager#IMPORTANCE_DEFAULT}. 24185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds */ 24285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public void setImportance(int importance) { 24385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds this.mImportance = importance; 24485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds } 24585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds 246baff400fa5a93d157934818982fcf534327f9830Julia Reynolds /** 247baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * Sets whether notifications are allowed to be posted to this channel. 248baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * 249baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * Only modifiable by the system and notification ranker. 250baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * 251baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * @param allowed true if notifications are not allowed from this channel. 252baff400fa5a93d157934818982fcf534327f9830Julia Reynolds */ 253baff400fa5a93d157934818982fcf534327f9830Julia Reynolds public void setAllowed(boolean allowed) { 254baff400fa5a93d157934818982fcf534327f9830Julia Reynolds this.mAllowed = allowed; 255baff400fa5a93d157934818982fcf534327f9830Julia Reynolds } 256baff400fa5a93d157934818982fcf534327f9830Julia Reynolds 257baff400fa5a93d157934818982fcf534327f9830Julia Reynolds 2588f488d3f2f754bc6e8f4e87f40031a3f6a0b00dbJulia Reynolds // Modifiable by apps on channel creation. 259b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 260b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 261f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds * Sets whether notifications posted to this channel can appear as application icon badges 262f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds * in a Launcher. 263f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds * 264f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds * @param showBadge true if badges should be allowed to be shown. 265f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds */ 266f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds public void setShowBadge(boolean showBadge) { 267f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds this.mShowBadge = showBadge; 268f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds } 269f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds 270f35e3976e3c01077f8d8d0938d2ba0b3e5b80613Julia Reynolds /** 2710c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds * Sets the sound that should be played for notifications posted to this channel if 2720c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds * the notifications don't supply a sound. Only modifiable before the channel is submitted 27385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * to the NotificationManager. 274b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 2750c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds public void setSound(Uri sound) { 2760c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds this.mSound = sound; 277b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 278b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 279b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 280b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * Sets whether notifications posted to this channel should display notification lights, 28185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * on devices that support that feature. Only modifiable before the channel is submitted to 28285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * the NotificationManager. 283b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 284b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public void setLights(boolean lights) { 285b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds this.mLights = lights; 286b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 287b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 288b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 289f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds * Sets whether notification posted to this channel should vibrate. The vibration pattern can 290f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds * be set with {@link #setVibrationPattern(long[])}. Only modifiable before the channel is 291f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds * submitted to the NotificationManager. 292f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds */ 293f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds public void enableVibration(boolean vibration) { 294f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds this.mVibrationEnabled = vibration; 295f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds } 296f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds 297f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds /** 298f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds * Sets whether notification posted to this channel should vibrate. Only modifiable before the 299f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds * channel is submitted to the NotificationManager. 300b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 301f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds public void setVibrationPattern(long[] vibrationPattern) { 302f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds this.mVibration = vibrationPattern; 303b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 304b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 305b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 306b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * Returns the id of this channel. 307b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 308b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public String getId() { 309b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return mId; 310b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 311b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 312b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 313b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * Returns the user visible name of this channel. 314b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 315b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public CharSequence getName() { 316b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return mName; 317b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 318b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 319b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 320b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * Returns the user specified importance {e.g. @link NotificationManager#IMPORTANCE_LOW} for 321b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * notifications posted to this channel. 322b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 323b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public int getImportance() { 324b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return mImportance; 325b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 326b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 327b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 328b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * Whether or not notifications posted to this channel can bypass the Do Not Disturb 329b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * {@link NotificationManager#INTERRUPTION_FILTER_PRIORITY} mode. 330b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 331b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public boolean canBypassDnd() { 332b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return mBypassDnd; 333b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 334b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 335b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 336b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * Returns the notification sound for this channel. 337b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 3380c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds public Uri getSound() { 3390c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds return mSound; 340b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 341b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 342b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 343b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * Returns whether notifications posted to this channel trigger notification lights. 344b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 345b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public boolean shouldShowLights() { 346b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return mLights; 347b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 348b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 349b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 350b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * Returns whether notifications posted to this channel always vibrate. 351b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 352b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public boolean shouldVibrate() { 353f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds return mVibrationEnabled; 354f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds } 355f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds 356f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds /** 357f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds * Returns the vibration pattern for notifications posted to this channel. Will be ignored if 358f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds * vibration is not enabled ({@link #shouldVibrate()}. 359f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds */ 360f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds public long[] getVibrationPattern() { 361b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return mVibration; 362b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 363b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 364b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 36585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * Returns whether or not notifications posted to this channel are shown on the lockscreen in 36685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * full or redacted form. 367b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 368b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public int getLockscreenVisibility() { 369b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return mLockscreenVisibility; 370b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 371b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 372b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 373baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * Returns whether notifications posted to this channel can appear as badges in a Launcher 374baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * application. 375baff400fa5a93d157934818982fcf534327f9830Julia Reynolds */ 376baff400fa5a93d157934818982fcf534327f9830Julia Reynolds public boolean canShowBadge() { 377baff400fa5a93d157934818982fcf534327f9830Julia Reynolds return mShowBadge; 378baff400fa5a93d157934818982fcf534327f9830Julia Reynolds } 379baff400fa5a93d157934818982fcf534327f9830Julia Reynolds 380baff400fa5a93d157934818982fcf534327f9830Julia Reynolds /** 381baff400fa5a93d157934818982fcf534327f9830Julia Reynolds * Returns whether notifications are allowed to post to this channel. 382baff400fa5a93d157934818982fcf534327f9830Julia Reynolds */ 383baff400fa5a93d157934818982fcf534327f9830Julia Reynolds public boolean isAllowed() { 384baff400fa5a93d157934818982fcf534327f9830Julia Reynolds return mAllowed; 385baff400fa5a93d157934818982fcf534327f9830Julia Reynolds } 386baff400fa5a93d157934818982fcf534327f9830Julia Reynolds 387baff400fa5a93d157934818982fcf534327f9830Julia Reynolds /** 388b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * @hide 389b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 390b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @SystemApi 39185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public int getUserLockedFields() { 39285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds return mUserLockedFields; 39385769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds } 39485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds 39585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds /** 39685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds * @hide 39785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds */ 39885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds @SystemApi 399b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public void populateFromXml(XmlPullParser parser) { 40085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds // Name, id, and importance are set in the constructor. 401b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds setBypassDnd(Notification.PRIORITY_DEFAULT 402b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds != safeInt(parser, ATT_PRIORITY, Notification.PRIORITY_DEFAULT)); 403b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds setLockscreenVisibility(safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY)); 4040c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds setSound(safeUri(parser, ATT_SOUND)); 405b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds setLights(safeBool(parser, ATT_LIGHTS, false)); 406f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds enableVibration(safeBool(parser, ATT_VIBRATION_ENABLED, false)); 407f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds setVibrationPattern(safeLongArray(parser, ATT_VIBRATION, null)); 408baff400fa5a93d157934818982fcf534327f9830Julia Reynolds setShowBadge(safeBool(parser, ATT_SHOW_BADGE, false)); 409baff400fa5a93d157934818982fcf534327f9830Julia Reynolds setAllowed(safeBool(parser, ATT_ALLOWED, true)); 41085769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds lockFields(safeInt(parser, ATT_USER_LOCKED, 0)); 411b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 412b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 413b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 414b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * @hide 415b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 416b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @SystemApi 417b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public void writeXml(XmlSerializer out) throws IOException { 418b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds out.startTag(null, TAG_CHANNEL); 419b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds out.attribute(null, ATT_ID, getId()); 420b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds out.attribute(null, ATT_NAME, getName().toString()); 421b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (getImportance() != DEFAULT_IMPORTANCE) { 422b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds out.attribute( 423b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds null, ATT_IMPORTANCE, Integer.toString(getImportance())); 424b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 425b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (canBypassDnd()) { 426b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds out.attribute( 427b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds null, ATT_PRIORITY, Integer.toString(Notification.PRIORITY_MAX)); 428b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 429b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (getLockscreenVisibility() != DEFAULT_VISIBILITY) { 430b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds out.attribute(null, ATT_VISIBILITY, 431b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds Integer.toString(getLockscreenVisibility())); 432b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 4330c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds if (getSound() != null) { 4340c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds out.attribute(null, ATT_SOUND, getSound().toString()); 435b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 436b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (shouldShowLights()) { 437b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds out.attribute(null, ATT_LIGHTS, Boolean.toString(shouldShowLights())); 438b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 439b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (shouldVibrate()) { 440f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds out.attribute(null, ATT_VIBRATION_ENABLED, Boolean.toString(shouldVibrate())); 441f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds } 442f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds if (getVibrationPattern() != null) { 443f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds out.attribute(null, ATT_VIBRATION, longArrayToString(getVibrationPattern())); 444b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 44585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds if (getUserLockedFields() != 0) { 44685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds out.attribute(null, ATT_USER_LOCKED, Integer.toString(getUserLockedFields())); 44785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds } 448baff400fa5a93d157934818982fcf534327f9830Julia Reynolds if (canShowBadge()) { 449baff400fa5a93d157934818982fcf534327f9830Julia Reynolds out.attribute(null, ATT_SHOW_BADGE, Boolean.toString(canShowBadge())); 450baff400fa5a93d157934818982fcf534327f9830Julia Reynolds } 451baff400fa5a93d157934818982fcf534327f9830Julia Reynolds if (!isAllowed()) { 452baff400fa5a93d157934818982fcf534327f9830Julia Reynolds out.attribute(null, ATT_ALLOWED, Boolean.toString(isAllowed())); 453baff400fa5a93d157934818982fcf534327f9830Julia Reynolds } 45485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds 455b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds out.endTag(null, TAG_CHANNEL); 456b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 457b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 458b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds /** 459b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds * @hide 460b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds */ 461b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @SystemApi 462b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public JSONObject toJson() throws JSONException { 463b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds JSONObject record = new JSONObject(); 464b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds record.put(ATT_ID, getId()); 465b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds record.put(ATT_NAME, getName()); 466b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (getImportance() != DEFAULT_IMPORTANCE) { 467b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds record.put(ATT_IMPORTANCE, 468b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds NotificationListenerService.Ranking.importanceToString(getImportance())); 469b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 470b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (canBypassDnd()) { 471b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds record.put(ATT_PRIORITY, Notification.PRIORITY_MAX); 472b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 473b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (getLockscreenVisibility() != DEFAULT_VISIBILITY) { 474b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds record.put(ATT_VISIBILITY, Notification.visibilityToString(getLockscreenVisibility())); 475b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 4760c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds if (getSound() != null) { 4770c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds record.put(ATT_SOUND, getSound().toString()); 478b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 479b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds record.put(ATT_LIGHTS, Boolean.toString(shouldShowLights())); 480f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds record.put(ATT_VIBRATION_ENABLED, Boolean.toString(shouldVibrate())); 48185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds record.put(ATT_USER_LOCKED, Integer.toString(getUserLockedFields())); 482f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds record.put(ATT_VIBRATION, longArrayToString(getVibrationPattern())); 483baff400fa5a93d157934818982fcf534327f9830Julia Reynolds record.put(ATT_SHOW_BADGE, Boolean.toString(canShowBadge())); 484baff400fa5a93d157934818982fcf534327f9830Julia Reynolds record.put(ATT_ALLOWED, Boolean.toString(isAllowed())); 485b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 486b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return record; 487b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 488b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 489b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static Uri safeUri(XmlPullParser parser, String att) { 490b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds final String val = parser.getAttributeValue(null, att); 491b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return val == null ? null : Uri.parse(val); 492b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 493b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 494b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static int safeInt(XmlPullParser parser, String att, int defValue) { 495b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds final String val = parser.getAttributeValue(null, att); 496b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return tryParseInt(val, defValue); 497b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 498b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 499b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static int tryParseInt(String value, int defValue) { 500b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (TextUtils.isEmpty(value)) return defValue; 501b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds try { 502b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return Integer.parseInt(value); 503b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } catch (NumberFormatException e) { 504b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return defValue; 505b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 506b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 507b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 508b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds private static boolean safeBool(XmlPullParser parser, String att, boolean defValue) { 509b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds final String value = parser.getAttributeValue(null, att); 510b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (TextUtils.isEmpty(value)) return defValue; 511b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return Boolean.parseBoolean(value); 512b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 513b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 514f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds private static long[] safeLongArray(XmlPullParser parser, String att, long[] defValue) { 515f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds final String attributeValue = parser.getAttributeValue(null, att); 516f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds if (TextUtils.isEmpty(attributeValue)) return defValue; 517f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds String[] values = attributeValue.split(DELIMITER); 518f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds long[] longValues = new long[values.length]; 519f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds for (int i = 0; i < values.length; i++) { 520f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds try { 521f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds longValues[i] = Long.parseLong(values[i]); 522f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds } catch (NumberFormatException e) { 523f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds longValues[i] = 0; 524f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds } 525f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds } 526f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds return longValues; 527f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds } 528f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds 529f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds private static String longArrayToString(long[] values) { 530f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds StringBuffer sb = new StringBuffer(); 531f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds for (int i = 0; i < values.length - 1; i++) { 532f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds sb.append(values[i]).append(DELIMITER); 533f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds } 534f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds sb.append(values[values.length - 1]); 535f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds return sb.toString(); 536f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds } 537f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds 538b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public static final Creator<NotificationChannel> CREATOR = new Creator<NotificationChannel>() { 539b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @Override 540b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public NotificationChannel createFromParcel(Parcel in) { 541b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return new NotificationChannel(in); 542b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 543b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 544b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @Override 545b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public NotificationChannel[] newArray(int size) { 546b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return new NotificationChannel[size]; 547b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 548b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds }; 549b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 550b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @Override 551b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public int describeContents() { 552b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return 0; 553b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 554b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 555b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @Override 556b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public boolean equals(Object o) { 557b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (this == o) return true; 558b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (o == null || getClass() != o.getClass()) return false; 559b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 560b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds NotificationChannel that = (NotificationChannel) o; 561b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 562f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds if (mImportance != that.mImportance) return false; 563b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (mBypassDnd != that.mBypassDnd) return false; 564f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds if (mLockscreenVisibility != that.mLockscreenVisibility) return false; 565b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds if (mLights != that.mLights) return false; 566f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds if (mUserLockedFields != that.mUserLockedFields) return false; 567f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds if (mVibrationEnabled != that.mVibrationEnabled) return false; 568baff400fa5a93d157934818982fcf534327f9830Julia Reynolds if (mShowBadge != that.mShowBadge) return false; 569baff400fa5a93d157934818982fcf534327f9830Julia Reynolds if (mAllowed != that.mAllowed) return false; 570f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds if (mId != null ? !mId.equals(that.mId) : that.mId != null) return false; 571f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds if (mName != null ? !mName.equals(that.mName) : that.mName != null) return false; 572f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds if (mSound != null ? !mSound.equals(that.mSound) : that.mSound != null) return false; 573f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds return Arrays.equals(mVibration, that.mVibration); 57485769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds 57585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds } 57685769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds 57785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds @Override 57885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds public int hashCode() { 579f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds int result = mId != null ? mId.hashCode() : 0; 580f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds result = 31 * result + (mName != null ? mName.hashCode() : 0); 581f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds result = 31 * result + mImportance; 58285769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds result = 31 * result + (mBypassDnd ? 1 : 0); 583f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds result = 31 * result + mLockscreenVisibility; 584f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds result = 31 * result + (mSound != null ? mSound.hashCode() : 0); 58585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds result = 31 * result + (mLights ? 1 : 0); 586f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds result = 31 * result + Arrays.hashCode(mVibration); 587f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds result = 31 * result + mUserLockedFields; 588f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds result = 31 * result + (mVibrationEnabled ? 1 : 0); 589baff400fa5a93d157934818982fcf534327f9830Julia Reynolds result = 31 * result + (mShowBadge ? 1 : 0); 590baff400fa5a93d157934818982fcf534327f9830Julia Reynolds result = 31 * result + (mAllowed ? 1 : 0); 59185769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds return result; 592b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 593b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds 594b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds @Override 595b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds public String toString() { 596b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds return "NotificationChannel{" + 597b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds "mId='" + mId + '\'' + 598b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds ", mName=" + mName + 599b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds ", mImportance=" + mImportance + 600b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds ", mBypassDnd=" + mBypassDnd + 601b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds ", mLockscreenVisibility=" + mLockscreenVisibility + 6020c299d4d6316d14e43d386b4562782083fe3c886Julia Reynolds ", mSound=" + mSound + 603b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds ", mLights=" + mLights + 604f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds ", mVibration=" + Arrays.toString(mVibration) + 60585769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynolds ", mUserLockedFields=" + mUserLockedFields + 606f57de46d0b16fea790dc29062bf5e47cf63bae3eJulia Reynolds ", mVibrationEnabled=" + mVibrationEnabled + 607baff400fa5a93d157934818982fcf534327f9830Julia Reynolds ", mShowBadge=" + mShowBadge + 608baff400fa5a93d157934818982fcf534327f9830Julia Reynolds ", mAllowed=" + mAllowed + 609b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds '}'; 610b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds } 611b5e44b796618c376cf535e43aaa86ea4522e7770Julia Reynolds} 612