diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogActivity.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogActivity.java index 8b46a85b37..aac06c7d90 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogActivity.java @@ -27,7 +27,7 @@ import androidx.lifecycle.ViewModelProvider; import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import org.signal.core.util.concurrent.SignalExecutors; +import org.signal.core.util.ThreadUtil; import org.signal.debuglogsviewer.DebugLogsViewer; import org.thoughtcrime.securesms.BaseActivity; import org.thoughtcrime.securesms.R; @@ -44,9 +44,9 @@ import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton; import java.util.ArrayList; import java.util.List; -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; public class SubmitDebugLogActivity extends BaseActivity { @@ -346,27 +346,29 @@ public class SubmitDebugLogActivity extends BaseActivity { private void subscribeToLogLines() { Disposable disposable = viewModel.getLogLinesObservable() - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(this::presentLines, throwable -> { + .observeOn(Schedulers.io()) + .subscribe(this::appendLines, throwable -> { // Handle error - this.progressCard.setVisibility(View.GONE); + ThreadUtil.runOnMain(() -> { + this.progressCard.setVisibility(View.GONE); + }); }); disposables.add(disposable); } - private void presentLines(@NonNull List lines) { - warningBanner.setVisibility(View.VISIBLE); - submitButton.setVisibility(View.VISIBLE); - - SignalExecutors.BOUNDED.execute(() -> { - StringBuilder lineBuilder = new StringBuilder(); - - for (String line : lines) { - lineBuilder.append(line).append("\n"); - } - - DebugLogsViewer.appendLines(logWebView, lineBuilder.toString()); + private void appendLines(@NonNull List lines) { + ThreadUtil.runOnMain(() -> { + warningBanner.setVisibility(View.VISIBLE); + submitButton.setVisibility(View.VISIBLE); }); + + StringBuilder lineBuilder = new StringBuilder(); + + for (String line : lines) { + lineBuilder.append(line).append("\n"); + } + + DebugLogsViewer.appendLines(logWebView, lineBuilder.toString()); } private void presentMode(@NonNull SubmitDebugLogViewModel.Mode mode) { diff --git a/debuglogs-viewer/lib/src/main/assets/debuglogs-viewer.js b/debuglogs-viewer/lib/src/main/assets/debuglogs-viewer.js index bfd47ebf01..f7b48a2377 100644 --- a/debuglogs-viewer/lib/src/main/assets/debuglogs-viewer.js +++ b/debuglogs-viewer/lib/src/main/assets/debuglogs-viewer.js @@ -220,6 +220,11 @@ function applyFilter() { editor.setValue(filtered, -1); } +function appendLines(lines) { + editor.session.insert({ row: editor.session.getLength(), column: 0}, lines); + logLines += lines; +} + function readLines(offset, limit) { const lines = logLines.split("\n") if (offset >= lines.length) { diff --git a/debuglogs-viewer/lib/src/main/java/org/signal/debuglogsviewer/DebugLogsViewer.kt b/debuglogs-viewer/lib/src/main/java/org/signal/debuglogsviewer/DebugLogsViewer.kt index 29f842c744..44f39e9433 100644 --- a/debuglogs-viewer/lib/src/main/java/org/signal/debuglogsviewer/DebugLogsViewer.kt +++ b/debuglogs-viewer/lib/src/main/java/org/signal/debuglogsviewer/DebugLogsViewer.kt @@ -46,7 +46,11 @@ object DebugLogsViewer { fun appendLines(webview: WebView, lines: String) { // Set the debug log lines val escaped = JSONObject.quote(lines) - ThreadUtil.runOnMain { webview.evaluateJavascript("editor.insert($escaped); logLines+=$escaped;", null) } + val latch = CountDownLatch(1) + ThreadUtil.runOnMain { + webview.evaluateJavascript("appendLines($escaped)") { latch.countDown() } + } + latch.await() } @JvmStatic