Fix FLAG_NOT_FOCUSABLE ime target
Windows with FLAG_NOT_FOCUSABLE can not be IME target unless alpha is zero (i.e. app is using transparent window to detect IME for legacy reasons). Going forward we can improve this with the todo already mentioned in the code block. Bug: 145812508 Fix: 149899590 Test: Manually verified using steps in bug. Change-Id: I0e7db484dd4f9b584998b9f922fd46030fb6fb72
This commit is contained in:
@@ -2256,9 +2256,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
return false;
|
||||
}
|
||||
|
||||
if (PixelFormat.formatHasAlpha(mAttrs.format)) {
|
||||
// Support legacy use cases where transparent windows can still be ime target with
|
||||
// FLAG_NOT_FOCUSABLE and ALT_FOCUSABLE_IM set.
|
||||
if (PixelFormat.formatHasAlpha(mAttrs.format) && mAttrs.alpha == 0) {
|
||||
// Support legacy use cases where completely transparent windows can still be ime target
|
||||
// with FLAG_NOT_FOCUSABLE and ALT_FOCUSABLE_IM set.
|
||||
// Certain apps listen for IME insets using transparent windows and ADJUST_NOTHING to
|
||||
// manually synchronize app content to IME animation b/144619551.
|
||||
// TODO(b/145812508): remove this once new focus management is complete b/141738570
|
||||
|
||||
@@ -251,9 +251,11 @@ public class WindowStateTests extends WindowTestsBase {
|
||||
|
||||
// b/145812508: special legacy use-case for transparent/translucent windows.
|
||||
appWindow.mAttrs.format = PixelFormat.TRANSPARENT;
|
||||
appWindow.mAttrs.alpha = 0;
|
||||
assertTrue(appWindow.canBeImeTarget());
|
||||
|
||||
appWindow.mAttrs.format = PixelFormat.OPAQUE;
|
||||
appWindow.mAttrs.alpha = 1;
|
||||
appWindow.mAttrs.flags &= ~FLAG_ALT_FOCUSABLE_IM;
|
||||
assertFalse(appWindow.canBeImeTarget());
|
||||
appWindow.mAttrs.flags &= ~FLAG_NOT_FOCUSABLE;
|
||||
|
||||
Reference in New Issue
Block a user