summaryrefslogtreecommitdiff
path: root/android/source/src/java/org/libreoffice
diff options
context:
space:
mode:
authorMert Tümer <merttumer7@gmail.com>2018-03-14 19:19:56 +0300
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2018-03-15 00:28:31 +0100
commite5bc7fa4e83b33fc3eee343e560a4f8cb91eacd6 (patch)
treeb58bf53390777dfd79ab36c62cd2d437625ad114 /android/source/src/java/org/libreoffice
parentb951cd126d0bcc950c71c069c7d2f4c210c4bcaf (diff)
tdf#96796 - Added clipboard actions for the Android Viewer
Change-Id: I52e134532ab70e765b6ccd929f189be84f9c9a90 Signed-off-by: Mert Tümer <merttumer7@gmail.com> Reviewed-on: https://gerrit.libreoffice.org/51286 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'android/source/src/java/org/libreoffice')
-rw-r--r--android/source/src/java/org/libreoffice/InvalidationHandler.java3
-rw-r--r--android/source/src/java/org/libreoffice/LOKitTileProvider.java21
-rw-r--r--android/source/src/java/org/libreoffice/TileProvider.java13
-rw-r--r--android/source/src/java/org/libreoffice/ToolbarController.java70
4 files changed, 107 insertions, 0 deletions
diff --git a/android/source/src/java/org/libreoffice/InvalidationHandler.java b/android/source/src/java/org/libreoffice/InvalidationHandler.java
index e411770976c9..eb22f6c8f3d3 100644
--- a/android/source/src/java/org/libreoffice/InvalidationHandler.java
+++ b/android/source/src/java/org/libreoffice/InvalidationHandler.java
@@ -452,6 +452,7 @@ public class InvalidationHandler implements Document.MessageCallback, Office.Mes
if (mContext.isSpreadsheet()) {
mDocumentOverlay.showHeaderSelection(null);
}
+ mContext.getToolbarController().showHideClipboardCutAndCopy(false);
} else {
List<RectF> rectangles = convertPayloadToRectangles(payload);
if (mState != OverlayState.SELECTION) {
@@ -462,6 +463,8 @@ public class InvalidationHandler implements Document.MessageCallback, Office.Mes
if (mContext.isSpreadsheet()) {
mDocumentOverlay.showHeaderSelection(rectangles.get(0));
}
+ String selectedText = mContext.getTileProvider().getTextSelection("");
+ mContext.getToolbarController().showClipboardActions(selectedText);
}
}
diff --git a/android/source/src/java/org/libreoffice/LOKitTileProvider.java b/android/source/src/java/org/libreoffice/LOKitTileProvider.java
index df5a7d780b78..4a8720cb9d01 100644
--- a/android/source/src/java/org/libreoffice/LOKitTileProvider.java
+++ b/android/source/src/java/org/libreoffice/LOKitTileProvider.java
@@ -604,6 +604,27 @@ class LOKitTileProvider implements TileProvider {
}
/**
+ * @param mimeType
+ * @return
+ */
+ @Override
+ public String getTextSelection(String mimeType) {
+ return mDocument.getTextSelection(mimeType);
+ }
+
+ /**
+ * paste
+ * @param mimeType
+ * @param data
+ * @return
+ */
+ @Override
+ public boolean paste(String mimeType, String data) {
+ return mDocument.paste(mimeType, data);
+ }
+
+
+ /**
* @see org.libreoffice.TileProvider#setGraphicSelectionStart(android.graphics.PointF)
*/
@Override
diff --git a/android/source/src/java/org/libreoffice/TileProvider.java b/android/source/src/java/org/libreoffice/TileProvider.java
index 71c27146e6f1..10d578337680 100644
--- a/android/source/src/java/org/libreoffice/TileProvider.java
+++ b/android/source/src/java/org/libreoffice/TileProvider.java
@@ -136,6 +136,19 @@ public interface TileProvider {
void setTextSelectionEnd(PointF documentCoordinate);
/**
+ * get selected text
+ * @param mimeType
+ */
+ String getTextSelection(String mimeType);
+
+ /**
+ * copy
+ * @param mimeType
+ * @param data
+ * @return
+ */
+ boolean paste(String mimeType, String data);
+ /**
* Send text selection reset coordinate.
* @param documentCoordinate
*/
diff --git a/android/source/src/java/org/libreoffice/ToolbarController.java b/android/source/src/java/org/libreoffice/ToolbarController.java
index 87a84f0878d1..21e3e5ca7be2 100644
--- a/android/source/src/java/org/libreoffice/ToolbarController.java
+++ b/android/source/src/java/org/libreoffice/ToolbarController.java
@@ -8,8 +8,12 @@
*/
package org.libreoffice;
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
import android.support.v7.widget.Toolbar;
import android.util.Log;
+import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
@@ -25,6 +29,9 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener {
private final Menu mMainMenu;
private boolean isEditModeOn = false;
+ private String clipboardText = null;
+ ClipboardManager clipboardManager;
+ ClipData clipData;
public ToolbarController(LibreOfficeMainActivity context, Toolbar toolbarTop) {
mToolbarTop = toolbarTop;
@@ -35,6 +42,7 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener {
switchToViewMode();
mMainMenu = mToolbarTop.getMenu();
+ clipboardManager = (ClipboardManager)mContext.getSystemService(Context.CLIPBOARD_SERVICE);
}
public void disableMenuItem(final int menuItemId, final boolean disabled) {
@@ -78,6 +86,48 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener {
}
/**
+ * Show clipboard Actions on the toolbar
+ * */
+ void showClipboardActions(final String value){
+ LOKitShell.getMainHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ if(value != null){
+ mMainMenu.setGroupVisible(R.id.group_edit_actions, false);
+ mMainMenu.setGroupVisible(R.id.group_edit_clipboard, true);
+ if(getEditModeStatus()){
+ showHideClipboardCutAndCopy(true);
+ } else {
+ mMainMenu.findItem(R.id.action_cut).setVisible(false);
+ mMainMenu.findItem(R.id.action_paste).setVisible(false);
+ }
+ clipboardText = value;
+ }
+ }
+ });
+ }
+
+ void hideClipboardActions(){
+ LOKitShell.getMainHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ mMainMenu.setGroupVisible(R.id.group_edit_actions, getEditModeStatus());
+ mMainMenu.setGroupVisible(R.id.group_edit_clipboard, false);
+ }
+ });
+ }
+
+ void showHideClipboardCutAndCopy(final boolean option){
+ LOKitShell.getMainHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ mMainMenu.findItem(R.id.action_copy).setVisible(option);
+ mMainMenu.findItem(R.id.action_cut).setVisible(option);
+ }
+ });
+ }
+
+ /**
* Change the toolbar to view mode.
*/
void switchToViewMode() {
@@ -141,6 +191,26 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener {
case R.id.action_add_worksheet:
mContext.addPart();
return true;
+ case R.id.action_back:
+ hideClipboardActions();
+ return true;
+ case R.id.action_copy:
+ LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:Copy"));
+ clipData = ClipData.newPlainText("clipboard data", clipboardText);
+ clipboardManager.setPrimaryClip(clipData);
+ Toast.makeText(mContext, mContext.getResources().getString(R.string.action_text_copied), Toast.LENGTH_SHORT).show();
+ return true;
+ case R.id.action_paste:
+ clipData = clipboardManager.getPrimaryClip();
+ ClipData.Item clipItem = clipData.getItemAt(0);
+ mContext.setDocumentChanged(true);
+ return mContext.getTileProvider().paste("text/plain;charset=utf-16", clipItem.getText().toString());
+ case R.id.action_cut:
+ clipData = ClipData.newPlainText("clipboard data", clipboardText);
+ clipboardManager.setPrimaryClip(clipData);
+ LOKitShell.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
+ mContext.setDocumentChanged(true);
+ return true;
}
return false;
}