From 5d7a203bdae1940e4846c4c42f5d733e4ffa4160 Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Wed, 8 Apr 2015 18:24:48 +0900 Subject: android: reposition the viewport to the cursor at key event Change-Id: I9b18001d0629e203bee41ebbf4a3bd57adfea88e --- .../src/java/org/libreoffice/InvalidationHandler.java | 12 ++++++++++++ .../LOAndroid3/src/java/org/libreoffice/LOKitThread.java | 1 + 2 files changed, 13 insertions(+) (limited to 'android') diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java index 7aeb573015f7..9f83006bc785 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java @@ -1,6 +1,7 @@ package org.libreoffice; import android.content.Intent; +import android.graphics.PointF; import android.graphics.RectF; import android.net.Uri; @@ -19,6 +20,7 @@ public class InvalidationHandler implements Document.MessageCallback { private static String LOGTAG = InvalidationHandler.class.getSimpleName(); private final DocumentOverlay mDocumentOverlay; private OverlayState mState; + private boolean mKeyEvent = false; public InvalidationHandler(LibreOfficeMainActivity mainActivity) { mDocumentOverlay = mainActivity.getDocumentOverlay(); @@ -150,6 +152,12 @@ public class InvalidationHandler implements Document.MessageCallback { mDocumentOverlay.positionCursor(cursorRectangle); mDocumentOverlay.positionHandle(SelectionHandle.HandleType.MIDDLE, cursorRectangle); + if (mKeyEvent) { + PointF point = new PointF(cursorRectangle.centerX(), cursorRectangle.centerY()); + LOKitShell.moveViewportTo(point, null); + mKeyEvent = false; + } + if (mState == OverlayState.TRANSITION || mState == OverlayState.CURSOR) { changeStateTo(OverlayState.CURSOR); } @@ -352,6 +360,10 @@ public class InvalidationHandler implements Document.MessageCallback { return mState; } + public void keyEvent() { + mKeyEvent = true; + } + public enum OverlayState { /** * State where the overlay is empty diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java index 1da85f34be5c..cc21840b41ea 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java @@ -271,6 +271,7 @@ public class LOKitThread extends Thread { if (mTileProvider == null) { return; } + mInvalidationHandler.keyEvent(); mTileProvider.sendKeyEvent(keyEvent); } -- cgit