From e5bc7fa4e83b33fc3eee343e560a4f8cb91eacd6 Mon Sep 17 00:00:00 2001 From: Mert Tümer Date: Wed, 14 Mar 2018 19:19:56 +0300 Subject: tdf#96796 - Added clipboard actions for the Android Viewer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I52e134532ab70e765b6ccd929f189be84f9c9a90 Signed-off-by: Mert Tümer Reviewed-on: https://gerrit.libreoffice.org/51286 Tested-by: Jenkins Reviewed-by: Thorsten Behrens --- .../java/org/libreoffice/ToolbarController.java | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'android/source/src/java/org/libreoffice/ToolbarController.java') 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) { @@ -77,6 +85,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. */ @@ -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; } -- cgit