X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fasynctasks%2FPrepareSaveDialog.java;h=b869099d4d65b5cce1f5079c0fb5d6347e2048ed;hb=8142ac5fc2489de735de4b6fa21a1eae733ccfce;hp=a7d44954a6dcb2539957dc23159f1f835b63d031;hpb=641d15ace34579762580ed8297f324133354499b;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 a7d44954..b869099d 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/asynctasks/PrepareSaveDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/asynctasks/PrepareSaveDialog.java @@ -1,20 +1,20 @@ /* - * Copyright © 2020-2021 Soren Stoutner . + * Copyright © 2020-2022 Soren Stoutner . * - * This file is part of Privacy Browser . + * This file is part of Privacy Browser Android . * - * Privacy Browser is free software: you can redistribute it and/or modify + * Privacy Browser Android is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * Privacy Browser is distributed in the hope that it will be useful, + * Privacy Browser Android is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with Privacy Browser. If not, see . + * along with Privacy Browser Android. If not, see . */ package com.stoutner.privacybrowser.asynctasks; @@ -30,7 +30,9 @@ import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentManager; import com.stoutner.privacybrowser.R; -import com.stoutner.privacybrowser.dialogs.SaveWebpageDialog; +import com.stoutner.privacybrowser.activities.MainWebViewActivity; +import com.stoutner.privacybrowser.dataclasses.PendingDialog; +import com.stoutner.privacybrowser.dialogs.SaveDialog; import com.stoutner.privacybrowser.helpers.ProxyHelper; import java.lang.ref.WeakReference; @@ -46,20 +48,18 @@ public class PrepareSaveDialog extends AsyncTask { private final WeakReference fragmentManagerWeakReference; // Define the class variables. - private final int saveType; private final String userAgent; private final boolean cookiesEnabled; private String urlString; // The public constructor. - public PrepareSaveDialog(Activity activity, Context context, FragmentManager fragmentManager, int saveType, String userAgent, boolean cookiesEnabled) { + public PrepareSaveDialog(Activity activity, Context context, FragmentManager fragmentManager, String userAgent, boolean cookiesEnabled) { // Populate the weak references. activityWeakReference = new WeakReference<>(activity); contextWeakReference = new WeakReference<>(context); fragmentManagerWeakReference = new WeakReference<>(fragmentManager); // Store the class variables. - this.saveType = saveType; this.userAgent = userAgent; this.cookiesEnabled = cookiesEnabled; } @@ -88,14 +88,14 @@ public class PrepareSaveDialog extends AsyncTask { // Remove `data:` from the beginning of the URL. String urlWithoutData = urlString.substring(5); - // Get the URL MIME type, which end with a `;`. + // Get the URL MIME type, which ends with a `;`. String urlMimeType = urlWithoutData.substring(0, urlWithoutData.indexOf(";")); // Get the Base64 data, which begins after a `,`. 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); @@ -198,22 +198,17 @@ public class PrepareSaveDialog extends AsyncTask { return; } - // Prevent the dialog from displaying if the app window is not visible. - // The async task continues to function even when the app is paused. Attempting to display a dialog in that state leads to a crash. - while (!activity.getWindow().isActive()) { - try { - // The window is not active. Wait 1 second. - wait(1000); - } catch (InterruptedException e) { - // Do nothing. - } - } - // 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)); + DialogFragment saveDialogFragment = SaveDialog.saveUrl(urlString, fileStringArray[0], fileStringArray[1], userAgent, cookiesEnabled); + + // 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.