Loading core/java/android/webkit/WebViewClassic.java +72 −25 Original line number Diff line number Diff line Loading @@ -3925,6 +3925,9 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mSelectCursorExtent.offset(dx, dy); mSelectCursorExtentTextQuad.offset(dx, dy); } } else if (mHandleAlpha.getAlpha() > 0) { // stop fading as we're not going to move with the layer. mHandleAlphaAnimator.end(); } if (mAutoCompletePopup != null && mCurrentScrollingLayerId == mEditTextLayerId) { Loading Loading @@ -4418,9 +4421,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } canvas.restoreToCount(saveCount); if (mSelectingText) { drawTextSelectionHandles(canvas); } if (extras == DRAW_EXTRAS_CURSOR_RING) { if (mTouchMode == TOUCH_SHORTPRESS_START_MODE) { Loading Loading @@ -4658,6 +4659,9 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } private void onZoomAnimationStart() { if (!mSelectingText && mHandleAlpha.getAlpha() > 0) { mHandleAlphaAnimator.end(); } } private void onZoomAnimationEnd() { Loading Loading @@ -4688,6 +4692,36 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc private final DrawFilter mScrollFilter = new PaintFlagsDrawFilter(SCROLL_BITS, 0); private class SelectionHandleAlpha { private int mAlpha = 0; public void setAlpha(int alpha) { mAlpha = alpha; if (mSelectHandleCenter != null) { mSelectHandleCenter.setAlpha(alpha); mSelectHandleLeft.setAlpha(alpha); mSelectHandleRight.setAlpha(alpha); // TODO: Use partial invalidate invalidate(); } } public int getAlpha() { return mAlpha; } } private void startSelectingText() { mSelectingText = true; mHandleAlphaAnimator.setIntValues(255); mHandleAlphaAnimator.start(); } private void endSelectingText() { mSelectingText = false; mHandleAlphaAnimator.setIntValues(0); mHandleAlphaAnimator.start(); } private void ensureSelectionHandles() { if (mSelectHandleCenter == null) { mSelectHandleCenter = mContext.getResources().getDrawable( Loading @@ -4696,6 +4730,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc com.android.internal.R.drawable.text_select_handle_left); mSelectHandleRight = mContext.getResources().getDrawable( com.android.internal.R.drawable.text_select_handle_right); mHandleAlpha.setAlpha(mHandleAlpha.getAlpha()); mSelectHandleCenterOffset = new Point(0, -mSelectHandleCenter.getIntrinsicHeight()); mSelectHandleLeftOffset = new Point(0, Loading @@ -4707,7 +4742,11 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } private void drawTextSelectionHandles(Canvas canvas) { if (mHandleAlpha.getAlpha() == 0) { return; } ensureSelectionHandles(); if (mSelectingText) { int[] handles = new int[4]; getSelectionHandles(handles); int start_x = contentToViewDimension(handles[0]); Loading @@ -4721,7 +4760,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mSelectHandleCenter.setBounds(start_x, start_y, start_x + mSelectHandleCenter.getIntrinsicWidth(), start_y + mSelectHandleCenter.getIntrinsicHeight()); mSelectHandleCenter.draw(canvas); } else { // Magic formula copied from TextView start_x -= (mSelectHandleLeft.getIntrinsicWidth() * 3) / 4; Loading @@ -4732,6 +4770,12 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mSelectHandleRight.setBounds(end_x, end_y, end_x + mSelectHandleRight.getIntrinsicWidth(), end_y + mSelectHandleRight.getIntrinsicHeight()); } } if (mIsCaretSelection) { mSelectHandleCenter.draw(canvas); } else { mSelectHandleLeft.draw(canvas); mSelectHandleRight.draw(canvas); } Loading Loading @@ -5385,7 +5429,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc selectionDone(); return false; } mSelectingText = true; startSelectingText(); mTouchMode = TOUCH_DRAG_MODE; return true; } Loading Loading @@ -5439,7 +5483,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc void selectionDone() { if (mSelectingText) { hidePasteButton(); mSelectingText = false; endSelectingText(); // finish is idempotent, so this is fine even if selectionDone was // called by mSelectCallback.onDestroyActionMode if (mSelectCallback != null) { Loading Loading @@ -6571,6 +6615,9 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc private long mTrackballUpTime = 0; private long mLastCursorTime = 0; private Rect mLastCursorBounds; private SelectionHandleAlpha mHandleAlpha = new SelectionHandleAlpha(); private ObjectAnimator mHandleAlphaAnimator = ObjectAnimator.ofInt(mHandleAlpha, "alpha", 0); // Set by default; BrowserActivity clears to interpret trackball data // directly for movement. Currently, the framework only passes Loading Loading
core/java/android/webkit/WebViewClassic.java +72 −25 Original line number Diff line number Diff line Loading @@ -3925,6 +3925,9 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mSelectCursorExtent.offset(dx, dy); mSelectCursorExtentTextQuad.offset(dx, dy); } } else if (mHandleAlpha.getAlpha() > 0) { // stop fading as we're not going to move with the layer. mHandleAlphaAnimator.end(); } if (mAutoCompletePopup != null && mCurrentScrollingLayerId == mEditTextLayerId) { Loading Loading @@ -4418,9 +4421,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } canvas.restoreToCount(saveCount); if (mSelectingText) { drawTextSelectionHandles(canvas); } if (extras == DRAW_EXTRAS_CURSOR_RING) { if (mTouchMode == TOUCH_SHORTPRESS_START_MODE) { Loading Loading @@ -4658,6 +4659,9 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } private void onZoomAnimationStart() { if (!mSelectingText && mHandleAlpha.getAlpha() > 0) { mHandleAlphaAnimator.end(); } } private void onZoomAnimationEnd() { Loading Loading @@ -4688,6 +4692,36 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc private final DrawFilter mScrollFilter = new PaintFlagsDrawFilter(SCROLL_BITS, 0); private class SelectionHandleAlpha { private int mAlpha = 0; public void setAlpha(int alpha) { mAlpha = alpha; if (mSelectHandleCenter != null) { mSelectHandleCenter.setAlpha(alpha); mSelectHandleLeft.setAlpha(alpha); mSelectHandleRight.setAlpha(alpha); // TODO: Use partial invalidate invalidate(); } } public int getAlpha() { return mAlpha; } } private void startSelectingText() { mSelectingText = true; mHandleAlphaAnimator.setIntValues(255); mHandleAlphaAnimator.start(); } private void endSelectingText() { mSelectingText = false; mHandleAlphaAnimator.setIntValues(0); mHandleAlphaAnimator.start(); } private void ensureSelectionHandles() { if (mSelectHandleCenter == null) { mSelectHandleCenter = mContext.getResources().getDrawable( Loading @@ -4696,6 +4730,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc com.android.internal.R.drawable.text_select_handle_left); mSelectHandleRight = mContext.getResources().getDrawable( com.android.internal.R.drawable.text_select_handle_right); mHandleAlpha.setAlpha(mHandleAlpha.getAlpha()); mSelectHandleCenterOffset = new Point(0, -mSelectHandleCenter.getIntrinsicHeight()); mSelectHandleLeftOffset = new Point(0, Loading @@ -4707,7 +4742,11 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } private void drawTextSelectionHandles(Canvas canvas) { if (mHandleAlpha.getAlpha() == 0) { return; } ensureSelectionHandles(); if (mSelectingText) { int[] handles = new int[4]; getSelectionHandles(handles); int start_x = contentToViewDimension(handles[0]); Loading @@ -4721,7 +4760,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mSelectHandleCenter.setBounds(start_x, start_y, start_x + mSelectHandleCenter.getIntrinsicWidth(), start_y + mSelectHandleCenter.getIntrinsicHeight()); mSelectHandleCenter.draw(canvas); } else { // Magic formula copied from TextView start_x -= (mSelectHandleLeft.getIntrinsicWidth() * 3) / 4; Loading @@ -4732,6 +4770,12 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mSelectHandleRight.setBounds(end_x, end_y, end_x + mSelectHandleRight.getIntrinsicWidth(), end_y + mSelectHandleRight.getIntrinsicHeight()); } } if (mIsCaretSelection) { mSelectHandleCenter.draw(canvas); } else { mSelectHandleLeft.draw(canvas); mSelectHandleRight.draw(canvas); } Loading Loading @@ -5385,7 +5429,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc selectionDone(); return false; } mSelectingText = true; startSelectingText(); mTouchMode = TOUCH_DRAG_MODE; return true; } Loading Loading @@ -5439,7 +5483,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc void selectionDone() { if (mSelectingText) { hidePasteButton(); mSelectingText = false; endSelectingText(); // finish is idempotent, so this is fine even if selectionDone was // called by mSelectCallback.onDestroyActionMode if (mSelectCallback != null) { Loading Loading @@ -6571,6 +6615,9 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc private long mTrackballUpTime = 0; private long mLastCursorTime = 0; private Rect mLastCursorBounds; private SelectionHandleAlpha mHandleAlpha = new SelectionHandleAlpha(); private ObjectAnimator mHandleAlphaAnimator = ObjectAnimator.ofInt(mHandleAlpha, "alpha", 0); // Set by default; BrowserActivity clears to interpret trackball data // directly for movement. Currently, the framework only passes Loading