Loading core/java/android/view/ViewRootImpl.java +18 −14 Original line number Diff line number Diff line Loading @@ -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(); if ((mWindowAttributes.inputFeatures & WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL) == 0) { mInputChannel = new InputChannel(); } try { res = sWindowSession.add(mWindow, mWindowAttributes, getHostVisibility(), mAttachInfo.mContentInsets, Loading Loading @@ -524,6 +527,7 @@ public final class ViewRootImpl extends Handler implements ViewParent, mInputQueueCallback = ((RootViewSurfaceTaker)view).willYouTakeTheInputQueue(); } if (mInputChannel != null) { if (mInputQueueCallback != null) { mInputQueue = new InputQueue(mInputChannel); mInputQueueCallback.onInputQueueCreated(mInputQueue); Loading @@ -531,6 +535,7 @@ public final class ViewRootImpl extends Handler implements ViewParent, InputQueue.registerInputChannel(mInputChannel, mInputHandler, Looper.myQueue()); } } view.assignParent(this); mAddedTouchMode = (res&WindowManagerImpl.ADD_FLAG_IN_TOUCH_MODE) != 0; Loading Loading @@ -2152,14 +2157,13 @@ public final class ViewRootImpl extends Handler implements ViewParent, mSurface.release(); if (mInputChannel != null) { if (mInputQueueCallback != null) { if (mInputQueueCallback != null && mInputQueue != null) { mInputQueueCallback.onInputQueueDestroyed(mInputQueue); mInputQueueCallback = null; } else { mInputQueue = null; } else if (mInputChannel != null) { InputQueue.unregisterInputChannel(mInputChannel); } } try { sWindowSession.remove(mWindow); } catch (RemoteException e) { Loading core/java/android/view/WindowManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -1028,10 +1028,19 @@ 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; Loading core/jni/android_view_InputChannel.cpp +20 −7 Original line number Diff line number Diff line Loading @@ -111,7 +111,9 @@ static jobject android_view_InputChannel_createInputChannel(JNIEnv* env, NativeInputChannel* nativeInputChannel) { jobject inputChannelObj = env->NewObject(gInputChannelClassInfo.clazz, gInputChannelClassInfo.ctor); if (inputChannelObj) { android_view_InputChannel_setNativeInputChannel(env, inputChannelObj, nativeInputChannel); } return inputChannelObj; } Loading @@ -126,18 +128,29 @@ static jobjectArray android_view_InputChannel_nativeOpenInputChannelPair(JNIEnv* status_t result = InputChannel::openInputChannelPair(name, serverChannel, clientChannel); if (result) { LOGE("Could not open input channel pair. status=%d", result); jniThrowRuntimeException(env, "Could not open input channel pair."); String8 message; message.appendFormat("Could not open input channel pair. status=%d", result); jniThrowRuntimeException(env, message.string()); return NULL; } jobjectArray channelPair = env->NewObjectArray(2, gInputChannelClassInfo.clazz, NULL); if (env->ExceptionCheck()) { return NULL; } // TODO more robust error checking jobject serverChannelObj = android_view_InputChannel_createInputChannel(env, new NativeInputChannel(serverChannel)); if (env->ExceptionCheck()) { return NULL; } jobject clientChannelObj = android_view_InputChannel_createInputChannel(env, new NativeInputChannel(clientChannel)); if (env->ExceptionCheck()) { return NULL; } jobjectArray channelPair = env->NewObjectArray(2, gInputChannelClassInfo.clazz, NULL); env->SetObjectArrayElement(channelPair, 0, serverChannelObj); env->SetObjectArrayElement(channelPair, 1, clientChannelObj); return channelPair; Loading @@ -161,7 +174,7 @@ static void android_view_InputChannel_nativeDispose(JNIEnv* env, jobject obj, jb static void android_view_InputChannel_nativeTransferTo(JNIEnv* env, jobject obj, jobject otherObj) { if (android_view_InputChannel_getInputChannel(env, otherObj) != NULL) { if (android_view_InputChannel_getNativeInputChannel(env, otherObj) != NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Other object already has a native input channel."); return; Loading @@ -175,7 +188,7 @@ static void android_view_InputChannel_nativeTransferTo(JNIEnv* env, jobject obj, static void android_view_InputChannel_nativeReadFromParcel(JNIEnv* env, jobject obj, jobject parcelObj) { if (android_view_InputChannel_getInputChannel(env, obj) != NULL) { if (android_view_InputChannel_getNativeInputChannel(env, obj) != NULL) { jniThrowException(env, "java/lang/IllegalStateException", "This object already has a native input channel."); return; Loading core/jni/android_view_InputQueue.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -455,8 +455,9 @@ static void android_view_InputQueue_nativeRegisterInputChannel(JNIEnv* env, jcla env, inputChannelObj, inputHandlerObj, messageQueueObj); if (status) { jniThrowRuntimeException(env, "Failed to register input channel. " "Check logs for details."); String8 message; message.appendFormat("Failed to register input channel. status=%d", status); jniThrowRuntimeException(env, message.string()); } } Loading @@ -465,8 +466,9 @@ static void android_view_InputQueue_nativeUnregisterInputChannel(JNIEnv* env, jc status_t status = gNativeInputQueue.unregisterInputChannel(env, inputChannelObj); if (status) { jniThrowRuntimeException(env, "Failed to unregister input channel. " "Check logs for details."); String8 message; message.appendFormat("Failed to unregister input channel. status=%d", status); jniThrowRuntimeException(env, message.string()); } } Loading @@ -479,8 +481,9 @@ static void android_view_InputQueue_nativeFinished(JNIEnv* env, jclass clazz, // was no longer registered (DEAD_OBJECT) since it is a common race that can occur // during application shutdown. The input dispatcher recovers gracefully anyways. if (status != OK && status != DEAD_OBJECT) { jniThrowRuntimeException(env, "Failed to finish input event. " "Check logs for details."); String8 message; message.appendFormat("Failed to finish input event. status=%d", status); jniThrowRuntimeException(env, message.string()); } } Loading policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +1 −0 Original line number Diff line number Diff line Loading @@ -900,6 +900,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { lp.setTitle("PointerLocation"); WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL; wm.addView(addView, lp); if (mPointerLocationInputChannel == null) { Loading Loading
core/java/android/view/ViewRootImpl.java +18 −14 Original line number Diff line number Diff line Loading @@ -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(); if ((mWindowAttributes.inputFeatures & WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL) == 0) { mInputChannel = new InputChannel(); } try { res = sWindowSession.add(mWindow, mWindowAttributes, getHostVisibility(), mAttachInfo.mContentInsets, Loading Loading @@ -524,6 +527,7 @@ public final class ViewRootImpl extends Handler implements ViewParent, mInputQueueCallback = ((RootViewSurfaceTaker)view).willYouTakeTheInputQueue(); } if (mInputChannel != null) { if (mInputQueueCallback != null) { mInputQueue = new InputQueue(mInputChannel); mInputQueueCallback.onInputQueueCreated(mInputQueue); Loading @@ -531,6 +535,7 @@ public final class ViewRootImpl extends Handler implements ViewParent, InputQueue.registerInputChannel(mInputChannel, mInputHandler, Looper.myQueue()); } } view.assignParent(this); mAddedTouchMode = (res&WindowManagerImpl.ADD_FLAG_IN_TOUCH_MODE) != 0; Loading Loading @@ -2152,14 +2157,13 @@ public final class ViewRootImpl extends Handler implements ViewParent, mSurface.release(); if (mInputChannel != null) { if (mInputQueueCallback != null) { if (mInputQueueCallback != null && mInputQueue != null) { mInputQueueCallback.onInputQueueDestroyed(mInputQueue); mInputQueueCallback = null; } else { mInputQueue = null; } else if (mInputChannel != null) { InputQueue.unregisterInputChannel(mInputChannel); } } try { sWindowSession.remove(mWindow); } catch (RemoteException e) { Loading
core/java/android/view/WindowManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -1028,10 +1028,19 @@ 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; Loading
core/jni/android_view_InputChannel.cpp +20 −7 Original line number Diff line number Diff line Loading @@ -111,7 +111,9 @@ static jobject android_view_InputChannel_createInputChannel(JNIEnv* env, NativeInputChannel* nativeInputChannel) { jobject inputChannelObj = env->NewObject(gInputChannelClassInfo.clazz, gInputChannelClassInfo.ctor); if (inputChannelObj) { android_view_InputChannel_setNativeInputChannel(env, inputChannelObj, nativeInputChannel); } return inputChannelObj; } Loading @@ -126,18 +128,29 @@ static jobjectArray android_view_InputChannel_nativeOpenInputChannelPair(JNIEnv* status_t result = InputChannel::openInputChannelPair(name, serverChannel, clientChannel); if (result) { LOGE("Could not open input channel pair. status=%d", result); jniThrowRuntimeException(env, "Could not open input channel pair."); String8 message; message.appendFormat("Could not open input channel pair. status=%d", result); jniThrowRuntimeException(env, message.string()); return NULL; } jobjectArray channelPair = env->NewObjectArray(2, gInputChannelClassInfo.clazz, NULL); if (env->ExceptionCheck()) { return NULL; } // TODO more robust error checking jobject serverChannelObj = android_view_InputChannel_createInputChannel(env, new NativeInputChannel(serverChannel)); if (env->ExceptionCheck()) { return NULL; } jobject clientChannelObj = android_view_InputChannel_createInputChannel(env, new NativeInputChannel(clientChannel)); if (env->ExceptionCheck()) { return NULL; } jobjectArray channelPair = env->NewObjectArray(2, gInputChannelClassInfo.clazz, NULL); env->SetObjectArrayElement(channelPair, 0, serverChannelObj); env->SetObjectArrayElement(channelPair, 1, clientChannelObj); return channelPair; Loading @@ -161,7 +174,7 @@ static void android_view_InputChannel_nativeDispose(JNIEnv* env, jobject obj, jb static void android_view_InputChannel_nativeTransferTo(JNIEnv* env, jobject obj, jobject otherObj) { if (android_view_InputChannel_getInputChannel(env, otherObj) != NULL) { if (android_view_InputChannel_getNativeInputChannel(env, otherObj) != NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Other object already has a native input channel."); return; Loading @@ -175,7 +188,7 @@ static void android_view_InputChannel_nativeTransferTo(JNIEnv* env, jobject obj, static void android_view_InputChannel_nativeReadFromParcel(JNIEnv* env, jobject obj, jobject parcelObj) { if (android_view_InputChannel_getInputChannel(env, obj) != NULL) { if (android_view_InputChannel_getNativeInputChannel(env, obj) != NULL) { jniThrowException(env, "java/lang/IllegalStateException", "This object already has a native input channel."); return; Loading
core/jni/android_view_InputQueue.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -455,8 +455,9 @@ static void android_view_InputQueue_nativeRegisterInputChannel(JNIEnv* env, jcla env, inputChannelObj, inputHandlerObj, messageQueueObj); if (status) { jniThrowRuntimeException(env, "Failed to register input channel. " "Check logs for details."); String8 message; message.appendFormat("Failed to register input channel. status=%d", status); jniThrowRuntimeException(env, message.string()); } } Loading @@ -465,8 +466,9 @@ static void android_view_InputQueue_nativeUnregisterInputChannel(JNIEnv* env, jc status_t status = gNativeInputQueue.unregisterInputChannel(env, inputChannelObj); if (status) { jniThrowRuntimeException(env, "Failed to unregister input channel. " "Check logs for details."); String8 message; message.appendFormat("Failed to unregister input channel. status=%d", status); jniThrowRuntimeException(env, message.string()); } } Loading @@ -479,8 +481,9 @@ static void android_view_InputQueue_nativeFinished(JNIEnv* env, jclass clazz, // was no longer registered (DEAD_OBJECT) since it is a common race that can occur // during application shutdown. The input dispatcher recovers gracefully anyways. if (status != OK && status != DEAD_OBJECT) { jniThrowRuntimeException(env, "Failed to finish input event. " "Check logs for details."); String8 message; message.appendFormat("Failed to finish input event. status=%d", status); jniThrowRuntimeException(env, message.string()); } } Loading
policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +1 −0 Original line number Diff line number Diff line Loading @@ -900,6 +900,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { lp.setTitle("PointerLocation"); WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL; wm.addView(addView, lp); if (mPointerLocationInputChannel == null) { Loading