Loading src/com/android/server/telecom/CallsManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -3987,6 +3987,19 @@ public class CallsManager extends Call.ListenerBase return false; } /** * Determines if there are any ongoing self managed calls for the given package/user. * @param packageName The package name to check. * @param userHandle The userhandle to check. * @return {@code true} if the app has ongoing calls, or {@code false} otherwise. */ public boolean isInSelfManagedCall(String packageName, UserHandle userHandle) { return mCalls.stream().anyMatch( c -> c.isSelfManaged() && c.getTargetPhoneAccount().getComponentName().getPackageName().equals(packageName) && c.getTargetPhoneAccount().getUserHandle().equals(userHandle)); } @VisibleForTesting public int getNumCallsWithState(final boolean isSelfManaged, Call excludeCall, PhoneAccountHandle phoneAccountHandle, int... states) { Loading src/com/android/server/telecom/TelecomServiceImpl.java +33 −0 Original line number Diff line number Diff line Loading @@ -2093,6 +2093,39 @@ public class TelecomServiceImpl { Log.endSession(); } } /** * Determines whether there are any ongoing {@link PhoneAccount#CAPABILITY_SELF_MANAGED} * calls for a given {@code packageName} and {@code userHandle}. * * @param packageName the package name of the app to check calls for. * @param userHandle the user handle on which to check for calls. * @param callingPackage The caller's package name. * @return {@code true} if there are ongoing calls, {@code false} otherwise. */ @Override public boolean isInSelfManagedCall(String packageName, UserHandle userHandle, String callingPackage) { try { if (Binder.getCallingUid() != Process.SYSTEM_UID) { throw new SecurityException("Only the system can call this API"); } mContext.enforceCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE, "READ_PRIVILEGED_PHONE_STATE required."); Log.startSession("TSI.iISMC", Log.getPackageAbbreviation(callingPackage)); synchronized (mLock) { long token = Binder.clearCallingIdentity(); try { return mCallsManager.isInSelfManagedCall(packageName, userHandle); } finally { Binder.restoreCallingIdentity(token); } } } finally { Log.endSession(); } } }; /** Loading tests/src/com/android/server/telecom/tests/CallsManagerTest.java +51 −0 Original line number Diff line number Diff line Loading @@ -1625,6 +1625,57 @@ public class CallsManagerTest extends TelecomTestCase { verify(callSpy, never()).setDisconnectCause(any(DisconnectCause.class)); } @Test public void testIsInSelfManagedCallOnlyManaged() { Call managedCall = createCall(SIM_1_HANDLE, CallState.ACTIVE); managedCall.setIsSelfManaged(false); mCallsManager.addCall(managedCall); // Certainly nothing from the self managed handle. assertFalse(mCallsManager.isInSelfManagedCall( SELF_MANAGED_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); // And nothing in a random other package. assertFalse(mCallsManager.isInSelfManagedCall( "com.foo", SELF_MANAGED_HANDLE.getUserHandle())); // And this method is only checking self managed not managed. assertFalse(mCallsManager.isInSelfManagedCall( SIM_1_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); } @Test public void testIsInSelfManagedCallOnlySelfManaged() { Call selfManagedCall = createCall(SELF_MANAGED_HANDLE, CallState.ACTIVE); selfManagedCall.setIsSelfManaged(true); mCallsManager.addCall(selfManagedCall); assertTrue(mCallsManager.isInSelfManagedCall( SELF_MANAGED_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); assertFalse(mCallsManager.isInSelfManagedCall( "com.foo", SELF_MANAGED_HANDLE.getUserHandle())); assertFalse(mCallsManager.isInSelfManagedCall( SIM_1_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); Call managedCall = createCall(SIM_1_HANDLE, CallState.ACTIVE); managedCall.setIsSelfManaged(false); mCallsManager.addCall(managedCall); // Still not including managed assertFalse(mCallsManager.isInSelfManagedCall( SIM_1_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); // Also shouldn't be something in another user's version of the same package. assertFalse(mCallsManager.isInSelfManagedCall( SELF_MANAGED_HANDLE.getComponentName().getPackageName(), new UserHandle(90210))); } private Call addSpyCall() { return addSpyCall(SIM_2_HANDLE, CallState.ACTIVE); } Loading Loading
src/com/android/server/telecom/CallsManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -3987,6 +3987,19 @@ public class CallsManager extends Call.ListenerBase return false; } /** * Determines if there are any ongoing self managed calls for the given package/user. * @param packageName The package name to check. * @param userHandle The userhandle to check. * @return {@code true} if the app has ongoing calls, or {@code false} otherwise. */ public boolean isInSelfManagedCall(String packageName, UserHandle userHandle) { return mCalls.stream().anyMatch( c -> c.isSelfManaged() && c.getTargetPhoneAccount().getComponentName().getPackageName().equals(packageName) && c.getTargetPhoneAccount().getUserHandle().equals(userHandle)); } @VisibleForTesting public int getNumCallsWithState(final boolean isSelfManaged, Call excludeCall, PhoneAccountHandle phoneAccountHandle, int... states) { Loading
src/com/android/server/telecom/TelecomServiceImpl.java +33 −0 Original line number Diff line number Diff line Loading @@ -2093,6 +2093,39 @@ public class TelecomServiceImpl { Log.endSession(); } } /** * Determines whether there are any ongoing {@link PhoneAccount#CAPABILITY_SELF_MANAGED} * calls for a given {@code packageName} and {@code userHandle}. * * @param packageName the package name of the app to check calls for. * @param userHandle the user handle on which to check for calls. * @param callingPackage The caller's package name. * @return {@code true} if there are ongoing calls, {@code false} otherwise. */ @Override public boolean isInSelfManagedCall(String packageName, UserHandle userHandle, String callingPackage) { try { if (Binder.getCallingUid() != Process.SYSTEM_UID) { throw new SecurityException("Only the system can call this API"); } mContext.enforceCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE, "READ_PRIVILEGED_PHONE_STATE required."); Log.startSession("TSI.iISMC", Log.getPackageAbbreviation(callingPackage)); synchronized (mLock) { long token = Binder.clearCallingIdentity(); try { return mCallsManager.isInSelfManagedCall(packageName, userHandle); } finally { Binder.restoreCallingIdentity(token); } } } finally { Log.endSession(); } } }; /** Loading
tests/src/com/android/server/telecom/tests/CallsManagerTest.java +51 −0 Original line number Diff line number Diff line Loading @@ -1625,6 +1625,57 @@ public class CallsManagerTest extends TelecomTestCase { verify(callSpy, never()).setDisconnectCause(any(DisconnectCause.class)); } @Test public void testIsInSelfManagedCallOnlyManaged() { Call managedCall = createCall(SIM_1_HANDLE, CallState.ACTIVE); managedCall.setIsSelfManaged(false); mCallsManager.addCall(managedCall); // Certainly nothing from the self managed handle. assertFalse(mCallsManager.isInSelfManagedCall( SELF_MANAGED_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); // And nothing in a random other package. assertFalse(mCallsManager.isInSelfManagedCall( "com.foo", SELF_MANAGED_HANDLE.getUserHandle())); // And this method is only checking self managed not managed. assertFalse(mCallsManager.isInSelfManagedCall( SIM_1_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); } @Test public void testIsInSelfManagedCallOnlySelfManaged() { Call selfManagedCall = createCall(SELF_MANAGED_HANDLE, CallState.ACTIVE); selfManagedCall.setIsSelfManaged(true); mCallsManager.addCall(selfManagedCall); assertTrue(mCallsManager.isInSelfManagedCall( SELF_MANAGED_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); assertFalse(mCallsManager.isInSelfManagedCall( "com.foo", SELF_MANAGED_HANDLE.getUserHandle())); assertFalse(mCallsManager.isInSelfManagedCall( SIM_1_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); Call managedCall = createCall(SIM_1_HANDLE, CallState.ACTIVE); managedCall.setIsSelfManaged(false); mCallsManager.addCall(managedCall); // Still not including managed assertFalse(mCallsManager.isInSelfManagedCall( SIM_1_HANDLE.getComponentName().getPackageName(), SELF_MANAGED_HANDLE.getUserHandle())); // Also shouldn't be something in another user's version of the same package. assertFalse(mCallsManager.isInSelfManagedCall( SELF_MANAGED_HANDLE.getComponentName().getPackageName(), new UserHandle(90210))); } private Call addSpyCall() { return addSpyCall(SIM_2_HANDLE, CallState.ACTIVE); } Loading