f9e989d5f09e72f5c9a59d713521f37d3fdd93dd |
05-Apr-2013 |
Jeff Brown <jeffbrown@google.com> |
Queues, queues, queues and input. Redesigned how ViewRootImpl delivers input events to views, the IME and to native activities to fix several issues. The prior change to make IME input event delegation use InputChannels failed to take into account that InputMethodManager is a singleton attached to the main looper whereas UI may be attached to any looper. Consequently interactions with the InputChannel might occur on the wrong thread. Fixed this problem by checking the current thread and posting input events or callbacks to the correct looper when necessary. NativeActivity has also been broken for a while because the default event handling logic for joysticks and touch navigation was unable to dispatch events back into the native activity. In particular, this meant that DPad synthesis from touch navigation would not work in any native activity. The plan is to fix this problem by passing all events through ViewRootImpl as usual then forwarding them to native activity as needed. This should greatly simplify IME pre-dispatch and system key handling and make everything more robust overall. Fixed issues related to when input events are synthesized. In particular, added a more robust mechanism to ensure that synthetic events are canceled appropriately when we discover that events are no longer being resynthesized (because the application or IME is handling or dropping them). The new design is structured as a pipeline with a chain of responsibility consisting of InputStage objects. Each InputStage is responsible for some part of handling each input event such as dispatching to the view hierarchy or to the IME. As a stage processes an input event, it has the option of finishing the event, forwarding the event to the next stage or handling the event asynchronously. Some queueing logic takes care to ensure that events are forwarded downstream in the correct order even if they are handled out of order by a given stage. Cleaned up the InputMethodManager singleton initialization logic to make it clearer that it must be attached to the main looper. We don't actually need to pass this looper around. Deleted the LatencyTimer class since no one uses it and we have better ways of measuring latency these days using systrace. Added a hidden helper to Looper to determine whether the current thread is the indicated Looper thread. Note: NativeActivity's IME dispatch is broken by this patch. This will be fixed later in another patch. Bug: 8473020 Change-Id: Iac2a1277545195a7a0137bbbdf04514c29165c60
nputMethodManager_Accessor.java
nputMethodManager_Delegate.java
|
f1dee199a009fec5e3a5d1469f654098261f8b06 |
01-Oct-2011 |
Xavier Ducrohet <xav@android.com> |
Layoutlib: add support for ITextServicesManager. This include a fix in layoutlib_create to properly handle delegating a static method of an inner class (was broken and only worked on non static method). Added a few comments here and there to *_Accessor classes so that it's a bit more obvious what they are for and how they are used. Change-Id: Ifc31dd1a006393bb0c08e22b6a17f500dd62e090
nputMethodManager_Accessor.java
|
7f9f99ea11051614a7727dfb9f9578b518e76e3c |
11-Aug-2011 |
Xavier Ducrohet <xav@android.com> |
Make some methods/fields package private so that layoutlib can access them. Change-Id: I4aeadfbaf8a4f6a459fa19937c21ac23d9e5fb64
nputMethodManager_Accessor.java
|
af64556de0064eeb5a4d4e6d634c3f074f5f40ce |
20-Jul-2011 |
Xavier Ducrohet <xav@android.com> |
Layoutlib: misc fix + start of AndroidBidi support. Change-Id: If2ce0b683da8cce01679322d503eed8dd474e521
nputMethodManager_Delegate.java
|
96131eef3869f2be1300e1620f5c3874b41bb534 |
12-Jul-2011 |
Xavier Ducrohet <xav@android.com> |
LayoutLib: updated fake accessbility manager and ensure there's an InputMethodManager We had replaced the accessibility Manager but it lacked some new API. Obvisouly this is fragile and should be fixed, but this works for now. After fixing this there was another issue with the lack of InputMethodManager. To fix this I had to create an implementation of IInputMethodManager which normally comes from a binder object. I may want to do a similar trick with the accessibility manager later. Change-Id: I28c6494e333f39072f348d0199124efac93256a5
nputMethodManager_Delegate.java
|