Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f496fbb authored by Siyamed Sinir's avatar Siyamed Sinir Committed by Android (Google) Code Review
Browse files

Merge "Prevent getting data from Clipboard if device is locked" into lmp-dev

parents 4a9d3584 51c5f6e0
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.app.ActivityManagerNative;
import android.app.AppGlobals;
import android.app.AppOpsManager;
import android.app.IActivityManager;
import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.ClipData;
import android.content.ClipDescription;
@@ -247,7 +248,7 @@ public class ClipboardService extends IClipboard.Stub {
    public ClipData getPrimaryClip(String pkg) {
        synchronized (this) {
            if (mAppOps.noteOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(),
                    pkg) != AppOpsManager.MODE_ALLOWED) {
                    pkg) != AppOpsManager.MODE_ALLOWED || isDeviceLocked()) {
                return null;
            }
            addActiveOwnerLocked(Binder.getCallingUid(), pkg);
@@ -258,7 +259,7 @@ public class ClipboardService extends IClipboard.Stub {
    public ClipDescription getPrimaryClipDescription(String callingPackage) {
        synchronized (this) {
            if (mAppOps.checkOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(),
                    callingPackage) != AppOpsManager.MODE_ALLOWED) {
                    callingPackage) != AppOpsManager.MODE_ALLOWED || isDeviceLocked()) {
                return null;
            }
            PerUserClipboard clipboard = getClipboard();
@@ -269,7 +270,7 @@ public class ClipboardService extends IClipboard.Stub {
    public boolean hasPrimaryClip(String callingPackage) {
        synchronized (this) {
            if (mAppOps.checkOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(),
                    callingPackage) != AppOpsManager.MODE_ALLOWED) {
                    callingPackage) != AppOpsManager.MODE_ALLOWED || isDeviceLocked()) {
                return false;
            }
            return getClipboard().primaryClip != null;
@@ -293,7 +294,7 @@ public class ClipboardService extends IClipboard.Stub {
    public boolean hasClipboardText(String callingPackage) {
        synchronized (this) {
            if (mAppOps.checkOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(),
                    callingPackage) != AppOpsManager.MODE_ALLOWED) {
                    callingPackage) != AppOpsManager.MODE_ALLOWED || isDeviceLocked()) {
                return false;
            }
            PerUserClipboard clipboard = getClipboard();
@@ -305,6 +306,13 @@ public class ClipboardService extends IClipboard.Stub {
        }
    }

    private boolean isDeviceLocked() {
        final KeyguardManager keyguardManager = (KeyguardManager) mContext.getSystemService(
                    Context.KEYGUARD_SERVICE);
        return keyguardManager != null && keyguardManager.isKeyguardLocked()
                    && keyguardManager.isKeyguardSecure();
    }

    private final void checkUriOwnerLocked(Uri uri, int uid) {
        if (!"content".equals(uri.getScheme())) {
            return;