am 8e15e306: am 93c75e45: Merge "Replace get*PhoneAccounts* public API methods with new method (1/3)" into lmp-dev

* commit '8e15e3060db3982adadc917dfccc4b144982dd6d':
  Replace get*PhoneAccounts* public API methods with new method (1/3)
diff --git a/api/current.txt b/api/current.txt
index cbf4d67..dc1711e 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -28355,11 +28355,9 @@
     method public void addNewIncomingCall(android.telecom.PhoneAccountHandle, android.os.Bundle);
     method public void cancelMissedCallsNotification();
     method public void clearAccounts();
-    method public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts();
     method public android.telecom.PhoneAccountHandle getConnectionManager();
-    method public android.telecom.PhoneAccountHandle getDefaultOutgoingPhoneAccount(java.lang.String);
     method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle);
-    method public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsSupportingScheme(java.lang.String);
+    method public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsForPackage();
     method public boolean handleMmi(java.lang.String);
     method public boolean hasMultipleCallCapableAccounts();
     method public boolean isInCall();
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index 1a6c52f..b0b6fb9 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -80,6 +80,15 @@
      */
     public static final int STATE_CONNECTING = 9;
 
+    /**
+     * The key to retrieve the optional {@code PhoneAccount}s Telecom can bundle with its Call
+     * extras. Used to pass the phone accounts to display on the front end to the user in order to
+     * select phone accounts to (for example) place a call.
+     *
+     * @hide
+     */
+    public static final String AVAILABLE_PHONE_ACCOUNTS = "selectPhoneAccountAccounts";
+
     public static class Details {
         private final Uri mHandle;
         private final int mHandlePresentation;
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index a91d92f..481e483 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -306,22 +306,16 @@
 
     /**
      * Return the {@link PhoneAccount} which is the user-chosen default for making outgoing phone
-     * calls with a specified URI scheme. This {@code PhoneAccount} will always be a member of the
-     * list which is returned from calling {@link #getCallCapablePhoneAccounts()}.
+     * calls with a specified URI scheme.
      * <p>
      * Apps must be prepared for this method to return {@code null}, indicating that there currently
-     * exists no user-chosen default {@code PhoneAccount}. In this case, apps wishing to initiate a
-     * phone call must either create their {@link android.content.Intent#ACTION_CALL} or
-     * {@link android.content.Intent#ACTION_DIAL} {@code Intent} with no
-     * {@link TelecomManager#EXTRA_PHONE_ACCOUNT_HANDLE}, or present the user with an affordance to
-     * select one of the elements of {@link #getCallCapablePhoneAccounts()}.
+     * exists no user-chosen default {@code PhoneAccount}.
      * <p>
-     * An {@link android.content.Intent#ACTION_CALL} or {@link android.content.Intent#ACTION_DIAL}
-     * {@code Intent} with no {@link TelecomManager#EXTRA_PHONE_ACCOUNT_HANDLE} is valid, and
-     * subsequent steps in the phone call flow are responsible for presenting the user with an
-     * affordance, if necessary, to choose a {@code PhoneAccount}.
-     *
      * @param uriScheme The URI scheme.
+     * @return The {@link PhoneAccountHandle} corresponding to the user-chosen default for outgoing
+     * phone calls for a specified URI scheme.
+     *
+     * @hide
      */
     public PhoneAccountHandle getDefaultOutgoingPhoneAccount(String uriScheme) {
         try {
@@ -371,24 +365,6 @@
     }
 
     /**
-     * Return a list of {@link PhoneAccountHandle}s which can be used to make and receive phone
-     * calls.
-     *
-     * @see #EXTRA_PHONE_ACCOUNT_HANDLE
-     * @return A list of {@code PhoneAccountHandle} objects.
-     */
-    public List<PhoneAccountHandle> getCallCapablePhoneAccounts() {
-        try {
-            if (isServiceConnected()) {
-                return getTelecomService().getCallCapablePhoneAccounts();
-            }
-        } catch (RemoteException e) {
-            Log.e(TAG, "Error calling ITelecomService#getCallCapablePhoneAccounts", e);
-        }
-        return new ArrayList<>();
-    }
-
-    /**
      * 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}.
@@ -459,6 +435,8 @@
      *
      * @param uriScheme The URI scheme.
      * @return A list of {@code PhoneAccountHandle} objects supporting the URI scheme.
+     *
+     * @hide
      */
     public List<PhoneAccountHandle> getPhoneAccountsSupportingScheme(String uriScheme) {
         try {
@@ -471,6 +449,27 @@
         return new ArrayList<>();
     }
 
+
+    /**
+     * Return a list of {@link PhoneAccountHandle}s which can be used to make and receive phone
+     * calls.
+     *
+     * @see #EXTRA_PHONE_ACCOUNT_HANDLE
+     * @return A list of {@code PhoneAccountHandle} objects.
+     *
+     * @hide
+     */
+    public List<PhoneAccountHandle> getCallCapablePhoneAccounts() {
+        try {
+            if (isServiceConnected()) {
+                return getTelecomService().getCallCapablePhoneAccounts();
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error calling ITelecomService#getCallCapablePhoneAccounts", e);
+        }
+        return new ArrayList<>();
+    }
+
     /**
      * Determine whether the device has more than one account registered that can make and receive
      * phone calls.
@@ -483,6 +482,22 @@
     }
 
     /**
+     *  Returns a list of all {@link PhoneAccount}s registered for the calling package.
+     *
+     * @return A list of {@code PhoneAccountHandle} objects.
+     */
+    public List<PhoneAccountHandle> getPhoneAccountsForPackage() {
+        try {
+            if (isServiceConnected()) {
+                return getTelecomService().getPhoneAccountsForPackage(mContext.getPackageName());
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error calling ITelecomService#getPhoneAccountsForPackage", e);
+        }
+        return null;
+    }
+
+    /**
      * Return the {@link PhoneAccount} for a specified {@link PhoneAccountHandle}. Object includes
      * resources which can be used in a user interface.
      *
diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
index 77a80fe..feb09d5 100644
--- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
+++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
@@ -60,6 +60,11 @@
     List<PhoneAccountHandle> getPhoneAccountsSupportingScheme(in String uriScheme);
 
     /**
+     * @see TelecomManager#getPhoneAccountsForPackage
+     */
+    List<PhoneAccountHandle> getPhoneAccountsForPackage(in String packageName);
+
+    /**
      * @see TelecomManager#getPhoneAccount
      */
     PhoneAccount getPhoneAccount(in PhoneAccountHandle account);