Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java

Issue 392943002: Fix Handle above IME issue (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.browser; 5 package org.chromium.content.browser;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.app.Activity; 8 import android.app.Activity;
9 import android.app.SearchManager; 9 import android.app.SearchManager;
10 import android.content.ContentResolver; 10 import android.content.ContentResolver;
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 // Accessibility touch exploration state. 316 // Accessibility touch exploration state.
317 private boolean mTouchExplorationEnabled; 317 private boolean mTouchExplorationEnabled;
318 318
319 // Allows us to dynamically respond when the accessibility script injection flag changes. 319 // Allows us to dynamically respond when the accessibility script injection flag changes.
320 private ContentObserver mAccessibilityScriptInjectionObserver; 320 private ContentObserver mAccessibilityScriptInjectionObserver;
321 321
322 // Temporary notification to tell onSizeChanged to focus a form element, 322 // Temporary notification to tell onSizeChanged to focus a form element,
323 // because the OSK was just brought up. 323 // because the OSK was just brought up.
324 private final Rect mFocusPreOSKViewportRect = new Rect(); 324 private final Rect mFocusPreOSKViewportRect = new Rect();
325 325
326 // Whether Keyboard state has been changed (hidden/shown)
327 private boolean mIsKeyboardStateChanged = false;
328
326 // On tap this will store the x, y coordinates of the touch. 329 // On tap this will store the x, y coordinates of the touch.
327 private int mLastTapX; 330 private int mLastTapX;
328 private int mLastTapY; 331 private int mLastTapY;
329 332
330 // Whether a touch scroll sequence is active, used to hide text selection 333 // Whether a touch scroll sequence is active, used to hide text selection
331 // handles. Note that a scroll sequence will *always* bound a pinch 334 // handles. Note that a scroll sequence will *always* bound a pinch
332 // sequence, so this will also be true for the duration of a pinch gesture. 335 // sequence, so this will also be true for the duration of a pinch gesture.
333 private boolean mTouchScrollInProgress; 336 private boolean mTouchScrollInProgress;
334 337
335 // The outstanding fling start events that hasn't got fling end yet. It may be > 1 because 338 // The outstanding fling start events that hasn't got fling end yet. It may be > 1 because
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 resultCode == InputMethodManager.RESULT_ SHOWN || 569 resultCode == InputMethodManager.RESULT_ SHOWN ||
567 resultCode == InputMethodManager.RESULT_ UNCHANGED_SHOWN); 570 resultCode == InputMethodManager.RESULT_ UNCHANGED_SHOWN);
568 if (resultCode == InputMethodManager.RESULT_SHOW N) { 571 if (resultCode == InputMethodManager.RESULT_SHOW N) {
569 // If OSK is newly shown, delay the form foc us until 572 // If OSK is newly shown, delay the form foc us until
570 // the onSizeChanged (in order to adjust rel ative to the 573 // the onSizeChanged (in order to adjust rel ative to the
571 // new size). 574 // new size).
572 // TODO(jdduke): We should not assume that o nSizeChanged will 575 // TODO(jdduke): We should not assume that o nSizeChanged will
573 // always be called, crbug.com/294908. 576 // always be called, crbug.com/294908.
574 getContainerView().getWindowVisibleDisplayFr ame( 577 getContainerView().getWindowVisibleDisplayFr ame(
575 mFocusPreOSKViewportRect); 578 mFocusPreOSKViewportRect);
579 mIsKeyboardStateChanged = true;
576 } else if (hasFocus() && resultCode == 580 } else if (hasFocus() && resultCode ==
577 InputMethodManager.RESULT_UNCHANGED_SHOW N) { 581 InputMethodManager.RESULT_UNCHANGED_SHOW N) {
578 // If the OSK was already there, focus the f orm immediately. 582 // If the OSK was already there, focus the f orm immediately.
579 scrollFocusedEditableNodeIntoView(); 583 scrollFocusedEditableNodeIntoView();
580 } 584 }
581 } 585 }
582 }; 586 };
583 } 587 }
584 } 588 }
585 ); 589 );
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
1121 } 1125 }
1122 1126
1123 // End FrameLayout overrides. 1127 // End FrameLayout overrides.
1124 1128
1125 /** 1129 /**
1126 * @see View#onTouchEvent(MotionEvent) 1130 * @see View#onTouchEvent(MotionEvent)
1127 */ 1131 */
1128 public boolean onTouchEvent(MotionEvent event) { 1132 public boolean onTouchEvent(MotionEvent event) {
1129 TraceEvent.begin("onTouchEvent"); 1133 TraceEvent.begin("onTouchEvent");
1130 try { 1134 try {
1131 cancelRequestToScrollFocusedEditableNodeIntoView(); 1135 cancelRequestToScrollFocusedEditableNodeIntoView();
jdduke (slow) 2014/07/15 15:36:58 I think we can achieve the same result by simply m
AviD 2014/07/15 15:58:02 Agree. It was my initial thought, but wasn't sure
1132 1136
1133 final int eventAction = event.getActionMasked(); 1137 final int eventAction = event.getActionMasked();
1134 1138
1135 // Only these actions have any effect on gesture detection. Other 1139 // Only these actions have any effect on gesture detection. Other
1136 // actions have no corresponding WebTouchEvent type and may confuse the 1140 // actions have no corresponding WebTouchEvent type and may confuse the
1137 // touch pipline, so we ignore them entirely. 1141 // touch pipline, so we ignore them entirely.
1138 if (eventAction != MotionEvent.ACTION_DOWN 1142 if (eventAction != MotionEvent.ACTION_DOWN
1139 && eventAction != MotionEvent.ACTION_UP 1143 && eventAction != MotionEvent.ACTION_UP
1140 && eventAction != MotionEvent.ACTION_CANCEL 1144 && eventAction != MotionEvent.ACTION_CANCEL
1141 && eventAction != MotionEvent.ACTION_MOVE 1145 && eventAction != MotionEvent.ACTION_MOVE
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
1594 if (!mFocusPreOSKViewportRect.isEmpty()) { 1598 if (!mFocusPreOSKViewportRect.isEmpty()) {
1595 Rect rect = new Rect(); 1599 Rect rect = new Rect();
1596 getContainerView().getWindowVisibleDisplayFrame(rect); 1600 getContainerView().getWindowVisibleDisplayFrame(rect);
1597 if (!rect.equals(mFocusPreOSKViewportRect)) { 1601 if (!rect.equals(mFocusPreOSKViewportRect)) {
1598 // Only assume the OSK triggered the onSizeChanged if width was preserved. 1602 // Only assume the OSK triggered the onSizeChanged if width was preserved.
1599 if (rect.width() == mFocusPreOSKViewportRect.width()) { 1603 if (rect.width() == mFocusPreOSKViewportRect.width()) {
1600 scrollFocusedEditableNodeIntoView(); 1604 scrollFocusedEditableNodeIntoView();
1601 } 1605 }
1602 cancelRequestToScrollFocusedEditableNodeIntoView(); 1606 cancelRequestToScrollFocusedEditableNodeIntoView();
1603 } 1607 }
1608 mIsKeyboardStateChanged = false;
1604 } 1609 }
1605 } 1610 }
1606 1611
1607 private void cancelRequestToScrollFocusedEditableNodeIntoView() { 1612 private void cancelRequestToScrollFocusedEditableNodeIntoView() {
1613 // Ignore if onTouchEvent triggerred this call after IME state is update d
1614 if (mIsKeyboardStateChanged == true) return;
1615
1608 // Zero-ing the rect will prevent |updateAfterSizeChanged()| from 1616 // Zero-ing the rect will prevent |updateAfterSizeChanged()| from
1609 // issuing the delayed form focus event. 1617 // issuing the delayed form focus event.
1610 mFocusPreOSKViewportRect.setEmpty(); 1618 mFocusPreOSKViewportRect.setEmpty();
1611 } 1619 }
1612 1620
1613 private void scrollFocusedEditableNodeIntoView() { 1621 private void scrollFocusedEditableNodeIntoView() {
1614 if (mNativeContentViewCore == 0) return; 1622 if (mNativeContentViewCore == 0) return;
1615 // The native side keeps track of whether the zoom and scroll actually o ccurred. It is 1623 // The native side keeps track of whether the zoom and scroll actually o ccurred. It is
1616 // more efficient to do it this way and sometimes fire an unnecessary me ssage rather 1624 // more efficient to do it this way and sometimes fire an unnecessary me ssage rather
1617 // than synchronize with the renderer and always have an additional mess age. 1625 // than synchronize with the renderer and always have an additional mess age.
(...skipping 1728 matching lines...) Expand 10 before | Expand all | Expand 10 after
3346 3354
3347 private native void nativeExtractSmartClipData(long nativeContentViewCoreImp l, 3355 private native void nativeExtractSmartClipData(long nativeContentViewCoreImp l,
3348 int x, int y, int w, int h); 3356 int x, int y, int w, int h);
3349 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque); 3357 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque);
3350 3358
3351 private native void nativeResumeResponseDeferredAtStart( 3359 private native void nativeResumeResponseDeferredAtStart(
3352 long nativeContentViewCoreImpl); 3360 long nativeContentViewCoreImpl);
3353 private native void nativeSetHasPendingNavigationTransitionForTesting( 3361 private native void nativeSetHasPendingNavigationTransitionForTesting(
3354 long nativeContentViewCoreImpl); 3362 long nativeContentViewCoreImpl);
3355 } 3363 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698