diff options
| author | John Reck <jreck@google.com> | 2012-05-02 18:23:13 -0700 |
|---|---|---|
| committer | John Reck <jreck@google.com> | 2012-05-03 09:07:11 -0700 |
| commit | d4796461ee29c2d2560412dbb51e0c931aa22db5 (patch) | |
| tree | 8c501e3ab7b089550879da5b1c3c1d47d2af0b88 /core/java/android | |
| parent | 5380cdc2e1adc8511b05e7623efb44d67be88418 (diff) | |
| download | frameworks_base-d4796461ee29c2d2560412dbb51e0c931aa22db5.zip frameworks_base-d4796461ee29c2d2560412dbb51e0c931aa22db5.tar.gz frameworks_base-d4796461ee29c2d2560412dbb51e0c931aa22db5.tar.bz2 | |
Fix accessibility drawing
Bug: 6407623
If script injection is disabled, the accessibility injector works
by modifying the text selection. However, this would cause WebView
to go into text selection mode, showing the CAB and such, which
we don't want. Add a flag saying WHY text selection is being changed
so that we can respond accordingly in WebViewClassic.
Change-Id: Ia509def3fcdb022b93fbbc7ed89bc9558663afd3
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/webkit/WebViewClassic.java | 16 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewCore.java | 18 |
2 files changed, 28 insertions, 6 deletions
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java index 99a3212..51c9105 100644 --- a/core/java/android/webkit/WebViewClassic.java +++ b/core/java/android/webkit/WebViewClassic.java @@ -102,6 +102,7 @@ import android.webkit.WebView.PictureListener; import android.webkit.WebViewCore.DrawData; import android.webkit.WebViewCore.EventHub; import android.webkit.WebViewCore.TextFieldInitData; +import android.webkit.WebViewCore.TextSelectionData; import android.webkit.WebViewCore.TouchHighlightData; import android.webkit.WebViewCore.WebKitHitTest; import android.widget.AbsoluteLayout; @@ -4211,7 +4212,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc // decide which adornments to draw int extras = DRAW_EXTRAS_NONE; - if (!mFindIsUp && mSelectingText) { + if (!mFindIsUp && mShowTextSelectionExtra) { extras = DRAW_EXTRAS_SELECTION; } @@ -4535,11 +4536,13 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc private void startSelectingText() { mSelectingText = true; + mShowTextSelectionExtra = true; mHandleAlphaAnimator.setIntValues(255); mHandleAlphaAnimator.start(); } private void endSelectingText() { mSelectingText = false; + mShowTextSelectionExtra = false; mHandleAlphaAnimator.setIntValues(0); mHandleAlphaAnimator.start(); } @@ -5312,9 +5315,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mSelectCallback.finish(); mSelectCallback = null; } - if (!mIsCaretSelection) { - updateWebkitSelection(); - } invalidate(); // redraw without selection mAutoScrollX = 0; mAutoScrollY = 0; @@ -6442,6 +6442,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc private int mTrackballXMove = 0; private int mTrackballYMove = 0; private boolean mSelectingText = false; + private boolean mShowTextSelectionExtra = false; private boolean mSelectionStarted = false; private static final int TRACKBALL_KEY_TIMEOUT = 1000; private static final int TRACKBALL_TIMEOUT = 200; @@ -7942,6 +7943,13 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } nativeSetTextSelection(mNativeClass, data.mSelectTextPtr); + if (data.mSelectionReason == TextSelectionData.REASON_ACCESSIBILITY_INJECTOR) { + selectionDone(); + mShowTextSelectionExtra = true; + invalidate(); + return; + } + if (data.mSelectTextPtr != 0 && (data.mStart != data.mEnd || (mFieldPointer == nodePointer && mFieldPointer != 0))) { diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 7a757a8..661bbf8 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -143,6 +143,7 @@ public final class WebViewCore { private int mHighUsageDeltaMb; private int mChromeCanFocusDirection; + private int mTextSelectionChangeReason = TextSelectionData.REASON_UNKNOWN; // The thread name used to identify the WebCore thread and for use in // debugging other classes that require operation within the WebCore thread. @@ -861,6 +862,8 @@ public final class WebViewCore { } static class TextSelectionData { + static final int REASON_UNKNOWN = 0; + static final int REASON_ACCESSIBILITY_INJECTOR = 1; public TextSelectionData(int start, int end, int selectTextPtr) { mStart = start; mEnd = end; @@ -869,6 +872,7 @@ public final class WebViewCore { int mStart; int mEnd; int mSelectTextPtr; + int mSelectionReason = TextSelectionData.REASON_UNKNOWN; } static class TouchUpData { @@ -1544,12 +1548,16 @@ public final class WebViewCore { break; case MODIFY_SELECTION: + mTextSelectionChangeReason + = TextSelectionData.REASON_ACCESSIBILITY_INJECTOR; String modifiedSelectionString = nativeModifySelection(mNativeClass, msg.arg1, msg.arg2); mWebViewClassic.mPrivateHandler.obtainMessage( WebViewClassic.SELECTION_STRING_CHANGED, modifiedSelectionString).sendToTarget(); + mTextSelectionChangeReason + = TextSelectionData.REASON_UNKNOWN; break; case LISTBOX_CHOICES: @@ -2763,13 +2771,19 @@ public final class WebViewCore { } } + private TextSelectionData createTextSelection(int start, int end, int selPtr) { + TextSelectionData data = new TextSelectionData(start, end, selPtr); + data.mSelectionReason = mTextSelectionChangeReason; + return data; + } + // called by JNI private void updateTextSelection(int pointer, int start, int end, int textGeneration, int selectionPtr) { if (mWebViewClassic != null) { Message.obtain(mWebViewClassic.mPrivateHandler, WebViewClassic.UPDATE_TEXT_SELECTION_MSG_ID, pointer, textGeneration, - new TextSelectionData(start, end, selectionPtr)).sendToTarget(); + createTextSelection(start, end, selectionPtr)).sendToTarget(); } } @@ -2803,7 +2817,7 @@ public final class WebViewCore { Message.obtain(mWebViewClassic.mPrivateHandler, WebViewClassic.UPDATE_TEXT_SELECTION_MSG_ID, initData.mFieldPointer, 0, - new TextSelectionData(start, end, selectionPtr)) + createTextSelection(start, end, selectionPtr)) .sendToTarget(); } |
