Loading Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,7 @@ filegroup { ":gatekeeper_aidl", ":gsiservice_aidl", ":idmap2_aidl", ":guiconstants_aidl", ":idmap2_core_aidl", ":incidentcompanion_aidl", ":inputconstants_aidl", Loading core/java/android/view/SurfaceControl.java +14 −1 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; import android.gui.DropInputMode; import android.hardware.HardwareBuffer; import android.hardware.display.DeviceProductInfo; import android.hardware.display.DisplayedContentSample; Loading Loading @@ -150,7 +151,8 @@ public final class SurfaceControl implements Parcelable { float childRelativeTop, float childRelativeRight, float childRelativeBottom); private static native void nativeSetTrustedOverlay(long transactionObj, long nativeObject, boolean isTrustedOverlay); private static native void nativeSetDropInputMode( long transactionObj, long nativeObject, int flags); private static native boolean nativeClearContentFrameStats(long nativeObject); private static native boolean nativeGetContentFrameStats(long nativeObject, WindowContentFrameStats outStats); private static native boolean nativeClearAnimationFrameStats(); Loading Loading @@ -3426,6 +3428,17 @@ public final class SurfaceControl implements Parcelable { return this; } /** * Sets the input event drop mode on this SurfaceControl and its children. The caller must * hold the ACCESS_SURFACE_FLINGER permission. See {@code InputEventDropMode}. * @hide */ public Transaction setDropInputMode(SurfaceControl sc, @DropInputMode int mode) { checkPreconditions(sc); nativeSetDropInputMode(mNativeObject, sc.mNativeObject, mode); return this; } /** * Merge the other transaction into this transaction, clearing the * other transaction as if it had been applied. Loading core/jni/android_view_SurfaceControl.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -868,6 +868,13 @@ static void nativeSetFixedTransformHint(JNIEnv* env, jclass clazz, jlong transac transaction->setFixedTransformHint(ctrl, transformHint); } static void nativeSetDropInputMode(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject, jint mode) { auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl*>(nativeObject); transaction->setDropInputMode(ctrl, static_cast<gui::DropInputMode>(mode)); } static jlongArray nativeGetPhysicalDisplayIds(JNIEnv* env, jclass clazz) { const auto displayIds = SurfaceComposerClient::getPhysicalDisplayIds(); jlongArray array = env->NewLongArray(displayIds.size()); Loading Loading @@ -1994,6 +2001,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeGetTransformHint }, {"nativeSetTrustedOverlay", "(JJZ)V", (void*)nativeSetTrustedOverlay }, {"nativeSetDropInputMode", "(JJI)V", (void*)nativeSetDropInputMode}, // clang-format on }; Loading services/core/java/com/android/server/wm/DisplayPolicy.java +15 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,7 @@ import android.graphics.Insets; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.Region; import android.gui.DropInputMode; import android.hardware.power.Boost; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -927,6 +928,20 @@ public class DisplayPolicy { } } /** * Add additional policy if needed to ensure the window or its children should not receive any * input. */ public void setDropInputModePolicy(WindowState win, LayoutParams attrs) { if (attrs.type == TYPE_TOAST && (attrs.privateFlags & PRIVATE_FLAG_TRUSTED_OVERLAY) == 0) { // Toasts should not receive input. These windows should not have any children, so // force this hierarchy of windows to drop all input. mService.mTransactionFactory.get() .setDropInputMode(win.getSurfaceControl(), DropInputMode.ALL).apply(); } } /** * Check if a window can be added to the system. * Loading services/core/java/com/android/server/wm/WindowManagerService.java +1 −0 Original line number Diff line number Diff line Loading @@ -1780,6 +1780,7 @@ public class WindowManagerService extends IWindowManager.Stub win.mToken.addWindow(win); displayPolicy.addWindowLw(win, attrs); displayPolicy.setDropInputModePolicy(win, win.mAttrs); if (type == TYPE_INPUT_METHOD) { displayContent.setInputMethodWindowLocked(win); imMayMove = false; Loading Loading
Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,7 @@ filegroup { ":gatekeeper_aidl", ":gsiservice_aidl", ":idmap2_aidl", ":guiconstants_aidl", ":idmap2_core_aidl", ":incidentcompanion_aidl", ":inputconstants_aidl", Loading
core/java/android/view/SurfaceControl.java +14 −1 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; import android.gui.DropInputMode; import android.hardware.HardwareBuffer; import android.hardware.display.DeviceProductInfo; import android.hardware.display.DisplayedContentSample; Loading Loading @@ -150,7 +151,8 @@ public final class SurfaceControl implements Parcelable { float childRelativeTop, float childRelativeRight, float childRelativeBottom); private static native void nativeSetTrustedOverlay(long transactionObj, long nativeObject, boolean isTrustedOverlay); private static native void nativeSetDropInputMode( long transactionObj, long nativeObject, int flags); private static native boolean nativeClearContentFrameStats(long nativeObject); private static native boolean nativeGetContentFrameStats(long nativeObject, WindowContentFrameStats outStats); private static native boolean nativeClearAnimationFrameStats(); Loading Loading @@ -3426,6 +3428,17 @@ public final class SurfaceControl implements Parcelable { return this; } /** * Sets the input event drop mode on this SurfaceControl and its children. The caller must * hold the ACCESS_SURFACE_FLINGER permission. See {@code InputEventDropMode}. * @hide */ public Transaction setDropInputMode(SurfaceControl sc, @DropInputMode int mode) { checkPreconditions(sc); nativeSetDropInputMode(mNativeObject, sc.mNativeObject, mode); return this; } /** * Merge the other transaction into this transaction, clearing the * other transaction as if it had been applied. Loading
core/jni/android_view_SurfaceControl.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -868,6 +868,13 @@ static void nativeSetFixedTransformHint(JNIEnv* env, jclass clazz, jlong transac transaction->setFixedTransformHint(ctrl, transformHint); } static void nativeSetDropInputMode(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject, jint mode) { auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl*>(nativeObject); transaction->setDropInputMode(ctrl, static_cast<gui::DropInputMode>(mode)); } static jlongArray nativeGetPhysicalDisplayIds(JNIEnv* env, jclass clazz) { const auto displayIds = SurfaceComposerClient::getPhysicalDisplayIds(); jlongArray array = env->NewLongArray(displayIds.size()); Loading Loading @@ -1994,6 +2001,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeGetTransformHint }, {"nativeSetTrustedOverlay", "(JJZ)V", (void*)nativeSetTrustedOverlay }, {"nativeSetDropInputMode", "(JJI)V", (void*)nativeSetDropInputMode}, // clang-format on }; Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +15 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,7 @@ import android.graphics.Insets; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.Region; import android.gui.DropInputMode; import android.hardware.power.Boost; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -927,6 +928,20 @@ public class DisplayPolicy { } } /** * Add additional policy if needed to ensure the window or its children should not receive any * input. */ public void setDropInputModePolicy(WindowState win, LayoutParams attrs) { if (attrs.type == TYPE_TOAST && (attrs.privateFlags & PRIVATE_FLAG_TRUSTED_OVERLAY) == 0) { // Toasts should not receive input. These windows should not have any children, so // force this hierarchy of windows to drop all input. mService.mTransactionFactory.get() .setDropInputMode(win.getSurfaceControl(), DropInputMode.ALL).apply(); } } /** * Check if a window can be added to the system. * Loading
services/core/java/com/android/server/wm/WindowManagerService.java +1 −0 Original line number Diff line number Diff line Loading @@ -1780,6 +1780,7 @@ public class WindowManagerService extends IWindowManager.Stub win.mToken.addWindow(win); displayPolicy.addWindowLw(win, attrs); displayPolicy.setDropInputModePolicy(win, win.mAttrs); if (type == TYPE_INPUT_METHOD) { displayContent.setInputMethodWindowLocked(win); imMayMove = false; Loading