15ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee/* 25ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * Copyright (C) 2011 The Android Open Source Project 35ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * 45ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License"); 55ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * you may not use this file except in compliance with the License. 65ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * You may obtain a copy of the License at 75ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * 85ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * http://www.apache.org/licenses/LICENSE-2.0 95ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * 105ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * Unless required by applicable law or agreed to in writing, software 115ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS, 125ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * See the License for the specific language governing permissions and 145ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * limitations under the License 155ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1629c1575bf6d11e76c5869fbbdd1cdea1d09ca0e0Debashish Chatterjee 175ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjeepackage android.provider; 185ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee 195521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjeeimport android.Manifest; 205521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjeeimport android.annotation.SdkConstant; 215521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjeeimport android.annotation.SdkConstant.SdkConstantType; 225ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjeeimport android.content.Intent; 235ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjeeimport android.database.ContentObserver; 245ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjeeimport android.net.Uri; 255ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjeeimport android.provider.CallLog.Calls; 26d868be588b19f5a29e04beebbc40025253875613Debashish Chatterjee 275ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee/** 285ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * The contract between the voicemail provider and applications. Contains 295ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * definitions for the supported URIs and columns. 305ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * 315521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * <P>The content providers exposes two tables through this interface: 325521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * <ul> 335521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * <li> Voicemails table: This stores the actual voicemail records. The 345521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * columns and URIs for accessing this table are defined by the 355521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * {@link Voicemails} class. 365521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * </li> 375521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * <li> Status table: This provides a way for the voicemail source application 385521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * to convey its current state to the system. The columns and URIS for 395521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * accessing this table are defined by the {@link Status} class. 405521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * </li> 415521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * </ul> 425521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * 435521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * <P> The minimum permission needed to access this content provider is 44e53eba0470b7578def756cd22952d447776ba141Debashish Chatterjee * {@link Manifest.permission#ADD_VOICEMAIL} 455521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * 465ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>Voicemails are inserted by what is called as a "voicemail source" 475ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * application, which is responsible for syncing voicemail data between a remote 485ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * server and the local voicemail content provider. "voicemail source" 495521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * application should always set the {@link #PARAM_KEY_SOURCE_PACKAGE} in the 505521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * URI to identify its package. 515ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * 525ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>In addition to the {@link ContentObserver} notifications the voicemail 535ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * provider also generates broadcast intents to notify change for applications 545ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * that are not active and therefore cannot listen to ContentObserver 555ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * notifications. Broadcast intents with following actions are generated: 565ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <ul> 575ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <li> {@link #ACTION_NEW_VOICEMAIL} is generated for each new voicemail 585ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * inserted. 595ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * </li> 605ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <li> {@link Intent#ACTION_PROVIDER_CHANGED} is generated for any change 615ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * made into the database, including new voicemail. 625ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * </li> 635ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * </ul> 645ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 655ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjeepublic class VoicemailContract { 66d868be588b19f5a29e04beebbc40025253875613Debashish Chatterjee /** Not instantiable. */ 67d868be588b19f5a29e04beebbc40025253875613Debashish Chatterjee private VoicemailContract() { 68d868be588b19f5a29e04beebbc40025253875613Debashish Chatterjee } 69d868be588b19f5a29e04beebbc40025253875613Debashish Chatterjee 705ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** The authority used by the voicemail provider. */ 715ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static final String AUTHORITY = "com.android.voicemail"; 72f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee /** 7373f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * Parameter key used in the URI to specify the voicemail source package name. 7473f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <p> This field must be set in all requests that originate from a voicemail source. 7573f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee */ 7673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final String PARAM_KEY_SOURCE_PACKAGE = "source_package"; 775ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee 785ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** Broadcast intent when a new voicemail record is inserted. */ 795521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 805ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static final String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL"; 81267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee 82267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee /** 83267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee * Broadcast intent to request a voicemail source to fetch voicemail content of a specific 84267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee * voicemail from the remote server. The voicemail to fetch is specified by the data uri 85267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee * of the intent. 86267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee * <p> 87267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee * All voicemail sources are expected to handle this event. After storing the content 88267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee * the application should also set {@link Voicemails#HAS_CONTENT} to 1; 89267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee */ 90267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 91267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee public static final String ACTION_FETCH_VOICEMAIL = "android.intent.action.FETCH_VOICEMAIL"; 92267a2ec0402470f46079ae2d9d5059e2bb67453aDebashish Chatterjee 934687cbc48d710069d65086c7e8b600edb01e1255Debashish Chatterjee /** 945521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Extra included in {@link Intent#ACTION_PROVIDER_CHANGED} broadcast intents to indicate if the 955521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * receiving package made this change. 964687cbc48d710069d65086c7e8b600edb01e1255Debashish Chatterjee */ 974687cbc48d710069d65086c7e8b600edb01e1255Debashish Chatterjee public static final String EXTRA_SELF_CHANGE = "com.android.voicemail.extra.SELF_CHANGE"; 985ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee 991752ae72ce09b30244577ee0ee563caa5dbf871eDebashish Chatterjee /** 1001752ae72ce09b30244577ee0ee563caa5dbf871eDebashish Chatterjee * Name of the source package field, which must be same across all voicemail related tables. 1015521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * This is an internal field. 1021752ae72ce09b30244577ee0ee563caa5dbf871eDebashish Chatterjee * @hide 1031752ae72ce09b30244577ee0ee563caa5dbf871eDebashish Chatterjee */ 1041752ae72ce09b30244577ee0ee563caa5dbf871eDebashish Chatterjee public static final String SOURCE_PACKAGE_FIELD = "source_package"; 1051752ae72ce09b30244577ee0ee563caa5dbf871eDebashish Chatterjee 10673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** Defines fields exposed through the /voicemail path of this content provider. */ 107978f712f3712c25c80279650c2921d8a58abec07Hugo Hudson public static final class Voicemails implements BaseColumns, OpenableColumns { 108d868be588b19f5a29e04beebbc40025253875613Debashish Chatterjee /** Not instantiable. */ 109d868be588b19f5a29e04beebbc40025253875613Debashish Chatterjee private Voicemails() { 110d868be588b19f5a29e04beebbc40025253875613Debashish Chatterjee } 111d868be588b19f5a29e04beebbc40025253875613Debashish Chatterjee 1129b8dd63445b62783d544fef030518ce8a0fb0691Debashish Chatterjee /** URI to insert/retrieve voicemails. */ 113f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee public static final Uri CONTENT_URI = 114f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee Uri.parse("content://" + AUTHORITY + "/voicemail"); 115f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee 1165521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** The MIME type for a collection of voicemails. */ 117f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee public static final String DIR_TYPE = "vnd.android.cursor.dir/voicemails"; 118f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee 1195521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** The MIME type for a single voicemail. */ 1205521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee public static final String ITEM_TYPE = "vnd.android.cursor.item/voicemail"; 1215521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee 1225ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** 1235ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * Phone number of the voicemail sender. 1245ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>Type: TEXT</P> 1255ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1265ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static final String NUMBER = Calls.NUMBER; 1275ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** 1285ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * The date the voicemail was sent, in milliseconds since the epoch 1295ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>Type: INTEGER (long)</P> 1305ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1315ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static final String DATE = Calls.DATE; 1325ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** 1335ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * The duration of the voicemail in seconds. 1345ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>Type: INTEGER (long)</P> 1355ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1365ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static final String DURATION = Calls.DURATION; 1375ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** 138651212d37db9aa6d03b30a8a09a2a44627862eeaFlavio Lerda * Whether this item has been read or otherwise consumed by the user. 139651212d37db9aa6d03b30a8a09a2a44627862eeaFlavio Lerda * <P>Type: INTEGER (boolean)</P> 140651212d37db9aa6d03b30a8a09a2a44627862eeaFlavio Lerda */ 141651212d37db9aa6d03b30a8a09a2a44627862eeaFlavio Lerda public static final String IS_READ = Calls.IS_READ; 142651212d37db9aa6d03b30a8a09a2a44627862eeaFlavio Lerda /** 1435521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * The mail box state of the voicemail. This field is currently not used by the system. 1445ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P> Possible values: {@link #STATE_INBOX}, {@link #STATE_DELETED}, 1455ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * {@link #STATE_UNDELETED}. 1465ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>Type: INTEGER</P> 1475521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * @hide 1485ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1495ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static final String STATE = "state"; 1505521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** 1515521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #STATE} when the voicemail is in inbox. 1525521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * @hide 1535521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee */ 1545ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static int STATE_INBOX = 0; 1555521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** 1565521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #STATE} when the voicemail has been marked as deleted. 1575521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * @hide 1585521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee */ 1595ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static int STATE_DELETED = 1; 1605521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** 1615521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #STATE} when the voicemail has marked as undeleted. 1625521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * @hide 1635521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee */ 1645ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static int STATE_UNDELETED = 2; 1655ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** 1665ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * Package name of the source application that inserted the voicemail. 1675ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>Type: TEXT</P> 1685ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1691752ae72ce09b30244577ee0ee563caa5dbf871eDebashish Chatterjee public static final String SOURCE_PACKAGE = SOURCE_PACKAGE_FIELD; 1705ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** 1715ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * Application-specific data available to the source application that 1725ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * inserted the voicemail. This is typically used to store the source 1735ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * specific message id to identify this voicemail on the remote 1745ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * voicemail server. 1755ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>Type: TEXT</P> 1765ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P> Note that this is NOT the voicemail media content data. 1775ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1787658408160a7c29a07b7e667457309a49f43b39fDebashish Chatterjee public static final String SOURCE_DATA = "source_data"; 1795ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** 1805ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * Whether the media content for this voicemail is available for 1815ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * consumption. 1825ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>Type: INTEGER (boolean)</P> 1835ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1845ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static final String HAS_CONTENT = "has_content"; 1855ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** 1865ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * MIME type of the media content for the voicemail. 1875ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * <P>Type: TEXT</P> 1885ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1895ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static final String MIME_TYPE = "mime_type"; 1905ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee /** 1915ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * Path to the media content file. Internal only field. 1925ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee * @hide 1935ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee */ 1945ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee public static final String _DATA = "_data"; 195f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee 196f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee /** 197f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee * A convenience method to build voicemail URI specific to a source package by appending 198f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee * {@link VoicemailContract#PARAM_KEY_SOURCE_PACKAGE} param to the base URI. 199f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee */ 200f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee public static Uri buildSourceUri(String packageName) { 201f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee return Voicemails.CONTENT_URI.buildUpon() 202f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee .appendQueryParameter(PARAM_KEY_SOURCE_PACKAGE, packageName).build(); 203f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee } 2045ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee } 20573f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee 20673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** Defines fields exposed through the /status path of this content provider. */ 20773f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final class Status implements BaseColumns { 208f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee /** URI to insert/retrieve status of voicemail source. */ 209f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/status"); 2105521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** The MIME type for a collection of voicemail source statuses. */ 211f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee public static final String DIR_TYPE = "vnd.android.cursor.dir/voicemail.source.status"; 2125521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** The MIME type for a single voicemail source status entry. */ 213f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee public static final String ITEM_TYPE = "vnd.android.cursor.item/voicemail.source.status"; 214f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee 21573f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** Not instantiable. */ 21673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee private Status() { 21773f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee } 21873f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** 21973f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * The package name of the voicemail source. There can only be a one entry per source. 22073f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <P>Type: TEXT</P> 22173f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee */ 2221752ae72ce09b30244577ee0ee563caa5dbf871eDebashish Chatterjee public static final String SOURCE_PACKAGE = SOURCE_PACKAGE_FIELD; 22373f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** 22473f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * The URI to call to invoke source specific voicemail settings screen. On a user request 22573f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * to setup voicemail an intent with action VIEW with this URI will be fired by the system. 22673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <P>Type: TEXT</P> 22773f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee */ 22873f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final String SETTINGS_URI = "settings_uri"; 22973f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** 23073f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * The URI to call when the user requests to directly access the voicemail from the remote 23173f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * server. In case of an IVR voicemail system this is typically set to the the voicemail 23273f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * number specified using a tel:/ URI. 23373f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <P>Type: TEXT</P> 23473f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee */ 23573f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final String VOICEMAIL_ACCESS_URI = "voicemail_access_uri"; 23673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** 23773f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * The configuration state of the voicemail source. 23873f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <P> Possible values: 23973f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * {@link #CONFIGURATION_STATE_OK}, 24073f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * {@link #CONFIGURATION_STATE_NOT_CONFIGURED}, 24173f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * {@link #CONFIGURATION_STATE_CAN_BE_CONFIGURED} 24273f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <P>Type: INTEGER</P> 24373f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee */ 24473f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final String CONFIGURATION_STATE = "configuration_state"; 2455521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** Value of {@link #CONFIGURATION_STATE} to indicate an all OK configuration status. */ 24673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final int CONFIGURATION_STATE_OK = 0; 2475521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** 2485521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #CONFIGURATION_STATE} to indicate the visual voicemail is not 2495521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * yet configured on this device. 2505521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee */ 25173f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final int CONFIGURATION_STATE_NOT_CONFIGURED = 1; 25273f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** 2535521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #CONFIGURATION_STATE} to indicate the visual voicemail is not 2545521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * yet configured on this device but can be configured by the user. 2555521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * <p> This state must be used when the source has verified that the current user can be 25673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * upgraded to visual voicemail and would like to show a set up invitation message. 25773f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee */ 25873f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final int CONFIGURATION_STATE_CAN_BE_CONFIGURED = 2; 25973f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** 26073f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * The data channel state of the voicemail source. This the channel through which the source 26173f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * pulls voicemail data from a remote server. 26273f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <P> Possible values: 26373f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * {@link #DATA_CHANNEL_STATE_OK}, 26473f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * {@link #DATA_CHANNEL_STATE_NO_CONNECTION} 26573f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * </P> 26673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <P>Type: INTEGER</P> 26773f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee */ 26873f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final String DATA_CHANNEL_STATE = "data_channel_state"; 2695521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** 2705521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #DATA_CHANNEL_STATE} to indicate that data channel is working fine. 2715521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee */ 27273f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final int DATA_CHANNEL_STATE_OK = 0; 2735521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** 2745521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #DATA_CHANNEL_STATE} to indicate that data channel connection is not 2755521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * working. 2765521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee */ 27773f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final int DATA_CHANNEL_STATE_NO_CONNECTION = 1; 27873f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** 27973f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * The notification channel state of the voicemail source. This is the channel through which 28073f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * the source gets notified of new voicemails on the remote server. 28173f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <P> Possible values: 28273f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * {@link #NOTIFICATION_CHANNEL_STATE_OK}, 28373f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * {@link #NOTIFICATION_CHANNEL_STATE_NO_CONNECTION}, 28473f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * {@link #NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING} 28573f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * </P> 28673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * <P>Type: INTEGER</P> 28773f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee */ 28873f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final String NOTIFICATION_CHANNEL_STATE = "notification_channel_state"; 2895521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** 2905521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #NOTIFICATION_CHANNEL_STATE} to indicate that the notification channel is 2915521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * working fine. 2925521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee */ 29373f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final int NOTIFICATION_CHANNEL_STATE_OK = 0; 2945521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee /** 2955521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #NOTIFICATION_CHANNEL_STATE} to indicate that the notification channel 2965521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * connection is not working. 2975521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee */ 29873f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final int NOTIFICATION_CHANNEL_STATE_NO_CONNECTION = 1; 29973f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee /** 3005521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * Value of {@link #NOTIFICATION_CHANNEL_STATE} to indicate that there are messages waiting 3015521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * on the server but the details are not known. 3025521e892f8b5b2313619405684d426309f66ade4Debashish Chatterjee * <p> Use this state when the notification can only tell that there are pending messages on 30373f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee * the server but no details of the sender/time etc are known. 30473f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee */ 30573f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee public static final int NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING = 2; 30673f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee 307f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee /** 308f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee * A convenience method to build status URI specific to a source package by appending 309f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee * {@link VoicemailContract#PARAM_KEY_SOURCE_PACKAGE} param to the base URI. 310f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee */ 311f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee public static Uri buildSourceUri(String packageName) { 312f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee return Status.CONTENT_URI.buildUpon() 313f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee .appendQueryParameter(PARAM_KEY_SOURCE_PACKAGE, packageName).build(); 314f4bf100225d8e7fd2dd9bbde7ec7a152e15b9ef4Debashish Chatterjee } 31573f0a3a6bde168524a5f3c7ac31ba372174940e7Debashish Chatterjee } 3165ae3c009edebaaae8314896719fe0b5b1c64c687Debashish Chatterjee} 317