Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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.input; | 5 package org.chromium.content.browser.input; |
| 6 | 6 |
| 7 import android.annotation.TargetApi; | 7 import android.annotation.TargetApi; |
| 8 import android.graphics.Matrix; | 8 import android.graphics.Matrix; |
| 9 import android.os.Build; | 9 import android.os.Build; |
| 10 import android.view.View; | 10 import android.view.View; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 74 @Nonnull | 74 @Nonnull |
| 75 private final CursorAnchorInfo.Builder mCursorAnchorInfoBuilder = | 75 private final CursorAnchorInfo.Builder mCursorAnchorInfoBuilder = |
| 76 new CursorAnchorInfo.Builder(); | 76 new CursorAnchorInfo.Builder(); |
| 77 | 77 |
| 78 @Nullable | 78 @Nullable |
| 79 private InputMethodManagerWrapper mInputMethodManagerWrapper; | 79 private InputMethodManagerWrapper mInputMethodManagerWrapper; |
| 80 @Nullable | 80 @Nullable |
| 81 private final ComposingTextDelegate mComposingTextDelegate; | 81 private final ComposingTextDelegate mComposingTextDelegate; |
| 82 @Nonnull | 82 @Nonnull |
| 83 private final ViewDelegate mViewDelegate; | 83 private final ViewDelegate mViewDelegate; |
| 84 @Nullable | |
| 85 private final ImeAdapter mImeAdapter; | |
| 84 | 86 |
| 85 private CursorAnchorInfoController(InputMethodManagerWrapper inputMethodMana gerWrapper, | 87 private CursorAnchorInfoController(InputMethodManagerWrapper inputMethodMana gerWrapper, |
| 86 ComposingTextDelegate composingTextDelegate, ViewDelegate viewDelega te) { | 88 ComposingTextDelegate composingTextDelegate, ViewDelegate viewDelega te, |
| 89 ImeAdapter imeAdapter) { | |
| 87 mInputMethodManagerWrapper = inputMethodManagerWrapper; | 90 mInputMethodManagerWrapper = inputMethodManagerWrapper; |
| 88 mComposingTextDelegate = composingTextDelegate; | 91 mComposingTextDelegate = composingTextDelegate; |
| 89 mViewDelegate = viewDelegate; | 92 mViewDelegate = viewDelegate; |
| 93 mImeAdapter = imeAdapter; | |
| 90 } | 94 } |
| 91 | 95 |
| 92 public static CursorAnchorInfoController create( | 96 public static CursorAnchorInfoController create( |
| 93 InputMethodManagerWrapper inputMethodManagerWrapper, | 97 InputMethodManagerWrapper inputMethodManagerWrapper, |
| 94 ComposingTextDelegate composingTextDelegate) { | 98 ComposingTextDelegate composingTextDelegate, ImeAdapter imeAdapter) { |
| 95 return new CursorAnchorInfoController(inputMethodManagerWrapper, | 99 return new CursorAnchorInfoController( |
| 96 composingTextDelegate, new ViewDelegate() { | 100 inputMethodManagerWrapper, composingTextDelegate, new ViewDelega te() { |
| 97 @Override | 101 @Override |
| 98 public void getLocationOnScreen(View view, int[] location) { | 102 public void getLocationOnScreen(View view, int[] location) { |
| 99 view.getLocationOnScreen(location); | 103 view.getLocationOnScreen(location); |
| 100 } | 104 } |
| 101 }); | 105 }, imeAdapter); |
| 102 } | 106 } |
| 103 | 107 |
| 104 @VisibleForTesting | 108 @VisibleForTesting |
| 105 public void setInputMethodManagerWrapperForTest( | 109 public void setInputMethodManagerWrapperForTest( |
| 106 InputMethodManagerWrapper inputMethodManagerWrapper) { | 110 InputMethodManagerWrapper inputMethodManagerWrapper) { |
| 107 mInputMethodManagerWrapper = inputMethodManagerWrapper; | 111 mInputMethodManagerWrapper = inputMethodManagerWrapper; |
| 108 } | 112 } |
| 109 | 113 |
| 110 @VisibleForTesting | 114 @VisibleForTesting |
| 111 public static CursorAnchorInfoController createForTest( | 115 public static CursorAnchorInfoController createForTest( |
| 112 InputMethodManagerWrapper inputMethodManagerWrapper, | 116 InputMethodManagerWrapper inputMethodManagerWrapper, |
| 113 ComposingTextDelegate composingTextDelegate, | 117 ComposingTextDelegate composingTextDelegate, ViewDelegate viewDelega te, |
| 114 ViewDelegate viewDelegate) { | 118 ImeAdapter imeAdapter) { |
| 115 return new CursorAnchorInfoController(inputMethodManagerWrapper, composi ngTextDelegate, | 119 return new CursorAnchorInfoController( |
| 116 viewDelegate); | 120 inputMethodManagerWrapper, composingTextDelegate, viewDelegate, imeAdapter); |
| 117 } | 121 } |
| 118 | 122 |
| 119 /** | 123 /** |
| 120 * Called by ImeAdapter when a IME related web content state is changed. | 124 * Called by ImeAdapter when a IME related web content state is changed. |
| 121 */ | 125 */ |
| 122 public void invalidateLastCursorAnchorInfo() { | 126 public void invalidateLastCursorAnchorInfo() { |
| 123 if (!mIsEditable) return; | 127 if (!mIsEditable) return; |
| 124 | 128 |
| 125 mLastCursorAnchorInfo = null; | 129 mLastCursorAnchorInfo = null; |
| 126 } | 130 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 186 mScale = scale; | 190 mScale = scale; |
| 187 mTranslationX = translationX; | 191 mTranslationX = translationX; |
| 188 mTranslationY = translationY; | 192 mTranslationY = translationY; |
| 189 mHasInsertionMarker = hasInsertionMarker; | 193 mHasInsertionMarker = hasInsertionMarker; |
| 190 mIsInsertionMarkerVisible = isInsertionMarkerVisible; | 194 mIsInsertionMarkerVisible = isInsertionMarkerVisible; |
| 191 mInsertionMarkerHorizontal = insertionMarkerHorizontal; | 195 mInsertionMarkerHorizontal = insertionMarkerHorizontal; |
| 192 mInsertionMarkerTop = insertionMarkerTop; | 196 mInsertionMarkerTop = insertionMarkerTop; |
| 193 mInsertionMarkerBottom = insertionMarkerBottom; | 197 mInsertionMarkerBottom = insertionMarkerBottom; |
| 194 } | 198 } |
| 195 | 199 |
| 196 // Notify to IME if there is a pending request, or if it is in monitor m ode and we have | 200 // Notify ImeAdapter |
| 197 // some change in the state. | 201 updateCursorAnchorInfo(view); |
| 198 if (mHasPendingImmediateRequest | |
|
aelias_OOO_until_Jul13
2017/01/25 03:34:26
These conditions are important to preserve for per
rlanday
2017/01/25 19:21:56
I think we probably want to turn on "monitor mode"
| |
| 199 || (mMonitorModeEnabled && mLastCursorAnchorInfo == null)) { | |
| 200 updateCursorAnchorInfo(view); | |
| 201 } | |
| 202 } | 202 } |
| 203 | 203 |
| 204 public void focusedNodeChanged(boolean isEditable) { | 204 public void focusedNodeChanged(boolean isEditable) { |
| 205 mIsEditable = isEditable; | 205 mIsEditable = isEditable; |
| 206 mCompositionCharacterBounds = null; | 206 mCompositionCharacterBounds = null; |
| 207 mHasCoordinateInfo = false; | 207 mHasCoordinateInfo = false; |
| 208 mLastCursorAnchorInfo = null; | 208 mLastCursorAnchorInfo = null; |
| 209 } | 209 } |
| 210 | 210 |
| 211 public boolean onRequestCursorUpdates(boolean immediateRequest, boolean moni torRequest, | 211 public boolean onRequestCursorUpdates(boolean immediateRequest, boolean moni torRequest, |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 270 mInsertionMarkerBottom, | 270 mInsertionMarkerBottom, |
| 271 mIsInsertionMarkerVisible ? CursorAnchorInfo.FLAG_HAS_VI SIBLE_REGION : | 271 mIsInsertionMarkerVisible ? CursorAnchorInfo.FLAG_HAS_VI SIBLE_REGION : |
| 272 CursorAnchorInfo.FLAG_HAS_INVISIBLE_REGION); | 272 CursorAnchorInfo.FLAG_HAS_INVISIBLE_REGION); |
| 273 } | 273 } |
| 274 mLastCursorAnchorInfo = mCursorAnchorInfoBuilder.build(); | 274 mLastCursorAnchorInfo = mCursorAnchorInfoBuilder.build(); |
| 275 } | 275 } |
| 276 | 276 |
| 277 if (mInputMethodManagerWrapper != null) { | 277 if (mInputMethodManagerWrapper != null) { |
| 278 mInputMethodManagerWrapper.updateCursorAnchorInfo(view, mLastCursorA nchorInfo); | 278 mInputMethodManagerWrapper.updateCursorAnchorInfo(view, mLastCursorA nchorInfo); |
| 279 } | 279 } |
| 280 if (mImeAdapter != null) { | |
| 281 mImeAdapter.updateCursorAnchorInfo(view, mLastCursorAnchorInfo); | |
| 282 } | |
| 280 mHasPendingImmediateRequest = false; | 283 mHasPendingImmediateRequest = false; |
| 281 } | 284 } |
| 282 } | 285 } |
| OLD | NEW |