summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/inputmethod/InputMethodRoot.java61
-rw-r--r--core/res/res/layout/input_method.xml9
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java32
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();
}