Kaydet (Commit) 6d9124de authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl

android: update JNI facade, rename mouse/keyboard event flags

Change-Id: Ia2b9a812717d05c7d98d47bf0fe5fd293029d045
üst 3d345941
...@@ -12,12 +12,12 @@ package org.libreoffice.kit; ...@@ -12,12 +12,12 @@ package org.libreoffice.kit;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
public class Document { public class Document {
public static final int PART_MODE_DEFAULT = 0; public static final int PART_MODE_SLIDE = 0;
public static final int PART_MODE_SLIDE = 1; public static final int PART_MODE_NOTES = 1;
public static final int PART_MODE_NOTES = 2;
public static final int PART_MODE_SLIDENOTES = 3;
public static final int PART_MODE_EMBEDDEDOBJ = 4;
/**
* Document types
*/
public static final int DOCTYPE_TEXT = 0; public static final int DOCTYPE_TEXT = 0;
public static final int DOCTYPE_SPREADSHEET = 1; public static final int DOCTYPE_SPREADSHEET = 1;
public static final int DOCTYPE_PRESENTATION = 2; public static final int DOCTYPE_PRESENTATION = 2;
...@@ -27,10 +27,15 @@ public class Document { ...@@ -27,10 +27,15 @@ public class Document {
/** /**
* Mouse event types * Mouse event types
*/ */
public static final int MOUSE_BUTTON_DOWN = 0; public static final int MOUSE_EVENT_BUTTON_DOWN = 0;
public static final int MOUSE_BUTTON_UP = 1; public static final int MOUSE_EVENT_BUTTON_UP = 1;
public static final int MOUSE_MOVE = 2; public static final int MOUSE_EVENT_MOVE = 2;
/**
* Key event types
*/
public static final int KEY_EVENT_PRESS = 0;
public static final int KEY_EVENT_RELEASE = 1;
/** /**
* State change types * State change types
...@@ -40,6 +45,11 @@ public class Document { ...@@ -40,6 +45,11 @@ public class Document {
public static final int UNDERLINE = 2; public static final int UNDERLINE = 2;
public static final int STRIKEOUT = 3; public static final int STRIKEOUT = 3;
public static final int ALIGN_LEFT= 4;
public static final int ALIGN_CENTER = 5;
public static final int ALIGN_RIGHT= 6;
public static final int ALIGN_JUSTIFY= 7;
/** /**
* Callback message types * Callback message types
*/ */
...@@ -52,6 +62,13 @@ public class Document { ...@@ -52,6 +62,13 @@ public class Document {
public static final int CALLBACK_GRAPHIC_SELECTION = 6; public static final int CALLBACK_GRAPHIC_SELECTION = 6;
public static final int CALLBACK_HYPERLINK_CLICKED = 7; public static final int CALLBACK_HYPERLINK_CLICKED = 7;
public static final int CALLBACK_STATE_CHANGED = 8; public static final int CALLBACK_STATE_CHANGED = 8;
public static final int CALLBACK_STATUS_INTICATOR_START = 9;
public static final int CALLBACK_STATUS_INTICATOR_SET_VALUE = 10;
public static final int CALLBACK_STATUS_INTICATOR_FINISH = 11;
public static final int CALLBACK_SEARCH_NOT_FOUND = 12;
public static final int CALLBACK_DOCUMENT_SIZE_CHANGED = 13;
public static final int CALLBACK_SET_PART = 14;
public static final int CALLBACK_SEARCH_RESULT_SELECTION = 15;
/** /**
* Set text selection types * Set text selection types
...@@ -66,6 +83,19 @@ public class Document { ...@@ -66,6 +83,19 @@ public class Document {
public static final int SET_GRAPHIC_SELECTION_START = 0; public static final int SET_GRAPHIC_SELECTION_START = 0;
public static final int SET_GRAPHIC_SELECTION_END = 1; public static final int SET_GRAPHIC_SELECTION_END = 1;
/**
* Mouse button type
*/
public static final int MOUSE_BUTTON_LEFT = 1;
public static final int MOUSE_BUTTON_MIDDLE = 2;
public static final int MOUSE_BUTTON_RIGHT = 4;
public static final int KEYBOARD_MODIFIER_NONE = 0x0000;
public static final int KEYBOARD_MODIFIER_SHIFT = 0x1000;
public static final int KEYBOARD_MODIFIER_MOD1 = 0x2000;
public static final int KEYBOARD_MODIFIER_MOD2 = 0x4000;
public static final int KEYBOARD_MODIFIER_MOD3 = 0x8000;
private final ByteBuffer handle; private final ByteBuffer handle;
private MessageCallback messageCallback = null; private MessageCallback messageCallback = null;
...@@ -105,6 +135,8 @@ public class Document { ...@@ -105,6 +135,8 @@ public class Document {
public native void setPartMode(int partMode); public native void setPartMode(int partMode);
public native String getPartPageRectangles();
public native long getDocumentHeight(); public native long getDocumentHeight();
public native long getDocumentWidth(); public native long getDocumentWidth();
...@@ -140,13 +172,14 @@ public class Document { ...@@ -140,13 +172,14 @@ public class Document {
* @param y - y coordinate * @param y - y coordinate
* @param count - number of events * @param count - number of events
*/ */
public native void postMouseEvent(int type, int x, int y, int count); public native void postMouseEvent(int type, int x, int y, int count, int button, int modifier);
/** /**
* Post a .uno: command to LOK * Post a .uno: command to LOK
* @param command - the command, like ".uno:Bold" * @param command - the command, like ".uno:Bold"
* @param arguments
*/ */
public native void postUnoCommand(String command); public native void postUnoCommand(String command, String arguments);
/** /**
* Change text selection. * Change text selection.
...@@ -169,6 +202,8 @@ public class Document { ...@@ -169,6 +202,8 @@ public class Document {
*/ */
public native void resetSelection(); public native void resetSelection();
public native String getCommandValues(String command);
/** /**
* Callback to retrieve messages from LOK * Callback to retrieve messages from LOK
*/ */
......
...@@ -12,9 +12,6 @@ package org.libreoffice.kit; ...@@ -12,9 +12,6 @@ package org.libreoffice.kit;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
public class Office { public class Office {
public static final int KEY_PRESS = 0;
public static final int KEY_RELEASE = 1;
private ByteBuffer handle; private ByteBuffer handle;
public Office(ByteBuffer handle) { public Office(ByteBuffer handle) {
......
...@@ -208,7 +208,7 @@ public class InvalidationHandler implements Document.MessageCallback { ...@@ -208,7 +208,7 @@ public class InvalidationHandler implements Document.MessageCallback {
float newTop = moveToRect.top; float newTop = moveToRect.top;
if (cursorRectangle.right < moveToRect.left || cursorRectangle.left < moveToRect.left) { if (cursorRectangle.right < moveToRect.left || cursorRectangle.left < moveToRect.left) {
newLeft = cursorRectangle.left - (moveToRect.width() * 0.1f); newLeft = cursorRectangle.left - (moveToRect.width() * 0.1f);
} else if (cursorRectangle.right > moveToRect.right || cursorRectangle.left > moveToRect.right) { } else if (cursorRectangle.right > moveToRect.right || cursorRectangle.left > moveToRect.right) {
newLeft = cursorRectangle.right - (moveToRect.width() * 0.9f); newLeft = cursorRectangle.right - (moveToRect.width() * 0.9f);
} }
...@@ -306,6 +306,7 @@ public class InvalidationHandler implements Document.MessageCallback { ...@@ -306,6 +306,7 @@ public class InvalidationHandler implements Document.MessageCallback {
/** /**
* Trigger a transition to a new overlay state. * Trigger a transition to a new overlay state.
*
* @param next - new state to transition to * @param next - new state to transition to
*/ */
public synchronized void changeStateTo(OverlayState next) { public synchronized void changeStateTo(OverlayState next) {
...@@ -314,6 +315,7 @@ public class InvalidationHandler implements Document.MessageCallback { ...@@ -314,6 +315,7 @@ public class InvalidationHandler implements Document.MessageCallback {
/** /**
* Executes a transition from old overlay state to a new overlay state. * Executes a transition from old overlay state to a new overlay state.
*
* @param previous - old state * @param previous - old state
* @param next - new state * @param next - new state
*/ */
......
...@@ -47,6 +47,7 @@ public class LOEvent implements Comparable<LOEvent> { ...@@ -47,6 +47,7 @@ public class LOEvent implements Comparable<LOEvent> {
public KeyEvent mKeyEvent; public KeyEvent mKeyEvent;
public RectF mInvalidationRect; public RectF mInvalidationRect;
public SelectionHandle.HandleType mHandleType; public SelectionHandle.HandleType mHandleType;
public String mValue;
public LOEvent(int type) { public LOEvent(int type) {
mType = type; mType = type;
...@@ -58,10 +59,18 @@ public class LOEvent implements Comparable<LOEvent> { ...@@ -58,10 +59,18 @@ public class LOEvent implements Comparable<LOEvent> {
mComposedTileLayer = composedTileLayer; mComposedTileLayer = composedTileLayer;
} }
public LOEvent(int type, String filename) { public LOEvent(int type, String someString) {
mType = type; mType = type;
mTypeString = "String"; mTypeString = "String";
mString = filename; mString = someString;
mValue = null;
}
public LOEvent(int type, String key, String value) {
mType = type;
mTypeString = "key / value";
mString = key;
mValue = value;
} }
public LOEvent(int type, int partIndex) { public LOEvent(int type, int partIndex) {
......
...@@ -16,7 +16,7 @@ import java.util.ArrayList; ...@@ -16,7 +16,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
/* /**
* Thread that communicates with LibreOffice through LibreOfficeKit JNI interface. The thread * Thread that communicates with LibreOffice through LibreOfficeKit JNI interface. The thread
* consumes events from other threads (mainly the UI thread) and acts accordingly. * consumes events from other threads (mainly the UI thread) and acts accordingly.
*/ */
...@@ -243,7 +243,7 @@ public class LOKitThread extends Thread { ...@@ -243,7 +243,7 @@ public class LOKitThread extends Thread {
mInvalidationHandler.changeStateTo(InvalidationHandler.OverlayState.NONE); mInvalidationHandler.changeStateTo(InvalidationHandler.OverlayState.NONE);
break; break;
case LOEvent.UNO_COMMAND: case LOEvent.UNO_COMMAND:
mTileProvider.postUnoCommand(event.mString); mTileProvider.postUnoCommand(event.mString, event.mValue);
break; break;
} }
} }
......
...@@ -388,12 +388,12 @@ public class LOKitTileProvider implements TileProvider { ...@@ -388,12 +388,12 @@ public class LOKitTileProvider implements TileProvider {
String keyString = keyEvent.getCharacters(); String keyString = keyEvent.getCharacters();
for (int i = 0; i < keyString.length(); i++) { for (int i = 0; i < keyString.length(); i++) {
int codePoint = keyString.codePointAt(i); int codePoint = keyString.codePointAt(i);
mDocument.postKeyEvent(Office.KEY_PRESS, codePoint, getKeyCode(keyEvent)); mDocument.postKeyEvent(Document.KEY_EVENT_PRESS, codePoint, getKeyCode(keyEvent));
} }
} else if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) { } else if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
mDocument.postKeyEvent(Office.KEY_PRESS, getCharCode(keyEvent), getKeyCode(keyEvent)); mDocument.postKeyEvent(Document.KEY_EVENT_PRESS, getCharCode(keyEvent), getKeyCode(keyEvent));
} else if (keyEvent.getAction() == KeyEvent.ACTION_UP) { } else if (keyEvent.getAction() == KeyEvent.ACTION_UP) {
mDocument.postKeyEvent(Office.KEY_RELEASE, getCharCode(keyEvent), getKeyCode(keyEvent)); mDocument.postKeyEvent(Document.KEY_EVENT_RELEASE, getCharCode(keyEvent), getKeyCode(keyEvent));
} }
} }
...@@ -401,7 +401,7 @@ public class LOKitTileProvider implements TileProvider { ...@@ -401,7 +401,7 @@ public class LOKitTileProvider implements TileProvider {
int x = (int) pixelToTwip(inDocument.x, mDPI); int x = (int) pixelToTwip(inDocument.x, mDPI);
int y = (int) pixelToTwip(inDocument.y, mDPI); int y = (int) pixelToTwip(inDocument.y, mDPI);
mDocument.postMouseEvent(type, x, y, numberOfClicks); mDocument.postMouseEvent(type, x, y, numberOfClicks, Document.MOUSE_BUTTON_LEFT, Document.KEYBOARD_MODIFIER_NONE);
} }
/** /**
...@@ -409,7 +409,7 @@ public class LOKitTileProvider implements TileProvider { ...@@ -409,7 +409,7 @@ public class LOKitTileProvider implements TileProvider {
*/ */
@Override @Override
public void mouseButtonDown(PointF documentCoordinate, int numberOfClicks) { public void mouseButtonDown(PointF documentCoordinate, int numberOfClicks) {
mouseButton(Document.MOUSE_BUTTON_DOWN, documentCoordinate, numberOfClicks); mouseButton(Document.MOUSE_EVENT_BUTTON_DOWN, documentCoordinate, numberOfClicks);
} }
/** /**
...@@ -417,12 +417,12 @@ public class LOKitTileProvider implements TileProvider { ...@@ -417,12 +417,12 @@ public class LOKitTileProvider implements TileProvider {
*/ */
@Override @Override
public void mouseButtonUp(PointF documentCoordinate, int numberOfClicks) { public void mouseButtonUp(PointF documentCoordinate, int numberOfClicks) {
mouseButton(Document.MOUSE_BUTTON_UP, documentCoordinate, numberOfClicks); mouseButton(Document.MOUSE_EVENT_BUTTON_UP, documentCoordinate, numberOfClicks);
} }
@Override @Override
public void postUnoCommand(String command) { public void postUnoCommand(String command, String arguments) {
mDocument.postUnoCommand(command); mDocument.postUnoCommand(command, arguments);
} }
private void setTextSelection(int type, PointF documentCoordinate) { private void setTextSelection(int type, PointF documentCoordinate) {
......
...@@ -114,7 +114,7 @@ public interface TileProvider { ...@@ -114,7 +114,7 @@ public interface TileProvider {
* *
* @param command - the .uno: command, like ".uno:Bold" * @param command - the .uno: command, like ".uno:Bold"
*/ */
void postUnoCommand(String command); void postUnoCommand(String command, String arguments);
/** /**
* Send text selection start coordinate. * Send text selection start coordinate.
......
...@@ -183,6 +183,14 @@ extern "C" SAL_JNI_EXPORT jint JNICALL Java_org_libreoffice_kit_Document_getPart ...@@ -183,6 +183,14 @@ extern "C" SAL_JNI_EXPORT jint JNICALL Java_org_libreoffice_kit_Document_getPart
return (jint) pDocument->pClass->getPart(pDocument); return (jint) pDocument->pClass->getPart(pDocument);
} }
extern "C" SAL_JNI_EXPORT jstring JNICALL Java_org_libreoffice_kit_Document_getPartPageRectangles
(JNIEnv* pEnv, jobject aObject)
{
LibreOfficeKitDocument* pDocument = getHandle<LibreOfficeKitDocument>(pEnv, aObject);
char* pRectangles = pDocument->pClass->getPartPageRectangles(pDocument);
return pEnv->NewStringUTF(pRectangles);
}
extern "C" SAL_JNI_EXPORT jint JNICALL Java_org_libreoffice_kit_Document_getParts extern "C" SAL_JNI_EXPORT jint JNICALL Java_org_libreoffice_kit_Document_getParts
(JNIEnv* pEnv, jobject aObject) (JNIEnv* pEnv, jobject aObject)
{ {
...@@ -277,22 +285,27 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_postKey ...@@ -277,22 +285,27 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_postKey
} }
extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_postMouseEvent extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_postMouseEvent
(JNIEnv* pEnv, jobject aObject, jint type, jint x, jint y, jint count) (JNIEnv* pEnv, jobject aObject, jint type, jint x, jint y, jint count, jint button, jint modifier)
{ {
LibreOfficeKitDocument* pDocument = getHandle<LibreOfficeKitDocument>(pEnv, aObject); LibreOfficeKitDocument* pDocument = getHandle<LibreOfficeKitDocument>(pEnv, aObject);
pDocument->pClass->postMouseEvent(pDocument, type, x, y, count, MOUSE_LEFT, 0); pDocument->pClass->postMouseEvent(pDocument, type, x, y, count, button, modifier);
} }
extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_postUnoCommand extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_postUnoCommand
(JNIEnv* pEnv, jobject aObject, jstring command) (JNIEnv* pEnv, jobject aObject, jstring command, jstring arguments)
{ {
LibreOfficeKitDocument* pDocument = getHandle<LibreOfficeKitDocument>(pEnv, aObject); LibreOfficeKitDocument* pDocument = getHandle<LibreOfficeKitDocument>(pEnv, aObject);
const char* pCommand = pEnv->GetStringUTFChars(command, NULL); const char* pCommand = pEnv->GetStringUTFChars(command, NULL);
const char* pArguments = nullptr;
if (arguments != NULL)
pArguments = pEnv->GetStringUTFChars(arguments, NULL);
pDocument->pClass->postUnoCommand(pDocument, pCommand, 0); pDocument->pClass->postUnoCommand(pDocument, pCommand, pArguments);
pEnv->ReleaseStringUTFChars(command, pCommand); pEnv->ReleaseStringUTFChars(command, pCommand);
if (arguments != NULL)
pEnv->ReleaseStringUTFChars(arguments, pArguments);
} }
extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_setTextSelection extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_setTextSelection
...@@ -302,6 +315,22 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_setText ...@@ -302,6 +315,22 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_setText
pDocument->pClass->setTextSelection(pDocument, type, x, y); pDocument->pClass->setTextSelection(pDocument, type, x, y);
} }
extern "C" SAL_JNI_EXPORT jstring JNICALL Java_org_libreoffice_kit_Document_getTextSelection
(JNIEnv* pEnv, jobject aObject, jstring mimeType)
{
LibreOfficeKitDocument* pDocument = getHandle<LibreOfficeKitDocument>(pEnv, aObject);
const char* pMimeType = pEnv->GetStringUTFChars(mimeType, NULL);
char* pUsedMimeType = 0;
char* pSelection = pDocument->pClass->getTextSelection(pDocument, pMimeType, &pUsedMimeType);
free(pUsedMimeType);
pEnv->ReleaseStringUTFChars(mimeType, pMimeType);
return pEnv->NewStringUTF(pSelection);
}
extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_setGraphicSelection extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_setGraphicSelection
(JNIEnv* pEnv, jobject aObject, jint type, jint x, jint y) (JNIEnv* pEnv, jobject aObject, jint type, jint x, jint y)
{ {
...@@ -316,4 +345,17 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_resetSe ...@@ -316,4 +345,17 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_kit_Document_resetSe
pDocument->pClass->resetSelection(pDocument); pDocument->pClass->resetSelection(pDocument);
} }
extern "C" SAL_JNI_EXPORT jstring JNICALL Java_org_libreoffice_kit_Document_getCommandValues
(JNIEnv* pEnv, jobject aObject, jstring command)
{
LibreOfficeKitDocument* pDocument = getHandle<LibreOfficeKitDocument>(pEnv, aObject);
const char* pCommand = pEnv->GetStringUTFChars(command, NULL);
char* pValue = pDocument->pClass->getCommandValues(pDocument, pCommand);
pEnv->ReleaseStringUTFChars(command, pCommand);
return pEnv->NewStringUTF(pValue);
}
/* 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