From 5259d8c9ffde747b5cd33f65c21055e7b3552141 Mon Sep 17 00:00:00 2001 From: Ta-wei Yen Date: Fri, 20 Jan 2017 12:11:40 -0800 Subject: [PATCH] Add getVisualVoicemailPackageName() Make NMR2 voicemail columns public getVisualVoicemailPackageName() and the IS_OMTP_VOICEMAIL is used by the voicemail UI to filter out voicemails not from the current visual voicemail app, for example legacy telephony voicemails or previous default dialer. These voicmails all represent the same source and are likely duplicates. BACKED_UP and RESTORED are used by the system dialer voicemail back up and restore feature in NMR2. Since there are no API bump, it was hidden and made public in this CL instead. See ag/1803794 ARCHIVED is used to prevent locally saved voicemails from being deleted during a sync because it does not exist on the server. Bug: 34463609 Fixes: 34463609 Bug: 32414216 Test: cts test android.provider.cts.VoicemailContractTest android.telephony.cts.VisualVoicemailServiceTest Change-Id: Iec1e499e763ad92f4a822715b6022e9cbe557c11 Merged-in: Iec1e499e763ad92f4a822715b6022e9cbe557c11 --- api/current.txt | 5 +++++ api/system-current.txt | 5 +++++ api/test-current.txt | 5 +++++ .../android/provider/VoicemailContract.java | 12 ++++------ .../android/telephony/TelephonyManager.java | 22 +++++++++++++++++++ .../internal/telephony/ITelephony.aidl | 3 +++ 6 files changed, 44 insertions(+), 8 deletions(-) diff --git a/api/current.txt b/api/current.txt index ad77f1f5e76db..9706e2a72f123 100644 --- a/api/current.txt +++ b/api/current.txt @@ -33781,6 +33781,8 @@ package android.provider { public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns { method public static android.net.Uri buildSourceUri(java.lang.String); + field public static final java.lang.String ARCHIVED = "archived"; + field public static final java.lang.String BACKED_UP = "backed_up"; field public static final android.net.Uri CONTENT_URI; field public static final java.lang.String DATE = "date"; field public static final java.lang.String DELETED = "deleted"; @@ -33788,6 +33790,7 @@ package android.provider { field public static final java.lang.String DIR_TYPE = "vnd.android.cursor.dir/voicemails"; field public static final java.lang.String DURATION = "duration"; field public static final java.lang.String HAS_CONTENT = "has_content"; + field public static final java.lang.String IS_OMTP_VOICEMAIL = "is_omtp_voicemail"; field public static final java.lang.String IS_READ = "is_read"; field public static final java.lang.String ITEM_TYPE = "vnd.android.cursor.item/voicemail"; field public static final java.lang.String LAST_MODIFIED = "last_modified"; @@ -33795,6 +33798,7 @@ package android.provider { field public static final java.lang.String NUMBER = "number"; field public static final java.lang.String PHONE_ACCOUNT_COMPONENT_NAME = "subscription_component_name"; field public static final java.lang.String PHONE_ACCOUNT_ID = "subscription_id"; + field public static final java.lang.String RESTORED = "restored"; field public static final java.lang.String SOURCE_DATA = "source_data"; field public static final java.lang.String SOURCE_PACKAGE = "source_package"; field public static final java.lang.String TRANSCRIPTION = "transcription"; @@ -38151,6 +38155,7 @@ package android.telephony { method public int getSimState(); method public int getSimState(int); method public java.lang.String getSubscriberId(); + method public java.lang.String getVisualVoicemailPackageName(android.telecom.PhoneAccountHandle); method public java.lang.String getVoiceMailAlphaTag(); method public java.lang.String getVoiceMailNumber(); method public int getVoiceNetworkType(); diff --git a/api/system-current.txt b/api/system-current.txt index fce33e5e705a4..d3651ff0b263a 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -36623,6 +36623,8 @@ package android.provider { public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns { method public static android.net.Uri buildSourceUri(java.lang.String); + field public static final java.lang.String ARCHIVED = "archived"; + field public static final java.lang.String BACKED_UP = "backed_up"; field public static final android.net.Uri CONTENT_URI; field public static final java.lang.String DATE = "date"; field public static final java.lang.String DELETED = "deleted"; @@ -36630,6 +36632,7 @@ package android.provider { field public static final java.lang.String DIR_TYPE = "vnd.android.cursor.dir/voicemails"; field public static final java.lang.String DURATION = "duration"; field public static final java.lang.String HAS_CONTENT = "has_content"; + field public static final java.lang.String IS_OMTP_VOICEMAIL = "is_omtp_voicemail"; field public static final java.lang.String IS_READ = "is_read"; field public static final java.lang.String ITEM_TYPE = "vnd.android.cursor.item/voicemail"; field public static final java.lang.String LAST_MODIFIED = "last_modified"; @@ -36637,6 +36640,7 @@ package android.provider { field public static final java.lang.String NUMBER = "number"; field public static final java.lang.String PHONE_ACCOUNT_COMPONENT_NAME = "subscription_component_name"; field public static final java.lang.String PHONE_ACCOUNT_ID = "subscription_id"; + field public static final java.lang.String RESTORED = "restored"; field public static final java.lang.String SOURCE_DATA = "source_data"; field public static final java.lang.String SOURCE_PACKAGE = "source_package"; field public static final java.lang.String TRANSCRIPTION = "transcription"; @@ -41364,6 +41368,7 @@ package android.telephony { method public int getSimState(int); method public java.lang.String getSubscriberId(); method public java.util.List getTelephonyHistograms(); + method public java.lang.String getVisualVoicemailPackageName(android.telecom.PhoneAccountHandle); method public java.lang.String getVoiceMailAlphaTag(); method public java.lang.String getVoiceMailNumber(); method public int getVoiceNetworkType(); diff --git a/api/test-current.txt b/api/test-current.txt index 0cd5a852abcee..436b26729274f 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -33863,6 +33863,8 @@ package android.provider { public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns { method public static android.net.Uri buildSourceUri(java.lang.String); + field public static final java.lang.String ARCHIVED = "archived"; + field public static final java.lang.String BACKED_UP = "backed_up"; field public static final android.net.Uri CONTENT_URI; field public static final java.lang.String DATE = "date"; field public static final java.lang.String DELETED = "deleted"; @@ -33870,6 +33872,7 @@ package android.provider { field public static final java.lang.String DIR_TYPE = "vnd.android.cursor.dir/voicemails"; field public static final java.lang.String DURATION = "duration"; field public static final java.lang.String HAS_CONTENT = "has_content"; + field public static final java.lang.String IS_OMTP_VOICEMAIL = "is_omtp_voicemail"; field public static final java.lang.String IS_READ = "is_read"; field public static final java.lang.String ITEM_TYPE = "vnd.android.cursor.item/voicemail"; field public static final java.lang.String LAST_MODIFIED = "last_modified"; @@ -33877,6 +33880,7 @@ package android.provider { field public static final java.lang.String NUMBER = "number"; field public static final java.lang.String PHONE_ACCOUNT_COMPONENT_NAME = "subscription_component_name"; field public static final java.lang.String PHONE_ACCOUNT_ID = "subscription_id"; + field public static final java.lang.String RESTORED = "restored"; field public static final java.lang.String SOURCE_DATA = "source_data"; field public static final java.lang.String SOURCE_PACKAGE = "source_package"; field public static final java.lang.String TRANSCRIPTION = "transcription"; @@ -38250,6 +38254,7 @@ package android.telephony { method public int getSimState(); method public int getSimState(int); method public java.lang.String getSubscriberId(); + method public java.lang.String getVisualVoicemailPackageName(android.telecom.PhoneAccountHandle); method public java.lang.String getVoiceMailAlphaTag(); method public java.lang.String getVoiceMailNumber(); method public int getVoiceNetworkType(); diff --git a/core/java/android/provider/VoicemailContract.java b/core/java/android/provider/VoicemailContract.java index e48a0d08de7de..a8b094eab0a2a 100644 --- a/core/java/android/provider/VoicemailContract.java +++ b/core/java/android/provider/VoicemailContract.java @@ -284,8 +284,6 @@ public class VoicemailContract { * not. * *

Type: INTEGER (boolean)

- * - * @hide */ public static final String BACKED_UP = "backed_up"; @@ -294,8 +292,6 @@ public class VoicemailContract { * restored, 0 if not. * *

Type: INTEGER (boolean)

- * - * @hide */ public static final String RESTORED = "restored"; @@ -305,19 +301,19 @@ public class VoicemailContract { * if not. * *

Type: INTEGER (boolean)

- * - * @hide */ public static final String ARCHIVED = "archived"; /** * Flag to indicate the voicemail is a OMTP voicemail handled by the {@link * android.telephony.VisualVoicemailService}. The UI should only show OMTP voicemails from - * the current visual voicemail package. + * the current visual voicemail package. For example, the selection could be + * {@code WHERE (IS_OMTP_VOICEMAIL == 0) OR ( IS_OMTP_VOICEMAIL == 1 AND SOURCE_PACKAGE == + * "current.vvm.package")} * *

Type: INTEGER (boolean)

* - * @hide + * @see android.telephony.TelephonyManager#getVisualVoicemailPackageName */ public static final String IS_OMTP_VOICEMAIL = "is_omtp_voicemail"; diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 5a848d956f5df..6e79a9c3ed801 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -2712,6 +2712,28 @@ public class TelephonyManager { return false; } + + /** + * Returns the package responsible of processing visual voicemail for the phone account. + * + *

Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE + * READ_PHONE_STATE} + */ + @Nullable + public String getVisualVoicemailPackageName(PhoneAccountHandle phoneAccountHandle) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony + .getVisualVoicemailPackageName(mContext.getOpPackageName(), + phoneAccountHandle); + } + } catch (RemoteException ex) { + } catch (NullPointerException ex) { + } + return null; + } + /** * Enables the visual voicemail SMS filter for a phone account. When the filter is * enabled, Incoming SMS messages matching the OMTP VVM SMS interface will be redirected to the diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 6de62de866f2e..454ab40ab66f3 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -504,6 +504,9 @@ interface ITelephony { boolean isVisualVoicemailEnabled(String callingPackage, in PhoneAccountHandle accountHandle); + String getVisualVoicemailPackageName(String callingPackage, + in PhoneAccountHandle phoneAccountHandle); + // Not oneway, caller needs to make sure the vaule is set before receiving a SMS void enableVisualVoicemailSmsFilter(String callingPackage, int subId, in VisualVoicemailSmsFilterSettings settings);