X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fasynctasks%2FPrepareSaveDialog.java;h=28c3e65606f366cb5d8121785100ceef4333469d;hb=6ea3e4ebd779594b45ad8f51cc40761bb6d89030;hp=9e8b1fd83b39d4e366afdbdc10e1582a3fe6eba6;hpb=725d158188aafb3b7f18dbff7da4d720bd687370;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/asynctasks/PrepareSaveDialog.java b/app/src/main/java/com/stoutner/privacybrowser/asynctasks/PrepareSaveDialog.java index 9e8b1fd8..28c3e656 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/asynctasks/PrepareSaveDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/asynctasks/PrepareSaveDialog.java @@ -1,5 +1,5 @@ /* - * Copyright © 2020 Soren Stoutner . + * Copyright © 2020-2021 Soren Stoutner . * * This file is part of Privacy Browser . * @@ -30,6 +30,8 @@ import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentManager; import com.stoutner.privacybrowser.R; +import com.stoutner.privacybrowser.activities.MainWebViewActivity; +import com.stoutner.privacybrowser.dataclasses.PendingDialog; import com.stoutner.privacybrowser.dialogs.SaveWebpageDialog; import com.stoutner.privacybrowser.helpers.ProxyHelper; @@ -41,14 +43,14 @@ import java.text.NumberFormat; public class PrepareSaveDialog extends AsyncTask { // Define weak references. - private WeakReference activityWeakReference; - private WeakReference contextWeakReference; - private WeakReference fragmentManagerWeakReference; + private final WeakReference activityWeakReference; + private final WeakReference contextWeakReference; + private final WeakReference fragmentManagerWeakReference; // Define the class variables. - private int saveType; - private String userAgent; - private boolean cookiesEnabled; + private final int saveType; + private final String userAgent; + private final boolean cookiesEnabled; private String urlString; // The public constructor. @@ -95,7 +97,7 @@ public class PrepareSaveDialog extends AsyncTask { String base64DataString = urlWithoutData.substring(urlWithoutData.indexOf(",") + 1); // Calculate the file size of the data URL. Each Base64 character represents 6 bits. - formattedFileSize = NumberFormat.getInstance().format(base64DataString.length() * 3 / 4) + " " + context.getString(R.string.bytes); + formattedFileSize = NumberFormat.getInstance().format(base64DataString.length() * 3L / 4) + " " + context.getString(R.string.bytes); // Set the file name according to the MIME type. fileNameString = context.getString(R.string.file) + "." + MimeTypeMap.getSingleton().getExtensionFromMimeType(urlMimeType); @@ -201,8 +203,14 @@ public class PrepareSaveDialog extends AsyncTask { // Instantiate the save dialog. DialogFragment saveDialogFragment = SaveWebpageDialog.saveWebpage(saveType, urlString, fileStringArray[0], fileStringArray[1], userAgent, cookiesEnabled); - // Show the save dialog. It must be named `save_dialog` so that the file picker can update the file name. - saveDialogFragment.show(fragmentManager, activity.getString(R.string.save_dialog)); + // Try to show the dialog. Sometimes the window is not active. + try { + // Show the save dialog. It must be named `save_dialog` so that the file picker can update the file name. + saveDialogFragment.show(fragmentManager, activity.getString(R.string.save_dialog)); + } catch (Exception exception) { + // Add the dialog to the pending dialog array list. It will be displayed in `onStart()`. + MainWebViewActivity.pendingDialogsArrayList.add(new PendingDialog(saveDialogFragment, activity.getString(R.string.save_dialog))); + } } // Content dispositions can contain other text besides the file name, and they can be in any order.