diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index f4f047e60230d..094a8a13653c3 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -1101,6 +1101,13 @@ public interface WindowManager extends ViewManager { */ public static final int PRIVATE_FLAG_KEYGUARD = 0x00000400; + /** + * Flag that prevents the wallpaper behind the current window from receiving touch events. + * + * {@hide} + */ + public static final int PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS = 0x00000800; + /** * Control flags that are private to the platform. * @hide diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 0327cb3ee7d49..27ac32aae3053 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -242,6 +242,7 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks { final WindowStateAnimator universeBackground = mService.mAnimator.mUniverseBackground; final int aboveUniverseLayer = mService.mAnimator.mAboveUniverseLayer; boolean addedUniverse = false; + boolean disableWallpaperTouchEvents = false; // If there's a drag in flight, provide a pseudowindow to catch drag input final boolean inDrag = (mService.mDragState != null); @@ -282,8 +283,14 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks { final boolean hasFocus = (child == mInputFocus); final boolean isVisible = child.isVisibleLw(); + if ((privateFlags + & WindowManager.LayoutParams.PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS) + != 0) { + disableWallpaperTouchEvents = true; + } final boolean hasWallpaper = (child == mService.mWallpaperTarget) - && (privateFlags & WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD) == 0; + && (privateFlags & WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD) == 0 + && !disableWallpaperTouchEvents; final boolean onDefaultDisplay = (child.getDisplayId() == Display.DEFAULT_DISPLAY); // If there's a drag in progress and 'child' is a potential drop target,