[Libreoffice-commits] core.git: android/source
Michael Weghorn (via logerrit)
logerrit at kemper.freedesktop.org
Fri Apr 16 06:48:26 UTC 2021
android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java | 69 +++++-----
1 file changed, 38 insertions(+), 31 deletions(-)
New commits:
commit a2b4564d719e6efeb614052b9c833991e447c68c
Author: Michael Weghorn <m.weghorn at posteo.de>
AuthorDate: Thu Apr 15 08:38:46 2021 +0200
Commit: Michael Weghorn <m.weghorn at posteo.de>
CommitDate: Fri Apr 16 08:47:38 2021 +0200
android: Extract copying Uri to stream in thread to separate method
This essentially extracts what
commit 7f838b73e85eb6f0a1dce4647650a5cf5f34ccd2
Date: Fri Mar 19 15:46:36 2021 +0100
tdf#129833 android: Move reading file to separate thread
introduced into a separate helper method.
Change-Id: Ic70ba9f2e2bc125415ff1b3fa3375c3389181c43
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114123
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>
diff --git a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
index a3f62601c1c4..d97719afb726 100644
--- a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
+++ b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
@@ -282,7 +282,6 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
}
private boolean copyFileToTemp() {
- final ContentResolver contentResolver = getContentResolver();
// CSV files need a .csv suffix to be opened in Calc.
String suffix = null;
String intentType = getIntent().getType();
@@ -293,36 +292,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
try {
mTempFile = File.createTempFile("LibreOffice", suffix, this.getCacheDir());
final FileOutputStream outputStream = new FileOutputStream(mTempFile);
- // need to run copy operation in a separate thread, since network access is not
- // allowed from main thread, but that may happen here when underlying
- // DocumentsProvider (like the NextCloud one) does that
- class CopyThread extends Thread {
- /** Whether copy operation was successful. */
- private boolean result = false;
-
- @Override
- public void run() {
- result = false;
- try {
- InputStream inputStream = contentResolver.openInputStream(mDocumentUri);
- result = copyStream(inputStream, outputStream);
- } catch (IOException e) {
- e.printStackTrace();
- return;
- }
- }
- };
- CopyThread copyThread = new CopyThread();
- copyThread.start();
- try {
- // wait for copy operation to finish
- // NOTE: might be useful to add some indicator in UI for long copy operations involving network...
- copyThread.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-
- return copyThread.result;
+ return copyUriToStream(mDocumentUri, outputStream);
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
@@ -915,6 +885,43 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
}
}
+ /**
+ * Copies everything from the given Uri to the given OutputStream
+ * and closes the OutputStream in the end.
+ * The copy operation runs in a separate thread, but the method only returns
+ * after the thread has finished its execution.
+ * This can be used to copy in a blocking way when network access is involved,
+ * which is not allowed from the main thread, but that may happen when an underlying
+ * DocumentsProvider (like the NextCloud one) does network access.
+ */
+ private boolean copyUriToStream(final Uri inputUri, final OutputStream outputStream) {
+ class CopyThread extends Thread {
+ /** Whether copy operation was successful. */
+ private boolean result = false;
+
+ @Override
+ public void run() {
+ final ContentResolver contentResolver = getContentResolver();
+ try {
+ InputStream inputStream = contentResolver.openInputStream(inputUri);
+ result = copyStream(inputStream, outputStream);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ CopyThread copyThread = new CopyThread();
+ copyThread.start();
+ try {
+ // wait for copy operation to finish
+ // NOTE: might be useful to add some indicator in UI for long copy operations involving network...
+ copyThread.join();
+ } catch(InterruptedException e) {
+ e.printStackTrace();
+ }
+ return copyThread.result;
+ }
+
public void showCustomStatusMessage(String message){
Snackbar.make(mDrawerLayout, message, Snackbar.LENGTH_LONG).show();
}
More information about the Libreoffice-commits
mailing list