Merge changes from topic "presubmit-am-4a196505e7784256b7c2d4af8313e491" into sc-qpr1-dev am: 12efaeb75a am: e5aa3d02c6 am: 879cff92df am: 7af03bada7 am: d4236896b9
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telecomm/+/16938964
Change-Id: I3a685c41b776046b9688cedeab33b830d02de056
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 28ddd0d..f066635 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -359,42 +359,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();
}
}
@@ -487,10 +491,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();
@@ -512,10 +516,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);
@@ -536,9 +540,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) {
if (!((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE))
.isVoiceCapable()) {
@@ -618,10 +622,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);
@@ -664,7 +669,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;
@@ -697,7 +702,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;
}
@@ -733,7 +738,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;
}
@@ -770,7 +775,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);
@@ -810,9 +815,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(
@@ -854,9 +859,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();
@@ -887,7 +892,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;
}
@@ -906,7 +911,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,
@@ -927,7 +932,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.");
@@ -1284,9 +1289,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);
@@ -1346,9 +1352,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);
@@ -1394,9 +1401,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),
@@ -1736,8 +1744,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();
+ }
}
@@ -1764,7 +1777,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);
@@ -1789,7 +1802,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 b4f0c4b..ae6c40d 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";
@@ -602,7 +603,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;
}
@@ -628,7 +629,7 @@
doReturn(PackageManager.PERMISSION_GRANTED)
.when(mContext).checkCallingOrSelfPermission(MODIFY_PHONE_STATE);
- mTSIBinder.unregisterPhoneAccount(phHandle);
+ mTSIBinder.unregisterPhoneAccount(phHandle, CALLING_PACKAGE);
verify(mFakePhoneAccountRegistrar).unregisterPhoneAccount(phHandle);
}
@@ -645,7 +646,7 @@
when(pm.hasSystemFeature(PackageManager.FEATURE_TELECOM)).thenReturn(false);
try {
- mTSIBinder.unregisterPhoneAccount(phHandle);
+ mTSIBinder.unregisterPhoneAccount(phHandle, CALLING_PACKAGE);
} catch (UnsupportedOperationException e) {
// expected behavior
}
@@ -665,7 +666,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);
@@ -675,7 +676,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
}
@@ -683,7 +684,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 0991f36..1077486 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
@@ -907,7 +908,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(),