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

Commit 880a1b80 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Merge SoftInputWindow#initDockWindow() into IMS#onCreate()

This CL merges

  SoftInputWindow#initDockWindow()

into

  InputMethodService#onCreate()

so that we can see what parameters are set to the IME window at a
glance, rather than having to check 2 different files.

The end result is expected to be the same, and in theory there should
be no observable behavior change.

If you are reading this commit message to look for why those
parameters have been set, here are some quick links to relevant CLs.

 * `FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS`
  - DecorView#mNavigationGuard is gone [1]
 * `window.setDecorFitsSystemWindows(false)`
  - Updated InputMethodService to not inset by navigation bar if
    requested by automotive. [2]
  - Smooth out IME animation for automotive devices [3]
 * `setFitInsetsTypes(statusBars() | navigationBars())`
  - Do let IME fit invisible insets [4]
 * `setFitInsetsSides(Side.all() & ~Side.BOTTOM)`
  - Make IME fit navgation bars at left and right sides [5]
 * `receiveInsetsIgnoringZOrder = true`
  - Let IME receive insets ignoring z-order [6]

 [1]: I664630099b6eb3fe31675444ba94944cb0eb98b0
      8f162c6e
 [2]: I4faf82bdd7536bd2d049ded04034a9635d8ca0d3
      7eec316f
 [3]: I5d7b03d5c829a2679efdd06fa961d1158494e08f
      b0d0d7c4
 [4]: I6e7d665c55839dfbb14c8d2e5365537416f5f6c6
      145f7118
 [5]: I0ef3d6379a9ae52b3749154d2fdc54e9aa94a9e0
      c8364e38
 [6]: I53c64a5598f246ad577f652156903e4666a30cd9
      ea491da8

Bug: 192412909
Test: presubmit
Change-Id: If0f2bac45e6752612cc11e57d2fac55626221bd1
parent ea7801bd
Loading
Loading
Loading
Loading
+33 −17
Original line number Diff line number Diff line
@@ -51,7 +51,6 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static android.view.WindowInsets.Type.navigationBars;
import static android.view.WindowInsets.Type.statusBars;
import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;

import static java.lang.annotation.RetentionPolicy.SOURCE;

@@ -94,6 +93,7 @@ import android.util.Log;
import android.util.PrintWriterPrinter;
import android.util.Printer;
import android.util.proto.ProtoOutputStream;
import android.view.Gravity;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -1340,26 +1340,42 @@ public class InputMethodService extends AbstractInputMethodService {
                Context.LAYOUT_INFLATER_SERVICE);
        Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "IMS.initSoftInputWindow");
        mWindow = new SoftInputWindow(this, mTheme, mDispatcherState);
        mWindow.getWindow().getAttributes().setFitInsetsTypes(statusBars() | navigationBars());
        mWindow.getWindow().getAttributes().setFitInsetsSides(Side.all() & ~Side.BOTTOM);
        mWindow.getWindow().getAttributes().receiveInsetsIgnoringZOrder = true;

        // Automotive devices may request the navigation bar to be hidden when the IME shows up
        // (controlled via config_automotiveHideNavBarForKeyboard) in order to maximize the visible
        // screen real estate. When this happens, the IME window should animate from the bottom of
        // the screen to reduce the jank that happens from the lack of synchronization between the
        // bottom system window and the IME window.
        if (mIsAutomotive && mAutomotiveHideNavBarForKeyboard) {
            mWindow.getWindow().setDecorFitsSystemWindows(false);
        {
            final Window window = mWindow.getWindow();
            {
                final WindowManager.LayoutParams lp = window.getAttributes();
                lp.setTitle("InputMethod");
                lp.type = WindowManager.LayoutParams.TYPE_INPUT_METHOD;
                lp.width = WindowManager.LayoutParams.MATCH_PARENT;
                lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
                lp.gravity = Gravity.BOTTOM;
                lp.setFitInsetsTypes(statusBars() | navigationBars());
                lp.setFitInsetsSides(Side.all() & ~Side.BOTTOM);
                lp.receiveInsetsIgnoringZOrder = true;
                window.setAttributes(lp);
            }

            // For ColorView in DecorView to work, FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS needs to be set
            // by default (but IME developers can opt this out later if they want a new behavior).
        mWindow.getWindow().setFlags(
                FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            final int windowFlags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
            final int windowFlagsMask = windowFlags
                    | WindowManager.LayoutParams.FLAG_DIM_BEHIND;  // to be unset
            window.setFlags(windowFlags, windowFlagsMask);

            // Automotive devices may request the navigation bar to be hidden when the IME shows up
            // (controlled via config_automotiveHideNavBarForKeyboard) in order to maximize the
            // visible screen real estate. When this happens, the IME window should animate from the
            // bottom of the screen to reduce the jank that happens from the lack of synchronization
            // between the bottom system window and the IME window.
            if (mIsAutomotive && mAutomotiveHideNavBarForKeyboard) {
                window.setDecorFitsSystemWindows(false);
            }
        }

        initViews();
        mWindow.getWindow().setLayout(MATCH_PARENT, WRAP_CONTENT);
        Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);

        mInlineSuggestionSessionController = new InlineSuggestionSessionController(
+0 −22
Original line number Diff line number Diff line
@@ -137,7 +137,6 @@ final class SoftInputWindow extends Dialog {
    SoftInputWindow(Context context, int theme, KeyEvent.DispatcherState dispatcherState) {
        super(context, theme);
        mDispatcherState = dispatcherState;
        initDockWindow();
    }

    @Override
@@ -162,27 +161,6 @@ final class SoftInputWindow extends Dialog {
        }
    }

    private void initDockWindow() {
        WindowManager.LayoutParams lp = getWindow().getAttributes();

        lp.setTitle("InputMethod");
        lp.type = WindowManager.LayoutParams.TYPE_INPUT_METHOD;
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        lp.gravity = Gravity.BOTTOM;

        getWindow().setAttributes(lp);

        final int windowModFlags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_DIM_BEHIND;

        final int windowSetFlags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

        getWindow().setFlags(windowSetFlags, windowModFlags);
    }

    @Override
    public void show() {
        switch (mWindowState) {