android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java | 2 android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java | 8 + android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java | 14 ++ android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java | 20 +++ android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java | 13 ++ android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java | 8 + android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java | 64 ++++++++++ android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java | 11 + 8 files changed, 140 insertions(+)
New commits: commit 961a13bc0edf7c1fbfe4d57bc54688112368534e Author: Siqi Liu <m...@siqi.fr> Date: Sat Feb 28 21:50:12 2015 +0100 implement swiping gesture as a generic event Change-Id: I024db339bada34a544fdcc1def107c7b06332847 diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java index a046988..18b821e 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java @@ -21,6 +21,8 @@ public class LOEvent implements Comparable<LOEvent> { public static final int TOUCH = 8; public static final int KEY_EVENT = 9; public static final int CHANGE_HANDLE_POSITION = 10; + public static final int SWIPE_RIGHT = 11; + public static final int SWIPE_LEFT = 12; public final int mType; public int mPriority = 0; diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java index 68ab523..84123a5 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java @@ -102,6 +102,14 @@ public class LOKitShell { LOKitShell.sendEvent(new LOEvent(LOEvent.SIZE_CHANGED)); } + public static void sendSwipeRightEvent() { + LOKitShell.sendEvent(new LOEvent(LOEvent.SWIPE_RIGHT)); + } + + public static void sendSwipeLeftEvent() { + LOKitShell.sendEvent(new LOEvent(LOEvent.SWIPE_LEFT)); + } + public static void sendChangePartEvent(int part) { LOKitShell.sendEvent(new LOEvent(LOEvent.CHANGE_PART, part)); } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java index 334cd44..099d0f2 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java @@ -208,6 +208,12 @@ public class LOKitThread extends Thread { case LOEvent.CHANGE_HANDLE_POSITION: changeHandlePosition(event.mHandleType, event.mDocumentCoordinate); break; + case LOEvent.SWIPE_LEFT: + onSwipeLeft(); + break; + case LOEvent.SWIPE_RIGHT: + onSwipeRight(); + break; } } @@ -237,6 +243,14 @@ public class LOKitThread extends Thread { mTileProvider.sendKeyEvent(keyEvent); } + private void onSwipeLeft() { + mTileProvider.onSwipeLeft(); + } + + private void onSwipeRight() { + mTileProvider.onSwipeRight(); + } + /** * Processes touch events. */ diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java index 146b761..f9fe8c3 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java @@ -94,30 +94,6 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback // Writer documents always have one part, so hide the navigation drawer. if (mDocument.getDocumentType() != Document.DOCTYPE_TEXT) { - - // Set left/right swipe listener for presentation only. - if (mDocument.getDocumentType() == Document.DOCTYPE_PRESENTATION) { - LayerView layerView = mLayerClient.getView(); - layerView.setOnTouchListener(new OnSlideSwipeListener(LibreOfficeMainActivity.mAppContext) { - @Override - public void onSwipeRight() { - if (getCurrentPartNumber() < mDocument.getParts()-1) { - LOKitShell.sendChangePartEvent(getCurrentPartNumber()+1); - } - } - - @Override - public void onSwipeLeft() { - if (getCurrentPartNumber() > 0) { - LOKitShell.sendChangePartEvent(getCurrentPartNumber()-1); - } - } - }); - } else { - // Unregister touch listener when loading another document. - mLayerClient.getView().setOnTouchListener(null); - } - for (int i = 0; i < parts; i++) { String partName = mDocument.getPartName(i); if (partName.isEmpty()) { @@ -170,6 +146,24 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback return (input / dpi) * 1440.0f; } + @Override + public void onSwipeLeft() { + Log.d(LOGTAG, "onSwipeLeft received"); + if (mDocument.getDocumentType() == Document.DOCTYPE_PRESENTATION + && getCurrentPartNumber() < mDocument.getParts()-1) { + LOKitShell.sendChangePartEvent(getCurrentPartNumber()+1); + } + } + + @Override + public void onSwipeRight() { + Log.d(LOGTAG, "onSwipeRight received"); + if (mDocument.getDocumentType() == Document.DOCTYPE_PRESENTATION + && getCurrentPartNumber() > 0) { + LOKitShell.sendChangePartEvent(getCurrentPartNumber()-1); + } + } + private boolean checkDocument() { String error = null; boolean ret; diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java index 43f2e6a..753faba 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java @@ -144,6 +144,19 @@ public class LibreOfficeMainActivity extends LOAbout { LayerView layerView = (LayerView) findViewById(R.id.layer_view); mLayerClient.setView(layerView); layerView.setInputConnectionHandler(new LOKitInputConnectionHandler()); + layerView.setOnTouchListener(new OnSlideSwipeListener(this) { + @Override + public void onSwipeRight() { + Log.d(LOGTAG, "onSwipeRight"); + LOKitShell.sendSwipeRightEvent(); + } + + @Override + public void onSwipeLeft() { + Log.d(LOGTAG, "onSwipeLeft"); + LOKitShell.sendSwipeLeftEvent(); + } + }); mLayerClient.notifyReady(); } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java index 66ad101..09e12ef 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java @@ -127,4 +127,12 @@ public class MockTileProvider implements TileProvider { public int getCurrentPartNumber() { return 0; } + + @Override + public void onSwipeLeft() { + } + + @Override + public void onSwipeRight() { + } } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java index 82d18a0e..1dc33f6 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java @@ -22,7 +22,7 @@ public class OnSlideSwipeListener implements OnTouchListener { @Override public boolean onDown(MotionEvent e) { - return true; + return false; } @Override @@ -39,13 +39,13 @@ public class OnSlideSwipeListener implements OnTouchListener { } else { onSwipeLeft(); } - } + } result = true; } } catch (Exception exception) { exception.printStackTrace(); } - return result; + return false; } } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java index 6c284ce..7fb51d2 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java @@ -75,6 +75,17 @@ public interface TileProvider { */ void mouseButtonDown(PointF documentCoordinate, int numberOfClicks); + + /** + * Trigger a swipe left event. + */ + void onSwipeLeft(); + + /** + * Trigger a swipe left event. + */ + void onSwipeRight(); + /** * Trigger a mouse button up event. * commit 577a0dd6ae2f2e344f97b57a88b135d46268e44f Author: Siqi Liu <m...@siqi.fr> Date: Sat Feb 28 19:04:25 2015 +0100 add swipe support for presentation Change-Id: I650d661a1656388e50e5d4e3a003b8eb4f032382 diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java index 7a90382..146b761 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java @@ -10,12 +10,14 @@ import org.libreoffice.kit.DirectBufferAllocator; import org.libreoffice.kit.Document; import org.libreoffice.kit.LibreOfficeKit; import org.libreoffice.kit.Office; + import org.mozilla.gecko.TextSelection; import org.mozilla.gecko.TextSelectionHandle; import org.mozilla.gecko.gfx.BufferedCairoImage; import org.mozilla.gecko.gfx.CairoImage; import org.mozilla.gecko.gfx.GeckoLayerClient; import org.mozilla.gecko.gfx.IntSize; +import org.mozilla.gecko.gfx.LayerView; import java.nio.ByteBuffer; @@ -92,6 +94,30 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback // Writer documents always have one part, so hide the navigation drawer. if (mDocument.getDocumentType() != Document.DOCTYPE_TEXT) { + + // Set left/right swipe listener for presentation only. + if (mDocument.getDocumentType() == Document.DOCTYPE_PRESENTATION) { + LayerView layerView = mLayerClient.getView(); + layerView.setOnTouchListener(new OnSlideSwipeListener(LibreOfficeMainActivity.mAppContext) { + @Override + public void onSwipeRight() { + if (getCurrentPartNumber() < mDocument.getParts()-1) { + LOKitShell.sendChangePartEvent(getCurrentPartNumber()+1); + } + } + + @Override + public void onSwipeLeft() { + if (getCurrentPartNumber() > 0) { + LOKitShell.sendChangePartEvent(getCurrentPartNumber()-1); + } + } + }); + } else { + // Unregister touch listener when loading another document. + mLayerClient.getView().setOnTouchListener(null); + } + for (int i = 0; i < parts; i++) { String partName = mDocument.getPartName(i); if (partName.isEmpty()) { diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java new file mode 100644 index 0000000..82d18a0e --- /dev/null +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java @@ -0,0 +1,64 @@ +package org.libreoffice; + +import android.content.Context; +import android.view.GestureDetector; +import android.view.GestureDetector.SimpleOnGestureListener; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnTouchListener; + +public class OnSlideSwipeListener implements OnTouchListener { + + private final GestureDetector mGestureDetector; + + public OnSlideSwipeListener(Context ctx){ + mGestureDetector = new GestureDetector(ctx, new GestureListener()); + } + + private final class GestureListener extends SimpleOnGestureListener { + + private static final int SWIPE_THRESHOLD = 100; + private static final int SWIPE_VELOCITY_THRESHOLD = 100; + + @Override + public boolean onDown(MotionEvent e) { + return true; + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velX, float velY) { + boolean result = false; + try { + float diffY = e2.getY() - e1.getY(); + float diffX = e2.getX() - e1.getX(); + if (Math.abs(diffX) > Math.abs(diffY)) { + if (Math.abs(diffX) > SWIPE_THRESHOLD + && Math.abs(velX) > SWIPE_VELOCITY_THRESHOLD) { + if (diffX > 0) { + onSwipeRight(); + } else { + onSwipeLeft(); + } + } + result = true; + } + } catch (Exception exception) { + exception.printStackTrace(); + } + return result; + } + } + + public void onSwipeRight() { + } + + public void onSwipeLeft() { + } + + @Override + public boolean onTouch(View v, MotionEvent me) { + return mGestureDetector.onTouchEvent(me); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits