Unbind CallScreeningService when timeout reached. am: d57f25311a
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telecomm/+/27790553
Change-Id: If4ce4d7bbfe82237e7ca0251a5c9c6c6da8e3f9b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/server/telecom/PhoneAccountRegistrar.java b/src/com/android/server/telecom/PhoneAccountRegistrar.java
index baf7983..fab03b1 100644
--- a/src/com/android/server/telecom/PhoneAccountRegistrar.java
+++ b/src/com/android/server/telecom/PhoneAccountRegistrar.java
@@ -822,7 +822,6 @@
throw new SecurityException("PhoneAccount connection service requires "
+ "BIND_TELECOM_CONNECTION_SERVICE permission.");
}
-
enforceCharacterLimit(account);
enforceIconSizeLimit(account);
enforceMaxPhoneAccountLimit(account);
@@ -892,6 +891,7 @@
String[] fields =
{"Package Name", "Class Name", "PhoneAccountHandle Id", "Label", "ShortDescription",
"GroupId", "Address", "SubscriptionAddress"};
+
CharSequence[] args = {handle.getComponentName().getPackageName(),
handle.getComponentName().getClassName(), handle.getId(), account.getLabel(),
account.getShortDescription(), account.getGroupId(),
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 542e9e6..847e1f5 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -1479,6 +1479,7 @@
enforceCallingPackage(callingPackage);
PhoneAccountHandle phoneAccountHandle = null;
+ boolean clearPhoneAccountHandleExtra = false;
if (extras != null) {
phoneAccountHandle = extras.getParcelable(
TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE);
@@ -1490,17 +1491,24 @@
boolean isSelfManaged = phoneAccountHandle != null &&
isSelfManagedConnectionService(phoneAccountHandle);
if (isSelfManaged) {
- mContext.enforceCallingOrSelfPermission(Manifest.permission.MANAGE_OWN_CALLS,
- "Self-managed ConnectionServices require MANAGE_OWN_CALLS permission.");
+ try {
+ mContext.enforceCallingOrSelfPermission(
+ Manifest.permission.MANAGE_OWN_CALLS,
+ "Self-managed ConnectionServices require "
+ + "MANAGE_OWN_CALLS permission.");
+ } catch (SecurityException e) {
+ // Fallback to use mobile network to avoid disclosing phone account handle
+ // package information
+ clearPhoneAccountHandleExtra = true;
+ }
- if (!callingPackage.equals(
+ if (!clearPhoneAccountHandleExtra && !callingPackage.equals(
phoneAccountHandle.getComponentName().getPackageName())
&& !canCallPhone(callingPackage, callingFeatureId,
"CALL_PHONE permission required to place calls.")) {
- // The caller is not allowed to place calls, so we want to ensure that it
- // can only place calls through itself.
- throw new SecurityException("Self-managed ConnectionServices can only "
- + "place calls through their own ConnectionService.");
+ // The caller is not allowed to place calls, so fallback to use mobile
+ // network.
+ clearPhoneAccountHandleExtra = true;
}
} else if (!canCallPhone(callingPackage, callingFeatureId, "placeCall")) {
throw new SecurityException("Package " + callingPackage
@@ -1535,6 +1543,9 @@
final Intent intent = new Intent(hasCallPrivilegedPermission ?
Intent.ACTION_CALL_PRIVILEGED : Intent.ACTION_CALL, handle);
if (extras != null) {
+ if (clearPhoneAccountHandleExtra) {
+ extras.remove(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE);
+ }
extras.setDefusable(true);
intent.putExtras(extras);
}
diff --git a/tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java b/tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java
index 0a10ea1..50363ae 100644
--- a/tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java
+++ b/tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java
@@ -1028,7 +1028,6 @@
assertFalse(PhoneAccountHandle.areFromSamePackage(null, d));
}
-
/**
* Ensure an IllegalArgumentException is thrown when adding more than 10 schemes for a single
* account
@@ -1132,7 +1131,6 @@
return sb.toString();
}
-
private static ComponentName makeQuickConnectionServiceComponentName() {
return new ComponentName(
"com.android.server.telecom.tests",