summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2015-01-09 17:21:01 +0900
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-01-12 11:06:42 +0100
commita04e32558738c912913fa368e0e2cf237e61485c (patch)
treebe46b7151445b5395dc41012590a2e269953995c /android
parente905d3b3e9eb356b26fc4d860a0fbdcd5d041092 (diff)
android: Process messages in TileProvider + invalidation interface
Process the LOK messages in TileProvider and add an interface to register and communicate invalidation requests. Change-Id: I798dc5591dbc60ee6b055a95464cd3406ecd8b0d
Diffstat (limited to 'android')
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java40
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java4
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java7
3 files changed, 48 insertions, 3 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
index e1aeba359222..14a6acb4a5cb 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
@@ -1,6 +1,7 @@
package org.libreoffice;
import android.graphics.Bitmap;
+import android.graphics.RectF;
import android.util.Log;
import org.libreoffice.kit.Document;
@@ -13,16 +14,17 @@ import org.mozilla.gecko.gfx.IntSize;
import java.nio.ByteBuffer;
-public class LOKitTileProvider implements TileProvider {
+public class LOKitTileProvider implements TileProvider, Document.MessageCallback {
private static final String LOGTAG = LOKitTileProvider.class.getSimpleName();
private static int TILE_SIZE = 256;
- private Office mOffice;
- private Document mDocument;
private final GeckoLayerClient mLayerClient;
private final float mTileWidth;
private final float mTileHeight;
private final String mInputFile;
+ private Office mOffice;
+ private Document mDocument;
private boolean mIsReady = false;
+ private TileInvalidationCallback tileInvalidationCallback = null;
private float mDPI;
private float mWidthTwip;
@@ -67,6 +69,7 @@ public class LOKitTileProvider implements TileProvider {
public void postLoad() {
mDocument.initializeForRendering();
+ mDocument.setMessageCallback(this);
int parts = mDocument.getParts();
Log.i(LOGTAG, "Document parts: " + parts);
@@ -254,6 +257,12 @@ public class LOKitTileProvider implements TileProvider {
}
@Override
+ public void registerInvalidationCallback(TileInvalidationCallback tileInvalidationCallback) {
+ this.tileInvalidationCallback = tileInvalidationCallback;
+ }
+
+
+ @Override
protected void finalize() throws Throwable {
close();
super.finalize();
@@ -269,6 +278,31 @@ public class LOKitTileProvider implements TileProvider {
public int getCurrentPartNumber() {
return mDocument.getPart();
}
+
+ @Override
+ public void messageRetrieved(int signalNumber, String payload) {
+ switch (signalNumber) {
+ case 0:
+ if (!payload.equals("EMPTY")) {
+ String[] coordinates = payload.split(",");
+
+ if (coordinates.length == 4) {
+ int left = Integer.decode(coordinates[0].trim());
+ int top = Integer.decode(coordinates[1].trim());
+ int right = Integer.decode(coordinates[2].trim());
+ int bottom = Integer.decode(coordinates[3].trim());
+ RectF rect = new RectF(
+ twipToPixel(left, mDPI),
+ twipToPixel(top, mDPI),
+ twipToPixel(right, mDPI),
+ twipToPixel(bottom, mDPI)
+ );
+ Log.i(LOGTAG, "Invalidate R: " + rect +" - " + getPageWidth() + " " + getPageHeight());
+ tileInvalidationCallback.invalidate(rect);
+ }
+ }
+ }
+ }
}
// vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java
index 79fef43a491d..0b58f1aa9d91 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java
@@ -79,6 +79,10 @@ public class MockTileProvider implements TileProvider {
}
@Override
+ public void registerInvalidationCallback(TileInvalidationCallback tileInvalidationCallback) {
+ }
+
+ @Override
public void changePart(int partIndex) {
}
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java
index 988e53a0fcdf..abe76545b060 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java
@@ -2,6 +2,7 @@ package org.libreoffice;
import android.graphics.Bitmap;
+import android.graphics.RectF;
import org.mozilla.gecko.gfx.CairoImage;
import org.mozilla.gecko.gfx.IntSize;
@@ -24,4 +25,10 @@ public interface TileProvider {
void close();
boolean isTextDocument();
+
+ void registerInvalidationCallback(TileProvider.TileInvalidationCallback tileInvalidationCallback);
+
+ public interface TileInvalidationCallback {
+ void invalidate(RectF rect);
+ }
}