Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c66573f8 authored by Ming-Shin Lu's avatar Ming-Shin Lu Committed by Android (Google) Code Review
Browse files

Merge "Fix NPE in WindowState#needsRelativeLayeringToIme"

parents 3560f4c7 9ad5d7d4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -2176,6 +2176,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP

        final DisplayContent dc = getDisplayContent();
        if (isInputMethodTarget()) {
            // Make sure to set mInputMethodTarget as null when the removed window is the IME
            // target, in case computeImeTarget may use the outdated target.
            dc.mInputMethodTarget = null;
            dc.computeImeTarget(true /* updateImeTarget */);
        }
        if (dc.mInputMethodInputTarget == this) {
+24 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static android.view.Surface.ROTATION_90;
import static android.view.View.SYSTEM_UI_FLAG_FULLSCREEN;
import static android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
import static android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
@@ -1606,6 +1607,29 @@ public class DisplayContentTests extends WindowTestsBase {
        verifySizes(dc, forcedWidth, forcedHeight, forcedDensity);
    }

    @UseTestDisplay(addWindows = { W_ACTIVITY, W_INPUT_METHOD })
    @Test
    public void testComputeImeTarget_shouldNotCheckOutdatedImeTargetLayerWhenRemoved() {
        final WindowState child1 = createWindow(mAppWindow, FIRST_SUB_WINDOW, "child1");
        final WindowState nextImeTargetApp = createWindow(null /* parent */,
                TYPE_BASE_APPLICATION, "nextImeTargetApp");
        spyOn(child1);
        doReturn(true).when(child1).inSplitScreenWindowingMode();
        mDisplayContent.mInputMethodTarget = child1;

        spyOn(nextImeTargetApp);
        spyOn(mAppWindow);
        doReturn(true).when(nextImeTargetApp).canBeImeTarget();
        doReturn(true).when(nextImeTargetApp).isActivityTypeHome();
        doReturn(false).when(mAppWindow).canBeImeTarget();

        child1.removeImmediately();

        verify(mDisplayContent).computeImeTarget(true);
        assertNull(mDisplayContent.mInputMethodInputTarget);
        verify(child1, never()).needsRelativeLayeringToIme();
    }

    private boolean isOptionsPanelAtRight(int displayId) {
        return (mWm.getPreferredOptionsPanelGravity(displayId) & Gravity.RIGHT) == Gravity.RIGHT;
    }