diff options
| -rwxr-xr-x | api/current.txt | 1 | ||||
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | cmds/telecom/src/com/android/commands/telecom/Telecom.java | 29 | ||||
| -rw-r--r-- | telecomm/java/android/telecom/TelecomManager.java | 16 | ||||
| -rw-r--r-- | telecomm/java/com/android/internal/telecom/ITelecomService.aidl | 2 |
5 files changed, 40 insertions, 9 deletions
diff --git a/api/current.txt b/api/current.txt index a81d5b18a32d..7ea15a5c014f 100755 --- a/api/current.txt +++ b/api/current.txt @@ -41811,6 +41811,7 @@ package android.telecom { method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getSelfManagedPhoneAccounts(); method public android.telecom.PhoneAccountHandle getSimCallManager(); method public String getSystemDialerPackage(); + method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telecom.PhoneAccountHandle getUserSelectedOutgoingPhoneAccount(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber(android.telecom.PhoneAccountHandle); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String, android.telecom.PhoneAccountHandle); diff --git a/api/system-current.txt b/api/system-current.txt index aaeee9bfa16e..158e27c942e2 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5272,6 +5272,7 @@ package android.telecom { method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall(); method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging(); method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.WRITE_SECURE_SETTINGS}) public boolean setDefaultDialer(String); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(android.telecom.PhoneAccountHandle); field public static final String EXTRA_CALL_BACK_INTENT = "android.telecom.extra.CALL_BACK_INTENT"; field public static final String EXTRA_CLEAR_MISSED_CALLS_INTENT = "android.telecom.extra.CLEAR_MISSED_CALLS_INTENT"; field public static final String EXTRA_CONNECTION_SERVICE = "android.telecom.extra.CONNECTION_SERVICE"; diff --git a/cmds/telecom/src/com/android/commands/telecom/Telecom.java b/cmds/telecom/src/com/android/commands/telecom/Telecom.java index 4174ad7cd586..1b7fbfe0e32c 100644 --- a/cmds/telecom/src/com/android/commands/telecom/Telecom.java +++ b/cmds/telecom/src/com/android/commands/telecom/Telecom.java @@ -23,8 +23,10 @@ import android.os.IUserManager; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; +import android.telecom.Log; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; +import android.text.TextUtils; import com.android.internal.os.BaseCommand; import com.android.internal.telecom.ITelecomService; @@ -45,6 +47,8 @@ public final class Telecom extends BaseCommand { private static final String COMMAND_SET_PHONE_ACCOUNT_ENABLED = "set-phone-account-enabled"; private static final String COMMAND_SET_PHONE_ACCOUNT_DISABLED = "set-phone-account-disabled"; private static final String COMMAND_REGISTER_PHONE_ACCOUNT = "register-phone-account"; + private static final String COMMAND_SET_USER_SELECTED_OUTGOING_PHONE_ACCOUNT = + "set-user-selected-outgoing-phone-account"; private static final String COMMAND_REGISTER_SIM_PHONE_ACCOUNT = "register-sim-phone-account"; private static final String COMMAND_SET_TEST_CALL_REDIRECTION_APP = "set-test-call-redirection-app"; private static final String COMMAND_SET_TEST_CALL_SCREENING_APP = "set-test-call-screening-app"; @@ -70,6 +74,8 @@ public final class Telecom extends BaseCommand { + "usage: telecom set-phone-account-enabled <COMPONENT> <ID> <USER_SN>\n" + "usage: telecom set-phone-account-disabled <COMPONENT> <ID> <USER_SN>\n" + "usage: telecom register-phone-account <COMPONENT> <ID> <USER_SN> <LABEL>\n" + + "usage: telecom set-user-selected-outgoing-phone-account <COMPONENT> <ID> " + + "<USER_SN>\n" + "usage: telecom set-test-call-redirection-app <PACKAGE>\n" + "usage: telecom set-test-call-screening-app <PACKAGE>\n" + "usage: telecom set-test-auto-mode-app <PACKAGE>\n" @@ -104,16 +110,18 @@ public final class Telecom extends BaseCommand { mTelecomService = ITelecomService.Stub.asInterface( ServiceManager.getService(Context.TELECOM_SERVICE)); if (mTelecomService == null) { + Log.w(this, "onRun: Can't access telecom manager."); showError("Error: Could not access the Telecom Manager. Is the system running?"); return; } mUserManager = IUserManager.Stub .asInterface(ServiceManager.getService(Context.USER_SERVICE)); if (mUserManager == null) { + Log.w(this, "onRun: Can't access user manager."); showError("Error: Could not access the User Manager. Is the system running?"); return; } - + Log.i(this, "onRun: parsing command."); String command = nextArgRequired(); switch (command) { case COMMAND_SET_PHONE_ACCOUNT_ENABLED: @@ -143,6 +151,9 @@ public final class Telecom extends BaseCommand { case COMMAND_REGISTER_SIM_PHONE_ACCOUNT: runRegisterSimPhoneAccount(); break; + case COMMAND_SET_USER_SELECTED_OUTGOING_PHONE_ACCOUNT: + runSetUserSelectedOutgoingPhoneAccount(); + break; case COMMAND_UNREGISTER_PHONE_ACCOUNT: runUnregisterPhoneAccount(); break; @@ -159,6 +170,7 @@ public final class Telecom extends BaseCommand { runWaitOnHandler(); break; default: + Log.w(this, "onRun: unknown command: %s", command); throw new IllegalArgumentException ("unknown command '" + command + "'"); } } @@ -227,6 +239,13 @@ public final class Telecom extends BaseCommand { mTelecomService.setTestPhoneAcctSuggestionComponent(componentName); } + private void runSetUserSelectedOutgoingPhoneAccount() throws RemoteException { + Log.i(this, "runSetUserSelectedOutgoingPhoneAccount"); + final PhoneAccountHandle handle = getPhoneAccountHandleFromArgs(); + mTelecomService.setUserSelectedOutgoingPhoneAccount(handle); + System.out.println("Success - " + handle + " set as default outgoing account."); + } + private void runUnregisterPhoneAccount() throws RemoteException { final PhoneAccountHandle handle = getPhoneAccountHandleFromArgs(); mTelecomService.unregisterPhoneAccount(handle); @@ -256,7 +275,10 @@ public final class Telecom extends BaseCommand { } - private PhoneAccountHandle getPhoneAccountHandleFromArgs() throws RemoteException{ + private PhoneAccountHandle getPhoneAccountHandleFromArgs() throws RemoteException { + if (TextUtils.isEmpty(mArgs.peekNextArg())) { + return null; + } final ComponentName component = parseComponentName(nextArgRequired()); final String accountId = nextArgRequired(); final String userSnInStr = nextArgRequired(); @@ -265,6 +287,7 @@ public final class Telecom extends BaseCommand { final int userSn = Integer.parseInt(userSnInStr); userHandle = UserHandle.of(mUserManager.getUserHandle(userSn)); } catch (NumberFormatException ex) { + Log.w(this, "getPhoneAccountHandleFromArgs - invalid user %s", userSnInStr); throw new IllegalArgumentException ("Invalid user serial number " + userSnInStr); } return new PhoneAccountHandle(component, accountId, userHandle); @@ -277,4 +300,4 @@ public final class Telecom extends BaseCommand { } return cn; } -}
\ No newline at end of file +} diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index 6a6118117d8c..c3e80b480099 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -788,15 +788,17 @@ public class TelecomManager { * <p> * Apps must be prepared for this method to return {@code null}, indicating that there currently * exists no user-chosen default {@code PhoneAccount}. + * <p> + * The default dialer has access to use this method. * * @return The user outgoing phone account selected by the user. - * @hide */ - @UnsupportedAppUsage + @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public PhoneAccountHandle getUserSelectedOutgoingPhoneAccount() { try { if (isServiceConnected()) { - return getTelecomService().getUserSelectedOutgoingPhoneAccount(); + return getTelecomService().getUserSelectedOutgoingPhoneAccount( + mContext.getOpPackageName()); } } catch (RemoteException e) { Log.e(TAG, "Error calling ITelecomService#getUserSelectedOutgoingPhoneAccount", e); @@ -805,10 +807,14 @@ public class TelecomManager { } /** - * Sets the user-chosen default for making outgoing phone calls. + * Sets the user-chosen default {@link PhoneAccountHandle} for making outgoing phone calls. + * + * @param accountHandle The {@link PhoneAccountHandle} which will be used by default for making + * outgoing voice calls. * @hide */ - @UnsupportedAppUsage + @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + @SystemApi public void setUserSelectedOutgoingPhoneAccount(PhoneAccountHandle accountHandle) { try { if (isServiceConnected()) { diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl index 954a7098f6be..e1d5c17d5e3a 100644 --- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl +++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl @@ -45,7 +45,7 @@ interface ITelecomService { /** * @see TelecomServiceImpl#getUserSelectedOutgoingPhoneAccount */ - PhoneAccountHandle getUserSelectedOutgoingPhoneAccount(); + PhoneAccountHandle getUserSelectedOutgoingPhoneAccount(String callingPackage); /** * @see TelecomServiceImpl#setUserSelectedOutgoingPhoneAccount |