Loading src/com/android/server/telecom/CallScreeningServiceHelper.java +15 −5 Original line number Diff line number Diff line Loading @@ -57,25 +57,35 @@ public class CallScreeningServiceHelper { * 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); } } Loading Loading @@ -128,7 +138,7 @@ public class CallScreeningServiceHelper { 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) { Loading src/com/android/server/telecom/CallsManager.java +11 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.telecom; import android.Manifest; import android.annotation.NonNull; import android.app.ActivityManager; import android.app.KeyguardManager; Loading Loading @@ -1581,8 +1582,16 @@ public class CallsManager extends Call.ListenerBase 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)); Loading Loading
src/com/android/server/telecom/CallScreeningServiceHelper.java +15 −5 Original line number Diff line number Diff line Loading @@ -57,25 +57,35 @@ public class CallScreeningServiceHelper { * 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); } } Loading Loading @@ -128,7 +138,7 @@ public class CallScreeningServiceHelper { 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) { Loading
src/com/android/server/telecom/CallsManager.java +11 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.telecom; import android.Manifest; import android.annotation.NonNull; import android.app.ActivityManager; import android.app.KeyguardManager; Loading Loading @@ -1581,8 +1582,16 @@ public class CallsManager extends Call.ListenerBase 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)); Loading