]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/asynctasks/GetUrlSize.java
Redesign file access to work with the scoped storage. https://redmine.stoutner.com...
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / asynctasks / GetUrlSize.java
index b34f62e885937bf33ab2d81c2669ce0e29ed9a8f..f85952e270a6dfe247dd6167f6d71c029934d54b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2020 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2020-2021 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
  *
 
 package com.stoutner.privacybrowser.asynctasks;
 
-import android.app.AlertDialog;
 import android.content.Context;
 import android.os.AsyncTask;
 import android.webkit.CookieManager;
 import android.widget.TextView;
 
+import androidx.appcompat.app.AlertDialog;
+
 import com.stoutner.privacybrowser.R;
 import com.stoutner.privacybrowser.helpers.ProxyHelper;
 
-import java.io.IOException;
 import java.lang.ref.WeakReference;
 import java.net.HttpURLConnection;
 import java.net.Proxy;
@@ -36,17 +36,17 @@ import java.net.URL;
 import java.text.NumberFormat;
 
 public class GetUrlSize extends AsyncTask<String, Void, String> {
-    // Define a weak reference for the calling context and fragment.
-    private WeakReference<Context> contextWeakReference;
-    private WeakReference<AlertDialog> alertDialogWeakReference;
+    // Define weak references for the calling context and alert dialog.
+    private final WeakReference<Context> contextWeakReference;
+    private final WeakReference<AlertDialog> alertDialogWeakReference;
 
     // Define the class variables.
-    private String userAgent;
-    private boolean cookiesEnabled;
+    private final String userAgent;
+    private final boolean cookiesEnabled;
 
     // The public constructor.
     public GetUrlSize(Context context, AlertDialog alertDialog, String userAgent, boolean cookiesEnabled) {
-        // Populate the week references to the calling activity and fragment.
+        // Populate the week references for the context and alert dialog.
         contextWeakReference = new WeakReference<>(context);
         alertDialogWeakReference = new WeakReference<>(alertDialog);
 
@@ -69,7 +69,7 @@ public class GetUrlSize extends AsyncTask<String, Void, String> {
         // Initialize the formatted file size string.
         String formattedFileSize = context.getString(R.string.unknown_size);
 
-        // Because everything relating to requesting data from a webserver can throw errors, the entire section much catch `IOExceptions`.
+        // Because everything relating to requesting data from a webserver can throw errors, the entire section must catch exceptions.
         try {
             // Get the URL from the calling fragment.
             URL url = new URL(urlToSave[0]);
@@ -81,20 +81,20 @@ public class GetUrlSize extends AsyncTask<String, Void, String> {
             Proxy proxy = proxyHelper.getCurrentProxy(context);
 
             // Open a connection to the URL.  No data is actually sent at this point.
-            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(proxy);
+            HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection(proxy);
 
             // Add the user agent to the header property.
-            httpURLConnection.setRequestProperty("User-Agent", userAgent);
+            httpUrlConnection.setRequestProperty("User-Agent", userAgent);
 
             // Add the cookies if they are enabled.
             if (cookiesEnabled) {
-                // Ge the cookies for the current domain.
+                // Get the cookies for the current domain.
                 String cookiesString = CookieManager.getInstance().getCookie(url.toString());
 
                 // Only add the cookies if they are not null.
                 if (cookiesString != null) {
                     // Add the cookies to the header property.
-                    httpURLConnection.setRequestProperty("Cookie", cookiesString);
+                    httpUrlConnection.setRequestProperty("Cookie", cookiesString);
                 }
             }
 
@@ -103,19 +103,19 @@ public class GetUrlSize extends AsyncTask<String, Void, String> {
                 // Exit if the task has been cancelled.
                 if (isCancelled()) {
                     // Disconnect the HTTP URL connection.
-                    httpURLConnection.disconnect();
+                    httpUrlConnection.disconnect();
 
                     // Return the formatted file size string.
                     return formattedFileSize;
                 }
 
-                // Get the status code.
-                int responseCode = httpURLConnection.getResponseCode();
+                // Get the status code.  This initiates a network connection.
+                int responseCode = httpUrlConnection.getResponseCode();
 
                 // Exit if the task has been cancelled.
                 if (isCancelled()) {
                     // Disconnect the HTTP URL connection.
-                    httpURLConnection.disconnect();
+                    httpUrlConnection.disconnect();
 
                     // Return the formatted file size string.
                     return formattedFileSize;
@@ -127,15 +127,12 @@ public class GetUrlSize extends AsyncTask<String, Void, String> {
                     formattedFileSize = context.getString(R.string.invalid_url);
                 } else {  // The response code is not an error message.
                     // Get the content length header.
-                    String contentLengthString = httpURLConnection.getHeaderField("Content-Length");
-
-                    // Define the file size long.
-                    long fileSize;
+                    String contentLengthString = httpUrlConnection.getHeaderField("Content-Length");
 
-                    // Make sure the content length isn't null.
-                    if (contentLengthString != null) {  // The content length isn't null.
-                        // Convert the content length to a long.
-                        fileSize = Long.parseLong(contentLengthString);
+                    // Only process the content length string if it isn't null.
+                    if (contentLengthString != null) {
+                        // Convert the content length string to a long.
+                        long fileSize = Long.parseLong(contentLengthString);
 
                         // Format the file size.
                         formattedFileSize = NumberFormat.getInstance().format(fileSize) + " " + context.getString(R.string.bytes);
@@ -143,9 +140,9 @@ public class GetUrlSize extends AsyncTask<String, Void, String> {
                 }
             } finally {
                 // Disconnect the HTTP URL connection.
-                httpURLConnection.disconnect();
+                httpUrlConnection.disconnect();
             }
-        } catch (IOException exception) {
+        } catch (Exception exception) {
             // Set the formatted file size to indicate a bad URL.
             formattedFileSize = context.getString(R.string.invalid_url);
         }
@@ -157,7 +154,7 @@ public class GetUrlSize extends AsyncTask<String, Void, String> {
     // `onPostExecute()` operates on the UI thread.
     @Override
     protected void onPostExecute(String fileSize) {
-        // Get a handle for the context and alert dialog.
+        // Get a handle for the alert dialog.
         AlertDialog alertDialog = alertDialogWeakReference.get();
 
         // Abort if the alert dialog is gone.
@@ -168,6 +165,9 @@ public class GetUrlSize extends AsyncTask<String, Void, String> {
         // Get a handle for the file size text view.
         TextView fileSizeTextView = alertDialog.findViewById(R.id.file_size_textview);
 
+        // Remove the incorrect warning below that the file size text view might be null.
+        assert fileSizeTextView != null;
+
         // Update the file size.
         fileSizeTextView.setText(fileSize);
     }