Kaydet (Commit) b792f602 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl Kaydeden (comit) Miklos Vajna

android: handle callbacks directly in InvalidationHandler

Change-Id: Ic4ceaadcf251f7257001f8043161ce15898d7239
üst d5c32b45
...@@ -14,9 +14,10 @@ import java.util.List; ...@@ -14,9 +14,10 @@ import java.util.List;
/** /**
* Parses (interprets) and handles invalidation messages from LibreOffice. * 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 static String LOGTAG = InvalidationHandler.class.getSimpleName();
private TileProvider mTileProvider;
private TextCursorLayer mTextCursorLayer; private TextCursorLayer mTextCursorLayer;
private TextSelection mTextSelection; private TextSelection mTextSelection;
private OverlayState mState; private OverlayState mState;
...@@ -24,16 +25,25 @@ public class InvalidationHandler { ...@@ -24,16 +25,25 @@ public class InvalidationHandler {
public InvalidationHandler(LibreOfficeMainActivity mainActivity) { public InvalidationHandler(LibreOfficeMainActivity mainActivity) {
mTextCursorLayer = mainActivity.getTextCursorLayer(); mTextCursorLayer = mainActivity.getTextCursorLayer();
mTextSelection = mainActivity.getTextSelection(); mTextSelection = mainActivity.getTextSelection();
mTileProvider = null;
mState = OverlayState.NONE; mState = OverlayState.NONE;
} }
public void setTileProvider(TileProvider tileProvider) {
mTileProvider = tileProvider;
}
/** /**
* Processes invalidation message * Processes callback message
* *
* @param messageID - ID of the message * @param messageID - ID of the message
* @param payload - additional invalidation message payload * @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) { switch (messageID) {
case Document.CALLBACK_INVALIDATE_TILES: case Document.CALLBACK_INVALIDATE_TILES:
invalidateTiles(payload); invalidateTiles(payload);
...@@ -53,6 +63,15 @@ public class InvalidationHandler { ...@@ -53,6 +63,15 @@ public class InvalidationHandler {
case Document.CALLBACK_CURSOR_VISIBLE: case Document.CALLBACK_CURSOR_VISIBLE:
cursorVisibility(payload); cursorVisibility(payload);
break; 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;
} }
} }
......
...@@ -159,6 +159,7 @@ public class LOKitThread extends Thread { ...@@ -159,6 +159,7 @@ public class LOKitThread extends Thread {
mInvalidationHandler = new InvalidationHandler(LibreOfficeMainActivity.mAppContext); mInvalidationHandler = new InvalidationHandler(LibreOfficeMainActivity.mAppContext);
mTileProvider = TileProviderFactory.create(mLayerClient, mInvalidationHandler, filename); mTileProvider = TileProviderFactory.create(mLayerClient, mInvalidationHandler, filename);
mInvalidationHandler.setTileProvider(mTileProvider);
if (mTileProvider.isReady()) { if (mTileProvider.isReady()) {
LOKitShell.showProgressSpinner(); LOKitShell.showProgressSpinner();
......
...@@ -28,7 +28,7 @@ import java.nio.ByteBuffer; ...@@ -28,7 +28,7 @@ import java.nio.ByteBuffer;
/** /**
* LOKit implementation of TileProvider. * 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 final String LOGTAG = LOKitTileProvider.class.getSimpleName();
private static int TILE_SIZE = 256; private static int TILE_SIZE = 256;
private final GeckoLayerClient mLayerClient; private final GeckoLayerClient mLayerClient;
...@@ -43,13 +43,13 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback ...@@ -43,13 +43,13 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback
private float mWidthTwip; private float mWidthTwip;
private float mHeightTwip; private float mHeightTwip;
private InvalidationHandler mInvalidationHandler; private Document.MessageCallback mMessageCallback;
private long objectCreationTime = System.currentTimeMillis(); private long objectCreationTime = System.currentTimeMillis();
public LOKitTileProvider(GeckoLayerClient layerClient, InvalidationHandler invalidationHandler, String input) { public LOKitTileProvider(GeckoLayerClient layerClient, Document.MessageCallback messageCallback, String input) {
mLayerClient = layerClient; mLayerClient = layerClient;
mInvalidationHandler = invalidationHandler; mMessageCallback = messageCallback;
mDPI = (float) LOKitShell.getDpi(); mDPI = (float) LOKitShell.getDpi();
mTileWidth = pixelToTwip(TILE_SIZE, mDPI); mTileWidth = pixelToTwip(TILE_SIZE, mDPI);
mTileHeight = pixelToTwip(TILE_SIZE, mDPI); mTileHeight = pixelToTwip(TILE_SIZE, mDPI);
...@@ -89,7 +89,7 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback ...@@ -89,7 +89,7 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback
} }
public void postLoad() { public void postLoad() {
mDocument.setMessageCallback(this); mDocument.setMessageCallback(mMessageCallback);
int parts = mDocument.getParts(); int parts = mDocument.getParts();
Log.i(LOGTAG, "Document parts: " + parts); Log.i(LOGTAG, "Document parts: " + parts);
...@@ -407,32 +407,6 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback ...@@ -407,32 +407,6 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback
return mDocument.getPart(); 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: // vim:set shiftwidth=4 softtabstop=4 expandtab:
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment