diff options
-rw-r--r-- | core/java/com/android/internal/inputmethod/InputMethodRoot.java | 61 | ||||
-rw-r--r-- | core/res/res/layout/input_method.xml | 9 | ||||
-rw-r--r-- | core/res/res/values/symbols.xml | 1 | ||||
-rw-r--r-- | policy/src/com/android/internal/policy/impl/PhoneWindow.java | 32 |
4 files changed, 34 insertions, 69 deletions
diff --git a/core/java/com/android/internal/inputmethod/InputMethodRoot.java b/core/java/com/android/internal/inputmethod/InputMethodRoot.java deleted file mode 100644 index eddea99..0000000 --- a/core/java/com/android/internal/inputmethod/InputMethodRoot.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.internal.inputmethod; - -import android.content.Context; -import android.graphics.Rect; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; - -public class InputMethodRoot extends LinearLayout { - - private View mNavigationGuard; - - public InputMethodRoot(Context context) { - this(context, null); - } - - public InputMethodRoot(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public InputMethodRoot(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs); - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - requestFitSystemWindows(); - } - - @Override - protected boolean fitSystemWindows(Rect insets) { - if (mNavigationGuard == null) { - mNavigationGuard = findViewById(com.android.internal.R.id.navigationGuard); - } - if (mNavigationGuard == null) { - return super.fitSystemWindows(insets); - } - ViewGroup.LayoutParams lp = mNavigationGuard.getLayoutParams(); - lp.height = insets.bottom; - mNavigationGuard.setLayoutParams(lp); - return true; - } -} diff --git a/core/res/res/layout/input_method.xml b/core/res/res/layout/input_method.xml index e50da00..79f1ce8 100644 --- a/core/res/res/layout/input_method.xml +++ b/core/res/res/layout/input_method.xml @@ -18,12 +18,11 @@ */ --> -<com.android.internal.inputmethod.InputMethodRoot xmlns:android="http://schemas.android.com/apk/res/android" +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/parentPanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:gravity="start|bottom" > <LinearLayout @@ -54,8 +53,4 @@ android:visibility="gone"> </FrameLayout> - <View android:id="@+id/navigationGuard" - android:layout_width="match_parent" - android:layout_height="0dp" - android:background="@+color/input_method_navigation_guard"/> -</com.android.internal.inputmethod.InputMethodRoot> +</LinearLayout> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index f578694..e17b650 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -105,7 +105,6 @@ <java-symbol type="id" name="month" /> <java-symbol type="id" name="month_name" /> <java-symbol type="id" name="name" /> - <java-symbol type="id" name="navigationGuard" /> <java-symbol type="id" name="next" /> <java-symbol type="id" name="next_button" /> <java-symbol type="id" name="new_app_action" /> diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index eba689d..1745bc7 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -23,6 +23,8 @@ import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static android.view.WindowManager.LayoutParams.*; import android.view.ViewConfiguration; + +import com.android.internal.R; import com.android.internal.view.RootViewSurfaceTaker; import com.android.internal.view.StandaloneActionMode; import com.android.internal.view.menu.ContextMenuBuilder; @@ -1920,6 +1922,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { private PopupWindow mActionModePopup; private Runnable mShowActionModePopup; + // View added at runtime to IME windows to cover the navigation bar + private View mNavigationGuard; + public DecorView(Context context, int featureId) { super(context); mFeatureId = featureId; @@ -2479,6 +2484,33 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { @Override protected boolean fitSystemWindows(Rect insets) { mFrameOffsets.set(insets); + + // IMEs lay out below the nav bar, but the content view must not (for back compat) + if (getAttributes().type == WindowManager.LayoutParams.TYPE_INPUT_METHOD) { + // prevent the content view from including the nav bar height + if (mContentParent != null) { + if (mContentParent.getLayoutParams() instanceof MarginLayoutParams) { + MarginLayoutParams mlp = + (MarginLayoutParams) mContentParent.getLayoutParams(); + mlp.bottomMargin = insets.bottom; + mContentParent.setLayoutParams(mlp); + } + } + // position the navigation guard view, creating it if necessary + if (mNavigationGuard == null) { + mNavigationGuard = new View(mContext); + mNavigationGuard.setBackgroundColor(mContext.getResources() + .getColor(R.color.input_method_navigation_guard)); + addView(mNavigationGuard, new LayoutParams( + LayoutParams.MATCH_PARENT, insets.bottom, + Gravity.START | Gravity.BOTTOM)); + } else { + LayoutParams lp = (LayoutParams) mNavigationGuard.getLayoutParams(); + lp.height = insets.bottom; + mNavigationGuard.setLayoutParams(lp); + } + } + if (getForeground() != null) { drawableChanged(); } |