X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2FDownloadFile.java;h=627335df711dc8c5528999c01b6091c5d7d10e01;hb=bc6574b86391ed9c731835c18de7bd0a10de19f8;hp=4bdc879abb113e08064898a44e442799129925ad;hpb=a45494e763affaa93f42927ee58f45803e1ee9db;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/DownloadFile.java b/app/src/main/java/com/stoutner/privacybrowser/DownloadFile.java index 4bdc879a..627335df 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/DownloadFile.java +++ b/app/src/main/java/com/stoutner/privacybrowser/DownloadFile.java @@ -19,10 +19,12 @@ package com.stoutner.privacybrowser; -import android.app.Activity; +import android.annotation.SuppressLint; import android.app.Dialog; import android.app.DialogFragment; +import android.content.Context; import android.content.DialogInterface; +import android.net.Uri; import android.os.Bundle; // `android.support.v7.app.AlertDialog` uses more of the horizontal screen real estate versus `android.app.AlertDialog's` smaller width. import android.support.v7.app.AlertDialog; @@ -45,13 +47,12 @@ public class DownloadFile extends DialogFragment { // Create `argumentsBundle`. Bundle argumentsBundle = new Bundle(); - // If `contentDisposition` is empty, use Android's standard string of `downloadfile.bin`. String fileNameString; - if (contentDisposition.isEmpty()) { - fileNameString = "downloadfile.bin"; - } else { - // Extract `fileNameString` from `contentDisposition` using the substring beginning after `filename="` and ending one character before the end of `contentDisposition`. + if (!contentDisposition.isEmpty()) { // Extract `fileNameString` from `contentDisposition` using the substring beginning after `filename="` and ending one character before the end of `contentDisposition`. fileNameString = contentDisposition.substring(contentDisposition.indexOf("filename=\"") + 10, contentDisposition.length() - 1); + } else { // `contentDisposition` is empty, so use the last path segment of the URL as the file name. + Uri downloadUri = Uri.parse(urlString); + fileNameString = downloadUri.getLastPathSegment(); } // Convert `contentLength` to MB and store it in `fileSizeString`. `%.3g` displays the three most significant digits. @@ -87,15 +88,18 @@ public class DownloadFile extends DialogFragment { private DownloadFileListener downloadFileListener; // Check to make sure tha the parent activity implements the listener. - public void onAttach(Activity parentActivity) { - super.onAttach(parentActivity); + @Override + public void onAttach(Context context) { + super.onAttach(context); try { - downloadFileListener = (DownloadFileListener) parentActivity; + downloadFileListener = (DownloadFileListener) context; } catch (ClassCastException exception) { - throw new ClassCastException(parentActivity.toString() + " must implement DownloadFileListener."); + throw new ClassCastException(context.toString() + " must implement DownloadFileListener."); } } + // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`. + @SuppressLint("InflateParams") @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Get the activity's layout inflater. @@ -103,7 +107,7 @@ public class DownloadFile extends DialogFragment { // Use `AlertDialog.Builder` to create the `AlertDialog`. `R.style.lightAlertDialog` formats the color of the button text. AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.LightAlertDialog); - dialogBuilder.setTitle(R.string.file_download); + dialogBuilder.setTitle(R.string.save_as); // The parent view is `null` because it will be assigned by `AlertDialog`. dialogBuilder.setView(layoutInflater.inflate(R.layout.download_file_dialog, null)); @@ -128,6 +132,9 @@ public class DownloadFile extends DialogFragment { // Create an `AlertDialog` from the `AlertDialog.Builder`. final AlertDialog alertDialog = dialogBuilder.create(); + // Remove the warning below that `setSoftInputMode` might produce `java.lang.NullPointerException`. + assert alertDialog.getWindow() != null; + // Show the keyboard when `alertDialog` is displayed on the screen. alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); @@ -136,12 +143,12 @@ public class DownloadFile extends DialogFragment { // Set the text for `downloadFileSizeTextView`. TextView downloadFileSizeTextView = (TextView) alertDialog.findViewById(R.id.download_file_size); - assert downloadFileSizeTextView != null; // Remove the warning of the following line that `downloadFileSizeTextView` might be null. + assert downloadFileSizeTextView != null; // Remove the warning on the following line that `downloadFileSizeTextView` might be `null`. downloadFileSizeTextView.setText(fileSize); // Set the text for `downloadFileNameTextView`. EditText downloadFileNameTextView = (EditText) alertDialog.findViewById(R.id.download_file_name); - assert downloadFileNameTextView != null; // Remove the warning on the following line that `downloadFileNameTextView` might be null. + assert downloadFileNameTextView != null; // Remove the warning on the following line that `downloadFileNameTextView` might be `null`. downloadFileNameTextView.setText(downloadFileName); // Allow the `enter` key on the keyboard to save the file from `downloadFileNameTextView`.