[Libreoffice-commits] online.git: android/lib
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Wed Jan 15 23:59:34 UTC 2020
android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java | 153 ++++------
1 file changed, 74 insertions(+), 79 deletions(-)
New commits:
commit 89a75eee710208f4997d052c272c12c22405496b
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Wed Jan 15 21:08:26 2020 +0100
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Thu Jan 16 00:59:15 2020 +0100
android: clipboard is sync. so exec. in the thread is not needed
As we changed the clipboard to be synchronous now, it's not needed
to execute copy/cut/paste actions in a separate thread anymore.
Also change WebView message interception, so we can execute
actions after a we send WebView a message. This is needed when
we copy/cut something and need to push the content to the android
clipboard and clipboard file.
Change-Id: I08b6ee55ca8bd7b958d348e257c19395ea39ac80
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86882
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
Tested-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
index 7698c9368..9c7729ef9 100644
--- a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
+++ b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
@@ -520,8 +520,11 @@ public class LOActivity extends AppCompatActivity {
public void postMobileMessage(String message) {
Log.d(TAG, "postMobileMessage: " + message);
- if (interceptMsgFromWebView(message)) {
+ String[] messageAndParameterArray= message.split(" ", 2); // the command and the rest (that can potentially contain spaces too)
+
+ if (beforeMessageFromWebView(messageAndParameterArray)) {
postMobileMessageNative(message);
+ afterMessageFromWebView(messageAndParameterArray);
}
// Going back to document browser on BYE (called when pressing the top left exit button)
@@ -568,8 +571,7 @@ public class LOActivity extends AppCompatActivity {
/**
* return true to pass the message to the native part or false to block the message
*/
- boolean interceptMsgFromWebView(String message) {
- String[] messageAndParam = message.split(" ", 2); // the command and the rest (that can potentially contain spaces too)
+ private boolean beforeMessageFromWebView(String[] messageAndParam) {
switch (messageAndParam[0]) {
case "PRINT":
mainHandler.post(new Runnable() {
@@ -589,10 +591,6 @@ public class LOActivity extends AppCompatActivity {
switch (messageAndParam[1]) {
case ".uno:Paste":
return performPaste();
- case ".uno:Copy":
- case ".uno:Cut":
- populateClipboard();
- break;
default:
break;
}
@@ -630,6 +628,23 @@ public class LOActivity extends AppCompatActivity {
return true;
}
+ private void afterMessageFromWebView(String[] messageAndParameterArray) {
+ switch (messageAndParameterArray[0]) {
+ case "uno":
+ switch (messageAndParameterArray[1]) {
+ case ".uno:Copy":
+ case ".uno:Cut":
+ populateClipboard();
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
private void initiatePrint() {
PrintManager printManager = (PrintManager) getSystemService(PRINT_SERVICE);
PrintDocumentAdapter printAdapter = new PrintAdapter(LOActivity.this);
@@ -689,45 +704,39 @@ public class LOActivity extends AppCompatActivity {
/// Needs to be executed after the .uno:Copy / Paste has executed
public final void populateClipboard()
{
- /// FIXME: in theory we can do better with URIs to temporary files and so on...
- nativeHandler.post(new Runnable() {
- @Override
- public void run() {
- File clipboardFile = new File(getApplicationContext().getCacheDir(), CLIPBOARD_FILE_PATH);
- if (clipboardFile.exists())
- clipboardFile.delete();
-
- LokClipboardData clipboardData = new LokClipboardData();
- if (!LOActivity.this.getClipboardContent(clipboardData))
- Log.e(TAG, "no clipboard to copy");
- else
- {
- clipboardData.writeToFile(clipboardFile);
-
- String text = clipboardData.getText();
- String html = clipboardData.getHtml();
-
- if (html != null) {
- int idx = html.indexOf("<meta name=\"generator\" content=\"");
-
- if (idx < 0)
- idx = html.indexOf("<meta http-equiv=\"content-type\" content=\"text/html;");
-
- if (idx >= 0) { // inject our magic
- StringBuffer newHtml = new StringBuffer(html);
- newHtml.insert(idx, "<meta name=\"origin\" content=\"" + getClipboardMagic() + "\"/>\n");
- html = newHtml.toString();
- }
-
- if (text == null || text.length() == 0)
- Log.i(TAG, "set text to clipoard with: text '" + text + "' and html '" + html + "'");
-
- clipData = ClipData.newHtmlText(ClipDescription.MIMETYPE_TEXT_HTML, text, html);
- clipboardManager.setPrimaryClip(clipData);
- }
- }
+ File clipboardFile = new File(getApplicationContext().getCacheDir(), CLIPBOARD_FILE_PATH);
+ if (clipboardFile.exists())
+ clipboardFile.delete();
+
+ LokClipboardData clipboardData = new LokClipboardData();
+ if (!LOActivity.this.getClipboardContent(clipboardData))
+ Log.e(TAG, "no clipboard to copy");
+ else
+ {
+ clipboardData.writeToFile(clipboardFile);
+
+ String text = clipboardData.getText();
+ String html = clipboardData.getHtml();
+
+ if (html != null) {
+ int idx = html.indexOf("<meta name=\"generator\" content=\"");
+
+ if (idx < 0)
+ idx = html.indexOf("<meta http-equiv=\"content-type\" content=\"text/html;");
+
+ if (idx >= 0) { // inject our magic
+ StringBuffer newHtml = new StringBuffer(html);
+ newHtml.insert(idx, "<meta name=\"origin\" content=\"" + getClipboardMagic() + "\"/>\n");
+ html = newHtml.toString();
}
- });
+
+ if (text == null || text.length() == 0)
+ Log.i(TAG, "set text to clipoard with: text '" + text + "' and html '" + html + "'");
+
+ clipData = ClipData.newHtmlText(ClipDescription.MIMETYPE_TEXT_HTML, text, html);
+ clipboardManager.setPrimaryClip(clipData);
+ }
+ }
}
/// Do the paste, and return true if we should short-circuit the paste locally
@@ -746,47 +755,33 @@ public class LOActivity extends AppCompatActivity {
return true;
} else {
Log.i(TAG, "clipboard comes from us - other instance: paste from clipboard file");
- nativeHandler.post(new Runnable() {
- @Override
- public void run() {
- File clipboardFile = new File(getApplicationContext().getCacheDir(), CLIPBOARD_FILE_PATH);
- LokClipboardData clipboardData = null;
- if (clipboardFile.exists()) {
- clipboardData = new LokClipboardData();
- clipboardData.loadFromFile(clipboardFile);
- }
- if (clipboardData != null) {
- LOActivity.this.setClipboardContent(clipboardData);
- LOActivity.this.postUnoCommand(".uno:Paste", null, false);
- } else {
- // Couldn't get data from the clipboard file, but we can still paste html
- byte[] htmlByteArray = html.getBytes(Charset.forName("UTF-8"));
- LOActivity.this.paste("text/html", htmlByteArray);
- }
- }
- });
- }
- } else {
- Log.i(TAG, "foreign html '" + html + "'");
- nativeHandler.post(new Runnable() {
- @Override
- public void run() {
+
+ File clipboardFile = new File(getApplicationContext().getCacheDir(), CLIPBOARD_FILE_PATH);
+ LokClipboardData clipboardData = null;
+ if (clipboardFile.exists()) {
+ clipboardData = new LokClipboardData();
+ clipboardData.loadFromFile(clipboardFile);
+ }
+ if (clipboardData != null) {
+ LOActivity.this.setClipboardContent(clipboardData);
+ LOActivity.this.postUnoCommand(".uno:Paste", null, false);
+ } else {
+ // Couldn't get data from the clipboard file, but we can still paste html
byte[] htmlByteArray = html.getBytes(Charset.forName("UTF-8"));
LOActivity.this.paste("text/html", htmlByteArray);
}
- });
+ }
+ } else {
+ Log.i(TAG, "foreign html '" + html + "'");
+ byte[] htmlByteArray = html.getBytes(Charset.forName("UTF-8"));
+ LOActivity.this.paste("text/html", htmlByteArray);
}
}
else if (clipDesc.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
final ClipData.Item clipItem = clipData.getItemAt(0);
- nativeHandler.post(new Runnable() {
- @Override
- public void run() {
- String text = clipItem.getText().toString();
- byte[] textByteArray = text.getBytes(Charset.forName("UTF-16"));
- LOActivity.this.paste("text/plain;charset=utf-16", textByteArray);
- }
- });
+ String text = clipItem.getText().toString();
+ byte[] textByteArray = text.getBytes(Charset.forName("UTF-16"));
+ LOActivity.this.paste("text/plain;charset=utf-16", textByteArray);
}
}
return false;
More information about the Libreoffice-commits
mailing list