From e89d6418bee849880eca3bc232d1579e6f6813e4 Mon Sep 17 00:00:00 2001
From: Leon Scroggins <scroggo@google.com>
Date: Tue, 1 Feb 2011 11:05:22 -0500
Subject: DO NOT MERGE. Only scroll if the IME is open in certain cases.

Bug:3411564

Requires a change in external/webkit.

Already submitted to master.

Change-Id: Id5b8765bde4070f04fce0743c56a038f88e816ec
---
 core/java/android/webkit/WebView.java     | 10 ++++++++++
 core/java/android/webkit/WebViewCore.java |  5 +++--
 2 files changed, 13 insertions(+), 2 deletions(-)

(limited to 'core')

diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index f91ae9f..fa99eae 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -7144,6 +7144,16 @@ public class WebView extends AbsoluteLayout
                     setContentScrollTo(msg.arg1, msg.arg2);
                     break;
                 case SCROLL_TO_MSG_ID:
+                    if (((Boolean) msg.obj).booleanValue()) {
+                        // This scroll is intended to bring the textfield into
+                        // view, but is only necessary if the IME is showing
+                        InputMethodManager imm = InputMethodManager.peekInstance();
+                        if (imm == null || !imm.isAcceptingText()
+                                || (!imm.isActive(WebView.this) && (!inEditingMode()
+                                || !imm.isActive(mWebTextView)))) {
+                            break;
+                        }
+                    }
                     if (setContentScrollTo(msg.arg1, msg.arg2)) {
                         // if we can't scroll to the exact position due to pin,
                         // send a message to WebCore to re-scroll when we get a
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index b949a41..5bdf408 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -2120,7 +2120,7 @@ final class WebViewCore {
     }
 
     // called by JNI
-    private void contentScrollTo(int x, int y) {
+    private void contentScrollTo(int x, int y, boolean onlyIfImeIsShowing) {
         if (!mBrowserFrame.firstLayoutDone()) {
             /*
              * WebKit restore state will be called before didFirstLayout(),
@@ -2133,7 +2133,8 @@ final class WebViewCore {
         }
         if (mWebView != null) {
             Message msg = Message.obtain(mWebView.mPrivateHandler,
-                    WebView.SCROLL_TO_MSG_ID, x, y);
+                    WebView.SCROLL_TO_MSG_ID, x, y,
+                    Boolean.valueOf(onlyIfImeIsShowing));
             if (mDrawIsScheduled) {
                 mEventHub.sendMessage(Message.obtain(null,
                         EventHub.MESSAGE_RELAY, msg));
-- 
cgit v1.1