summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commitd4796461ee29c2d2560412dbb51e0c931aa22db5 (patch)
tree8c501e3ab7b089550879da5b1c3c1d47d2af0b88
parent5380cdc2e1adc8511b05e7623efb44d67be88418 (diff)
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
-rw-r--r--core/java/android/webkit/WebViewClassic.java16
-rw-r--r--core/java/android/webkit/WebViewCore.java18
2 files changed, 28 insertions, 6 deletions
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index 99a321219f4c..51c91055a9ac 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 7a757a81e4cf..661bbf8eff38 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();
}