/*
- * Copyright © 2020 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2020-2022 Soren Stoutner <soren@stoutner.com>.
*
- * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+ * This file is part of Privacy Browser Android <https://www.stoutner.com/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 <http://www.gnu.org/licenses/>.
+ * along with Privacy Browser Android. If not, see <http://www.gnu.org/licenses/>.
*/
package com.stoutner.privacybrowser.asynctasks;
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;
public class PrepareSaveDialog extends AsyncTask<String, Void, String[]> {
// Define weak references.
- private WeakReference<Activity> activityWeakReference;
- private WeakReference<Context> contextWeakReference;
- private WeakReference<FragmentManager> fragmentManagerWeakReference;
+ private final WeakReference<Activity> activityWeakReference;
+ private final WeakReference<Context> contextWeakReference;
+ private final WeakReference<FragmentManager> fragmentManagerWeakReference;
// Define the class variables.
- private int saveType;
- private String userAgent;
- private boolean cookiesEnabled;
+ 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;
}
// 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);
}
// 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.