This is a follow up CL to our previous CL [1], which re-introduced
InputMethodManager#reportVirtualDisplayGeometry()
for some special form factors.
For apps that only aim to bypass display ID mismatch check in
RemoteInputConnectionImpl#requestCursorUpdatesInternal(),
this CL gives a much simpler and easier-to-maintain @hide method
InputMethodManager#setRequestCursorUpdateDisplayIdCheck().
[1]: I35b491da5a340844e17542d7a6198f8152bbeda3
708c957fa3
Bug: 224424149
Bug: 256926300
Test: presubmit
Change-Id: I9e1f62e3d5d2a385dce8a9633b5b73f8e7f0ccef
Add a new group of information related to text appearance in
CursorAnchorInfo, which is extracted from TextView.
Bug: 231894524
Test: atest android.view.inputmethod.cts.CursorAnchorInfoTest#testBuilder
atest android.view.inputmethod.cts.CursorAnchorInfoTest#testEquality
atest android.view.inputmethod.cts.InputMethodServiceTest#testOnUpdateCursorAnchorInfo
Change-Id: I8b96f055506b0a426dcfc6334db867dda7073868
This is a follow up CL to our previous CL [1], which introduced
InputMethodManagerService#showInputMethodPickerFromClient(
@NonNull IInputMethodClient client,
int auxiliarySubtypeMode, int displayId);
Somehow the "client" has never been used, which is fine because the
actual caller verification is done by requiring WRITE_SECURE_SETTINGS
permission.
Let's remove such an unused parameter for simplicity.
There must be no observable behavior change.
[1]: Ic7d7c5a7ad8005a3fbd9d1c1b73e3c5a39a07001
0b05f9e49d
Bug: 234882948
Test: presubmit
Change-Id: I2f27160cbe7d83201c8f52dbb6dcb774a5b8ae43
This is mechanical refactoring that has no behavior change.
- Add missing @RequiresPermission
- Describe when INTERACT_ACROSS_USERS_FULL is required
- Apply the same annotation order
- Use the same import pattern around permissions
Fix: 256239860
Test: presubmit
Change-Id: I5ba2210e4de54b6941dba148471746f20720f9c6
This is a follow up CL to our previous CL [1], which exposed
InputMethodManager#getInputMethodListAsUser(int userId) [2]
as an @TestApi.
One thing to clarify is that INTERACT_ACROSS_USERS_FULL permission is
required when and only when "userId" is different from the one of the
calling process. To make it clear, this CL adds "conditional = true"
like other @RequiresPermission usages in InputMethodManager.
This is just about (Test) API annotation. There must be no observable
behavior change.
[1]: I4b73d9374d7a2ce4c9dfc48682a43d5d48b39042
ec8b1449f2
[2]: I5b50b5fe143c74c87b331bda3e5bcc4d6248436e
d20eef826c
Bug: 256239860
Test: presubmit
Change-Id: I14867e528d4292f1f8713b1d9b491fc5ed6c1abb
We only use parts of Context in the Content Capture manager and
main session, we don't need to cache context object which will
cause some memory issues.
This change will extract the necessary information to save it, instead
of caching the entire context object.
Bug: 256247718
Fixes: 239192932
Test: atest CtsContentCaptureServiceTestCases
Change-Id: Id7b5e8617c521f31879199b0f2c7e18204bb7526
For the app developers to understand the editor view of requesting
showSoftInput requires the view and its window must be focused and
serverd by an input method.
Bug: 256517410
Test: build
Change-Id: Ibe52263a01f62140862527fd59111b914ad5e18c
text to insert should be optional field for InsertGesture. This allows
IME to use this gesture to move cursor.
Fix: 255839545
Test: atest InputConnectionEndToEndTest
Change-Id: Ibbffff210007dc7900b442d3d46232432e5dbbb2
This is a follow up CL to our previous CL [1], which introduced
HandwritingGesture and several subclasses.
One of the challenge is that we only wanted to make child classes
Parcelable, while keeping the abstract base class HandwritingGesture
non-Parcelable. Although InputConnection has only one method
InputConnection#performHandwritingGesture(
HandwritingGesture, ResultReceiver),
in the IPC layer IRemoteInputConnection needed to define methods for
each subclass, e.g.
* performHandwritingSelectGesture(in InputConnectionCommandHeader,
in SelectGesture, ...)
* performHandwritingInsertGesture(in InputConnectionCommandHeader,
in InsertGesture, ...)
* performHandwritingDeleteGesture(in InputConnectionCommandHeader,
in DeleteGesture, ...)
because their abstract class HandwritingGesture is not Parcelable.
To avoid such method definitions (and lots of type-based dispatching /
merging logic), this CL introduces
ParcelableHandwritingGesture
as a generic Parcelable container of HandwritingGesture subclasses.
You can freely use ParcelableHandwritingGesture in AIDL method
definitions as follows.
performHandwritingGesture(in InputConnectionCommandHeader,
in ParcelableHandwritingGesture, ...)
In the Java side, you can easily wrap objects as follows.
var parcelableGesture = ParcelableHandwritingGesture.of(gesture);
var unparceledGesture = parcelableGesture.get();
Note that this CL is still an internal cleanup. There must be no
developer observable behavior change.
[1]: I53bcb62e03ac1c371feb60d1385c88c921754092
3e3ff1a3d2
Bug: 234882948
Bug: 239783077
Test: presubmit
Test: atest FrameworksCoreTests:ParcelableHandwritingGestureTest
Change-Id: I158026087653f6772a78cc2394e678ae9741fb00
Also catch RuntimeException for addToDisplayAsUser in case the throwing
type was not RemoteException.
Bug: 253200800
Test: Simulate to throw a runtime exception in WMS#addWindow, and verify
VRI#setView should catch that exception, and clear resources without
crash.
Change-Id: Ia113b836e4a18c656093f9db7f63e9c50c427e6c
This is a follow up CL to our previous CL [1], which introduced an @TestApi
InputMethodManager#addVirtualStylusIdForTestSession(),
which internally requires INJECT_EVENTS permission.
Now that TEST_INPUT_METHOD is also available [2], let's require it
instead of INJECT_EVENTS for better consistency with other test APIs
defined in InputMethodManager.
This CL also add @RequiresPermission(TEST_INPUT_METHOD) to
InputMethodManager#addVirtualStylusIdForTestSession()
to make it clear that it's guarded with the permission.
[1]: I7399c0a56c04f024d65c16d459818cc2c5cdbc7f
d96ef57bc4
[2]: Ie79a3e9d41ce22605ae083594d639c37d08b7def
b869c78380
Bug: 256239860
Test: atest CtsInputMethodTestCases:StylusHandwritingTest
Change-Id: Icdbb4ade2bd4b5066984e209efcf0ca93bfa08ca
This is a follow up CL to my previous CL [1], which introduced
android.permission.TEST_INPUT_METHO
to protect several @TestApi methods in InputMethodManager.
This CL makes the permission itself as @TestApi so that it can be
included as an API constant in test-current.txt. This also enables us
to minimize special permission while running CTS as follows.
SystemUtil.runWithShellPermissionIdentity(() -> {
// do something.
}, Manifest.permission.TEST_INPUT_METHOD);
There must be no user observable behavior change in this CL.
[1]: Ie79a3e9d41ce22605ae083594d639c37d08b7def
b869c78380
Bug: 256239860
Test: presubmit
Change-Id: I1fd3ceda9a1b641e63c7633a223a9a806e78cd2d
There is little evidence that the fields annoatated with
@UnsupportedAppUsage are actually used, and even if they were by some
long-tail of apps there are either public api alternatives to accessing
these fields or there are no good use-cases. Populate the usages with
publicAlternative so that we can start removing them during future
refactors.
The only @UnsupportedAppUsage that remains untouched is
SurfaceView#setFrame, because View#setFrame is also annotated with
@UnsuportedAppUsage and possibly has a higher usage level.
Bug: 249858453
Test: builds
Change-Id: I51c918c10ca087d87791899f7bce4b1425130902
Handwriting initiation delegation is introduced to support views which
appear to be a text input field, but are actually non-editor views which
are linked to a real editor view. Such views can be configured as
delegates, so that stylus movement on the view can trigger the
transition to show, focus, and start handwriting on the real editor
view.
Bug: 228100684
Test: atest android.view.stylus.HandwritingInitiatorTest
Test: atest android.view.inputmethod.cts.StylusHandwritingTest
Change-Id: I492fd507895d59213753c4ad06d42a4a212e0fde
* changes:
Add hidden API to query the bluetooth address of an InputDevice
Native input manager: Add default initializers for locked members
Introduce monitoring behavior changes for USI devices (3/n)
Notify the policy when a stylus gesture starts
Since revealing the bluetooth address of an input device can reveal
whether bluetooth is enabled, we require the BLUETOOTH permission for
this API.
This also means we cannot send the bluetooth address to apps using the
InputDevice class. We add an IInputManager method to query the address
instead that performs the permission check.
Since we are not using the Java InputDevice class to store the address,
we must cache the vector of last-reported InputDeviceInfos in
NativeInputManager.
DD: go/inputdevice-battery-notifications
Bug: 243005009
Test: manual
Change-Id: I560cb170ab7008314821e5150caf4868efb5d8d5
An A11yDisplayProxy will be used by Exo to listen to UI changes and
perform actions on the UI.
For a Display that is shown on a ChromeBook/client device,
a privileged app like Exo, or an app with SystemAPI privileges and
the MANAGE_ACCESSIBILITY permission, should call
A11yManager.registerA11yProxy and A11yManager.unRegisterA11yProxy to
enable/disable a11y.
The app will only have visibility in the specified proxy display.
Currently only few A11yProxy methods are exposed. When the proxy is
plugged into the system via ProxyAccessibilityServiceConnection
other methods will be exposed. (See link in comments)
Bug: 241429275
Test: atest A11yProxyTest(cts), atest A11yManagerTest(unit)
Change-Id: I019732e50e6beba0af7f5898a07b44d25e03416b
This is an API for IME to request text bounds information from editor to
perform handwriting rich gestures. It's useful for IMEs to create custom
handwriting gesture that's not supported the HandwritingGesture. And
it can also be used to provide default rich gesture implementation for
handwriting gesture compatibility.
Bug: 239843501
Test: atest TextBoundsInfoTest
Change-Id: Ia7522371976a4e1fcdff4cc0d244ea427ad3d7c9
This CL mechanically merges
IInputMethodManagerInvoker
into
IInputMethodManagerGlobalInvoker
without changing any observable semantics. This allows us to remove
InputMethodManager#mServiceInvoker
completely.
This refactoring makes it much easier for us to see whether a method
in InputMethodManger is implemented only with static methods or not.
Bug: 234882948
Test: presubmit
Change-Id: I310a33f27b876419b6a3058202dcbd663b541079
This is a mechanical renaming for classes outside
android.view.inputmethod package.
For non IMF classes, let's expose InputMethodManagerGlobal rather than
IInputMethodManagerGlobal.
In the next CL [1], we want to merge IInputMethodManagerGlobal and
IInputMethodManagerInvoker into a single class, and this CL is just a
preparation.
There must be no observable behavior changes.
[1]: I310a33f27b876419b6a3058202dcbd663b541079
Bug: 234882948
Test: presubmit
Change-Id: I9b728560369179d5ee17c3570a2543b49b3f14ce
* changes:
Describe requested visibilities in public types (3/n: server side)
Describe requested visibilities in public types (2/n: client-server)
Describe requested visibilities in public types (1/n: client side)