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;
/**
* 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;
}
}
......
......@@ -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();
......
......@@ -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:
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