diff options
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java index 9181c69e3722..7d169ecf02de 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java @@ -28,6 +28,7 @@ import android.app.RemoteInput; import android.app.RemoteInputHistoryItem; import android.content.Context; import android.content.Intent; +import android.content.pm.UserInfo; import android.net.Uri; import android.os.Handler; import android.os.RemoteException; @@ -401,15 +402,35 @@ public class NotificationRemoteInputManager implements Dumpable { if (!mLockscreenUserManager.shouldAllowLockscreenRemoteInput()) { final int userId = pendingIntent.getCreatorUserHandle().getIdentifier(); + + final boolean isLockedManagedProfile = + mUserManager.getUserInfo(userId).isManagedProfile() + && mKeyguardManager.isDeviceLocked(userId); + + final boolean isParentUserLocked; + if (isLockedManagedProfile) { + final UserInfo profileParent = mUserManager.getProfileParent(userId); + isParentUserLocked = (profileParent != null) + && mKeyguardManager.isDeviceLocked(profileParent.id); + } else { + isParentUserLocked = false; + } + if (mLockscreenUserManager.isLockscreenPublicMode(userId) || mStatusBarStateController.getState() == StatusBarState.KEYGUARD) { - // Even if we don't have security we should go through this flow, otherwise we won't - // go to the shade - mCallback.onLockedRemoteInput(row, view); + // If the parent user is no longer locked, and the user to which the remote input + // is destined is a locked, managed profile, then onLockedWorkRemoteInput should be + // called to unlock it. + if (isLockedManagedProfile && !isParentUserLocked) { + mCallback.onLockedWorkRemoteInput(userId, row, view); + } else { + // Even if we don't have security we should go through this flow, otherwise + // we won't go to the shade. + mCallback.onLockedRemoteInput(row, view); + } return true; } - if (mUserManager.getUserInfo(userId).isManagedProfile() - && mKeyguardManager.isDeviceLocked(userId)) { + if (isLockedManagedProfile) { mCallback.onLockedWorkRemoteInput(userId, row, view); return true; } |