Android 6.0 (Marshmallow) brings an implementation of Visual Voicemail (VVM) support integrated into the Dialer, allowing compatible Carrier VVM services to hook into the Dialer with minimal configuration. Visual voicemail lets users easily check voicemail without making any phone calls. Users can view a list of messages in an inbox-like interface, listen to them in any order, and can delete them as desired.
This article gives an overview of what is provided, how carriers can integrate with it, and some details of the implementation.
Android 6.0 includes a OMTP VVM client, which (when provided with the correct configuration) will connect to Carrier VVM servers and populate Visual Voicemail messages within the AOSP Dialer. The VVM client:
The Carrier must provide a Visual Voicemail server implementing the OMTP VVM specifications. The current implementation of the Google VVM client supports the core features (read/delete voicemails, download/sync/listen) but the additional TUI features (password change, voicemail greeting, languages) are not implemented. At this time, we only support OMTP version 1.1 and do not use encryption for IMAP authentication.
Note that server-originated SMS messages to the device (e.g. STATUS or SYNC) must not be class 0 messages.
In order for a carrier to integrate with the VVM service, the carrier must provide configuration details to the platform that the OMTP client can use. These parameters are:
These values are provided through the Carrier Config API. This functionality, launched in Android 6.0, allows an application to dynamically provide telephony-related configuration to the various platform components that need it. In particular the following keys must have values defined:
KEY_VVM_DESTINATION_NUMBER_STRING
KEY_VVM_PORT_NUMBER_INT
KEY_VVM_TYPE_STRING
KEY_CARRIER_VVM_PACKAGE_NAME_STRING
Please see the Carrier Configuration article for more detail.
The OMTP VVM client is implemented within packages/services/Telephony
, in particular within src/com/android/phone/vvm/
TelephonyIntents#ACTION_SIM_STATE_CHANGED
or CarrierConfigManager#ACTION_CARRIER_CONFIG_CHANGED
. KEY_VVM_TYPE_STRING
set to TelephonyManager.VVM_TYPE_OMTP
or TelephonyManager.VVM_TYPE_CVVM
), the VVM client sends an ACTIVATE SMS to the value specified in KEY_VVM_DESTINATION_NUMBER_STRING
. There are a variety of ways that the VVM client can sync with the carrier server and vice versa.
When a user presses play to listen to a voicemail, the corresponding audio file is downloaded. If the user chooses to listen to the Voicemail, the Dialer can broadcast VoicemailContract.ACTION_FETCH_VOICEMAIL
, which the voicemail client will receive, initiate the download of the content, and update the record in the platform Voicemail content provider.
The VVM service can be disabled or deactivated by user interaction, removal of a valid SIM, or replacement by a carrier VVM app. Disabled means that the local device no longer displays visual voicemail. Deactivated means that the service is turned off for the subscriber. User interaction can deactivate the service, SIM removal temporarily disables the service because it’s no longer present, and carrier VVM replacement disables the Google component of visual voicemail.
The user may manually enable or disable visual voicemail. If a user disables visual voicemail, they are also deactivating their service. When they disable visual voicemail, a DEACTIVATE sms is sent, the voicemail source is unregistered locally, and voicemail tab disappears. If they re-enable visual voicemail, their service is reactivated as well.
If there are changes to the device’s SIM state (ACTION_SIM_STATE_CHANGED
) or Carrier Config values (ACTION_CARRIER_CONFIG_CHANGED
), and a valid configuration for the given SIM no longer exists, then the voicemail source is unregistered locally and the voicemail tab disappears. If the SIM is replaced, VVM will be re-enabled.
If the device or the user installs a corresponding carrier visual voicemail app and the carrier has opted to disable Google visual voicemail if the carrier equivalent is installed, then the Google visual voicemail client will be automatically disabled. This is achieved by checking if a package with a name matching the KEY_CARRIER_VVM_PACKAGE_NAME_STRING
parameter is installed.
The VVM client can still be enabled through user interaction.
There is an existing (since Android 4.0) set of CTS tests for the VoicemailProvider APIs that allow an app to insert/query/delete voicemails into the platform. These are the same APIs that VVM uses to add/delete voicemails so that any Dialer app can display them in the UI.
To test your configuration application is passing the OMTP configuration correctly you can test your code with: