Merge "Mark test flaky until it can be fixed"
diff --git a/src/com/android/server/telecom/CallScreeningServiceHelper.java b/src/com/android/server/telecom/CallScreeningServiceHelper.java
index 79d5286..29e9bb0 100644
--- a/src/com/android/server/telecom/CallScreeningServiceHelper.java
+++ b/src/com/android/server/telecom/CallScreeningServiceHelper.java
@@ -57,25 +57,35 @@
* from the call screening service to be handled.
*/
private class CallScreeningAdapter extends ICallScreeningAdapter.Stub {
+ private ServiceConnection mServiceConnection;
+
+ public CallScreeningAdapter(ServiceConnection connection) {
+ mServiceConnection = connection;
+ }
+
@Override
public void allowCall(String s) throws RemoteException {
- // no-op; we don't allow this on outgoing calls.
+ unbindCallScreeningService();
}
@Override
public void silenceCall(String s) throws RemoteException {
- // no-op; we don't allow this on outgoing calls.
+ unbindCallScreeningService();
}
@Override
public void screenCallFurther(String callId) throws RemoteException {
- // no-op; we don't allow this on outgoing calls.
+ unbindCallScreeningService();
}
@Override
public void disallowCall(String s, boolean b, boolean b1, boolean b2,
ComponentName componentName) throws RemoteException {
- // no-op; we don't allow this on outgoing calls.
+ unbindCallScreeningService();
+ }
+
+ private void unbindCallScreeningService() {
+ mContext.unbindService(mServiceConnection);
}
}
@@ -128,7 +138,7 @@
try {
try {
// Note: for outgoing calls, never include the restricted extras.
- screeningService.screenCall(new CallScreeningAdapter(),
+ screeningService.screenCall(new CallScreeningAdapter(this),
mParcelableCallUtilsConverter.toParcelableCallForScreening(mCall,
false /* areRestrictedExtrasIncluded */));
} catch (RemoteException e) {
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 8533295..63fe1f4 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -16,6 +16,7 @@
package com.android.server.telecom;
+import android.Manifest;
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.KeyguardManager;
@@ -1581,8 +1582,16 @@
isInContacts);
// We only want to provide a CallScreeningService with a call if its not in
- // contacts.
- if (!isInContacts) {
+ // contacts or the package has READ_CONTACT permission.
+ PackageManager packageManager = mContext.getPackageManager();
+ int permission = packageManager.checkPermission(
+ Manifest.permission.READ_CONTACTS,
+ mRoleManagerAdapter.getDefaultCallScreeningApp());
+ Log.d(CallsManager.this,
+ "default call screening service package %s has permissions=%s",
+ mRoleManagerAdapter.getDefaultCallScreeningApp(),
+ permission == PackageManager.PERMISSION_GRANTED);
+ if ((!isInContacts) || (permission == PackageManager.PERMISSION_GRANTED)) {
bindForOutgoingCallerId(theCall);
}
}, new LoggedHandlerExecutor(outgoingCallHandler, "CM.pCSB", mLock));
diff --git a/src/com/android/server/telecom/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
index 911cf0f..cf7abad 100644
--- a/src/com/android/server/telecom/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -1033,6 +1033,7 @@
private final PhoneAccountRegistrar mPhoneAccountRegistrar;
private final CallsManager mCallsManager;
private final AppOpsManager mAppOpsManager;
+ private final Context mContext;
private ConnectionServiceFocusManager.ConnectionServiceFocusListener mConnSvrFocusListener;
@@ -1063,6 +1064,7 @@
mPhoneAccountRegistrar = phoneAccountRegistrar;
mCallsManager = callsManager;
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+ mContext = context;
}
/** See {@link IConnectionService#addConnectionServiceAdapter}. */
diff --git a/src/com/android/server/telecom/CreateConnectionProcessor.java b/src/com/android/server/telecom/CreateConnectionProcessor.java
index 17b70da..72c06a3 100644
--- a/src/com/android/server/telecom/CreateConnectionProcessor.java
+++ b/src/com/android/server/telecom/CreateConnectionProcessor.java
@@ -103,7 +103,7 @@
if (manager == null) {
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
- return manager.getSubIdForPhoneAccountHandle(account.getAccountHandle());
+ return manager.getSubscriptionId(account.getAccountHandle());
}
@Override
diff --git a/src/com/android/server/telecom/PhoneAccountRegistrar.java b/src/com/android/server/telecom/PhoneAccountRegistrar.java
index 7dede8c..22568f1 100644
--- a/src/com/android/server/telecom/PhoneAccountRegistrar.java
+++ b/src/com/android/server/telecom/PhoneAccountRegistrar.java
@@ -195,7 +195,7 @@
if (account != null && account.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) {
TelephonyManager tm =
(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
- return tm.getSubIdForPhoneAccountHandle(accountHandle);
+ return tm.getSubscriptionId(accountHandle);
}
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 64bbc58..cb70c99 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -707,6 +707,31 @@
}
/**
+ * @param userId user id to get the default dialer package for
+ * @return the package name of the current user-selected default dialer. If no default
+ * has been selected, the package name of the system dialer is returned. If
+ * neither exists, then {@code null} is returned.
+ * @see android.telecom.TelecomManager#getDefaultDialerPackage
+ */
+ @Override
+ public String getDefaultDialerPackageForUser(int userId) {
+ try {
+ Log.startSession("TSI.gDDPU");
+ mContext.enforceCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE,
+ "READ_PRIVILEGED_PHONE_STATE permission required.");
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ return mDefaultDialerCache.getDefaultDialerApplication(userId);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ } finally {
+ Log.endSession();
+ }
+ }
+
+ /**
* @see android.telecom.TelecomManager#getSystemDialerPackage
*/
@Override
diff --git a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
index ed4e588..dcd0607 100644
--- a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
+++ b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
@@ -502,7 +502,7 @@
// Used in CreateConnectionProcessor to rank emergency numbers by viability.
// For the test, make them all equal to INVALID so that the preferred PhoneAccount will be
// chosen.
- when(mTelephonyManager.getSubIdForPhoneAccountHandle(any())).thenReturn(
+ when(mTelephonyManager.getSubscriptionId(any())).thenReturn(
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
when(mTelephonyManager.getNetworkOperatorName()).thenReturn("label1");