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 Original line Diff line number Diff line
@@ -1269,7 +1269,7 @@ public class TelecomManager {
        if (service != null) {
        if (service != null) {
            try {
            try {
                return service.getPhoneAccountsSupportingScheme(uriScheme,
                return service.getPhoneAccountsSupportingScheme(uriScheme,
                        mContext.getOpPackageName());
                        mContext.getOpPackageName()).getList();
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getPhoneAccountsSupportingScheme", e);
                Log.e(TAG, "Error calling ITelecomService#getPhoneAccountsSupportingScheme", e);
            }
            }
@@ -1312,7 +1312,7 @@ public class TelecomManager {
        if (service != null) {
        if (service != null) {
            try {
            try {
                return service.getSelfManagedPhoneAccounts(mContext.getOpPackageName(),
                return service.getSelfManagedPhoneAccounts(mContext.getOpPackageName(),
                        mContext.getAttributionTag());
                        mContext.getAttributionTag()).getList();
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getSelfManagedPhoneAccounts()", e);
                Log.e(TAG, "Error calling ITelecomService#getSelfManagedPhoneAccounts()", e);
            }
            }
@@ -1340,7 +1340,7 @@ public class TelecomManager {
        if (service != null) {
        if (service != null) {
            try {
            try {
                return service.getOwnSelfManagedPhoneAccounts(mContext.getOpPackageName(),
                return service.getOwnSelfManagedPhoneAccounts(mContext.getOpPackageName(),
                        mContext.getAttributionTag());
                        mContext.getAttributionTag()).getList();
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
                throw e.rethrowFromSystemServer();
            }
            }
@@ -1366,7 +1366,7 @@ public class TelecomManager {
        if (service != null) {
        if (service != null) {
            try {
            try {
                return service.getCallCapablePhoneAccounts(includeDisabledAccounts,
                return service.getCallCapablePhoneAccounts(includeDisabledAccounts,
                        mContext.getOpPackageName(), mContext.getAttributionTag());
                        mContext.getOpPackageName(), mContext.getAttributionTag()).getList();
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getCallCapablePhoneAccounts("
                Log.e(TAG, "Error calling ITelecomService#getCallCapablePhoneAccounts("
                        + includeDisabledAccounts + ")", e);
                        + includeDisabledAccounts + ")", e);
@@ -1390,7 +1390,7 @@ public class TelecomManager {
        ITelecomService service = getTelecomService();
        ITelecomService service = getTelecomService();
        if (service != null) {
        if (service != null) {
            try {
            try {
                return service.getPhoneAccountsForPackage(mContext.getPackageName());
                return service.getPhoneAccountsForPackage(mContext.getPackageName()).getList();
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getPhoneAccountsForPackage", e);
                Log.e(TAG, "Error calling ITelecomService#getPhoneAccountsForPackage", e);
            }
            }
@@ -1450,7 +1450,7 @@ public class TelecomManager {
        ITelecomService service = getTelecomService();
        ITelecomService service = getTelecomService();
        if (service != null) {
        if (service != null) {
            try {
            try {
                return service.getAllPhoneAccounts();
                return service.getAllPhoneAccounts().getList();
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getAllPhoneAccounts", e);
                Log.e(TAG, "Error calling ITelecomService#getAllPhoneAccounts", e);
            }
            }
@@ -1469,7 +1469,7 @@ public class TelecomManager {
        ITelecomService service = getTelecomService();
        ITelecomService service = getTelecomService();
        if (service != null) {
        if (service != null) {
            try {
            try {
                return service.getAllPhoneAccountHandles();
                return service.getAllPhoneAccountHandles().getList();
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                Log.e(TAG, "Error calling ITelecomService#getAllPhoneAccountHandles", e);
                Log.e(TAG, "Error calling ITelecomService#getAllPhoneAccountHandles", e);
            }
            }
+8 −7
Original line number Original line Diff line number Diff line
@@ -24,6 +24,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserHandle;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccount;
import android.content.pm.ParceledListSlice;


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


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


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


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


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


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


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


    /**
    /**
     * @see TelecomServiceImpl#getSimCallManager
     * @see TelecomServiceImpl#getSimCallManager