diff --git a/api/current.txt b/api/current.txt index 2316d41fa559f..85a51207736ae 100644 --- a/api/current.txt +++ b/api/current.txt @@ -40237,10 +40237,12 @@ package android.telephony { method public void sendDialerSpecialCode(java.lang.String); method public java.lang.String sendEnvelopeWithStatus(java.lang.String); method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.UssdResponseCallback, android.os.Handler); + method public void sendVisualVoicemailSms(java.lang.String, int, java.lang.String, android.app.PendingIntent); method public void setDataEnabled(boolean); method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String); method public boolean setOperatorBrandOverride(java.lang.String); method public boolean setPreferredNetworkTypeToGlobal(); + method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings); method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); method public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri); method public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean); @@ -40331,8 +40333,6 @@ package android.telephony { method public abstract void onSimRemoved(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telecom.PhoneAccountHandle); method public abstract void onSmsReceived(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telephony.VisualVoicemailSms); method public abstract void onStopped(android.telephony.VisualVoicemailService.VisualVoicemailTask); - method public static final void sendVisualVoicemailSms(android.content.Context, android.telecom.PhoneAccountHandle, java.lang.String, short, java.lang.String, android.app.PendingIntent); - method public static final void setSmsFilterSettings(android.content.Context, android.telecom.PhoneAccountHandle, android.telephony.VisualVoicemailSmsFilterSettings); field public static final java.lang.String SERVICE_INTERFACE = "android.telephony.VisualVoicemailService"; } diff --git a/api/system-current.txt b/api/system-current.txt index 3e42e8395cb35..4269286a86c11 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -43767,6 +43767,7 @@ package android.telephony { method public void sendDialerSpecialCode(java.lang.String); method public java.lang.String sendEnvelopeWithStatus(java.lang.String); method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.UssdResponseCallback, android.os.Handler); + method public void sendVisualVoicemailSms(java.lang.String, int, java.lang.String, android.app.PendingIntent); method public int setAllowedCarriers(int, java.util.List); method public void setDataEnabled(boolean); method public void setDataEnabled(int, boolean); @@ -43776,6 +43777,7 @@ package android.telephony { method public boolean setRadio(boolean); method public boolean setRadioPower(boolean); method public deprecated void setVisualVoicemailEnabled(android.telecom.PhoneAccountHandle, boolean); + method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings); method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); method public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri); method public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean); diff --git a/api/test-current.txt b/api/test-current.txt index e1ad7ac3a1f28..805f5944d00af 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -40432,10 +40432,12 @@ package android.telephony { method public void sendDialerSpecialCode(java.lang.String); method public java.lang.String sendEnvelopeWithStatus(java.lang.String); method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.UssdResponseCallback, android.os.Handler); + method public void sendVisualVoicemailSms(java.lang.String, int, java.lang.String, android.app.PendingIntent); method public void setDataEnabled(boolean); method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String); method public boolean setOperatorBrandOverride(java.lang.String); method public boolean setPreferredNetworkTypeToGlobal(); + method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings); method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); method public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri); method public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean); @@ -40526,8 +40528,6 @@ package android.telephony { method public abstract void onSimRemoved(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telecom.PhoneAccountHandle); method public abstract void onSmsReceived(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telephony.VisualVoicemailSms); method public abstract void onStopped(android.telephony.VisualVoicemailService.VisualVoicemailTask); - method public static final void sendVisualVoicemailSms(android.content.Context, android.telecom.PhoneAccountHandle, java.lang.String, short, java.lang.String, android.app.PendingIntent); - method public static final void setSmsFilterSettings(android.content.Context, android.telecom.PhoneAccountHandle, android.telephony.VisualVoicemailSmsFilterSettings); field public static final java.lang.String SERVICE_INTERFACE = "android.telephony.VisualVoicemailService"; } diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 85f84ba7f8d99..1ef9e494be68a 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -45,6 +45,7 @@ import android.provider.Settings.SettingNotFoundException; import android.service.carrier.CarrierIdentifier; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; +import android.telephony.VisualVoicemailService.VisualVoicemailTask; import android.telephony.ims.feature.ImsFeature; import android.util.Log; @@ -2773,6 +2774,54 @@ public class TelephonyManager { return null; } + /** + * Set the visual voicemail SMS filter settings for the subscription ID pinned + * to the TelephonyManager. + * When the filter is enabled, {@link + * VisualVoicemailService#onSmsReceived(VisualVoicemailTask, VisualVoicemailSms)} will be + * called when a SMS matching the settings is received. The caller should have + * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} and implement a + * VisualVoicemailService. + * + *

Requires Permission: + * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} + * + * @param settings The settings for the filter, or {@code null} to disable the filter. + */ + public void setVisualVoicemailSmsFilterSettings(VisualVoicemailSmsFilterSettings settings) { + if (settings == null) { + disableVisualVoicemailSmsFilter(mSubId); + } else { + enableVisualVoicemailSmsFilter(mSubId, settings); + } + } + + /** + * Send a visual voicemail SMS. The caller must be the current default dialer. + * A {@link VisualVoicemailService} uses this method to send a command via SMS to the carrier's + * visual voicemail server. Some examples for carriers using the OMTP standard include + * activating and deactivating visual voicemail, or requesting the current visual voicemail + * provisioning status. See the OMTP Visual Voicemail specification for more information on the + * format of these SMS messages. + * + *

Requires Permission: + * {@link android.Manifest.permission#SEND_SMS SEND_SMS} + * + * @param number The destination number. + * @param port The destination port for data SMS, or 0 for text SMS. + * @param text The message content. For data sms, it will be encoded as a UTF-8 byte stream. + * @param sentIntent The sent intent passed to the {@link SmsManager} + * + * @throws SecurityException if the caller is not the current default dialer + * + * @see SmsManager#sendDataMessage(String, String, short, byte[], PendingIntent, PendingIntent) + * @see SmsManager#sendTextMessage(String, String, String, PendingIntent, PendingIntent) + */ + public void sendVisualVoicemailSms(String number, int port, String text, + PendingIntent sentIntent) { + sendVisualVoicemailSmsForSubscriber(mSubId, number, port, text, sentIntent); + } + /** * 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/android/telephony/VisualVoicemailService.java b/telephony/java/android/telephony/VisualVoicemailService.java index e211f76beccf0..fe30eb7bb0050 100644 --- a/telephony/java/android/telephony/VisualVoicemailService.java +++ b/telephony/java/android/telephony/VisualVoicemailService.java @@ -18,6 +18,7 @@ package android.telephony; import android.annotation.MainThread; import android.annotation.SdkConstant; +import android.annotation.SystemApi; import android.app.PendingIntent; import android.app.Service; import android.content.Context; @@ -199,7 +200,8 @@ public abstract class VisualVoicemailService extends Service { /** * Called when a SMS matching the {@link VisualVoicemailSmsFilterSettings} set by - * {@link #setSmsFilterSettings(Context, PhoneAccountHandle, VisualVoicemailSmsFilterSettings)} + * {@link TelephonyManager#setVisualVoicemailSmsFilterSettings(VisualVoicemailSmsFilterSettings) + * } * is received. * * @param task The task representing this event. {@link VisualVoicemailTask#finish()} must be @@ -240,8 +242,11 @@ public abstract class VisualVoicemailService extends Service { * * @param phoneAccountHandle The account to apply the settings to. * @param settings The settings for the filter, or {@code null} to disable the filter. + * + * @hide */ - public final static void setSmsFilterSettings(Context context, + @SystemApi + public static final void setSmsFilterSettings(Context context, PhoneAccountHandle phoneAccountHandle, VisualVoicemailSmsFilterSettings settings) { TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class); @@ -269,8 +274,11 @@ public abstract class VisualVoicemailService extends Service { * * @see SmsManager#sendDataMessage(String, String, short, byte[], PendingIntent, PendingIntent) * @see SmsManager#sendTextMessage(String, String, String, PendingIntent, PendingIntent) + * + * @hide */ - public final static void sendVisualVoicemailSms(Context context, + @SystemApi + public static final void sendVisualVoicemailSms(Context context, PhoneAccountHandle phoneAccountHandle, String number, short port, String text, PendingIntent sentIntent) { TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class); diff --git a/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java b/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java index 56a8c62558243..8ed96a3a4f361 100644 --- a/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java +++ b/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java @@ -38,7 +38,7 @@ import java.util.List; *

Use {@link android.telephony.VisualVoicemailSmsFilterSettings.Builder} to construct this * class. * - * @see VisualVoicemailService#setSmsFilterSettings(Context, PhoneAccountHandle, VisualVoicemailSmsFilterSettings) + * @see TelephonyManager#setVisualVoicemailSmsFilterSettings(VisualVoicemailSmsFilterSettings) */ public final class VisualVoicemailSmsFilterSettings implements Parcelable {