diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2020-03-17 21:06:50 +0000 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2020-03-18 11:27:42 +0100 |
commit | 10c293d014f3d95f5238a01d4071c0774f5a7a0d (patch) | |
tree | 36c4e650d70ce79026c1b82a1fbf22aeba32b8c2 /android | |
parent | a47a09f471a65a0e8226ecf031f39e61c6301383 (diff) |
android: use Java object serialization instead of JSON.
This is incredibly quicker, JSON serialization was the bulk of the
performance issue, and took handful of seconds for a chart.
Change-Id: I51bebae6324c3d466f843ee737b051b911cd5fff
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/90673
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'android')
3 files changed, 29 insertions, 32 deletions
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 4070f955f..54e6363ce 100644 --- a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java +++ b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java @@ -56,6 +56,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.BufferedWriter; import java.net.URI; import java.net.URISyntaxException; import java.nio.ByteBuffer; @@ -1105,10 +1106,9 @@ public class LOActivity extends AppCompatActivity { File clipboardFile = new File(getApplicationContext().getCacheDir(), CLIPBOARD_FILE_PATH); LokClipboardData clipboardData = null; - if (clipboardFile.exists()) { - clipboardData = new LokClipboardData(); - clipboardData.loadFromFile(clipboardFile); - } + if (clipboardFile.exists()) + clipboardData = LokClipboardData.createFromFile(clipboardFile); + if (clipboardData != null) { LOActivity.this.setClipboardContent(clipboardData); LOActivity.this.postUnoCommand(".uno:Paste", null, false); diff --git a/android/lib/src/main/java/org/libreoffice/androidlib/lok/LokClipboardData.java b/android/lib/src/main/java/org/libreoffice/androidlib/lok/LokClipboardData.java index 3d98b5dfe..85fc62710 100644 --- a/android/lib/src/main/java/org/libreoffice/androidlib/lok/LokClipboardData.java +++ b/android/lib/src/main/java/org/libreoffice/androidlib/lok/LokClipboardData.java @@ -4,17 +4,21 @@ import android.util.Base64; import android.util.JsonReader; import android.util.JsonWriter; +import java.io.Serializable; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; -import java.io.FileWriter; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -public class LokClipboardData { +public class LokClipboardData implements Serializable { public ArrayList<LokClipboardEntry> clipboardEntries = new ArrayList<LokClipboardEntry>(); public String getText() { @@ -37,16 +41,11 @@ public class LokClipboardData { public boolean writeToFile(File file) { try { - FileWriter fileWriter = new FileWriter(file.getAbsoluteFile()); - JsonWriter writer = new JsonWriter(fileWriter); - writer.setIndent(" "); - writer.beginObject(); - for (LokClipboardEntry entry : clipboardEntries) { - writer.name(entry.mime); - writer.value(Base64.encodeToString(entry.data, Base64.DEFAULT)); - } - writer.endObject(); - writer.close(); + FileOutputStream fileStream = new FileOutputStream(file.getAbsoluteFile()); + ObjectOutputStream oos = new ObjectOutputStream(fileStream); + oos.writeObject(this); + oos.close(); + fileStream.close(); } catch (IOException e) { e.printStackTrace(); return false; @@ -54,25 +53,21 @@ public class LokClipboardData { return true; } - public boolean loadFromFile(File file) { + public static LokClipboardData createFromFile(File file) { try { - clipboardEntries.clear(); - - FileReader fileReader= new FileReader(file.getAbsoluteFile()); - JsonReader reader = new JsonReader(fileReader); - reader.beginObject(); - while (reader.hasNext()) { - LokClipboardEntry entry = new LokClipboardEntry(); - entry.mime = reader.nextName(); - entry.data = Base64.decode(reader.nextString(), Base64.DEFAULT); - clipboardEntries.add(entry); - } - reader.endObject(); + FileInputStream fileStream = new FileInputStream(file.getAbsoluteFile()); + ObjectInputStream ois = new ObjectInputStream(fileStream); + LokClipboardData data = (LokClipboardData)ois.readObject(); + ois.close(); + fileStream.close(); + return data; } catch (IOException e) { e.printStackTrace(); - return false; + return null; + } catch (ClassNotFoundException e) { + e.printStackTrace(); + return null; } - return true; } public LokClipboardEntry getBest() { diff --git a/android/lib/src/main/java/org/libreoffice/androidlib/lok/LokClipboardEntry.java b/android/lib/src/main/java/org/libreoffice/androidlib/lok/LokClipboardEntry.java index 3593f0394..c1c01a657 100644 --- a/android/lib/src/main/java/org/libreoffice/androidlib/lok/LokClipboardEntry.java +++ b/android/lib/src/main/java/org/libreoffice/androidlib/lok/LokClipboardEntry.java @@ -1,6 +1,8 @@ package org.libreoffice.androidlib.lok; -public class LokClipboardEntry { +import java.io.Serializable; + +public class LokClipboardEntry implements Serializable { public String mime; public byte[] data; } |