diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2015-03-06 21:52:42 +0900 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-03-09 10:16:20 +0100 |
commit | b792f60279186953889591c5dd4bc76017db7aa0 (patch) | |
tree | a9bf6e01e21031e4b208db25682681acac222283 | |
parent | d5c32b45186dfa8e78116841f5bb0a73ee545b33 (diff) |
android: handle callbacks directly in InvalidationHandler
Change-Id: Ic4ceaadcf251f7257001f8043161ce15898d7239
3 files changed, 28 insertions, 34 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java index 7bc58243ac4e..478ab2d22af7 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java @@ -14,9 +14,10 @@ import java.util.List; /** * Parses (interprets) and handles invalidation messages from LibreOffice. */ -public class InvalidationHandler { +public class InvalidationHandler implements Document.MessageCallback { private static String LOGTAG = InvalidationHandler.class.getSimpleName(); + private TileProvider mTileProvider; private TextCursorLayer mTextCursorLayer; private TextSelection mTextSelection; private OverlayState mState; @@ -24,16 +25,25 @@ public class InvalidationHandler { public InvalidationHandler(LibreOfficeMainActivity mainActivity) { mTextCursorLayer = mainActivity.getTextCursorLayer(); mTextSelection = mainActivity.getTextSelection(); + mTileProvider = null; mState = OverlayState.NONE; } + public void setTileProvider(TileProvider tileProvider) { + mTileProvider = tileProvider; + } + /** - * Processes invalidation message + * Processes callback message * * @param messageID - ID of the message * @param payload - additional invalidation message payload */ - public void processMessage(int messageID, String payload) { + @Override + public void messageRetrieved(int messageID, String payload) { + if (!LOKitShell.isEditingEnabled()) { + return; + } switch (messageID) { case Document.CALLBACK_INVALIDATE_TILES: invalidateTiles(payload); @@ -53,6 +63,15 @@ public class InvalidationHandler { case Document.CALLBACK_CURSOR_VISIBLE: cursorVisibility(payload); break; + case Document.CALLBACK_HYPERLINK_CLICKED: + if (!payload.startsWith("http://") && !payload.startsWith("https://")) { + payload = "http://" + payload; + } + + Intent urlIntent = new Intent(Intent.ACTION_VIEW); + urlIntent.setData(Uri.parse(payload)); + LibreOfficeMainActivity.mAppContext.startActivity(urlIntent); + break; } } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java index 78e18d3e4558..e3c7c2c2d830 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java @@ -159,6 +159,7 @@ public class LOKitThread extends Thread { mInvalidationHandler = new InvalidationHandler(LibreOfficeMainActivity.mAppContext); mTileProvider = TileProviderFactory.create(mLayerClient, mInvalidationHandler, filename); + mInvalidationHandler.setTileProvider(mTileProvider); if (mTileProvider.isReady()) { LOKitShell.showProgressSpinner(); diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java index 179c6fffe1f1..ae14cc65c25f 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java @@ -28,7 +28,7 @@ import java.nio.ByteBuffer; /** * LOKit implementation of TileProvider. */ -public class LOKitTileProvider implements TileProvider, Document.MessageCallback { +public class LOKitTileProvider implements TileProvider { private static final String LOGTAG = LOKitTileProvider.class.getSimpleName(); private static int TILE_SIZE = 256; private final GeckoLayerClient mLayerClient; @@ -43,13 +43,13 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback private float mWidthTwip; private float mHeightTwip; - private InvalidationHandler mInvalidationHandler; + private Document.MessageCallback mMessageCallback; private long objectCreationTime = System.currentTimeMillis(); - public LOKitTileProvider(GeckoLayerClient layerClient, InvalidationHandler invalidationHandler, String input) { + public LOKitTileProvider(GeckoLayerClient layerClient, Document.MessageCallback messageCallback, String input) { mLayerClient = layerClient; - mInvalidationHandler = invalidationHandler; + mMessageCallback = messageCallback; mDPI = (float) LOKitShell.getDpi(); mTileWidth = pixelToTwip(TILE_SIZE, mDPI); mTileHeight = pixelToTwip(TILE_SIZE, mDPI); @@ -89,7 +89,7 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback } public void postLoad() { - mDocument.setMessageCallback(this); + mDocument.setMessageCallback(mMessageCallback); int parts = mDocument.getParts(); Log.i(LOGTAG, "Document parts: " + parts); @@ -407,32 +407,6 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback return mDocument.getPart(); } - - /** - * Process the retrieved messages from LOK - */ - @Override - public void messageRetrieved(int messageID, String payload) { - /** - * Handles messages that do not require entering editing mode. - */ - switch (messageID) { - case Document.CALLBACK_HYPERLINK_CLICKED: - if (!payload.startsWith("http://") && - !payload.startsWith("https://")) - payload = "http://" + payload; - - Intent url_intent = new Intent(Intent.ACTION_VIEW); - url_intent.setData(Uri.parse(payload)); - LibreOfficeMainActivity.mAppContext.startActivity(url_intent); - return; - } - - if (!LOKitShell.isEditingEnabled()) { - return; - } - mInvalidationHandler.processMessage(messageID, payload); - } } // vim:set shiftwidth=4 softtabstop=4 expandtab: |