Before introducing new state tracking IDs to IInputConnectionWrapper,
this CL cleans up IInputConnectionWrapper to use
com.android.internal.os.SomeArgs instead of local-defined one in favor
of possible performance improvement thanks to the process grobal
object pool that com.android.internal.os.SomeArgs has.
This is a mechanical refactoring CL. No behavior change is intended.
Test: No new warnings in `adb logcat` from the following TAGs
- IInputConnectionWrapper
- InputMethodManager
- InputMethodManagerService
- InputMethodService
Bug: 35079353
Change-Id: Ic614f112f960382280acd8891b3af56d47679f08
Currently we see two warning messages
"finishComposingText on inactive InputConnection"
"finishComposingText on inactive InputConnection"
every time every time the View focus is switched from one EditText
to another EditText on the same window, which is really spammy.
This is actually not critical if IInputConnectionWrapper was already
finished, because with my previous CL [1] it is guaranteed that
InputConnection#finishComposingText() was already called followed by
InputConnection#closeConnection(), which means that the connection
is closed and should not accept any further requests. Thus ignoring
further #finishComposingText() only means that the system and/or IME
is calling #finishComposingText() unnecessarily, which is worth
showing spammy warnings in production builds.
To reduce logspam this CL hides warnings from the above case behind
DEBUG flag.
[1]: If2a03bc84d318775fd4a197fa43acde086eda442
aaa38c9f1a
Test: Make sure `adb logcat -s IInputConnectionWrapper:*` does not
show "finishComposingText on inactive InputConnection" warnings
while switching focus across different EditText on the same
window.
Bug: 35079353
Bug: 35301295
Change-Id: I17f3a4f500bc19ebf8bae771bf658a93627b3ba3
Doing this allows us to annotate integer values that should corresponds
to WindowManager.LayoutParams#softInputMode.
Test: There should be no behavior change. RetentionPolicy.SOURCE
annotation should change nothing in production code.
Test: checkbuild
Bug: 32784563
Bug: 35079353
Change-Id: I96300b090edce327d0515c740183abe91ded6bac
A field in WindowManager.LayoutParams softInputMode is something that
definitely needs to be kept tracking in historical debugging
infrastructure across IME-related processes (Bug 35079353) [1]. As a
preparation, this CL enables InputMethodManagerService (IMMS) to
include the last softInputMode specified in IMMS#windowGainedFocus()
in the dumpsys in human readable format.
[1]: As explained in b.android.com/224318, softInputMode misspecified
by app developers is a typical root cause of unexpected behavior
in keyboard visibility. Bugs such as Bug 23168250, Bug 27275709,
and Bug 31770400 fall into this category.
Test: `adb shell dumpsys input_method | grep softInputMode=`
Bug: 35079353
Change-Id: I485ced030def179dad78b4b811c6eb52b5e5c951
- Add a new stack that is not resized with multiwindow, and
appears above the fullscreen and docked stacks, but below
the pinned stack
- Add a method on VoiceInteractionSession to allow the assistant
to launch activities into this new fullscreen stack.
- Also prevent any activities in the assist stack from the
fetching of the on screen assist data.
Bug: 30999386
Test: android.server.cts.ActivityManagerAssistantStackTests
Change-Id: I22ab7629b5f758cf1e66d7d1c26648af6bc887c9
This is the 2nd attempt to merge restartInput into startInput in
internal IPC after fixing the mistake in new parameter order in
the previous CL [1].
As a preparation to start tracking all the event flows that
cause InputMethodManagerService#setImeWindowStatus(), this CL
merges an internal IPC method IInputMethod#restartInput() into
IInputMethod#startInput() in favor of simplicity.
This is a refactoring CL that should have no behavior change.
[1]: Ifda6f74ac1b1370d9e9a9fe60354b692121fdcb9
1a5838e966
Test: Set true to InputMethodService#DEBUG and make sure startInput()
and restartInput() are called in the following scenario.
1. Complete the setup wizard.
2. adb shell am start -a android.app.action.SET_NEW_PASSWORD
3. Proceed to "Choose your password" page
4. Make sure startInput() gets called.
5. Type "aaaa" then hit "CONTINUE" button.
6. Make sure restartInput() gets called.
Bug: 35079353
Change-Id: I476d0cf8cbb0a0134941854f9337d9ad15e66a71
This reverts commit 1a5838e966 [1].
Reason of revert:
There was a mistake in the parameter order of MSG_START_INPUT.
[1]: Ifda6f74ac1b1370d9e9a9fe60354b692121fdcb9
Test: none. This is a revert.
Bug: 35079353
Change-Id: Ic1487768932febe0f1f1b6e71929464e91f357e0
As a preparation to start tracking all the event flows that
cause InputMethodManagerService#setImeWindowStatus(), this CL
merges an internal IPC method IInputMethod#restartInput() into
IInputMethod#startInput() in favor of simplicity.
Test: Done some quick manual testing to make sure that IME is
still working
Bug: 35079353
Change-Id: Ifda6f74ac1b1370d9e9a9fe60354b692121fdcb9
Preloading GLES drivers in Zygote was removed previously since it is
incompatible with updatable drivers. That caused some app startup
latency and system memory use regressions. This change re-adds GLES
driver preloading, but only on devices that don't support driver
updates.
Bug: 34611670
Bug: 35052548
Test: boot angler, systrace of Calculator app startup
Change-Id: Ibdc6b3c0ba4473574722641d4bfad4b375f908a3
(cherry picked from commit ba0370eef3)
Currently IMMS#resetAllInternalStateLocked(boolean, boolean) has
only two call sites, and the first parameter is the constant for
each call site. We can get much simpler code by inlining the
method in question into those two call sites. It actually revealed
that UNBIND_REASON_RESET_IME should have been called
UNBIND_REASON_SWITCH_USER.
Test: no behavior change
Test: adb shell dumpsys input_method | grep "mMethodMapUpdateCount="
to make sure that switching users can cause the same count
increase.
Test: adb shell dumpsys input_method | grep "mMethodMapUpdateCount="
to make sure that switching the device locale can cause the
same count increase.
Bug: 35079353
Change-Id: I63388402369f58d11fdb21b508eb2051ff39fa5b
Preloading GLES drivers in Zygote was removed previously since it is
incompatible with updatable drivers. That caused some app startup
latency and system memory use regressions. This change re-adds GLES
driver preloading, but only on devices that don't support driver
updates.
Bug: 34611670
Bug: 35052548
Test: boot angler, systrace of Calculator app startup
Change-Id: Ibdc6b3c0ba4473574722641d4bfad4b375f908a3
Move methods where they belong.
Test: m
Test: Device boots
Merged-In: I805c6493078e960ff5b70d84dd93d2da6c7aa797
Change-Id: I805c6493078e960ff5b70d84dd93d2da6c7aa797
The previous CL (I47f902cc8f) fixed ImeSubtypeListItem.compareTo() is
compliant to Comparable#compareTo(T) (Bug 34255739) and introduced the
following order of comparing ImeSubtypeListItem fields.
1. ImeSubtypeListItem#mImeName
2. ImeSubtypeListItem#mSubtypeName
3. ImeSubtypeListItem#mIsSystemLocale
4. ImeSubtypeListItem#mIsSystemLanguage
But it didn't keep the previous ordering (Bug 34821121). This CL
fixes the order of comparing ImeSubtypeListItem fields as compatible
as ones before I47f902cc8f.
1. ImeSubtypeListItem#mImeName
2. ImeSubtypeListItem#mIsSystemLocale
3. ImeSubtypeListItem#mIsSystemLanguage
4. ImeSubtypeListItem#mSubtypeName
Bug: 34255739
Fixes: 34821121
Test: Install FramewroksCoreTests.apk and run
InputMethodSubtypeSwitchingControllerTest and verify all tests passed.
Change-Id: I813403fd29c5c52a3ca375174ec4b95e4b5433f2
As explained in the commit message of my previous CL [1], we have
had a design issue in how to notify the full-screen mode change
from the IME to InputMethodManager running in the target application.
Histrically we have done this by using hooking the following IPC
from the IME to the target application.
InputConnection#reportFullscreenMode()
However, since we also want InputConnection to be deactivated in some
situations such as the when the target application is no longer
focused. In other words, InputConnection is not a reliable way to
notify something.
As a result, we have suffered from many stale state issues.
Bug 21455064 and Bug 28157836 are such examples. In Android N, we
introduced yet another hack to work around those issues, but it is
really time to fix the protocol design instead.
The new strategy is to rely on internal IPCs provided by
InputMethodManager to deliver such critical notifications from one
process to the other. This is actually more natural because our goal
is to make sure that InputMethodManager#isFullscreenMode() always
returns the latest value as long as the caller is the focused
application.
For backword compatibility, applications that are monitoring
this callback should continue working, as InputMethodManager emulates
the previous behavior. However, as updated in JavaDoc, IMEs are no
longer allowed to invoke InputConnection#reportFullscreenMode(),
which should be OK because even on previous releases IMEs should rely on
InputMethodService#updateFullscreenMode() instead.
[1]: Iba184245a01a3b340f006bc4e415d304de3c2696
1544def0fa
Fixes: 28406127
Test: Make sure Bug 21455064 is still fixed.
1. Input some words in extract mode.
2. Select a word.
3. Perform copy.
4. Select a word.
5. Rotate the device.
6. Try to select a word.
7. Make sure he word is selected and action mode starts.
Test: Make sure Bug 28157836 is still fixed.
1. Rotate device to landscape mode.
2. Tap on EditText and start full screen extracted mode.
3. Rotate device to portrait mode.
4. Long press to start action mode.
5. Make sure Action mode gets started.
Test: `adb shell dumpsys input_method` to make sure that fullscreen
state is synchronized across the app, IMMS, and the IME.
Change-Id: If23e7c7c265ab3dfb48c2fb6fdb361b17d22c594
Previously the messaging layout was working on a fixed
Height, which didn't scale well as we were now using it
also in the collapsed version.
For big text notifications, the view would be
clipped ugly, since we were using a fixed number of
lines. Instead we're now calculating this dynamically.
Fixes: 35126759
Test: runtest systemui
Change-Id: Ie3736d807d7a162ee51ad65794bf2f1cfb2248be
Currently, TextServicesManagerServices uses an AIDL interface called
ISpellCheckerService when binding to a spell-checking service.
However, this interface uses synchronous (blocking) binder calls
rather than asynchronous (oneway) calls. As a result, there are
situations where the system process has made a blocking binder call
into untrusted application code from its main looper thread.
As general policy, the system process must never allow its looper
threads to block on application code.
This CL addresses the above issue by converting ISpellCheckerService
into oneway interface, which instead takes a result receiver
ISpellCheckerServiceCallback so that spell-checking services can
return results asynchronously.
Note that the above protocol issue was also the root cause of
Bug 5471520. Hence we can also logically revert the previous CL [1]
for Bug 5471520.
[1]: Iedf2c2cdd8d4834545d06d72ade3ce211b104b1d
4e713f1441
Test: Ran `adb shell dumpsys textservices` to check the
"Spell Checker Bind Groups:" section in the following three
steps.
1. Before apps start requesting spell checker sessions.
2. While apps are owning active spell checker sessions.
3. After all the apps that owned spell checker sessions are
gone.
Made sure that spell checker service is not running when
there is not spell checker bind group.
Bug: 7254002
Change-Id: I92e7aa40dc9ea14f67d355f0bfa15325b775d27b