Snap for 4716599 from 18c944952f67e2d21c3554e4074371754c3ee32b to pi-release

Change-Id: I39d5b4680828d7c2077d147a1560e953982e544a
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 099e6d3..58d3a67 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -17,6 +17,7 @@
 package com.android.server.telecom;
 
 import android.app.ActivityManager;
+import android.app.KeyguardManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.pm.UserInfo;
@@ -516,20 +517,6 @@
             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(),
@@ -3170,6 +3157,21 @@
         }
     }
 
+    public boolean isReplyWithSmsAllowed(int uid) {
+        UserHandle callingUser = UserHandle.of(UserHandle.getUserId(uid));
+        UserManager userManager = mContext.getSystemService(UserManager.class);
+        KeyguardManager keyguardManager = mContext.getSystemService(KeyguardManager.class);
+
+        boolean isUserRestricted = userManager != null
+                && userManager.hasUserRestriction(UserManager.DISALLOW_SMS, callingUser);
+        boolean isLockscreenRestricted = keyguardManager != null
+                && keyguardManager.isDeviceLocked();
+        Log.d(this, "isReplyWithSmsAllowed: isUserRestricted: %s, isLockscreenRestricted: %s",
+                isUserRestricted, isLockscreenRestricted);
+
+        // TODO(hallliu): actually check the lockscreen once b/77731473 is fixed
+        return !isUserRestricted;
+    }
     /**
      * Blocks execution until all Telecom handlers have completed their current work.
      */
diff --git a/src/com/android/server/telecom/InCallAdapter.java b/src/com/android/server/telecom/InCallAdapter.java
index 02692c5..f3afc9a 100644
--- a/src/com/android/server/telecom/InCallAdapter.java
+++ b/src/com/android/server/telecom/InCallAdapter.java
@@ -16,12 +16,9 @@
 
 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;
 
@@ -35,16 +32,14 @@
  * 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(Context context, CallsManager callsManager, CallIdMapper callIdMapper,
+    public InCallAdapter(CallsManager callsManager, CallIdMapper callIdMapper,
             TelecomSystem.SyncRoot lock, String ownerComponentName) {
-        mContext = context;
         mCallsManager = callsManager;
         mCallIdMapper = callIdMapper;
         mLock = lock;
@@ -101,17 +96,12 @@
     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)) {
+            // silently drop the outgoing message. Also drop message if the screen is locked.
+            if (!mCallsManager.isReplyWithSmsAllowed(Binder.getCallingUid())) {
                 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 7aaa770..9d20d4a 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -1309,7 +1309,6 @@
         try {
             inCallService.setInCallAdapter(
                     new InCallAdapter(
-                            mContext,
                             mCallsManager,
                             mCallIdMapper,
                             mLock,