Merge "Check user restrictions during incoming calls." into pi-dev
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index f7953b1..099e6d3 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -516,6 +516,20 @@
return;
}
+ // Check DISALLOW_OUTGOING_CALLS restriction.
+ // Only ecbm calls are allowed through when users with the DISALLOW_OUTGOING_CALLS
+ // restriction are the current user.
+ final UserManager userManager = (UserManager) mContext.getSystemService(
+ Context.USER_SERVICE);
+ if (userManager.hasUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS,
+ mCurrentUserHandle)) {
+ Log.w(this, "Rejecting non-ecbm phone call due to DISALLOW_INCOMING_CALLS "
+ + "restriction");
+ incomingCall.reject(false, null);
+ mCallLogManager.logCall(incomingCall, Calls.MISSED_TYPE, false /* showNotification */);
+ return;
+ }
+
List<IncomingCallFilter.CallFilter> filters = new ArrayList<>();
filters.add(new DirectToVoicemailCallFilter(mCallerInfoLookupHelper));
filters.add(new AsyncBlockCheckFilter(mContext, new BlockCheckerAdapter(),
diff --git a/src/com/android/server/telecom/InCallAdapter.java b/src/com/android/server/telecom/InCallAdapter.java
index 3357d9b..02692c5 100644
--- a/src/com/android/server/telecom/InCallAdapter.java
+++ b/src/com/android/server/telecom/InCallAdapter.java
@@ -16,9 +16,12 @@
package com.android.server.telecom;
+import android.content.Context;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
import android.telecom.Log;
import android.telecom.PhoneAccountHandle;
@@ -32,14 +35,16 @@
* binding to it. This adapter can receive commands and updates until the in-call app is unbound.
*/
class InCallAdapter extends IInCallAdapter.Stub {
+ private final Context mContext;
private final CallsManager mCallsManager;
private final CallIdMapper mCallIdMapper;
private final TelecomSystem.SyncRoot mLock;
private final String mOwnerComponentName;
/** Persists the specified parameters. */
- public InCallAdapter(CallsManager callsManager, CallIdMapper callIdMapper,
+ public InCallAdapter(Context context, CallsManager callsManager, CallIdMapper callIdMapper,
TelecomSystem.SyncRoot lock, String ownerComponentName) {
+ mContext = context;
mCallsManager = callsManager;
mCallIdMapper = callIdMapper;
mLock = lock;
@@ -96,6 +101,17 @@
public void rejectCall(String callId, boolean rejectWithMessage, String textMessage) {
try {
Log.startSession(LogUtils.Sessions.ICA_REJECT_CALL, mOwnerComponentName);
+ UserHandle callingUser = UserHandle.of(UserHandle.getUserId(Binder.getCallingUid()));
+ UserManager userManager = mContext.getSystemService(UserManager.class);
+
+ // Check to make sure the in-call app's user isn't restricted from sending SMS. If so,
+ // silently drop the outgoing message.
+ if (rejectWithMessage && userManager.hasUserRestriction(
+ UserManager.DISALLOW_SMS, callingUser)) {
+ rejectWithMessage = false;
+ textMessage = null;
+ }
+
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java
index 9d20d4a..7aaa770 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -1309,6 +1309,7 @@
try {
inCallService.setInCallAdapter(
new InCallAdapter(
+ mContext,
mCallsManager,
mCallIdMapper,
mLock,