Merge "Merge SoftInputWindow#initDockWindow() into IMS#onCreate()"
This commit is contained in:
committed by
Android (Google) Code Review
commit
3b3095126f
@@ -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).
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
// 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);
|
||||
|
||||
initViews();
|
||||
mWindow.getWindow().setLayout(MATCH_PARENT, WRAP_CONTENT);
|
||||
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
|
||||
|
||||
mInlineSuggestionSessionController = new InlineSuggestionSessionController(
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user