]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/commitdiff
Fix possibly blocking OutputStream calls. https://redmine.stoutner.com/issues/914
authorSoren Stoutner <soren@stoutner.com>
Mon, 31 Oct 2022 23:24:59 +0000 (16:24 -0700)
committerSoren Stoutner <soren@stoutner.com>
Mon, 31 Oct 2022 23:24:59 +0000 (16:24 -0700)
app/src/main/assets/de/guide_tracking_ids.html
app/src/main/assets/en/guide_tracking_ids.html
app/src/main/assets/es/guide_tracking_ids.html
app/src/main/assets/fr/guide_tracking_ids.html
app/src/main/assets/it/guide_tracking_ids.html
app/src/main/assets/pt-rBR/guide_tracking_ids.html
app/src/main/assets/ru/guide_tracking_ids.html
app/src/main/assets/tr/guide_tracking_ids.html
app/src/main/java/com/stoutner/privacybrowser/activities/LogcatActivity.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/AboutVersionFragment.kt

index d5e00d401d629aea281e44d80791b42fd41d0656..2d19367a1002feaf11835f6bbc3985ad2404282d 100644 (file)
@@ -54,6 +54,6 @@
 
         <p>Die Android-Systemkomponente WebView sendet mit jeder Anfrage einen <a href="https://www.stoutner.com/the-x-requested-with-header/">X-Requested-With-Header</a> an den betreffenden Internet-Server.
             Der Wert im X-Requested-With-Header entspricht dabei der Applikations-ID - im Fall von Privacy Browser <code>com.stoutner.privacybrowser.standard</code>.
-            This can be disabled by using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
+            This can be disabled using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
     </body>
 </html>
index 54e7f8aa0c453ef248ae82080424086a2e487ccd..9b12a1c42b6f2ce5675403ad454c5d29725638ce 100644 (file)
@@ -47,6 +47,6 @@
 
         <p>Google programmed Android’s WebView to send an <a href="https://www.stoutner.com/the-x-requested-with-header/">X-Requested-With header</a> with every request.
             The value of the X-Requested-With header is set to the application ID, which in the case of Privacy Browser is <code>com.stoutner.privacybrowser.standard</code>.
-            This can be disabled by using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
+            This can be disabled using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
     </body>
 </html>
index fdafda6ecd5818801542b3e6e76db86dc09108f4..0f82a1bd06dfd5d7cb7169b0b6f61f77c1725115 100644 (file)
@@ -49,6 +49,6 @@
 
         <p>Google ha programado WebView de Android para que envíe una <a href="https://www.stoutner.com/the-x-requested-with-header/">cabecera X-Requested-With</a> con cada solicitud.
             El valor de la cabecera X-Requested-With se establece con el ID de la aplicación, que en el caso de Navegador Privado es <code>com.stoutner.privacybrowser.standard</code>.
-            This can be disabled by using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
+            This can be disabled using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
     </body>
 </html>
index 371d591c792087e0a459df0808e2fb0e4e59559a..5ca74ecfe9b5807aaf89f05a921dd07b7347f18f 100644 (file)
@@ -49,6 +49,6 @@
 
         <p>Google a programmé WebView d'Android pour envoyer un <a href="https://www.stoutner.com/the-x-requested-with-header/">en-tête X-Requested-With</a> avec chaque requête.
             La valeur de l'en-tête X-Requested-With est définie par l'ID de l'application, qui dans le cas de Privacy Browser est <code>com.stoutner.privacybrowser.standard</code>.
-            This can be disabled by using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
+            This can be disabled using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
     </body>
 </html>
\ No newline at end of file
index 9f5358de5c294e4948a328495badf628c326a8e8..63b180383a327151126d6f55fc42d8119e3d1058 100644 (file)
@@ -49,6 +49,6 @@
 
         <p>Google ha programmato la webview di Android per inviare <a href="https://www.stoutner.com/the-x-requested-with-header/">un'intestazione X-Requested-With</a> con ogni richiesta.
             Il valore dell'intestazione X-Requested-With è impostato sulla ID della applicazione, ovvero nel caso di Privacy Browser, è <code>com.stoutner.privacybrowser.standard</code>.
-            This can be disabled by using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
+            This can be disabled using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
     </body>
 </html>
index 7da4fe986b652c8eaa60bf066cedb179c61645a5..6c2318066a504a08c0c4711eba40a81fb743ed7a 100644 (file)
@@ -50,6 +50,6 @@
 
         <p>Google programmed Android’s WebView to send an <a href="https://www.stoutner.com/the-x-requested-with-header/">X-Requested-With header</a> with every request.
             The value of the X-Requested-With header is set to the application ID, which in the case of Privacy Browser is <code>com.stoutner.privacybrowser.standard</code>.
-            This can be disabled by using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
+            This can be disabled using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
     </body>
 </html>
index fe18e41e6ea5be08b437e15a9b01fc508734eb14..2a7aa629bb06b8e41e3bc05b031b52ce79bc0467 100644 (file)
@@ -47,6 +47,6 @@
 
         <p>Google запрограммировал WebView в Android на отправку <<a href="https://www.stoutner.com/the-x-requested-with-header/">заголовка X-Requested-With</a> при каждом запросе.
             Значение заголовка X-Requested-With устанавливается как идентификатор приложения, который в случае Privacy Browser является <code>com.stoutner.privacybrowser.standard</code>.
-            This can be disabled by using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
+            This can be disabled using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
     </body>
 </html>
index ef2c6f0e023718b001b0ac474f1aaf60882dfd6c..2388e855c9f1627d7ee984b6b24d69f6731dc81b 100644 (file)
@@ -47,6 +47,6 @@
 
         <p>Google programmed Android’s WebView to send an <a href="https://www.stoutner.com/the-x-requested-with-header/">X-Requested-With header</a> with every request.
             The value of the X-Requested-With header is set to the application ID, which in the case of Privacy Browser is <code>com.stoutner.privacybrowser.standard</code>.
-            This can be disabled by using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
+            This can be disabled using <a href="https://www.stoutner.com/webview-devtools/">WebView's DevTools</a>.</p>
     </body>
 </html>
index 75efc825baf53913e7fa70d833df37ebea2f46a2..25c2bfc6e3d3a1af9b47b0ba8bd5f482b6660be3 100644 (file)
@@ -43,6 +43,11 @@ import com.stoutner.privacybrowser.BuildConfig
 
 import com.stoutner.privacybrowser.R
 
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
 import java.io.BufferedReader
 import java.io.IOException
 import java.io.InputStreamReader
@@ -72,11 +77,16 @@ class LogcatActivity : AppCompatActivity() {
                 // Open an output stream.
                 val outputStream = contentResolver.openOutputStream(fileUri)!!
 
-                // Write the logcat string to the output stream.
-                outputStream.write(logcatString.toByteArray(StandardCharsets.UTF_8))
+                // Save the logcat using a coroutine with Dispatchers.IO.
+                CoroutineScope(Dispatchers.Main).launch {
+                    withContext(Dispatchers.IO) {
+                        // Write the logcat string to the output stream.
+                        outputStream.write(logcatString.toByteArray(StandardCharsets.UTF_8))
 
-                // Close the output stream.
-                outputStream.close()
+                        // Close the output stream.
+                        outputStream.close()
+                    }
+                }
 
                 // Initialize the file name string from the file URI last path segment.
                 var fileNameString = fileUri.lastPathSegment
index c4c522741f892e56f80ee0930bc4a7a8b9856d14..0078fcc1fab5039c533b07a05064234b4da77b3b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2016-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -55,6 +55,11 @@ import com.stoutner.privacybrowser.R
 import com.stoutner.privacybrowser.BuildConfig
 import com.stoutner.privacybrowser.asynctasks.SaveAboutVersionImage
 
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
 import java.io.ByteArrayInputStream
 import java.io.InputStream
 import java.lang.Exception
@@ -165,11 +170,16 @@ class AboutVersionFragment : Fragment() {
                 // Open an output stream.
                 val outputStream = requireActivity().contentResolver.openOutputStream(fileUri)!!
 
-                // Write the about version string to the output stream.
-                outputStream.write(aboutVersionString.toByteArray(StandardCharsets.UTF_8))
+                // Save about version using a coroutine with Dispatchers.IO.
+                CoroutineScope(Dispatchers.Main).launch {
+                    withContext(Dispatchers.IO) {
+                        // Write the about version string to the output stream.
+                        outputStream.write(aboutVersionString.toByteArray(StandardCharsets.UTF_8))
 
-                // Close the output stream.
-                outputStream.close()
+                        // Close the output stream.
+                        outputStream.close()
+                    }
+                }
 
                 // Initialize the file name string from the file URI last path segment.
                 var fileNameString = fileUri.lastPathSegment
@@ -895,4 +905,4 @@ class AboutVersionFragment : Fragment() {
         // Return the string.
         return aboutVersionStringBuilder.toString()
     }
-}
\ No newline at end of file
+}