From e423d38ac67a6c2c7334cabbd20d45109bded1ce Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Tue, 23 Apr 2024 19:08:41 +0800 Subject: Only hide ime leash for invisible ime control target In case the ime target is still on screen after swiping to home. Such as a top floating window with a text input field. Bug: 335204769 Test: Returns from landscape app to portrait home by gesture while an overlay floating window is the ime target. The ime should still be visible after returning to home. Change-Id: Ib653b6160d4c4dac7dc17f1b8298a0c3e5f2252f --- services/core/java/com/android/server/wm/Transition.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index a9301ade3ed3..b03a3470a06c 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -1554,11 +1554,14 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { // but InsetsStateController#notifyControlTargetChanged still waits for IME to redraw. final InsetsSourceProvider sourceProvider = imeWindow.getControllableInsetProvider(); if (sourceProvider == null || sourceProvider.mControl == null + || !sourceProvider.isClientVisible() || imeTarget == sourceProvider.getControlTarget()) { return; } final SurfaceControl imeInsetsLeash = sourceProvider.mControl.getLeash(); - if (imeInsetsLeash != null) { + final InsetsControlTarget controlTarget = sourceProvider.getControlTarget(); + if (imeInsetsLeash != null && controlTarget != null && controlTarget.getWindow() != null + && !controlTarget.getWindow().mToken.isVisible()) { dc.getSyncTransaction().reparent(imeInsetsLeash, null); } } -- cgit v1.2.3-59-g8ed1b