diff options
| author | 2018-08-13 22:47:45 +0000 | |
|---|---|---|
| committer | 2018-08-13 22:47:45 +0000 | |
| commit | 9aa180de0b4d7fe04f6e5c4f66ca3c2e6c770de6 (patch) | |
| tree | acc5d3eac1857c7a2ea136fbfdc25fe62efd992a | |
| parent | 0034421d8e47c8a8f5874f553cce165d02888490 (diff) | |
| parent | 9628308adc509b2af1c35c3de8369e657055357a (diff) | |
Merge "Revert "Fix WM input limitations on secondary displays (2/N)""
6 files changed, 32 insertions, 34 deletions
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index a5d7b27bc2cd..9df9ba600f2a 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -212,8 +212,7 @@ public class InputManagerService extends IInputManager.Stub int injectorPid, int injectorUid, int syncMode, int timeoutMillis, int policyFlags); private static native void nativeToggleCapsLock(long ptr, int deviceId); - private static native void nativeSetInputWindows(long ptr, InputWindowHandle[] windowHandles, - int displayId); + private static native void nativeSetInputWindows(long ptr, InputWindowHandle[] windowHandles); private static native void nativeSetInputDispatchMode(long ptr, boolean enabled, boolean frozen); private static native void nativeSetSystemUiVisibility(long ptr, int visibility); private static native void nativeSetFocusedApplication(long ptr, @@ -1468,7 +1467,7 @@ public class InputManagerService extends IInputManager.Stub } public void setInputWindows(InputWindowHandle[] windowHandles, - InputWindowHandle focusedWindowHandle, int displayId) { + InputWindowHandle focusedWindowHandle) { final IWindow newFocusedWindow = focusedWindowHandle != null ? focusedWindowHandle.clientWindow : null; if (mFocusedWindow != newFocusedWindow) { @@ -1477,7 +1476,7 @@ public class InputManagerService extends IInputManager.Stub setPointerCapture(false); } } - nativeSetInputWindows(mPtr, windowHandles, displayId); + nativeSetInputWindows(mPtr, windowHandles); } public void setFocusedApplication(InputApplicationHandle application) { diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index ae2256aa26b2..4521dc10a606 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -814,7 +814,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo // {@link DisplayContent} ready for use. mDisplayReady = true; - mInputMonitor = new InputMonitor(service, mDisplayId); + // TODO(b/112081256): Use independent InputMonitor. + mInputMonitor = isDefaultDisplay ? new InputMonitor(service, mDisplayId) + : mService.getDefaultDisplayContentLocked().mInputMonitor; } boolean isReady() { @@ -2134,7 +2136,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mRemovingDisplay = false; } - mInputMonitor.onRemoved(); mService.onDisplayRemoved(mDisplayId); } diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java index af0eac6fbc6c..6a08f4d22661 100644 --- a/services/core/java/com/android/server/wm/InputConsumerImpl.java +++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java @@ -20,6 +20,7 @@ import android.os.IBinder; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; +import android.view.Display; import android.view.InputChannel; import android.view.WindowManager; import com.android.server.input.InputApplicationHandle; diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 823a0dec22b2..c4beb553e0ec 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -367,13 +367,6 @@ final class InputMonitor { } } - void onRemoved() { - // If DisplayContent removed, we need find a way to remove window handles of this display - // from InputDispatcher, so pass an empty InputWindowHandles to remove them. - mService.mInputManager.setInputWindows(mInputWindowHandles, mFocusedInputWindowHandle, - mDisplayId); - } - private final class UpdateInputForAllWindowsConsumer implements Consumer<WindowState> { InputConsumerImpl navInputConsumer; InputConsumerImpl pipInputConsumer; @@ -406,7 +399,8 @@ final class InputMonitor { this.inDrag = inDrag; wallpaperController = mService.mRoot.mWallpaperController; - mService.mRoot.getDisplayContent(mDisplayId).forAllWindows(this, + // TODO(b/112081256): Use independent InputMonitor for each display. + mService.mRoot/*.getDisplayContent(mDisplayId)*/.forAllWindows(this, true /* traverseTopToBottom */); if (mAddWallpaperInputConsumerHandle) { // No visible wallpaper found, add the wallpaper input consumer at the end. @@ -414,8 +408,8 @@ final class InputMonitor { } // Send windows to native code. - mService.mInputManager.setInputWindows(mInputWindowHandles, mFocusedInputWindowHandle, - mDisplayId); + // TODO: Update Input windows and focus by display? + mService.mInputManager.setInputWindows(mInputWindowHandles, mFocusedInputWindowHandle); clearInputWindowHandlesLw(); @@ -435,8 +429,7 @@ final class InputMonitor { final int flags = w.mAttrs.flags; final int privateFlags = w.mAttrs.privateFlags; final int type = w.mAttrs.type; - // TODO(b/111361570): multi-display focus, one focus for all display in current. - final boolean hasFocus = w == mService.mCurrentFocus;//mInputFocus; + final boolean hasFocus = w == mInputFocus; final boolean isVisible = w.isVisibleLw(); if (mAddRecentsAnimationInputConsumerHandle) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 3acecba8db26..7520bfafe71a 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6071,21 +6071,26 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void createInputConsumer(IBinder token, String name, InputChannel inputChannel) { synchronized (mWindowMap) { - // TODO(b/112049699): multi-display inputConsumer, just support default in current. - // Need consider about the behavior from controller. - DisplayContent displayContent = getDefaultDisplayContentLocked(); - displayContent.getInputMonitor().createInputConsumer(token, name, inputChannel, - Binder.getCallingPid(), Binder.getCallingUserHandle()); + // TODO(b/112049699): Fix this for multiple displays. There is only one inputChannel + // here to accept the return value. + DisplayContent display = mRoot.getDisplayContent(Display.DEFAULT_DISPLAY); + if (display != null) { + display.getInputMonitor().createInputConsumer(token, name, inputChannel, + Binder.getCallingPid(), Binder.getCallingUserHandle()); + } } } @Override public boolean destroyInputConsumer(String name) { synchronized (mWindowMap) { - // TODO(b/112049699): multi-display inputConsumer, just support default in current. - // Need consider about the behavior from controller. - DisplayContent displayContent = getDefaultDisplayContentLocked(); - return displayContent.getInputMonitor().destroyInputConsumer(name); + // TODO(b/112049699): Fix this for multiple displays. For consistency with + // createInputConsumer above. + DisplayContent display = mRoot.getDisplayContent(Display.DEFAULT_DISPLAY); + if (display != null) { + return display.getInputMonitor().destroyInputConsumer(name); + } + return false; } } diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index f5f19f644e25..52f2d674f993 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -210,7 +210,7 @@ public: const sp<InputWindowHandle>& inputWindowHandle, bool monitor); status_t unregisterInputChannel(JNIEnv* env, const sp<InputChannel>& inputChannel); - void setInputWindows(JNIEnv* env, jobjectArray windowHandleObjArray, int displayId); + void setInputWindows(JNIEnv* env, jobjectArray windowHandleObjArray); void setFocusedApplication(JNIEnv* env, jobject applicationHandleObj); void setInputDispatchMode(bool enabled, bool frozen); void setSystemUiVisibility(int32_t visibility); @@ -736,8 +736,7 @@ void NativeInputManager::getDispatcherConfiguration(InputDispatcherConfiguration } } -void NativeInputManager::setInputWindows(JNIEnv* env, jobjectArray windowHandleObjArray, - int displayId) { +void NativeInputManager::setInputWindows(JNIEnv* env, jobjectArray windowHandleObjArray) { Vector<sp<InputWindowHandle> > windowHandles; if (windowHandleObjArray) { @@ -757,7 +756,7 @@ void NativeInputManager::setInputWindows(JNIEnv* env, jobjectArray windowHandleO } } - mInputManager->getDispatcher()->setInputWindows(windowHandles, displayId); + mInputManager->getDispatcher()->setInputWindows(windowHandles); // Do this after the dispatcher has updated the window handle state. bool newPointerGesturesEnabled = true; @@ -1447,10 +1446,10 @@ static void nativeToggleCapsLock(JNIEnv* env, jclass /* clazz */, } static void nativeSetInputWindows(JNIEnv* env, jclass /* clazz */, - jlong ptr, jobjectArray windowHandleObjArray, jint displayId) { + jlong ptr, jobjectArray windowHandleObjArray) { NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr); - im->setInputWindows(env, windowHandleObjArray, displayId); + im->setInputWindows(env, windowHandleObjArray); } static void nativeSetFocusedApplication(JNIEnv* env, jclass /* clazz */, @@ -1679,7 +1678,7 @@ static const JNINativeMethod gInputManagerMethods[] = { (void*) nativeInjectInputEvent }, { "nativeToggleCapsLock", "(JI)V", (void*) nativeToggleCapsLock }, - { "nativeSetInputWindows", "(J[Lcom/android/server/input/InputWindowHandle;I)V", + { "nativeSetInputWindows", "(J[Lcom/android/server/input/InputWindowHandle;)V", (void*) nativeSetInputWindows }, { "nativeSetFocusedApplication", "(JLcom/android/server/input/InputApplicationHandle;)V", (void*) nativeSetFocusedApplication }, |