X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fdialogs%2FEditBookmarkDialog.java;h=daeb1d64a578a27ca4d3263329c1c37b21b77121;hp=6eddfc947dec5f707a12f36b764e8d15d48a1afc;hb=ff636c77836983a078f33e60616204518dab61d1;hpb=fe788514a50a591f9722ededc13e608ceb268bb8 diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/EditBookmarkDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/EditBookmarkDialog.java index 6eddfc94..daeb1d64 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/EditBookmarkDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/EditBookmarkDialog.java @@ -46,19 +46,15 @@ import com.stoutner.privacybrowser.R; import com.stoutner.privacybrowser.activities.MainWebViewActivity; import com.stoutner.privacybrowser.helpers.BookmarksDatabaseHelper; +import java.io.ByteArrayOutputStream; + public class EditBookmarkDialog extends DialogFragment { - // Instantiate the class variables. + // Define the edit bookmark listener. private EditBookmarkListener editBookmarkListener; - private EditText nameEditText; - private EditText urlEditText; - private RadioButton newIconRadioButton; - private Button editButton; - private String currentName; - private String currentUrl; // The public interface is used to send information back to the parent activity. public interface EditBookmarkListener { - void onSaveBookmark(DialogFragment dialogFragment, int selectedBookmarkDatabaseId); + void onSaveBookmark(DialogFragment dialogFragment, int selectedBookmarkDatabaseId, Bitmap favoriteIconBitmap); } public void onAttach(Context context) { @@ -70,16 +66,28 @@ public class EditBookmarkDialog extends DialogFragment { } // Store the database ID in the arguments bundle. - public static EditBookmarkDialog bookmarkDatabaseId(int databaseId) { - // Create a bundle. - Bundle bundle = new Bundle(); + public static EditBookmarkDialog bookmarkDatabaseId(int databaseId, Bitmap favoriteIconBitmap) { + // Create a favorite icon byte array output stream. + ByteArrayOutputStream favoriteIconByteArrayOutputStream = new ByteArrayOutputStream(); + + // Convert the favorite icon to a PNG and place it in the byte array output stream. `0` is for lossless compression (the only option for a PNG). + favoriteIconBitmap.compress(Bitmap.CompressFormat.PNG, 0, favoriteIconByteArrayOutputStream); + + // Convert the byte array output stream to a byte array. + byte[] favoriteIconByteArray = favoriteIconByteArrayOutputStream.toByteArray(); + + // Create an arguments bundle. + Bundle argumentsBundle = new Bundle(); - // Store the bookmark database ID in the bundle. - bundle.putInt("Database ID", databaseId); + // Store the variables in the bundle. + argumentsBundle.putInt("database_id", databaseId); + argumentsBundle.putByteArray("favorite_icon_byte_array", favoriteIconByteArray); - // Add the bundle to the dialog. + // Create a new instance of the dialog. EditBookmarkDialog editBookmarkDialog = new EditBookmarkDialog(); - editBookmarkDialog.setArguments(bundle); + + // Add the arguments bundle to the dialog. + editBookmarkDialog.setArguments(argumentsBundle); // Return the new dialog. return editBookmarkDialog; @@ -90,11 +98,23 @@ public class EditBookmarkDialog extends DialogFragment { @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { - // Remove the incorrect lint warning that `getInt()` might be null. - assert getArguments() != null; + // Get the arguments. + Bundle arguments = getArguments(); + + // Remove the incorrect lint warning below that the arguments might be null. + assert arguments != null; // Store the bookmark database ID in the class variable. - int selectedBookmarkDatabaseId = getArguments().getInt("Database ID"); + int selectedBookmarkDatabaseId = arguments.getInt("database_id"); + + // Get the favorite icon byte array. + byte[] favoriteIconByteArray = arguments.getByteArray("favorite_icon_byte_array"); + + // Remove the incorrect lint warning below that the favorite icon byte array might be null. + assert favoriteIconByteArray != null; + + // Convert the favorite icon byte array to a bitmap. + Bitmap favoriteIconBitmap = BitmapFactory.decodeByteArray(favoriteIconByteArray, 0, favoriteIconByteArray.length); // Initialize the database helper. The `0` specifies a database version, but that is ignored and set instead using a constant in `BookmarksDatabaseHelper`. BookmarksDatabaseHelper bookmarksDatabaseHelper = new BookmarksDatabaseHelper(getContext(), null, null, 0); @@ -130,7 +150,7 @@ public class EditBookmarkDialog extends DialogFragment { // Set the save button listener. dialogBuilder.setPositiveButton(R.string.save, (DialogInterface dialog, int which) -> { // Return the dialog fragment to the parent activity. - editBookmarkListener.onSaveBookmark(EditBookmarkDialog.this, selectedBookmarkDatabaseId); + editBookmarkListener.onSaveBookmark(this, selectedBookmarkDatabaseId, favoriteIconBitmap); }); // Create an alert dialog from the builder. @@ -151,10 +171,9 @@ public class EditBookmarkDialog extends DialogFragment { RadioGroup iconRadioGroup = alertDialog.findViewById(R.id.edit_bookmark_icon_radiogroup); ImageView currentIconImageView = alertDialog.findViewById(R.id.edit_bookmark_current_icon); ImageView newFavoriteIconImageView = alertDialog.findViewById(R.id.edit_bookmark_webpage_favorite_icon); - newIconRadioButton = alertDialog.findViewById(R.id.edit_bookmark_webpage_favorite_icon_radiobutton); - nameEditText = alertDialog.findViewById(R.id.edit_bookmark_name_edittext); - urlEditText = alertDialog.findViewById(R.id.edit_bookmark_url_edittext); - editButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); + EditText nameEditText = alertDialog.findViewById(R.id.edit_bookmark_name_edittext); + EditText urlEditText = alertDialog.findViewById(R.id.edit_bookmark_url_edittext); + Button editButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); // Get the current favorite icon byte array from the cursor. byte[] currentIconByteArray = bookmarkCursor.getBlob(bookmarkCursor.getColumnIndex(BookmarksDatabaseHelper.FAVORITE_ICON)); @@ -165,20 +184,12 @@ public class EditBookmarkDialog extends DialogFragment { // Display the current icon bitmap. currentIconImageView.setImageBitmap(currentIconBitmap); - // Get a copy of the favorite icon bitmap. - Bitmap favoriteIconBitmap = MainWebViewActivity.favoriteIconBitmap; - - // Scale the favorite icon bitmap down if it is larger than 256 x 256. Filtering uses bilinear interpolation. - if ((favoriteIconBitmap.getHeight() > 256) || (favoriteIconBitmap.getWidth() > 256)) { - favoriteIconBitmap = Bitmap.createScaledBitmap(favoriteIconBitmap, 256, 256, true); - } - // Set the new favorite icon bitmap. newFavoriteIconImageView.setImageBitmap(favoriteIconBitmap); // Store the current bookmark name and URL. - currentName = bookmarkCursor.getString(bookmarkCursor.getColumnIndex(BookmarksDatabaseHelper.BOOKMARK_NAME)); - currentUrl = bookmarkCursor.getString(bookmarkCursor.getColumnIndex(BookmarksDatabaseHelper.BOOKMARK_URL)); + String currentName = bookmarkCursor.getString(bookmarkCursor.getColumnIndex(BookmarksDatabaseHelper.BOOKMARK_NAME)); + String currentUrl = bookmarkCursor.getString(bookmarkCursor.getColumnIndex(BookmarksDatabaseHelper.BOOKMARK_URL)); // Populate the edit texts. nameEditText.setText(currentName); @@ -190,7 +201,7 @@ public class EditBookmarkDialog extends DialogFragment { // Update the edit button if the icon selection changes. iconRadioGroup.setOnCheckedChangeListener((RadioGroup group, int checkedId) -> { // Update the edit button. - updateEditButton(); + updateEditButton(alertDialog, currentName, currentUrl); }); // Update the edit button if the bookmark name changes. @@ -208,7 +219,7 @@ public class EditBookmarkDialog extends DialogFragment { @Override public void afterTextChanged(Editable s) { // Update the edit button. - updateEditButton(); + updateEditButton(alertDialog, currentName, currentUrl); } }); @@ -227,7 +238,7 @@ public class EditBookmarkDialog extends DialogFragment { @Override public void afterTextChanged(Editable s) { // Update the edit button. - updateEditButton(); + updateEditButton(alertDialog, currentName, currentUrl); } }); @@ -236,7 +247,7 @@ public class EditBookmarkDialog extends DialogFragment { // Save the bookmark if the event is a key-down on the "enter" button. if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER) && editButton.isEnabled()) { // The enter key was pressed and the edit button is enabled. // Trigger the `Listener` and return the `DialogFragment` to the parent activity. - editBookmarkListener.onSaveBookmark(EditBookmarkDialog.this, selectedBookmarkDatabaseId); + editBookmarkListener.onSaveBookmark(this, selectedBookmarkDatabaseId, favoriteIconBitmap); // Manually dismiss `alertDialog`. alertDialog.dismiss(); @@ -253,7 +264,7 @@ public class EditBookmarkDialog extends DialogFragment { // Save the bookmark if the event is a key-down on the "enter" button. if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER) && editButton.isEnabled()) { // The enter key was pressed and the edit button is enabled. // Trigger the `Listener` and return the DialogFragment to the parent activity. - editBookmarkListener.onSaveBookmark(EditBookmarkDialog.this, selectedBookmarkDatabaseId); + editBookmarkListener.onSaveBookmark(this, selectedBookmarkDatabaseId, favoriteIconBitmap); // Manually dismiss the alert dialog. alertDialog.dismiss(); @@ -269,8 +280,14 @@ public class EditBookmarkDialog extends DialogFragment { return alertDialog; } - private void updateEditButton() { - // Get the text from the `EditTexts`. + private void updateEditButton(AlertDialog alertdialog, String currentName, String currentUrl) { + // Get handles for the views. + EditText nameEditText = alertdialog.findViewById(R.id.edit_bookmark_name_edittext); + EditText urlEditText = alertdialog.findViewById(R.id.edit_bookmark_url_edittext); + RadioButton newIconRadioButton = alertdialog.findViewById(R.id.edit_bookmark_webpage_favorite_icon_radiobutton); + Button editButton = alertdialog.getButton(AlertDialog.BUTTON_POSITIVE); + + // Get the text from the edit texts. String newName = nameEditText.getText().toString(); String newUrl = urlEditText.getText().toString();