Clipboard should not return data if the device is locked. This CL checks
for device locked state before returning values from get/has functions.
Bug:
64934810
Change-Id: I856a9079fe64db0af44383fae1a9a418de959420
Merged-In: Icefac226615fe22a7735dff4ba4c3b528fb2ac12
(cherry picked from commit
0b8fa2f5e0d305f083345968a7c39fe7a6f0a158)
import android.app.AppGlobals;
import android.app.AppOpsManager;
import android.app.IActivityManager;
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;
import android.content.BroadcastReceiver;
import android.content.ClipData;
import android.content.ClipDescription;
public ClipData getPrimaryClip(String pkg) {
synchronized (this) {
if (mAppOps.noteOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(),
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);
return null;
}
addActiveOwnerLocked(Binder.getCallingUid(), pkg);
public ClipDescription getPrimaryClipDescription(String callingPackage) {
synchronized (this) {
if (mAppOps.checkOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(),
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();
return null;
}
PerUserClipboard clipboard = getClipboard();
public boolean hasPrimaryClip(String callingPackage) {
synchronized (this) {
if (mAppOps.checkOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(),
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;
return false;
}
return getClipboard().primaryClip != null;
public boolean hasClipboardText(String callingPackage) {
synchronized (this) {
if (mAppOps.checkOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(),
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();
return false;
}
PerUserClipboard clipboard = getClipboard();
+ private boolean isDeviceLocked() {
+ final KeyguardManager keyguardManager = mContext.getSystemService(KeyguardManager.class);
+ return keyguardManager != null && keyguardManager.isDeviceLocked();
+ }
+
private final void checkUriOwnerLocked(Uri uri, int uid) {
if (!"content".equals(uri.getScheme())) {
return;
private final void checkUriOwnerLocked(Uri uri, int uid) {
if (!"content".equals(uri.getScheme())) {
return;