diff options
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 32 | ||||
-rw-r--r-- | core/java/android/view/WindowManager.java | 9 |
2 files changed, 27 insertions, 14 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index a0cc287..5c045bb 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -454,7 +454,10 @@ public final class ViewRootImpl extends Handler implements ViewParent, // manager, to make sure we do the relayout before receiving // any other events from the system. requestLayout(); - mInputChannel = new InputChannel(); + if ((mWindowAttributes.inputFeatures + & WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL) == 0) { + mInputChannel = new InputChannel(); + } try { res = sWindowSession.add(mWindow, mWindowAttributes, getHostVisibility(), mAttachInfo.mContentInsets, @@ -524,12 +527,14 @@ public final class ViewRootImpl extends Handler implements ViewParent, mInputQueueCallback = ((RootViewSurfaceTaker)view).willYouTakeTheInputQueue(); } - if (mInputQueueCallback != null) { - mInputQueue = new InputQueue(mInputChannel); - mInputQueueCallback.onInputQueueCreated(mInputQueue); - } else { - InputQueue.registerInputChannel(mInputChannel, mInputHandler, - Looper.myQueue()); + if (mInputChannel != null) { + if (mInputQueueCallback != null) { + mInputQueue = new InputQueue(mInputChannel); + mInputQueueCallback.onInputQueueCreated(mInputQueue); + } else { + InputQueue.registerInputChannel(mInputChannel, mInputHandler, + Looper.myQueue()); + } } view.assignParent(this); @@ -2152,13 +2157,12 @@ public final class ViewRootImpl extends Handler implements ViewParent, mSurface.release(); - if (mInputChannel != null) { - if (mInputQueueCallback != null) { - mInputQueueCallback.onInputQueueDestroyed(mInputQueue); - mInputQueueCallback = null; - } else { - InputQueue.unregisterInputChannel(mInputChannel); - } + if (mInputQueueCallback != null && mInputQueue != null) { + mInputQueueCallback.onInputQueueDestroyed(mInputQueue); + mInputQueueCallback = null; + mInputQueue = null; + } else if (mInputChannel != null) { + InputQueue.unregisterInputChannel(mInputChannel); } try { sWindowSession.remove(mWindow); diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index fdd9b2c..52d25d9 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -1029,9 +1029,18 @@ public interface WindowManager extends ViewManager { public static final int INPUT_FEATURE_DISABLE_POINTER_GESTURES = 0x00000001; /** + * Does not construct an input channel for this window. The channel will therefore + * be incapable of receiving input. + * + * @hide + */ + public static final int INPUT_FEATURE_NO_INPUT_CHANNEL = 0x00000002; + + /** * Control special features of the input subsystem. * * @see #INPUT_FEATURE_DISABLE_TOUCH_PAD_GESTURES + * @see #INPUT_FEATURE_NO_INPUT_CHANNEL * @hide */ public int inputFeatures; |