Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a9c30a4 authored by Thomas Stuart's avatar Thomas Stuart
Browse files

add API for getRegisteredPhoneAccounts

currently there is no way for VoIP applications to fetch their
registered PhoneAccounts with Telecom. TelecomManager#getPhoneAccount
is gated by the READ_PHONE_STATE permission which is a highly privileged
permission that VoIP apps will not be granted. This API will not only allow
VoIP apps to get all registered PhoneAccounts with Telecom but Managed apps
(like system Dialers) can use it.  This is helpful to know what calling
capabilities are currently registered and know the state of Telecom.

Bug: 307609763
Test: CTS coverage
Change-Id: I73ace8cd766369f877c7fc0ef985f6a0c575e097
parent cb27fa5a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -43248,6 +43248,7 @@ package android.telecom {
    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS}, conditional=true) public String getLine1Number(android.telecom.PhoneAccountHandle);
    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_OWN_CALLS) public java.util.List<android.telecom.PhoneAccountHandle> getOwnSelfManagedPhoneAccounts();
    method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle);
    method @FlaggedApi("com.android.server.telecom.flags.get_registered_phone_accounts") @NonNull public java.util.List<android.telecom.PhoneAccount> getRegisteredPhoneAccounts();
    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getSelfManagedPhoneAccounts();
    method public android.telecom.PhoneAccountHandle getSimCallManager();
    method @Nullable public android.telecom.PhoneAccountHandle getSimCallManagerForSubscription(int);
+25 −0
Original line number Diff line number Diff line
@@ -1433,6 +1433,31 @@ public class TelecomManager {
        throw new IllegalStateException("Telecom is not available");
    }

    /**
     * This API will return all {@link PhoneAccount}s registered via
     * {@link TelecomManager#registerPhoneAccount(PhoneAccount)}. If a {@link PhoneAccount} appears
     * to be missing from the list, Telecom has either unregistered the {@link PhoneAccount}
     * or the caller registered the {@link PhoneAccount} under a different user and does not
     * have the {@link android.Manifest.permission#INTERACT_ACROSS_USERS} permission.
     *
     * @return all the {@link PhoneAccount}s registered by the caller.
     */
    @SuppressLint("RequiresPermission")
    @FlaggedApi(Flags.FLAG_GET_REGISTERED_PHONE_ACCOUNTS)
    public @NonNull List<PhoneAccount> getRegisteredPhoneAccounts() {
        ITelecomService service = getTelecomService();
        if (service != null) {
            try {
                return service.getRegisteredPhoneAccounts(
                        mContext.getOpPackageName(),
                        mContext.getAttributionTag()).getList();
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        }
        throw new IllegalStateException("Telecom is not available");
    }

    /**
     * Returns a list of {@link PhoneAccountHandle}s including those which have not been enabled
     * by the user.
+6 −0
Original line number Diff line number Diff line
@@ -92,6 +92,12 @@ interface ITelecomService {
     */
    PhoneAccount getPhoneAccount(in PhoneAccountHandle account, String callingPackage);

    /**
     * @see TelecomManager#getPhoneAccount
     */
    ParceledListSlice<PhoneAccount> getRegisteredPhoneAccounts(String callingPackage,
            String callingFeatureId);

    /**
     * @see TelecomManager#getAllPhoneAccountsCount
     */