OLD | NEW |
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.annotation.TargetApi; | 8 import android.annotation.TargetApi; |
9 import android.app.assist.AssistStructure.ViewNode; | 9 import android.app.assist.AssistStructure.ViewNode; |
10 import android.content.Context; | 10 import android.content.Context; |
(...skipping 30 matching lines...) Expand all Loading... |
41 import org.chromium.content.browser.accessibility.WebContentsAccessibility; | 41 import org.chromium.content.browser.accessibility.WebContentsAccessibility; |
42 import org.chromium.content.browser.accessibility.captioning.CaptioningBridgeFac
tory; | 42 import org.chromium.content.browser.accessibility.captioning.CaptioningBridgeFac
tory; |
43 import org.chromium.content.browser.accessibility.captioning.SystemCaptioningBri
dge; | 43 import org.chromium.content.browser.accessibility.captioning.SystemCaptioningBri
dge; |
44 import org.chromium.content.browser.accessibility.captioning.TextTrackSettings; | 44 import org.chromium.content.browser.accessibility.captioning.TextTrackSettings; |
45 import org.chromium.content.browser.input.ImeAdapter; | 45 import org.chromium.content.browser.input.ImeAdapter; |
46 import org.chromium.content.browser.input.InputMethodManagerWrapper; | 46 import org.chromium.content.browser.input.InputMethodManagerWrapper; |
47 import org.chromium.content.browser.input.SelectPopup; | 47 import org.chromium.content.browser.input.SelectPopup; |
48 import org.chromium.content.browser.input.SelectPopupDialog; | 48 import org.chromium.content.browser.input.SelectPopupDialog; |
49 import org.chromium.content.browser.input.SelectPopupDropdown; | 49 import org.chromium.content.browser.input.SelectPopupDropdown; |
50 import org.chromium.content.browser.input.SelectPopupItem; | 50 import org.chromium.content.browser.input.SelectPopupItem; |
| 51 import org.chromium.content.browser.input.TextSuggestionHost; |
51 import org.chromium.content_public.browser.AccessibilitySnapshotCallback; | 52 import org.chromium.content_public.browser.AccessibilitySnapshotCallback; |
52 import org.chromium.content_public.browser.AccessibilitySnapshotNode; | 53 import org.chromium.content_public.browser.AccessibilitySnapshotNode; |
53 import org.chromium.content_public.browser.ActionModeCallbackHelper; | 54 import org.chromium.content_public.browser.ActionModeCallbackHelper; |
54 import org.chromium.content_public.browser.GestureStateListener; | 55 import org.chromium.content_public.browser.GestureStateListener; |
55 import org.chromium.content_public.browser.ImeEventObserver; | 56 import org.chromium.content_public.browser.ImeEventObserver; |
56 import org.chromium.content_public.browser.WebContents; | 57 import org.chromium.content_public.browser.WebContents; |
57 import org.chromium.content_public.browser.WebContentsObserver; | 58 import org.chromium.content_public.browser.WebContentsObserver; |
58 import org.chromium.device.gamepad.GamepadList; | 59 import org.chromium.device.gamepad.GamepadList; |
59 import org.chromium.ui.base.DeviceFormFactor; | 60 import org.chromium.ui.base.DeviceFormFactor; |
60 import org.chromium.ui.base.EventForwarder; | 61 import org.chromium.ui.base.EventForwarder; |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 private final ObserverList<GestureStateListener> mGestureStateListeners; | 212 private final ObserverList<GestureStateListener> mGestureStateListeners; |
212 private final RewindableIterator<GestureStateListener> mGestureStateListener
sIterator; | 213 private final RewindableIterator<GestureStateListener> mGestureStateListener
sIterator; |
213 | 214 |
214 private PopupZoomer mPopupZoomer; | 215 private PopupZoomer mPopupZoomer; |
215 private SelectPopup mSelectPopup; | 216 private SelectPopup mSelectPopup; |
216 private long mNativeSelectPopupSourceFrame; | 217 private long mNativeSelectPopupSourceFrame; |
217 | 218 |
218 // Only valid when focused on a text / password field. | 219 // Only valid when focused on a text / password field. |
219 private ImeAdapter mImeAdapter; | 220 private ImeAdapter mImeAdapter; |
220 | 221 |
| 222 private TextSuggestionHost mTextSuggestionHost; |
| 223 |
221 // Size of the viewport in physical pixels as set from onSizeChanged. | 224 // Size of the viewport in physical pixels as set from onSizeChanged. |
222 private int mViewportWidthPix; | 225 private int mViewportWidthPix; |
223 private int mViewportHeightPix; | 226 private int mViewportHeightPix; |
224 private int mTopControlsHeightPix; | 227 private int mTopControlsHeightPix; |
225 private int mBottomControlsHeightPix; | 228 private int mBottomControlsHeightPix; |
226 private boolean mTopControlsShrinkBlinkSize; | 229 private boolean mTopControlsShrinkBlinkSize; |
227 | 230 |
228 // Cached copy of all positions and scales as reported by the renderer. | 231 // Cached copy of all positions and scales as reported by the renderer. |
229 private final RenderCoordinates mRenderCoordinates; | 232 private final RenderCoordinates mRenderCoordinates; |
230 | 233 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 @VisibleForTesting | 365 @VisibleForTesting |
363 public SelectionPopupController getSelectionPopupControllerForTesting() { | 366 public SelectionPopupController getSelectionPopupControllerForTesting() { |
364 return mSelectionPopupController; | 367 return mSelectionPopupController; |
365 } | 368 } |
366 | 369 |
367 @VisibleForTesting | 370 @VisibleForTesting |
368 public void setSelectionPopupControllerForTesting(SelectionPopupController a
ctionMode) { | 371 public void setSelectionPopupControllerForTesting(SelectionPopupController a
ctionMode) { |
369 mSelectionPopupController = actionMode; | 372 mSelectionPopupController = actionMode; |
370 } | 373 } |
371 | 374 |
| 375 /** |
| 376 * @return The TextSuggestionHost that handles displaying the text suggestio
n menu. |
| 377 */ |
| 378 @VisibleForTesting |
| 379 public TextSuggestionHost getTextSuggestionHostForTesting() { |
| 380 return mTextSuggestionHost; |
| 381 } |
| 382 |
| 383 @VisibleForTesting |
| 384 public void setTextSuggestionHostForTesting(TextSuggestionHost textSuggestio
nHost) { |
| 385 mTextSuggestionHost = textSuggestionHost; |
| 386 } |
| 387 |
372 @Override | 388 @Override |
373 public void addWindowAndroidChangedObserver(WindowAndroidChangedObserver obs
erver) { | 389 public void addWindowAndroidChangedObserver(WindowAndroidChangedObserver obs
erver) { |
374 mWindowAndroidChangedObservers.addObserver(observer); | 390 mWindowAndroidChangedObservers.addObserver(observer); |
375 } | 391 } |
376 | 392 |
377 @Override | 393 @Override |
378 public void removeWindowAndroidChangedObserver(WindowAndroidChangedObserver
observer) { | 394 public void removeWindowAndroidChangedObserver(WindowAndroidChangedObserver
observer) { |
379 mWindowAndroidChangedObservers.removeObserver(observer); | 395 mWindowAndroidChangedObservers.removeObserver(observer); |
380 } | 396 } |
381 | 397 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 | 468 |
453 mNativeContentViewCore = nativeInit(webContents, mViewAndroidDelegate, w
indowNativePointer, | 469 mNativeContentViewCore = nativeInit(webContents, mViewAndroidDelegate, w
indowNativePointer, |
454 dipScale, mRetainedJavaScriptObjects); | 470 dipScale, mRetainedJavaScriptObjects); |
455 mWebContents = nativeGetWebContentsAndroid(mNativeContentViewCore); | 471 mWebContents = nativeGetWebContentsAndroid(mNativeContentViewCore); |
456 | 472 |
457 setContainerViewInternals(internalDispatcher); | 473 setContainerViewInternals(internalDispatcher); |
458 | 474 |
459 initPopupZoomer(mContext); | 475 initPopupZoomer(mContext); |
460 mImeAdapter = new ImeAdapter( | 476 mImeAdapter = new ImeAdapter( |
461 mWebContents, mContainerView, new InputMethodManagerWrapper(mCon
text)); | 477 mWebContents, mContainerView, new InputMethodManagerWrapper(mCon
text)); |
| 478 mTextSuggestionHost = new TextSuggestionHost( |
| 479 mContext, mWebContents, mContainerView, this, mRenderCoordinates
); |
462 mImeAdapter.addEventObserver(this); | 480 mImeAdapter.addEventObserver(this); |
463 | 481 |
464 mSelectionPopupController = new SelectionPopupController( | 482 mSelectionPopupController = new SelectionPopupController( |
465 mContext, windowAndroid, webContents, mContainerView, mRenderCoo
rdinates); | 483 mContext, windowAndroid, webContents, mContainerView, mRenderCoo
rdinates); |
466 mSelectionPopupController.setCallback(ActionModeCallbackHelper.EMPTY_CAL
LBACK); | 484 mSelectionPopupController.setCallback(ActionModeCallbackHelper.EMPTY_CAL
LBACK); |
467 mSelectionPopupController.setContainerView(mContainerView); | 485 mSelectionPopupController.setContainerView(mContainerView); |
468 | 486 |
469 mWebContentsObserver = new ContentViewWebContentsObserver(this); | 487 mWebContentsObserver = new ContentViewWebContentsObserver(this); |
470 | 488 |
471 mShouldRequestUnbufferedDispatch = Build.VERSION.SDK_INT >= Build.VERSIO
N_CODES.LOLLIPOP | 489 mShouldRequestUnbufferedDispatch = Build.VERSION.SDK_INT >= Build.VERSIO
N_CODES.LOLLIPOP |
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 assert mWebContents != null; | 1001 assert mWebContents != null; |
984 hidePopupsAndPreserveSelection(); | 1002 hidePopupsAndPreserveSelection(); |
985 mWebContents.onHide(); | 1003 mWebContents.onHide(); |
986 } | 1004 } |
987 | 1005 |
988 private void hidePopupsAndClearSelection() { | 1006 private void hidePopupsAndClearSelection() { |
989 mSelectionPopupController.destroyActionModeAndUnselect(); | 1007 mSelectionPopupController.destroyActionModeAndUnselect(); |
990 destroyPastePopup(); | 1008 destroyPastePopup(); |
991 hideSelectPopupWithCancelMessage(); | 1009 hideSelectPopupWithCancelMessage(); |
992 mPopupZoomer.hide(false); | 1010 mPopupZoomer.hide(false); |
| 1011 mTextSuggestionHost.hidePopups(); |
993 if (mWebContents != null) mWebContents.dismissTextHandles(); | 1012 if (mWebContents != null) mWebContents.dismissTextHandles(); |
994 } | 1013 } |
995 | 1014 |
996 @CalledByNative | 1015 @CalledByNative |
997 private void hidePopupsAndPreserveSelection() { | 1016 private void hidePopupsAndPreserveSelection() { |
998 mSelectionPopupController.destroyActionModeAndKeepSelection(); | 1017 mSelectionPopupController.destroyActionModeAndKeepSelection(); |
999 destroyPastePopup(); | 1018 destroyPastePopup(); |
1000 hideSelectPopupWithCancelMessage(); | 1019 hideSelectPopupWithCancelMessage(); |
1001 mPopupZoomer.hide(false); | 1020 mPopupZoomer.hide(false); |
| 1021 mTextSuggestionHost.hidePopups(); |
1002 } | 1022 } |
1003 | 1023 |
1004 private void restoreSelectionPopupsIfNecessary() { | 1024 private void restoreSelectionPopupsIfNecessary() { |
1005 mSelectionPopupController.restoreSelectionPopupsIfNecessary(); | 1025 mSelectionPopupController.restoreSelectionPopupsIfNecessary(); |
1006 } | 1026 } |
1007 | 1027 |
1008 /** | 1028 /** |
1009 * Hide action mode and put into destroyed state. | 1029 * Hide action mode and put into destroyed state. |
1010 */ | 1030 */ |
1011 public void destroySelectActionMode() { | 1031 public void destroySelectActionMode() { |
(...skipping 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2133 @Override | 2153 @Override |
2134 public void onRotationChanged(int rotation) { | 2154 public void onRotationChanged(int rotation) { |
2135 // ActionMode#invalidate() won't be able to re-layout the floating | 2155 // ActionMode#invalidate() won't be able to re-layout the floating |
2136 // action mode menu items according to the new rotation. So Chrome | 2156 // action mode menu items according to the new rotation. So Chrome |
2137 // has to re-create the action mode. | 2157 // has to re-create the action mode. |
2138 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M | 2158 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M |
2139 && mSelectionPopupController.isActionModeValid()) { | 2159 && mSelectionPopupController.isActionModeValid()) { |
2140 hidePopupsAndPreserveSelection(); | 2160 hidePopupsAndPreserveSelection(); |
2141 showSelectActionMode(); | 2161 showSelectActionMode(); |
2142 } | 2162 } |
| 2163 mTextSuggestionHost.hidePopups(); |
2143 | 2164 |
2144 int rotationDegrees = 0; | 2165 int rotationDegrees = 0; |
2145 switch (rotation) { | 2166 switch (rotation) { |
2146 case Surface.ROTATION_0: | 2167 case Surface.ROTATION_0: |
2147 rotationDegrees = 0; | 2168 rotationDegrees = 0; |
2148 break; | 2169 break; |
2149 case Surface.ROTATION_90: | 2170 case Surface.ROTATION_90: |
2150 rotationDegrees = 90; | 2171 rotationDegrees = 90; |
2151 break; | 2172 break; |
2152 case Surface.ROTATION_180: | 2173 case Surface.ROTATION_180: |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2290 | 2311 |
2291 private native void nativeWasResized(long nativeContentViewCore); | 2312 private native void nativeWasResized(long nativeContentViewCore); |
2292 | 2313 |
2293 private native void nativeSetTextTrackSettings(long nativeContentViewCore, | 2314 private native void nativeSetTextTrackSettings(long nativeContentViewCore, |
2294 boolean textTracksEnabled, String textTrackBackgroundColor, String t
extTrackFontFamily, | 2315 boolean textTracksEnabled, String textTrackBackgroundColor, String t
extTrackFontFamily, |
2295 String textTrackFontStyle, String textTrackFontVariant, String textT
rackTextColor, | 2316 String textTrackFontStyle, String textTrackFontVariant, String textT
rackTextColor, |
2296 String textTrackTextShadow, String textTrackTextSize); | 2317 String textTrackTextShadow, String textTrackTextSize); |
2297 | 2318 |
2298 private native void nativeSetBackgroundOpaque(long nativeContentViewCore, bo
olean opaque); | 2319 private native void nativeSetBackgroundOpaque(long nativeContentViewCore, bo
olean opaque); |
2299 } | 2320 } |
OLD | NEW |