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

Commit 59076607 authored by Cosmin Băieș's avatar Cosmin Băieș Committed by Automerger Merge Worker
Browse files

Merge "Fix deadlock in IMMS checking hasNavigationBar" into udc-qpr-dev am: 8eea66e7

parents 5e9bd709 8eea66e7
Loading
Loading
Loading
Loading
+6 −19
Original line number Diff line number Diff line
@@ -119,7 +119,6 @@ import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.proto.ProtoOutputStream;
import android.view.DisplayInfo;
import android.view.IWindowManager;
import android.view.InputChannel;
import android.view.InputDevice;
import android.view.MotionEvent;
@@ -127,7 +126,6 @@ import android.view.WindowManager;
import android.view.WindowManager.DisplayImePolicy;
import android.view.WindowManager.LayoutParams;
import android.view.WindowManager.LayoutParams.SoftInputModeFlags;
import android.view.WindowManagerGlobal;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.ImeTracker;
import android.view.inputmethod.InputBinding;
@@ -3073,9 +3071,13 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
            ConcurrentUtils.waitForFutureNoInterrupt(mImeDrawsImeNavBarResLazyInitFuture,
                    "Waiting for the lazy init of mImeDrawsImeNavBarRes");
        }
        // Whether the current display has a navigation bar. When this is false (e.g. emulator),
        // the IME should not draw the IME navigation bar.
        final boolean hasNavigationBar = mWindowManagerInternal
                .hasNavigationBar(mCurTokenDisplayId != INVALID_DISPLAY
                        ? mCurTokenDisplayId : DEFAULT_DISPLAY);
        final boolean canImeDrawsImeNavBar =
                mImeDrawsImeNavBarRes != null && mImeDrawsImeNavBarRes.get()
                        && hasNavigationBarOnCurrentDisplay();
                mImeDrawsImeNavBarRes != null && mImeDrawsImeNavBarRes.get() && hasNavigationBar;
        final boolean shouldShowImeSwitcherWhenImeIsShown = shouldShowImeSwitcherLocked(
                InputMethodService.IME_ACTIVE | InputMethodService.IME_VISIBLE);
        return (canImeDrawsImeNavBar ? InputMethodNavButtonFlags.IME_DRAWS_IME_NAV_BAR : 0)
@@ -3083,21 +3085,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
                ? InputMethodNavButtonFlags.SHOW_IME_SWITCHER_WHEN_IME_IS_SHOWN : 0);
    }

    /**
     * Whether the current display has a navigation bar. When this is {@code false} (e.g. emulator),
     * the IME should <em>not</em> draw the IME navigation bar.
     */
    @GuardedBy("ImfLock.class")
    private boolean hasNavigationBarOnCurrentDisplay() {
        final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
        try {
            return wm.hasNavigationBar(mCurTokenDisplayId != INVALID_DISPLAY
                    ? mCurTokenDisplayId : DEFAULT_DISPLAY);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    @GuardedBy("ImfLock.class")
    private boolean shouldShowImeSwitcherLocked(int visibility) {
        if (!mShowOngoingImeSwitcherForPhones) return false;
+7 −0
Original line number Diff line number Diff line
@@ -954,4 +954,11 @@ public abstract class WindowManagerInternal {

    /** Returns the SurfaceControl accessibility services should use for accessibility overlays. */
    public abstract SurfaceControl getA11yOverlayLayer(int displayId);

    /**
     * Device has a software navigation bar (separate from the status bar) on specific display.
     *
     * @param displayId the id of display to check if there is a software navigation bar.
     */
    public abstract boolean hasNavigationBar(int displayId);
}
+5 −0
Original line number Diff line number Diff line
@@ -8379,6 +8379,11 @@ public class WindowManagerService extends IWindowManager.Stub
            return null;
        }

        @Override
        public boolean hasNavigationBar(int displayId) {
            return WindowManagerService.this.hasNavigationBar(displayId);
        }

        @Override
        public void setInputMethodTargetChangeListener(@NonNull ImeTargetChangeListener listener) {
            synchronized (mGlobalLock) {