From 3df95150c1ab65b5d2dc1ed2bd2e2010e6132d32 Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Wed, 17 Dec 2014 18:45:57 +0900 Subject: android: support to handle events with prioritization Low-res tiles should be handleded before normal tiles so for this add priority to tiles and store in a with priority queue. Change-Id: I8d36c14503d9b684816d99f577198ac34b729d15 --- .../LOAndroid3/src/java/org/libreoffice/LOEvent.java | 8 +++++++- .../LOAndroid3/src/java/org/libreoffice/LOKitThread.java | 9 ++------- .../src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java | 7 ++++++- .../src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java | 5 +++++ .../src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java | 5 +++++ 5 files changed, 25 insertions(+), 9 deletions(-) (limited to 'android') diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java index ade57c782efc..ced5ebd49daf 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java @@ -3,7 +3,7 @@ package org.libreoffice; import org.mozilla.gecko.gfx.ComposedTileLayer; import org.mozilla.gecko.gfx.IntSize; -public class LOEvent { +public class LOEvent implements Comparable { public static final int SIZE_CHANGED = 1; public static final int TILE_SIZE = 2; @@ -14,6 +14,7 @@ public class LOEvent { public static final int TILE_REQUEST = 7; public final int mType; + public int mPriority = 0; public String mTypeString; public int mPartIndex; @@ -60,4 +61,9 @@ public class LOEvent { } return mTypeString; } + + @Override + public int compareTo(LOEvent another) { + return mPriority - another.mPriority; + } } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java index 7888095e8352..8bf82392e19e 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java @@ -1,22 +1,17 @@ package org.libreoffice; -import android.graphics.Bitmap; -import android.graphics.RectF; -import android.util.DisplayMetrics; -import android.util.Log; - import org.mozilla.gecko.gfx.CairoImage; import org.mozilla.gecko.gfx.ComposedTileLayer; import org.mozilla.gecko.gfx.GeckoLayerClient; import org.mozilla.gecko.gfx.ImmutableViewportMetrics; import org.mozilla.gecko.gfx.SubTile; -import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.PriorityBlockingQueue; public class LOKitThread extends Thread { private static final String LOGTAG = LOKitThread.class.getSimpleName(); - private LinkedBlockingQueue mEventQueue = new LinkedBlockingQueue(); + private PriorityBlockingQueue mEventQueue = new PriorityBlockingQueue(); private LibreOfficeMainActivity mApplication; private TileProvider mTileProvider; private ImmutableViewportMetrics mViewportMetrics; diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java index 7c41db1df294..cb924e355186 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java @@ -4,6 +4,7 @@ import android.graphics.RectF; import android.graphics.Region; import android.util.Log; +import org.libreoffice.LOEvent; import org.libreoffice.LOEventFactory; import org.libreoffice.LOKitShell; import org.libreoffice.TileIdentifier; @@ -143,6 +144,8 @@ public abstract class ComposedTileLayer extends Layer { protected abstract float getZoom(ImmutableViewportMetrics viewportMetrics); + protected abstract int getTilePriority(); + private void addNewTiles(ImmutableViewportMetrics viewportMetrics) { float zoom = getZoom(viewportMetrics); @@ -161,7 +164,9 @@ public abstract class ComposedTileLayer extends Layer { } } if (!contains) { - LOKitShell.sendEvent(LOEventFactory.tileRequest(this, new TileIdentifier((int) x, (int) y, zoom, tileSize))); + LOEvent event = LOEventFactory.tileRequest(this, new TileIdentifier((int) x, (int) y, zoom, tileSize)); + event.mPriority = getTilePriority(); + LOKitShell.sendEvent(event); } } } diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java index 82d9928836c8..12ff72389667 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java @@ -14,6 +14,11 @@ public class DynamicTileLayer extends ComposedTileLayer { return viewportMetrics.zoomFactor; } + @Override + protected int getTilePriority() { + return 0; + } + protected IntSize getInflateFactor() { return tileSize; } diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java index 7b669167fecb..52a26f60fd01 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java @@ -15,6 +15,11 @@ public class FixedZoomTileLayer extends ComposedTileLayer { return 1.0f / 32.0f; } + @Override + protected int getTilePriority() { + return -1; + } + private IntSize getInflateFactor() { return tileSize.scale(3); } -- cgit