diff options
author | 2018-11-05 03:14:48 -0800 | |
---|---|---|
committer | 2018-11-05 03:14:48 -0800 | |
commit | c8d935d2bbdf261fc7eb544b992cd645c0dacfb5 (patch) | |
tree | 3a8633a63c083f445aec98cc3b0c5dfee0e17c17 | |
parent | d0e5bc8db01b6501cdb4c8c602f3b9419834a8f0 (diff) | |
parent | c274ac53a7dab8347d04312ce1038088d6442a3a (diff) |
Merge "[Call Screening]Programmatically changing the default call screening app." am: 6dd64df8b3 am: 21457121f4
am: c274ac53a7
Change-Id: Ia013e710c961b8887bfaff1e8fe7af40fba26df1
-rwxr-xr-x | api/current.txt | 5 | ||||
-rw-r--r-- | telecomm/java/android/telecom/TelecomManager.java | 101 | ||||
-rw-r--r-- | telecomm/java/com/android/internal/telecom/ITelecomService.aidl | 15 |
3 files changed, 121 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt index a2b8eec37838..70d7fd29d55e 100755 --- a/api/current.txt +++ b/api/current.txt @@ -42316,6 +42316,7 @@ package android.telecom { method public java.lang.String getVoiceMailNumber(android.telecom.PhoneAccountHandle); method public boolean handleMmi(java.lang.String); method public boolean handleMmi(java.lang.String, android.telecom.PhoneAccountHandle); + method public boolean isDefaultCallScreeningApp(android.content.ComponentName); method public boolean isInCall(); method public boolean isInManagedCall(); method public boolean isIncomingCallPermitted(android.telecom.PhoneAccountHandle); @@ -42324,12 +42325,14 @@ package android.telecom { method public boolean isVoiceMailNumber(android.telecom.PhoneAccountHandle, java.lang.String); method public void placeCall(android.net.Uri, android.os.Bundle); method public void registerPhoneAccount(android.telecom.PhoneAccount); + method public void requestChangeDefaultCallScreeningApp(android.content.ComponentName); method public void showInCallScreen(boolean); method public void silenceRinger(); method public void unregisterPhoneAccount(android.telecom.PhoneAccountHandle); field public static final java.lang.String ACTION_CHANGE_DEFAULT_DIALER = "android.telecom.action.CHANGE_DEFAULT_DIALER"; field public static final java.lang.String ACTION_CHANGE_PHONE_ACCOUNTS = "android.telecom.action.CHANGE_PHONE_ACCOUNTS"; field public static final java.lang.String ACTION_CONFIGURE_PHONE_ACCOUNT = "android.telecom.action.CONFIGURE_PHONE_ACCOUNT"; + field public static final java.lang.String ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED = "android.telecom.action.DEFAULT_CALL_SCREENING_APP_CHANGED"; field public static final java.lang.String ACTION_DEFAULT_DIALER_CHANGED = "android.telecom.action.DEFAULT_DIALER_CHANGED"; field public static final deprecated java.lang.String ACTION_INCOMING_CALL = "android.telecom.action.INCOMING_CALL"; field public static final java.lang.String ACTION_PHONE_ACCOUNT_REGISTERED = "android.telecom.action.PHONE_ACCOUNT_REGISTERED"; @@ -42346,9 +42349,11 @@ package android.telecom { field public static final java.lang.String EXTRA_CALL_NETWORK_TYPE = "android.telecom.extra.CALL_NETWORK_TYPE"; field public static final java.lang.String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT"; field public static final java.lang.String EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME = "android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME"; + field public static final java.lang.String EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME = "android.telecom.extra.DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME"; field public static final java.lang.String EXTRA_INCOMING_CALL_ADDRESS = "android.telecom.extra.INCOMING_CALL_ADDRESS"; field public static final java.lang.String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS"; field public static final java.lang.String EXTRA_INCOMING_VIDEO_STATE = "android.telecom.extra.INCOMING_VIDEO_STATE"; + field public static final java.lang.String EXTRA_IS_DEFAULT_CALL_SCREENING_APP = "android.telecom.extra.IS_DEFAULT_CALL_SCREENING_APP"; field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT"; field public static final java.lang.String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER"; field public static final java.lang.String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS"; diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index 3127b3584dd9..fa16bfe8e795 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -15,6 +15,7 @@ package android.telecom; import android.Manifest; +import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SuppressAutoDoc; import android.annotation.SuppressLint; @@ -175,6 +176,33 @@ public class TelecomManager { "android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME"; /** + * Broadcast intent action indicating that the current default call screening app has changed. + * + * The string extra {@link #EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME} will contain the + * name of the Component of the previous or the new call screening app. + * + * The boolean extra {@link #EXTRA_IS_DEFAULT_CALL_SCREENING_APP} will indicate the component + * name in the String extra {@link #EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME} is default + * call screening app or not. + */ + public static final String ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED = + "android.telecom.action.DEFAULT_CALL_SCREENING_APP_CHANGED"; + + /** + * Extra value used with {@link #ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED} broadcast to + * indicate the ComponentName of the call screening app which has changed. + */ + public static final String EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME = + "android.telecom.extra.DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME"; + + /** + * Extra value used with {@link #ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED} broadcast to + * indicate whether an app is the default call screening app. + */ + public static final String EXTRA_IS_DEFAULT_CALL_SCREENING_APP = + "android.telecom.extra.IS_DEFAULT_CALL_SCREENING_APP"; + + /** * Optional extra for {@link android.content.Intent#ACTION_CALL} containing a boolean that * determines whether the speakerphone should be automatically turned on for an outgoing call. */ @@ -1169,6 +1197,79 @@ public class TelecomManager { } /** + * Used to trigger display of the ChangeDefaultCallScreeningApp activity to prompt the user to + * change the call screening app. + * + * A {@link SecurityException} will be thrown if calling package name doesn't match the package + * of the passed {@link ComponentName} + * + * @param componentName to verify that the calling package name matches the package of the + * passed ComponentName. + */ + public void requestChangeDefaultCallScreeningApp(@NonNull ComponentName componentName) { + try { + if (isServiceConnected()) { + getTelecomService().requestChangeDefaultCallScreeningApp(componentName, mContext + .getOpPackageName()); + } + } catch (RemoteException e) { + Log.e(TAG, + "RemoteException calling ITelecomService#requestChangeDefaultCallScreeningApp.", + e); + } + } + + /** + * Used to verify that the passed ComponentName is default call screening app. + * + * @param componentName to verify that the package of the passed ComponentName matched the default + * call screening packageName. + * + * @return {@code true} if the passed componentName matches the default call screening's, {@code + * false} if the passed componentName is null, or it doesn't match default call screening's. + */ + public boolean isDefaultCallScreeningApp(ComponentName componentName) { + try { + if (isServiceConnected()) { + return getTelecomService().isDefaultCallScreeningApp(componentName); + } + } catch (RemoteException e) { + Log.e(TAG, + "RemoteException calling ITelecomService#isDefaultCallScreeningApp.", + e); + } + return false; + } + + /** + * Used to set the default call screening package. + * + * Requires permission: {@link android.Manifest.permission#MODIFY_PHONE_STATE} Requires + * permission: {@link android.Manifest.permission#WRITE_SECURE_SETTINGS} + * + * A {@link IllegalArgumentException} will be thrown if the specified package and component name + * of {@link ComponentName} does't exist, or the specified component of {@link ComponentName} + * does't have {@link android.Manifest.permission#BIND_SCREENING_SERVICE}. + * + * @param componentName to set the default call screening to. + * @hide + */ + @RequiresPermission(anyOf = { + android.Manifest.permission.MODIFY_PHONE_STATE, + android.Manifest.permission.WRITE_SECURE_SETTINGS + }) + public void setDefaultCallScreeningApp(ComponentName componentName) { + try { + if (isServiceConnected()) { + getTelecomService().setDefaultCallScreeningApp(componentName); + } + } catch (RemoteException e) { + Log.e(TAG, + "RemoteException calling ITelecomService#setDefaultCallScreeningApp.", e); + } + } + + /** * Return whether a given phone number is the configured voicemail number for a * particular phone account. * diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl index df7d6832833a..d97f0c5f7684 100644 --- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl +++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl @@ -256,6 +256,21 @@ interface ITelecomService { boolean setDefaultDialer(in String packageName); /** + * @see TelecomServiceImpl#requestChangeDefaultCallScreeningApp + */ + void requestChangeDefaultCallScreeningApp(in ComponentName componentNamem, String callingPackage); + + /** + * @see TelecomServiceImpl#isDefaultCallScreeningApp + */ + boolean isDefaultCallScreeningApp(in ComponentName componentName); + + /** + * @see TelecomServiceImpl#setDefaultCallScreeningApp + */ + void setDefaultCallScreeningApp(in ComponentName componentName); + + /** * @see TelecomServiceImpl#createManageBlockedNumbersIntent **/ Intent createManageBlockedNumbersIntent(); |