Merge "InCallTonePlayer concurrency improvements." into tm-dev am: 6a8a915d8a am: 4c56b899c3 am: 8ce455e807
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telecomm/+/17646236
Change-Id: I8ad122cca5c3c591a22d9d3d0ef94303dba993e1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 5684612..8bc80cb 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -349,42 +349,46 @@
public PhoneAccount getPhoneAccount(PhoneAccountHandle accountHandle,
String callingPackage) {
try {
- enforceCallingPackage(callingPackage, "getPhoneAccount");
- } catch (SecurityException se) {
- EventLog.writeEvent(0x534e4554, "196406138", Binder.getCallingUid(),
- "getPhoneAccount: invalid calling package");
- throw se;
- }
- synchronized (mLock) {
- final UserHandle callingUserHandle = Binder.getCallingUserHandle();
- if (CompatChanges.isChangeEnabled(
- TelecomManager.ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION,
- callingPackage, Binder.getCallingUserHandle())) {
- if (Binder.getCallingUid() != Process.SHELL_UID &&
- !canGetPhoneAccount(callingPackage, accountHandle)) {
- SecurityException e = new SecurityException("getPhoneAccount API requires" +
- "READ_PHONE_NUMBERS");
+ Log.startSession("TSI.gPA", Log.getPackageAbbreviation(callingPackage));
+ try {
+ enforceCallingPackage(callingPackage, "getPhoneAccount");
+ } catch (SecurityException se) {
+ EventLog.writeEvent(0x534e4554, "196406138", Binder.getCallingUid(),
+ "getPhoneAccount: invalid calling package");
+ throw se;
+ }
+ synchronized (mLock) {
+ final UserHandle callingUserHandle = Binder.getCallingUserHandle();
+ if (CompatChanges.isChangeEnabled(
+ TelecomManager.ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION,
+ callingPackage, Binder.getCallingUserHandle())) {
+ if (Binder.getCallingUid() != Process.SHELL_UID &&
+ !canGetPhoneAccount(callingPackage, accountHandle)) {
+ SecurityException e = new SecurityException(
+ "getPhoneAccount API requires" +
+ "READ_PHONE_NUMBERS");
+ Log.e(this, e, "getPhoneAccount %s", accountHandle);
+ throw e;
+ }
+ }
+ long token = Binder.clearCallingIdentity();
+ try {
+ // In ideal case, we should not resolve the handle across profiles. But
+ // given the fact that profile's call is handled by its parent user's
+ // in-call UI, parent user's in call UI need to be able to get phone account
+ // from the profile's phone account handle.
+ return mPhoneAccountRegistrar
+ .getPhoneAccount(accountHandle, callingUserHandle,
+ /* acrossProfiles */ true);
+ } catch (Exception e) {
Log.e(this, e, "getPhoneAccount %s", accountHandle);
throw e;
+ } finally {
+ Binder.restoreCallingIdentity(token);
}
}
- long token = Binder.clearCallingIdentity();
- try {
- Log.startSession("TSI.gPA");
- // In ideal case, we should not resolve the handle across profiles. But given
- // the fact that profile's call is handled by its parent user's in-call UI,
- // parent user's in call UI need to be able to get phone account from the
- // profile's phone account handle.
- return mPhoneAccountRegistrar
- .getPhoneAccount(accountHandle, callingUserHandle,
- /* acrossProfiles */ true);
- } catch (Exception e) {
- Log.e(this, e, "getPhoneAccount %s", accountHandle);
- throw e;
- } finally {
- Binder.restoreCallingIdentity(token);
- Log.endSession();
- }
+ } finally {
+ Log.endSession();
}
}
@@ -477,10 +481,10 @@
}
@Override
- public PhoneAccountHandle getSimCallManager(int subId) {
+ public PhoneAccountHandle getSimCallManager(int subId, String callingPackage) {
synchronized (mLock) {
try {
- Log.startSession("TSI.gSCM");
+ Log.startSession("TSI.gSCM", Log.getPackageAbbreviation(callingPackage));
final int callingUid = Binder.getCallingUid();
final int user = UserHandle.getUserId(callingUid);
long token = Binder.clearCallingIdentity();
@@ -502,10 +506,10 @@
}
@Override
- public PhoneAccountHandle getSimCallManagerForUser(int user) {
+ public PhoneAccountHandle getSimCallManagerForUser(int user, String callingPackage) {
synchronized (mLock) {
try {
- Log.startSession("TSI.gSCMFU");
+ Log.startSession("TSI.gSCMFU", Log.getPackageAbbreviation(callingPackage));
final int callingUid = Binder.getCallingUid();
if (user != ActivityManager.getCurrentUser()) {
enforceCrossUserPermission(callingUid);
@@ -526,9 +530,9 @@
}
@Override
- public void registerPhoneAccount(PhoneAccount account) {
+ public void registerPhoneAccount(PhoneAccount account, String callingPackage) {
try {
- Log.startSession("TSI.rPA");
+ Log.startSession("TSI.rPA", Log.getPackageAbbreviation(callingPackage));
synchronized (mLock) {
try {
enforcePhoneAccountModificationForPackage(
@@ -602,10 +606,11 @@
}
@Override
- public void unregisterPhoneAccount(PhoneAccountHandle accountHandle) {
+ public void unregisterPhoneAccount(PhoneAccountHandle accountHandle,
+ String callingPackage) {
synchronized (mLock) {
try {
- Log.startSession("TSI.uPA");
+ Log.startSession("TSI.uPA", Log.getPackageAbbreviation(callingPackage));
enforcePhoneAccountModificationForPackage(
accountHandle.getComponentName().getPackageName());
enforceUserHandleMatchesCaller(accountHandle);
@@ -648,7 +653,7 @@
public boolean isVoiceMailNumber(PhoneAccountHandle accountHandle, String number,
String callingPackage, String callingFeatureId) {
try {
- Log.startSession("TSI.iVMN");
+ Log.startSession("TSI.iVMN", Log.getPackageAbbreviation(callingPackage));
synchronized (mLock) {
if (!canReadPhoneState(callingPackage, callingFeatureId, "isVoiceMailNumber")) {
return false;
@@ -681,7 +686,7 @@
public String getVoiceMailNumber(PhoneAccountHandle accountHandle, String callingPackage,
String callingFeatureId) {
try {
- Log.startSession("TSI.gVMN");
+ Log.startSession("TSI.gVMN", Log.getPackageAbbreviation(callingPackage));
if (!canReadPhoneState(callingPackage, callingFeatureId, "getVoiceMailNumber")) {
return null;
}
@@ -717,7 +722,7 @@
public String getLine1Number(PhoneAccountHandle accountHandle, String callingPackage,
String callingFeatureId) {
try {
- Log.startSession("getL1N");
+ Log.startSession("getL1N", Log.getPackageAbbreviation(callingPackage));
if (!canReadPhoneNumbers(callingPackage, callingFeatureId, "getLine1Number")) {
return null;
}
@@ -754,7 +759,7 @@
@Override
public void silenceRinger(String callingPackage) {
try {
- Log.startSession("TSI.sR");
+ Log.startSession("TSI.sR", Log.getPackageAbbreviation(callingPackage));
synchronized (mLock) {
enforcePermissionOrPrivilegedDialer(MODIFY_PHONE_STATE, callingPackage);
@@ -794,9 +799,9 @@
* @see android.telecom.TelecomManager#getDefaultDialerPackage
*/
@Override
- public String getDefaultDialerPackage() {
+ public String getDefaultDialerPackage(String callingPackage) {
try {
- Log.startSession("TSI.gDDP");
+ Log.startSession("TSI.gDDP", Log.getPackageAbbreviation(callingPackage));
final long token = Binder.clearCallingIdentity();
try {
return mDefaultDialerCache.getDefaultDialerApplication(
@@ -838,9 +843,9 @@
* @see android.telecom.TelecomManager#getSystemDialerPackage
*/
@Override
- public String getSystemDialerPackage() {
+ public String getSystemDialerPackage(String callingPackage) {
try {
- Log.startSession("TSI.gSDP");
+ Log.startSession("TSI.gSDP", Log.getPackageAbbreviation(callingPackage));
return mDefaultDialerCache.getSystemDialerApplication();
} finally {
Log.endSession();
@@ -871,7 +876,7 @@
@Override
public boolean isInCall(String callingPackage, String callingFeatureId) {
try {
- Log.startSession("TSI.iIC");
+ Log.startSession("TSI.iIC", Log.getPackageAbbreviation(callingPackage));
if (!canReadPhoneState(callingPackage, callingFeatureId, "isInCall")) {
return false;
}
@@ -890,7 +895,7 @@
@Override
public boolean hasManageOngoingCallsPermission(String callingPackage) {
try {
- Log.startSession("TSI.hMOCP");
+ Log.startSession("TSI.hMOCP", Log.getPackageAbbreviation(callingPackage));
enforceCallingPackage(callingPackage, "hasManageOngoingCallsPermission");
return PermissionChecker.checkPermissionForDataDeliveryFromDataSource(
mContext, Manifest.permission.MANAGE_ONGOING_CALLS,
@@ -911,7 +916,7 @@
@Override
public boolean isInManagedCall(String callingPackage, String callingFeatureId) {
try {
- Log.startSession("TSI.iIMC");
+ Log.startSession("TSI.iIMC", Log.getPackageAbbreviation(callingPackage));
if (!canReadPhoneState(callingPackage, callingFeatureId, "isInManagedCall")) {
throw new SecurityException("Only the default dialer or caller with " +
"READ_PHONE_STATE permission can use this method.");
@@ -1268,9 +1273,10 @@
* @see android.telecom.TelecomManager#addNewIncomingCall
*/
@Override
- public void addNewIncomingCall(PhoneAccountHandle phoneAccountHandle, Bundle extras) {
+ public void addNewIncomingCall(PhoneAccountHandle phoneAccountHandle, Bundle extras,
+ String callingPackage) {
try {
- Log.startSession("TSI.aNIC");
+ Log.startSession("TSI.aNIC", Log.getPackageAbbreviation(callingPackage));
synchronized (mLock) {
Log.i(this, "Adding new incoming call with phoneAccountHandle %s",
phoneAccountHandle);
@@ -1330,9 +1336,10 @@
* @see android.telecom.TelecomManager#addNewIncomingConference
*/
@Override
- public void addNewIncomingConference(PhoneAccountHandle phoneAccountHandle, Bundle extras) {
+ public void addNewIncomingConference(PhoneAccountHandle phoneAccountHandle, Bundle extras,
+ String callingPackage) {
try {
- Log.startSession("TSI.aNIC");
+ Log.startSession("TSI.aNIC", Log.getPackageAbbreviation(callingPackage));
synchronized (mLock) {
Log.i(this, "Adding new incoming conference with phoneAccountHandle %s",
phoneAccountHandle);
@@ -1378,9 +1385,10 @@
* @see android.telecom.TelecomManager#acceptHandover
*/
@Override
- public void acceptHandover(Uri srcAddr, int videoState, PhoneAccountHandle destAcct) {
+ public void acceptHandover(Uri srcAddr, int videoState, PhoneAccountHandle destAcct,
+ String callingPackage) {
try {
- Log.startSession("TSI.aHO");
+ Log.startSession("TSI.aHO", Log.getPackageAbbreviation(callingPackage));
synchronized (mLock) {
Log.i(this, "acceptHandover; srcAddr=%s, videoState=%s, dest=%s",
Log.pii(srcAddr), VideoProfile.videoStateToString(videoState),
@@ -1720,8 +1728,13 @@
* @see android.telecom.TelecomManager#createManageBlockedNumbersIntent
*/
@Override
- public Intent createManageBlockedNumbersIntent() {
- return BlockedNumbersActivity.getIntentForStartingActivity();
+ public Intent createManageBlockedNumbersIntent(String callingPackage) {
+ try {
+ Log.startSession("TSI.cMBNI", Log.getPackageAbbreviation(callingPackage));
+ return BlockedNumbersActivity.getIntentForStartingActivity();
+ } finally {
+ Log.endSession();
+ }
}
@@ -1748,7 +1761,7 @@
@Override
public boolean isIncomingCallPermitted(PhoneAccountHandle phoneAccountHandle,
String callingPackage) {
- Log.startSession("TSI.iICP");
+ Log.startSession("TSI.iICP", Log.getPackageAbbreviation(callingPackage));
try {
enforceCallingPackage(callingPackage, "isIncomingCallPermitted");
enforcePhoneAccountHandleMatchesCaller(phoneAccountHandle, callingPackage);
@@ -1773,7 +1786,7 @@
@Override
public boolean isOutgoingCallPermitted(PhoneAccountHandle phoneAccountHandle,
String callingPackage) {
- Log.startSession("TSI.iOCP");
+ Log.startSession("TSI.iOCP", Log.getPackageAbbreviation(callingPackage));
try {
enforceCallingPackage(callingPackage, "isOutgoingCallPermitted");
enforcePhoneAccountHandleMatchesCaller(phoneAccountHandle, callingPackage);
diff --git a/tests/src/com/android/server/telecom/tests/BasicCallTests.java b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
index 7dc60e2..0e8a6fd 100644
--- a/tests/src/com/android/server/telecom/tests/BasicCallTests.java
+++ b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
@@ -86,6 +86,7 @@
*/
@RunWith(JUnit4.class)
public class BasicCallTests extends TelecomSystemTest {
+ private static final String CALLING_PACKAGE = BasicCallTests.class.getPackageName();
private static final String TEST_BUNDLE_KEY = "android.telecom.extra.TEST";
private static final String TEST_EVENT = "android.telecom.event.TEST";
@@ -326,7 +327,7 @@
TelecomManager.EXTRA_INCOMING_CALL_ADDRESS,
Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null));
mTelecomSystem.getTelecomServiceImpl().getBinder()
- .addNewIncomingCall(mPhoneAccountA0.getAccountHandle(), extras);
+ .addNewIncomingCall(mPhoneAccountA0.getAccountHandle(), extras, CALLING_PACKAGE);
waitForHandlerAction(mConnectionServiceFixtureA.mConnectionServiceDelegate.getHandler(),
TEST_TIMEOUT);
@@ -391,7 +392,7 @@
TelecomManager.EXTRA_INCOMING_CALL_ADDRESS,
Uri.fromParts(PhoneAccount.SCHEME_TEL, "650-555-1212", null));
mTelecomSystem.getTelecomServiceImpl().getBinder()
- .addNewIncomingCall(mPhoneAccountA0.getAccountHandle(), extras);
+ .addNewIncomingCall(mPhoneAccountA0.getAccountHandle(), extras, CALLING_PACKAGE);
waitForHandlerAction(mConnectionServiceFixtureA.mConnectionServiceDelegate.getHandler(),
TEST_TIMEOUT);
@@ -441,7 +442,7 @@
TelecomManager.EXTRA_INCOMING_CALL_ADDRESS,
Uri.fromParts(PhoneAccount.SCHEME_TEL, "650-555-1212", null));
mTelecomSystem.getTelecomServiceImpl().getBinder()
- .addNewIncomingCall(mPhoneAccountA0.getAccountHandle(), extras);
+ .addNewIncomingCall(mPhoneAccountA0.getAccountHandle(), extras, CALLING_PACKAGE);
waitForHandlerAction(mConnectionServiceFixtureA.mConnectionServiceDelegate.getHandler(),
TEST_TIMEOUT);
@@ -493,7 +494,7 @@
TelecomManager.EXTRA_INCOMING_CALL_ADDRESS,
Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null));
mTelecomSystem.getTelecomServiceImpl().getBinder()
- .addNewIncomingCall(mPhoneAccountA0.getAccountHandle(), extras);
+ .addNewIncomingCall(mPhoneAccountA0.getAccountHandle(), extras, CALLING_PACKAGE);
waitForHandlerAction(mConnectionServiceFixtureA.mConnectionServiceDelegate.getHandler(),
TEST_TIMEOUT);
diff --git a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
index 210f80e..fc6cc05 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomServiceImplTest.java
@@ -101,6 +101,7 @@
@RunWith(JUnit4.class)
public class TelecomServiceImplTest extends TelecomTestCase {
+ private static final String CALLING_PACKAGE = TelecomServiceImplTest.class.getPackageName();
public static final String TEST_PACKAGE = "com.test";
public static final String PACKAGE_NAME = "test";
@@ -598,7 +599,7 @@
ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
boolean didExceptionOccur = false;
try {
- mTSIBinder.registerPhoneAccount(testPhoneAccount);
+ mTSIBinder.registerPhoneAccount(testPhoneAccount, CALLING_PACKAGE);
} catch (Exception e) {
didExceptionOccur = true;
}
@@ -624,7 +625,7 @@
doReturn(PackageManager.PERMISSION_GRANTED)
.when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE);
- mTSIBinder.unregisterPhoneAccount(phHandle);
+ mTSIBinder.unregisterPhoneAccount(phHandle, CALLING_PACKAGE);
verify(mFakePhoneAccountRegistrar).unregisterPhoneAccount(phHandle);
}
@@ -641,7 +642,7 @@
when(pm.hasSystemFeature(PackageManager.FEATURE_TELECOM)).thenReturn(false);
try {
- mTSIBinder.unregisterPhoneAccount(phHandle);
+ mTSIBinder.unregisterPhoneAccount(phHandle, CALLING_PACKAGE);
} catch (UnsupportedOperationException e) {
// expected behavior
}
@@ -661,7 +662,7 @@
doNothing().when(mAppOpsManager).checkPackage(anyInt(), anyString());
Bundle extras = createSampleExtras();
- mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_CURRENT, extras);
+ mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_CURRENT, extras, CALLING_PACKAGE);
addCallTestHelper(TelecomManager.ACTION_INCOMING_CALL,
CallIntentProcessor.KEY_IS_INCOMING_CALL, extras, false);
@@ -671,7 +672,7 @@
@Test
public void testAddNewIncomingCallFailure() throws Exception {
try {
- mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_16, null);
+ mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_16, null, CALLING_PACKAGE);
} catch (SecurityException e) {
// expected
}
@@ -679,7 +680,7 @@
doThrow(new SecurityException()).when(mAppOpsManager).checkPackage(anyInt(), anyString());
try {
- mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_CURRENT, null);
+ mTSIBinder.addNewIncomingCall(TEL_PA_HANDLE_CURRENT, null, CALLING_PACKAGE);
} catch (SecurityException e) {
// expected
}
diff --git a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
index d6ff196..eeb65c7 100644
--- a/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
+++ b/tests/src/com/android/server/telecom/tests/TelecomSystemTest.java
@@ -119,6 +119,7 @@
*/
public class TelecomSystemTest extends TelecomTestCase {
+ private static final String CALLING_PACKAGE = TelecomSystemTest.class.getPackageName();
static final int TEST_POLL_INTERVAL = 10; // milliseconds
static final int TEST_TIMEOUT = 1000; // milliseconds
@@ -904,7 +905,7 @@
TelecomManager.EXTRA_INCOMING_CALL_ADDRESS,
Uri.fromParts(PhoneAccount.SCHEME_TEL, number, null));
mTelecomSystem.getTelecomServiceImpl().getBinder()
- .addNewIncomingCall(phoneAccountHandle, extras);
+ .addNewIncomingCall(phoneAccountHandle, extras, CALLING_PACKAGE);
verify(connectionServiceFixture.getTestDouble())
.createConnection(any(PhoneAccountHandle.class), anyString(),