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

Commit 76769dc1 authored by Thomas Stuart's avatar Thomas Stuart Committed by Android Build Coastguard Worker
Browse files

switch TelecomManager List getters to ParceledListSlice

It was shown that given a large phoneAccountHandles that are
over 1 mb, a TransactionTooLarge exception can be silently thrown
causing an empty list to be returned.

In order to prevent this behavior, all Lists that return a
PhoneAccountHandle or PhoneAccount have been switched to
ParceledListSlice.

bug: 236263294

Test: manual #1 - bug exists without fix,
      manual #2 - bug is fixed with patch,
      4 new CTS tests in
      android.telecom.cts.PhoneAccountRegistrarTest

Change-Id: I025245b2a6f8cfaca86f268851a9d8f0817e07dd
Merged-In: I025245b2a6f8cfaca86f268851a9d8f0817e07dd
(cherry picked from commit 76c4d2d0)
Merged-In: I025245b2a6f8cfaca86f268851a9d8f0817e07dd
parent 49fbff82
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -1269,7 +1269,7 @@ public class TelecomManager {
        if (service != null) {
            try {
                return service.getPhoneAccountsSupportingScheme(uriScheme,
                        mContext.getOpPackageName());
                        mContext.getOpPackageName()).getList();
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getPhoneAccountsSupportingScheme", e);
            }
@@ -1312,7 +1312,7 @@ public class TelecomManager {
        if (service != null) {
            try {
                return service.getSelfManagedPhoneAccounts(mContext.getOpPackageName(),
                        mContext.getAttributionTag());
                        mContext.getAttributionTag()).getList();
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getSelfManagedPhoneAccounts()", e);
            }
@@ -1340,7 +1340,7 @@ public class TelecomManager {
        if (service != null) {
            try {
                return service.getOwnSelfManagedPhoneAccounts(mContext.getOpPackageName(),
                        mContext.getAttributionTag());
                        mContext.getAttributionTag()).getList();
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
@@ -1366,7 +1366,7 @@ public class TelecomManager {
        if (service != null) {
            try {
                return service.getCallCapablePhoneAccounts(includeDisabledAccounts,
                        mContext.getOpPackageName(), mContext.getAttributionTag());
                        mContext.getOpPackageName(), mContext.getAttributionTag()).getList();
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getCallCapablePhoneAccounts("
                        + includeDisabledAccounts + ")", e);
@@ -1390,7 +1390,7 @@ public class TelecomManager {
        ITelecomService service = getTelecomService();
        if (service != null) {
            try {
                return service.getPhoneAccountsForPackage(mContext.getPackageName());
                return service.getPhoneAccountsForPackage(mContext.getPackageName()).getList();
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getPhoneAccountsForPackage", e);
            }
@@ -1450,7 +1450,7 @@ public class TelecomManager {
        ITelecomService service = getTelecomService();
        if (service != null) {
            try {
                return service.getAllPhoneAccounts();
                return service.getAllPhoneAccounts().getList();
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getAllPhoneAccounts", e);
            }
@@ -1469,7 +1469,7 @@ public class TelecomManager {
        ITelecomService service = getTelecomService();
        if (service != null) {
            try {
                return service.getAllPhoneAccountHandles();
                return service.getAllPhoneAccountHandles().getList();
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getAllPhoneAccountHandles", e);
            }
+8 −7
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.UserHandle;
import android.telecom.PhoneAccount;
import android.content.pm.ParceledListSlice;

/**
 * Interface used to interact with Telecom. Mostly this is used by TelephonyManager for passing
@@ -57,31 +58,31 @@ interface ITelecomService {
    /**
     * @see TelecomServiceImpl#getCallCapablePhoneAccounts
     */
    List<PhoneAccountHandle> getCallCapablePhoneAccounts(
    ParceledListSlice<PhoneAccountHandle> getCallCapablePhoneAccounts(
            boolean includeDisabledAccounts, String callingPackage, String callingFeatureId);

    /**
     * @see TelecomServiceImpl#getSelfManagedPhoneAccounts
     */
    List<PhoneAccountHandle> getSelfManagedPhoneAccounts(String callingPackage,
    ParceledListSlice<PhoneAccountHandle> getSelfManagedPhoneAccounts(String callingPackage,
            String callingFeatureId);

    /**
     * @see TelecomServiceImpl#getOwnSelfManagedPhoneAccounts
     */
    List<PhoneAccountHandle> getOwnSelfManagedPhoneAccounts(String callingPackage,
    ParceledListSlice<PhoneAccountHandle> getOwnSelfManagedPhoneAccounts(String callingPackage,
            String callingFeatureId);

    /**
     * @see TelecomManager#getPhoneAccountsSupportingScheme
     */
    List<PhoneAccountHandle> getPhoneAccountsSupportingScheme(in String uriScheme,
    ParceledListSlice<PhoneAccountHandle> getPhoneAccountsSupportingScheme(in String uriScheme,
            String callingPackage);

    /**
     * @see TelecomManager#getPhoneAccountsForPackage
     */
    List<PhoneAccountHandle> getPhoneAccountsForPackage(in String packageName);
    ParceledListSlice<PhoneAccountHandle> getPhoneAccountsForPackage(in String packageName);

    /**
     * @see TelecomManager#getPhoneAccount
@@ -96,12 +97,12 @@ interface ITelecomService {
    /**
     * @see TelecomManager#getAllPhoneAccounts
     */
    List<PhoneAccount> getAllPhoneAccounts();
    ParceledListSlice<PhoneAccount> getAllPhoneAccounts();

    /**
     * @see TelecomManager#getAllPhoneAccountHandles
     */
    List<PhoneAccountHandle> getAllPhoneAccountHandles();
    ParceledListSlice<PhoneAccountHandle> getAllPhoneAccountHandles();

    /**
     * @see TelecomServiceImpl#getSimCallManager