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
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user