Merge "Fix the problem that system apps cannot drag" am: 0d6c423cdc
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2210995 Change-Id: Ie1313a09823c3f350a67f0199df55b30ded8d393 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -322,7 +322,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
|
||||
final int callingPid = Binder.getCallingPid();
|
||||
// Validate and resolve ClipDescription data before clearing the calling identity
|
||||
validateAndResolveDragMimeTypeExtras(data, callingUid, callingPid, mPackageName);
|
||||
validateDragFlags(flags, callingUid);
|
||||
validateDragFlags(flags);
|
||||
final long ident = Binder.clearCallingIdentity();
|
||||
try {
|
||||
return mDragDropController.performDrag(mPid, mUid, window, flags, surface, touchSource,
|
||||
@@ -347,11 +347,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
|
||||
* Validates the given drag flags.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void validateDragFlags(int flags, int callingUid) {
|
||||
if (callingUid == Process.SYSTEM_UID) {
|
||||
throw new IllegalStateException("Need to validate before calling identify is cleared");
|
||||
}
|
||||
|
||||
void validateDragFlags(int flags) {
|
||||
if ((flags & View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION) != 0) {
|
||||
if (!mCanStartTasksFromRecents) {
|
||||
throw new SecurityException("Requires START_TASKS_FROM_RECENTS permission");
|
||||
@@ -365,9 +361,6 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
|
||||
@VisibleForTesting
|
||||
void validateAndResolveDragMimeTypeExtras(ClipData data, int callingUid, int callingPid,
|
||||
String callingPackage) {
|
||||
if (callingUid == Process.SYSTEM_UID) {
|
||||
throw new IllegalStateException("Need to validate before calling identify is cleared");
|
||||
}
|
||||
final ClipDescription desc = data != null ? data.getDescription() : null;
|
||||
if (desc == null) {
|
||||
return;
|
||||
|
||||
@@ -467,8 +467,7 @@ public class DragDropControllerTests extends WindowTestsBase {
|
||||
public void onAnimatorScaleChanged(float scale) {}
|
||||
});
|
||||
try {
|
||||
session.validateDragFlags(View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION,
|
||||
TEST_UID);
|
||||
session.validateDragFlags(View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION);
|
||||
fail("Expected failure without permission");
|
||||
} catch (SecurityException e) {
|
||||
// Expected failure
|
||||
@@ -484,8 +483,7 @@ public class DragDropControllerTests extends WindowTestsBase {
|
||||
public void onAnimatorScaleChanged(float scale) {}
|
||||
});
|
||||
try {
|
||||
session.validateDragFlags(View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION,
|
||||
TEST_UID);
|
||||
session.validateDragFlags(View.DRAG_FLAG_REQUEST_SURFACE_FOR_RETURN_ANIMATION);
|
||||
// Expected pass
|
||||
} catch (SecurityException e) {
|
||||
fail("Expected no failure with permission");
|
||||
|
||||
Reference in New Issue
Block a user