From 91371dc036ce66cd3ad8ec83eca8926ddf9cec0c Mon Sep 17 00:00:00 2001 From: Santos Cordon Date: Fri, 8 May 2015 13:52:09 -0700 Subject: [PATCH] Add enable/disable properties to phone accounts. Bug: 20303449 Change-Id: Ie6203a284454d43f4dd20917f0f1fda0b36484f8 --- api/current.txt | 1 + api/system-current.txt | 3 +- telecomm/java/android/telecom/PhoneAccount.java | 46 +++++++++++- telecomm/java/android/telecom/TelecomManager.java | 81 +++++++++++++++------- .../android/internal/telecom/ITelecomService.aidl | 8 ++- 5 files changed, 110 insertions(+), 29 deletions(-) diff --git a/api/current.txt b/api/current.txt index a400fa6b70d2..a7a38dfc7907 100644 --- a/api/current.txt +++ b/api/current.txt @@ -30318,6 +30318,7 @@ package android.telecom { method public android.net.Uri getSubscriptionAddress(); method public java.util.List getSupportedUriSchemes(); method public boolean hasCapabilities(int); + method public boolean isEnabled(); method public boolean supportsUriScheme(java.lang.String); method public android.telecom.PhoneAccount.Builder toBuilder(); method public void writeToParcel(android.os.Parcel, int); diff --git a/api/system-current.txt b/api/system-current.txt index 351ec8e703fd..fcfd66474287 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -32503,6 +32503,7 @@ package android.telecom { method public android.net.Uri getSubscriptionAddress(); method public java.util.List getSupportedUriSchemes(); method public boolean hasCapabilities(int); + method public boolean isEnabled(); method public boolean supportsUriScheme(java.lang.String); method public android.telecom.PhoneAccount.Builder toBuilder(); method public void writeToParcel(android.os.Parcel, int); @@ -32644,6 +32645,7 @@ package android.telecom { method public void cancelMissedCallsNotification(); method public deprecated void clearAccounts(); method public void clearPhoneAccounts(); + method public void enablePhoneAccount(android.telecom.PhoneAccountHandle, boolean); method public boolean endCall(); method public android.net.Uri getAdnUriForPhoneAccount(android.telecom.PhoneAccountHandle); method public java.util.List getAllPhoneAccountHandles(); @@ -32659,7 +32661,6 @@ package android.telecom { method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle); method public java.util.List getPhoneAccountsForPackage(); method public java.util.List getPhoneAccountsSupportingScheme(java.lang.String); - method public java.util.List getRegisteredConnectionManagers(); method public android.telecom.PhoneAccountHandle getSimCallManager(); method public java.lang.String getVoiceMailNumber(android.telecom.PhoneAccountHandle); method public boolean handleMmi(java.lang.String); diff --git a/telecomm/java/android/telecom/PhoneAccount.java b/telecomm/java/android/telecom/PhoneAccount.java index f05a1ef59052..a25d327baf54 100644 --- a/telecomm/java/android/telecom/PhoneAccount.java +++ b/telecomm/java/android/telecom/PhoneAccount.java @@ -151,6 +151,7 @@ public final class PhoneAccount implements Parcelable { private final CharSequence mShortDescription; private final List mSupportedUriSchemes; private final Icon mIcon; + private boolean mIsEnabled; /** * Helper class for creating a {@link PhoneAccount}. @@ -165,6 +166,7 @@ public final class PhoneAccount implements Parcelable { private CharSequence mShortDescription; private List mSupportedUriSchemes = new ArrayList(); private Icon mIcon; + private boolean mIsEnabled = false; /** * Creates a builder with the specified {@link PhoneAccountHandle} and label. @@ -190,6 +192,7 @@ public final class PhoneAccount implements Parcelable { mShortDescription = phoneAccount.getShortDescription(); mSupportedUriSchemes.addAll(phoneAccount.getSupportedUriSchemes()); mIcon = phoneAccount.getIcon(); + mIsEnabled = phoneAccount.isEnabled(); } /** @@ -288,6 +291,18 @@ public final class PhoneAccount implements Parcelable { } /** + * Sets the enabled state of the phone account. + * + * @param isEnabled The enabled state. + * @return The builder. + * @hide + */ + public Builder setIsEnabled(boolean isEnabled) { + mIsEnabled = isEnabled; + return this; + } + + /** * Creates an instance of a {@link PhoneAccount} based on the current builder settings. * * @return The {@link PhoneAccount}. @@ -307,7 +322,8 @@ public final class PhoneAccount implements Parcelable { mHighlightColor, mLabel, mShortDescription, - mSupportedUriSchemes); + mSupportedUriSchemes, + mIsEnabled); } } @@ -320,7 +336,8 @@ public final class PhoneAccount implements Parcelable { int highlightColor, CharSequence label, CharSequence shortDescription, - List supportedUriSchemes) { + List supportedUriSchemes, + boolean isEnabled) { mAccountHandle = account; mAddress = address; mSubscriptionAddress = subscriptionAddress; @@ -330,6 +347,7 @@ public final class PhoneAccount implements Parcelable { mLabel = label; mShortDescription = shortDescription; mSupportedUriSchemes = Collections.unmodifiableList(supportedUriSchemes); + mIsEnabled = isEnabled; } public static Builder builder( @@ -437,6 +455,15 @@ public final class PhoneAccount implements Parcelable { } /** + * Indicates whether the user has enabled this phone account or not {@code PhoneAccounts}. + * + * @return The {@code true} if the account is enabled by the user, {@code false} otherwise. + */ + public boolean isEnabled() { + return mIsEnabled; + } + + /** * Determines if the {@link PhoneAccount} supports calls to/from addresses with a specified URI * scheme. * @@ -466,6 +493,14 @@ public final class PhoneAccount implements Parcelable { return mHighlightColor; } + /** + * Sets the enabled state of the phone account. + * @hide + */ + public void setIsEnabled(boolean isEnabled) { + mIsEnabled = isEnabled; + } + // // Parcelable implementation // @@ -500,12 +535,14 @@ public final class PhoneAccount implements Parcelable { out.writeCharSequence(mLabel); out.writeCharSequence(mShortDescription); out.writeStringList(mSupportedUriSchemes); + if (mIcon == null) { out.writeInt(0); } else { out.writeInt(1); mIcon.writeToParcel(out, flags); } + out.writeByte((byte) (mIsEnabled ? 1 : 0)); } public static final Creator CREATOR @@ -547,11 +584,14 @@ public final class PhoneAccount implements Parcelable { } else { mIcon = null; } + mIsEnabled = in.readByte() == 1; } @Override public String toString() { - StringBuilder sb = new StringBuilder().append("[PhoneAccount: ") + StringBuilder sb = new StringBuilder().append("[[") + .append(mIsEnabled ? 'X' : ' ') + .append("] PhoneAccount: ") .append(mAccountHandle) .append(" Capabilities: ") .append(mCapabilities) diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index c8ed2b07a439..308c204676b4 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -377,15 +377,23 @@ public class TelecomManager { } /** - * Return the {@link PhoneAccount} which is the user-chosen default for making outgoing phone - * calls with a specified URI scheme. - *

- * Apps must be prepared for this method to return {@code null}, indicating that there currently - * exists no user-chosen default {@code PhoneAccount}. + * Return the {@link PhoneAccount} which will be used to place outgoing calls to addresses with + * the specified {@code uriScheme}. This {@link PhoneAccount} will always be a member of the + * list which is returned from invoking {@link #getCallCapablePhoneAccounts()}. The specific + * account returned depends on the following priorities: + *

    + *
  • If the user-selected default {@link PhoneAccount} supports the specified scheme, it will + * be returned. + *
  • + *
  • If there exists only one {@link PhoneAccount} that supports the specified scheme, it + * will be returned. + *
  • + *
*

+ * If no {@link PhoneAccount} fits the criteria above, this method will return {@code null}. + * * @param uriScheme The URI scheme. - * @return The {@link PhoneAccountHandle} corresponding to the user-chosen default for outgoing - * phone calls for a specified URI scheme. + * @return The {@link PhoneAccountHandle} corresponding to the account to be used. */ public PhoneAccountHandle getDefaultOutgoingPhoneAccount(String uriScheme) { try { @@ -403,7 +411,7 @@ public class TelecomManager { * Return the {@link PhoneAccount} which is the user-chosen default for making outgoing phone * calls. This {@code PhoneAccount} will always be a member of the list which is returned from * calling {@link #getCallCapablePhoneAccounts()} - * + *

* Apps must be prepared for this method to return {@code null}, indicating that there currently * exists no user-chosen default {@code PhoneAccount}. * @@ -422,7 +430,7 @@ public class TelecomManager { } /** - * Sets the default account for making outgoing phone calls. + * Sets the user-chosen default for making outgoing phone calls. * @hide */ public void setUserSelectedOutgoingPhoneAccount(PhoneAccountHandle accountHandle) { @@ -439,6 +447,7 @@ public class TelecomManager { * Returns the current SIM call manager. Apps must be prepared for this method to return * {@code null}, indicating that there currently exists no user-chosen default * {@code PhoneAccount}. + * * @return The phone account handle of the current sim call manager. */ public PhoneAccountHandle getSimCallManager() { @@ -454,6 +463,7 @@ public class TelecomManager { /** * Sets the SIM call manager to the specified phone account. + * * @param accountHandle The phone account handle of the account to set as the sim call manager. * @hide */ @@ -469,6 +479,7 @@ public class TelecomManager { /** * Returns the list of registered SIM call managers. + * * @return List of registered SIM call managers. * @hide */ @@ -497,16 +508,6 @@ public class TelecomManager { } /** - * Returns the list of registered SIM call managers. - * @return List of registered SIM call managers. - * @hide - */ - @SystemApi - public List getRegisteredConnectionManagers() { - return getSimCallManagers(); - } - - /** * Returns a list of the {@link PhoneAccountHandle}s which can be used to make and receive phone * calls which support the specified URI scheme. *

@@ -534,20 +535,33 @@ public class TelecomManager { /** - * Return a list of {@link PhoneAccountHandle}s which can be used to make and receive phone - * calls. + * Returns a list of {@link PhoneAccountHandle}s which can be used to make and receive phone + * calls. The returned list includes only those accounts which have been explicitly enabled + * by the user. * * @see #EXTRA_PHONE_ACCOUNT_HANDLE * @return A list of {@code PhoneAccountHandle} objects. - * */ public List getCallCapablePhoneAccounts() { + return getCallCapablePhoneAccounts(false); + } + + /** + * Returns a list of {@link PhoneAccountHandle}s including those which have not been enabled + * by the user. + * + * @return A list of {@code PhoneAccountHandle} objects. + * @hide + */ + public List getCallCapablePhoneAccounts(boolean includeDisabledAccounts) { try { if (isServiceConnected()) { - return getTelecomService().getCallCapablePhoneAccounts(mContext.getOpPackageName()); + return getTelecomService().getCallCapablePhoneAccounts( + includeDisabledAccounts, mContext.getOpPackageName()); } } catch (RemoteException e) { - Log.e(TAG, "Error calling ITelecomService#getCallCapablePhoneAccounts", e); + Log.e(TAG, "Error calling ITelecomService#getCallCapablePhoneAccounts(" + + includeDisabledAccounts + ")", e); } return new ArrayList<>(); } @@ -1163,6 +1177,25 @@ public class TelecomManager { } } + /** + * Enables and disables specified phone account. + * + * @param handle Handle to the phone account. + * @param isEnabled Enable state of the phone account. + * @hide + */ + @SystemApi + public void enablePhoneAccount(PhoneAccountHandle handle, boolean isEnabled) { + ITelecomService service = getTelecomService(); + if (service != null) { + try { + service.enablePhoneAccount(handle, isEnabled); + } catch (RemoteException e) { + Log.e(TAG, "Error enablePhoneAbbount", e); + } + } + } + private ITelecomService getTelecomService() { return ITelecomService.Stub.asInterface(ServiceManager.getService(Context.TELECOM_SERVICE)); } diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl index bc76f0633bac..aa02021586a4 100644 --- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl +++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl @@ -53,7 +53,8 @@ interface ITelecomService { /** * @see TelecomServiceImpl#getCallCapablePhoneAccounts */ - List getCallCapablePhoneAccounts(String callingPackage); + List getCallCapablePhoneAccounts( + boolean includeDisabledAccounts, String callingPackage); /** * @see TelecomManager#getPhoneAccountsSupportingScheme @@ -226,4 +227,9 @@ interface ITelecomService { * @see TelecomServiceImpl#placeCall */ void placeCall(in Uri handle, in Bundle extras, String callingPackage); + + /** + * @see TelecomServiceImpl#enablePhoneAccount + */ + void enablePhoneAccount(in PhoneAccountHandle accountHandle, boolean isEnabled); } -- 2.11.0