Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 198e40dc authored by Leon Scroggins's avatar Leon Scroggins Committed by Android (Google) Code Review
Browse files

Merge "Pass keys to plugin while shift is held down."

parents 529b2854 b127c8ff
Loading
Loading
Loading
Loading
+48 −22
Original line number Diff line number Diff line
@@ -3319,7 +3319,7 @@ public class WebView extends AbsoluteLayout
            if (!animateScroll) {
                extras = DRAW_EXTRAS_FIND;
            }
        } else if (mShiftIsPressed) {
        } else if (mShiftIsPressed && !nativeFocusIsPlugin()) {
            if (!animateZoom && !mPreviewZoomOnly) {
                extras = DRAW_EXTRAS_SELECTION;
                nativeSetSelectionRegion(mTouchSelection || mExtendSelection);
@@ -3674,6 +3674,7 @@ public class WebView extends AbsoluteLayout
        }

        if (mShiftIsPressed == false && nativeCursorWantsKeyEvents() == false
                && !nativeFocusIsPlugin()
                && (keyCode == KeyEvent.KEYCODE_SHIFT_LEFT
                || keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) {
            setUpSelectXY();
@@ -3681,8 +3682,11 @@ public class WebView extends AbsoluteLayout

        if (keyCode >= KeyEvent.KEYCODE_DPAD_UP
                && keyCode <= KeyEvent.KEYCODE_DPAD_RIGHT) {
            // always handle the navigation keys in the UI thread
            switchOutDrawHistory();
            if (nativeFocusIsPlugin()) {
                letPluginHandleNavKey(keyCode, event.getEventTime(), true);
                return true;
            }
            if (mShiftIsPressed) {
                int xRate = keyCode == KeyEvent.KEYCODE_DPAD_LEFT
                    ? -1 : keyCode == KeyEvent.KEYCODE_DPAD_RIGHT ? 1 : 0;
@@ -3692,7 +3696,7 @@ public class WebView extends AbsoluteLayout
                moveSelection(xRate * multiplier, yRate * multiplier);
                return true;
            }
            if (navHandledKey(keyCode, 1, false, event.getEventTime(), false)) {
            if (navHandledKey(keyCode, 1, false, event.getEventTime())) {
                playSoundEffect(keyCodeToSoundsEffect(keyCode));
                return true;
            }
@@ -3703,7 +3707,7 @@ public class WebView extends AbsoluteLayout
        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            switchOutDrawHistory();
            if (event.getRepeatCount() == 0) {
                if (mShiftIsPressed) {
                if (mShiftIsPressed && !nativeFocusIsPlugin()) {
                    return true; // discard press if copy in progress
                }
                mGotCenterDown = true;
@@ -3819,6 +3823,10 @@ public class WebView extends AbsoluteLayout

        if (keyCode >= KeyEvent.KEYCODE_DPAD_UP
                && keyCode <= KeyEvent.KEYCODE_DPAD_RIGHT) {
            if (nativeFocusIsPlugin()) {
                letPluginHandleNavKey(keyCode, event.getEventTime(), false);
                return true;
            }
            // always handle the navigation keys in the UI thread
            // Bubble up the key event as WebView doesn't handle it
            return false;
@@ -3829,7 +3837,7 @@ public class WebView extends AbsoluteLayout
            mPrivateHandler.removeMessages(LONG_PRESS_CENTER);
            mGotCenterDown = false;

            if (mShiftIsPressed) {
            if (mShiftIsPressed && !nativeFocusIsPlugin()) {
                if (mExtendSelection) {
                    commitCopy();
                } else {
@@ -5014,7 +5022,7 @@ public class WebView extends AbsoluteLayout
            return true;
        }
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            if (mShiftIsPressed) {
            if (mShiftIsPressed && !nativeFocusIsPlugin()) {
                return true; // discard press if copy in progress
            }
            mTrackballDown = true;
@@ -5039,7 +5047,7 @@ public class WebView extends AbsoluteLayout
            mPrivateHandler.removeMessages(LONG_PRESS_CENTER);
            mTrackballDown = false;
            mTrackballUpTime = time;
            if (mShiftIsPressed) {
            if (mShiftIsPressed && !nativeFocusIsPlugin()) {
                if (mExtendSelection) {
                    commitCopy();
                } else {
@@ -5177,7 +5185,7 @@ public class WebView extends AbsoluteLayout
        float yRate = mTrackballRemainsY * 1000 / elapsed;
        int viewWidth = getViewWidth();
        int viewHeight = getViewHeight();
        if (mShiftIsPressed) {
        if (mShiftIsPressed && !nativeFocusIsPlugin()) {
            moveSelection(scaleTrackballX(xRate, viewWidth),
                    scaleTrackballY(yRate, viewHeight));
            mTrackballRemainsX = mTrackballRemainsY = 0;
@@ -5215,7 +5223,12 @@ public class WebView extends AbsoluteLayout
                        + " mTrackballRemainsX=" + mTrackballRemainsX
                        + " mTrackballRemainsY=" + mTrackballRemainsY);
            }
            if (navHandledKey(selectKeyCode, count, false, time, false)) {
            if (nativeFocusIsPlugin()) {
                for (int i = 0; i < count; i++) {
                    letPluginHandleNavKey(selectKeyCode, time, true);
                    letPluginHandleNavKey(selectKeyCode, time, false);
                }
            } else if (navHandledKey(selectKeyCode, count, false, time)) {
                playSoundEffect(keyCodeToSoundsEffect(selectKeyCode));
            }
            mTrackballRemainsX = mTrackballRemainsY = 0;
@@ -5692,7 +5705,7 @@ public class WebView extends AbsoluteLayout
                        return result;
                }
                if (mNativeClass != 0 && !nativeHasCursorNode()) {
                    navHandledKey(fakeKeyDirection, 1, true, 0, true);
                    navHandledKey(fakeKeyDirection, 1, true, 0);
                }
            }
        }
@@ -6118,7 +6131,7 @@ public class WebView extends AbsoluteLayout
                    }
                    break;
                case MOVE_OUT_OF_PLUGIN:
                    navHandledKey(msg.arg1, 1, false, 0, true);
                    navHandledKey(msg.arg1, 1, false, 0);
                    break;
                case UPDATE_TEXT_ENTRY_MSG_ID:
                    // this is sent after finishing resize in WebViewCore. Make
@@ -6785,21 +6798,34 @@ public class WebView extends AbsoluteLayout
        invalidate();
    }

    // return true if the key was handled
    private boolean navHandledKey(int keyCode, int count, boolean noScroll,
            long time, boolean ignorePlugin) {
        if (mNativeClass == 0) {
            return false;
    /**
     * Pass the key to the plugin.  This assumes that nativeFocusIsPlugin()
     * returned true.
     */
    private void letPluginHandleNavKey(int keyCode, long time, boolean down) {
        int keyEventAction;
        int eventHubAction;
        if (down) {
            keyEventAction = KeyEvent.ACTION_DOWN;
            eventHubAction = EventHub.KEY_DOWN;
            playSoundEffect(keyCodeToSoundsEffect(keyCode));
        } else {
            keyEventAction = KeyEvent.ACTION_UP;
            eventHubAction = EventHub.KEY_UP;
        }
        if (ignorePlugin == false && nativeFocusIsPlugin()) {
            KeyEvent event = new KeyEvent(time, time, KeyEvent.ACTION_DOWN
                , keyCode, count, (mShiftIsPressed ? KeyEvent.META_SHIFT_ON : 0)
        KeyEvent event = new KeyEvent(time, time, keyEventAction, keyCode,
                1, (mShiftIsPressed ? KeyEvent.META_SHIFT_ON : 0)
                | (false ? KeyEvent.META_ALT_ON : 0) // FIXME
                | (false ? KeyEvent.META_SYM_ON : 0) // FIXME
                , 0, 0, 0);
            mWebViewCore.sendMessage(EventHub.KEY_DOWN, event);
            mWebViewCore.sendMessage(EventHub.KEY_UP, event);
            return true;
        mWebViewCore.sendMessage(eventHubAction, event);
    }

    // return true if the key was handled
    private boolean navHandledKey(int keyCode, int count, boolean noScroll,
            long time) {
        if (mNativeClass == 0) {
            return false;
        }
        mLastCursorTime = time;
        mLastCursorBounds = nativeGetCursorRingBounds();