Danielle Roberts | ceaeee7 | 2015-09-23 16:58:51 -0700 | [diff] [blame] | 1 | page.title=Visual Voicemail |
| 2 | @jd:body |
| 3 | |
| 4 | <!-- |
| 5 | Copyright 2015 The Android Open Source Project |
| 6 | |
| 7 | Licensed under the Apache License, Version 2.0 (the "License"); |
| 8 | you may not use this file except in compliance with the License. |
| 9 | You may obtain a copy of the License at |
| 10 | |
| 11 | http://www.apache.org/licenses/LICENSE-2.0 |
| 12 | |
| 13 | Unless required by applicable law or agreed to in writing, software |
| 14 | distributed under the License is distributed on an "AS IS" BASIS, |
| 15 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 16 | See the License for the specific language governing permissions and |
| 17 | limitations under the License. |
| 18 | --> |
| 19 | <div id="qv-wrapper"> |
| 20 | <div id="qv"> |
| 21 | <h2>In this document</h2> |
| 22 | <ol id="auto-toc"> |
| 23 | </ol> |
| 24 | </div> |
| 25 | </div> |
| 26 | |
| 27 | <p>Android 6.0 (Marshmallow) brings an implementation of Visual Voicemail (VVM) |
| 28 | support integrated into the Dialer, allowing compatible Carrier VVM services to |
| 29 | hook into the Dialer with minimal configuration. Visual voicemail lets users |
| 30 | easily check voicemail without making any phone calls. Users can view a list of |
| 31 | messages in an inbox-like interface, listen to them in any order, and can |
| 32 | delete them as desired.</p> |
| 33 | |
| 34 | <p>This article gives an overview of what is provided, how carriers can integrate |
| 35 | with it, and some details of the implementation.</p> |
| 36 | |
| 37 | <h2 id=visual_voicemail_vvm_client>Visual Voicemail (VVM) client</h2> |
| 38 | |
| 39 | <p>Android 6.0 includes a OMTP VVM client, which (when provided with the correct |
| 40 | configuration) will connect to Carrier VVM servers and populate Visual |
| 41 | Voicemail messages within the AOSP Dialer. The VVM client:</p> |
| 42 | |
| 43 | <ul> |
| 44 | <li>Handles the SMS messages used to activate/deactivate/query status of the |
| 45 | service and the SMS messages used to notify the device of events in the |
| 46 | subscriber’s mailbox |
| 47 | <li>Syncs the mailbox with the IMAP server |
| 48 | <li>Downloads the voicemails when the user chooses to listen to them |
| 49 | <li>Integrates into the Dialer for user functionality such as calling back, viewing |
| 50 | unread messages, deleting messages, etc. |
| 51 | </ul> |
| 52 | |
| 53 | <h2 id=integrate_with_the_vvm_client>Integrate with the VVM client</h2> |
| 54 | |
| 55 | <h3 id=implementation>Implementation</h3> |
| 56 | |
| 57 | <p>The Carrier must provide a Visual Voicemail server implementing the <a href="http://www.gsma.com/newsroom/wp-content/uploads/2012/07/OMTP_VVM_Specification_1_3.pdf">OMTP VVM specifications</a>. The current implementation of the Google VVM client supports the core |
| 58 | features (read/delete voicemails, download/sync/listen) but the additional TUI |
| 59 | features (password change, voicemail greeting, languages) are not implemented. |
| 60 | At this time, we only support OMTP version 1.1 and do not use encryption for |
| 61 | IMAP authentication. </p> |
| 62 | |
| 63 | <p><strong>Note</strong> that server-originated SMS messages to the device (e.g. STATUS or SYNC) must |
| 64 | not be class 0 messages.</p> |
| 65 | |
| 66 | <h3 id=configuration>Configuration</h3> |
| 67 | |
| 68 | <p>In order for a carrier to integrate with the VVM service, the carrier must |
| 69 | provide configuration details to the platform that the OMTP client can use. |
| 70 | These parameters are:</p> |
| 71 | |
| 72 | <ul> |
| 73 | <li>Destination number and port number for SMS |
| 74 | <li>Authentication security type for IMAP (SSL, TLS, none, etc.) |
| 75 | <li>The package name of the carrier-provided Visual Voicemail app (if one is |
| 76 | provided), so that the platform implementation can be disabled if that package |
| 77 | is installed |
| 78 | </ul> |
| 79 | |
| 80 | <p>These values are provided through the <a href="https://developer.android.com/reference/android/telephony/CarrierConfigManager.html">Carrier Config API</a>. This functionality, launched in Android 6.0, allows an application to |
| 81 | dynamically provide telephony-related configuration to the various platform |
| 82 | components that need it. In particular the following keys must have values |
| 83 | defined:</p> |
| 84 | |
| 85 | <ul> |
| 86 | <li><code>KEY_VVM_DESTINATION_NUMBER_STRING</code> |
| 87 | <li><code>KEY_VVM_PORT_NUMBER_INT</code> |
| 88 | <li><code>KEY_VVM_TYPE_STRING</code> |
| 89 | <li><code>KEY_CARRIER_VVM_PACKAGE_NAME_STRING</code> |
| 90 | </ul> |
| 91 | |
| 92 | <p>Please see the <a href="{@docRoot}devices/tech/config/carrier.html">Carrier Configuration</a> article for more detail.</p> |
| 93 | |
| 94 | <h2 id=implementation>Implementation</h2> |
| 95 | |
| 96 | <p>The OMTP VVM client is implemented within <code>packages/services/Telephony</code>, in particular within <code>src/com/android/phone/vvm/</code></p> |
| 97 | |
| 98 | <h3 id=setup>Setup</h3> |
| 99 | |
| 100 | <ol> |
| 101 | <li>The VVM client listens for <code>TelephonyIntents#ACTION_SIM_STATE_CHANGED</code> or <code>CarrierConfigManager#ACTION_CARRIER_CONFIG_CHANGED</code>. |
| 102 | <li>When a SIM is added that has the right Carrier Config values (<code>KEY_VVM_TYPE_STRING</code> set to <code>TelephonyManager.VVM_TYPE_OMTP</code> or <code>TelephonyManager.VVM_TYPE_CVVM</code>), the VVM client sends an ACTIVATE SMS to the value specified in <code>KEY_VVM_DESTINATION_NUMBER_STRING</code>. |
| 103 | <li>The server activates the visual voicemail service and sends the OMTP |
| 104 | credentials via STATUS sms. When the VVM client receives the STATUS sms, it |
| 105 | registers the voicemail source and displays the voicemail tab on the device. |
| 106 | <li>The OMTP credentials are saved locally and the device begins a full sync, as |
| 107 | described below. |
| 108 | </ol> |
| 109 | |
| 110 | <h3 id=syncing>Syncing</h3> |
| 111 | |
| 112 | <p>There are a variety of ways that the VVM client can sync with the carrier |
| 113 | server and vice versa.</p> |
| 114 | |
| 115 | <ul> |
| 116 | <li><strong>Full syncs</strong> occur upon initial download. The VVM client only fetches voicemail metadata |
| 117 | like date and time, origin number, duration, etc. Full syncs can be triggered |
| 118 | by a: |
| 119 | <ul> |
| 120 | <li>new SIM |
| 121 | <li>device reboot |
| 122 | <li>device coming back in service |
| 123 | </ul> |
| 124 | <li><strong>Upload sync</strong> happens when a user interacts with a voicemail to read or delete it. Upload |
| 125 | syncs result in the server changing its data to match the data on the device. |
| 126 | For example, if the user reads a voicemail, it's marked as read on the server; |
| 127 | if a user deletes a voicemail, it's deleted on the server. |
| 128 | <li><strong>Download sync</strong> occurs when the VVM client receives a "MBU" (mailbox update) SYNC sms from the |
| 129 | carrier. A SYNC message contains the metadata for a new message so that it can |
| 130 | be stored in the voicemail content provider. |
| 131 | </ul> |
| 132 | |
| 133 | <h3 id=voicemail_download>Voicemail Download</h3> |
| 134 | |
| 135 | <p>When a user presses play to listen to a voicemail, the corresponding audio file |
| 136 | is downloaded. If the user chooses to listen to the Voicemail, the Dialer can |
| 137 | broadcast <code>VoicemailContract.ACTION_FETCH_VOICEMAIL</code>, which the voicemail client will receive, initiate the download of the |
| 138 | content, and update the record in the platform Voicemail content provider.</p> |
| 139 | |
| 140 | <h3 id=disabling_vvm>Disabling VVM</h3> |
| 141 | |
| 142 | <p>The VVM service can be disabled or deactivated by user interaction, removal of |
| 143 | a valid SIM, or replacement by a carrier VVM app. <em>Disabled</em> means that the local device no longer displays visual voicemail. <em>Deactivated</em> means that the service is turned off for the subscriber. User interaction can |
| 144 | deactivate the service, SIM removal temporarily disables the service because |
| 145 | it's no longer present, and carrier VVM replacement disables the Google |
| 146 | component of visual voicemail.</p> |
| 147 | |
| 148 | <h4 id=user_interaction>User interaction</h4> |
| 149 | |
| 150 | <p>The user may manually enable or disable visual voicemail. If a user disables |
| 151 | visual voicemail, they are also deactivating their service. When they disable |
| 152 | visual voicemail, a DEACTIVATE sms is sent, the voicemail source is |
| 153 | unregistered locally, and voicemail tab disappears. If they re-enable visual |
| 154 | voicemail, their service is reactivated as well.</p> |
| 155 | |
| 156 | <h4 id=sim_removal>SIM removal</h4> |
| 157 | |
| 158 | <p>If there are changes to the device’s SIM state (<code>ACTION_SIM_STATE_CHANGED</code>) or Carrier Config values (<code>ACTION_CARRIER_CONFIG_CHANGED</code>), and a valid configuration for the given SIM no longer exists, then the |
| 159 | voicemail source is unregistered locally and the voicemail tab disappears. If |
| 160 | the SIM is replaced, VVM will be re-enabled.</p> |
| 161 | |
| 162 | <h4 id=replaced_by_carrier_vvm>Replaced by carrier VVM</h4> |
| 163 | |
| 164 | <p>If the device or the user installs a corresponding carrier visual voicemail app |
| 165 | and the carrier has opted to disable Google visual voicemail if the carrier |
| 166 | equivalent is installed, then the Google visual voicemail client will be |
| 167 | automatically disabled. This is achieved by checking if a package with a name |
| 168 | matching the <code>KEY_CARRIER_VVM_PACKAGE_NAME_STRING</code> parameter is installed.</p> |
| 169 | |
| 170 | <p>The VVM client can still be enabled through user interaction.</p> |
| 171 | |
| 172 | <h2 id=testing>Testing</h2> |
| 173 | |
| 174 | <p>There is an existing (since Android 4.0) set of CTS tests for the |
| 175 | VoicemailProvider APIs that allow an app to insert/query/delete voicemails into |
| 176 | the platform. These are the same APIs that VVM uses to add/delete voicemails so |
| 177 | that any Dialer app can display them in the UI.</p> |
| 178 | |
| 179 | <p>To test your configuration application is passing the OMTP configuration |
| 180 | correctly you can test your code with:</p> |
| 181 | |
| 182 | <ul> |
| 183 | <li>A SIM containing a valid certificate signature |
| 184 | <li>A device running Android 6.0 with an unmodified version of the AOSP phone framework |
| 185 | </ul> |