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