// Initialize the selected bookmark position.
int selectedBookmarkPosition = 0;
- // Get a handle for the menu item ID.
+ // Get the menu item ID.
int menuItemId = menuItem.getItemId();
// Run the commands according to the selected action item.
// Get an array of the selected row IDs.
final long[] selectedBookmarksIdsLongArray = bookmarksListView.getCheckedItemIds();
+ // Initialize a variable to count the number of bookmarks to delete.
+ int numberOfBookmarksToDelete = 0;
+
+ // Count the number of bookmarks.
+ for (long databaseIdLong : selectedBookmarksIdsLongArray) {
+ // Convert the database ID long to an int.
+ int databaseIdInt = (int) databaseIdLong;
+
+ // Count the contents of the folder if the selected bookmark is a folder.
+ if (bookmarksDatabaseHelper.isFolder(databaseIdInt)) {
+ // Add the bookmarks from the folder to the running total.
+ numberOfBookmarksToDelete = numberOfBookmarksToDelete + countBookmarkFolderContents(databaseIdInt);
+ }
+
+ // Increment the count of the number of bookmarks to delete.
+ numberOfBookmarksToDelete++;
+ }
+
// Get an array of checked bookmarks. `.clone()` makes a copy that won't change if the list view is reloaded, which is needed for re-selecting the bookmarks on undelete.
selectedBookmarksPositionsSparseBooleanArray = bookmarksListView.getCheckedItemPositions().clone();
bookmarksCursorAdapter.changeCursor(bookmarksCursor);
// Create a Snackbar with the number of deleted bookmarks.
- bookmarksDeletedSnackbar = Snackbar.make(findViewById(R.id.bookmarks_coordinatorlayout), getString(R.string.bookmarks_deleted) + " " + selectedBookmarksIdsLongArray.length,
+ bookmarksDeletedSnackbar = Snackbar.make(findViewById(R.id.bookmarks_coordinatorlayout), getString(R.string.bookmarks_deleted) + " " + numberOfBookmarksToDelete,
Snackbar.LENGTH_LONG)
.setAction(R.string.undo, view -> {
// Do nothing because everything will be handled by `onDismissed()` below.
assert dialog != null;
// Get handles for the views in the dialog fragment.
- EditText createFolderNameEditText = dialog.findViewById(R.id.create_folder_name_edittext);
- RadioButton defaultFolderIconRadioButton = dialog.findViewById(R.id.create_folder_default_icon_radiobutton);
- ImageView folderIconImageView = dialog.findViewById(R.id.create_folder_default_icon);
+ EditText folderNameEditText = dialog.findViewById(R.id.folder_name_edittext);
+ RadioButton defaultIconRadioButton = dialog.findViewById(R.id.default_icon_radiobutton);
+ ImageView defaultIconImageView = dialog.findViewById(R.id.default_icon_imageview);
// Get new folder name string.
- String folderNameString = createFolderNameEditText.getText().toString();
+ String folderNameString = folderNameEditText.getText().toString();
// Create a folder icon bitmap.
Bitmap folderIconBitmap;
// Set the folder icon bitmap according to the dialog.
- if (defaultFolderIconRadioButton.isChecked()) { // Use the default folder icon.
+ if (defaultIconRadioButton.isChecked()) { // Use the default folder icon.
// Get the default folder icon drawable.
- Drawable folderIconDrawable = folderIconImageView.getDrawable();
+ Drawable folderIconDrawable = defaultIconImageView.getDrawable();
// Convert the folder icon drawable to a bitmap drawable.
BitmapDrawable folderIconBitmapDrawable = (BitmapDrawable) folderIconDrawable;
// Update the bookmarks cursor with the current contents of this folder.
bookmarksCursor = bookmarksDatabaseHelper.getBookmarksByDisplayOrder(currentFolder);
- // Update the `ListView`.
+ // Update the list view.
bookmarksCursorAdapter.changeCursor(bookmarksCursor);
// Scroll to the new folder.
// Remove the incorrect lint warning below that the dialog might be null.
assert dialog != null;
- // Get handles for the views from `dialogFragment`.
- EditText editBookmarkNameEditText = dialog.findViewById(R.id.edit_bookmark_name_edittext);
- EditText editBookmarkUrlEditText = dialog.findViewById(R.id.edit_bookmark_url_edittext);
- RadioButton currentBookmarkIconRadioButton = dialog.findViewById(R.id.edit_bookmark_current_icon_radiobutton);
+ // Get handles for the views from the dialog fragment.
+ EditText bookmarkNameEditText = dialog.findViewById(R.id.bookmark_name_edittext);
+ EditText bookmarkUrlEditText = dialog.findViewById(R.id.bookmark_url_edittext);
+ RadioButton currentIconRadioButton = dialog.findViewById(R.id.current_icon_radiobutton);
// Store the bookmark strings.
- String bookmarkNameString = editBookmarkNameEditText.getText().toString();
- String bookmarkUrlString = editBookmarkUrlEditText.getText().toString();
+ String bookmarkNameString = bookmarkNameEditText.getText().toString();
+ String bookmarkUrlString = bookmarkUrlEditText.getText().toString();
// Update the bookmark.
- if (currentBookmarkIconRadioButton.isChecked()) { // Update the bookmark without changing the favorite icon.
+ if (currentIconRadioButton.isChecked()) { // Update the bookmark without changing the favorite icon.
bookmarksDatabaseHelper.updateBookmark(selectedBookmarkDatabaseId, bookmarkNameString, bookmarkUrlString);
} else { // Update the bookmark using the WebView favorite icon.
// Create a favorite icon byte array output stream.
// Remove the incorrect lint warning below that the dialog might be null.
assert dialog != null;
- // Get handles for the views from `dialogFragment`.
- RadioButton currentFolderIconRadioButton = dialog.findViewById(R.id.edit_folder_current_icon_radiobutton);
- RadioButton defaultFolderIconRadioButton = dialog.findViewById(R.id.edit_folder_default_icon_radiobutton);
- ImageView defaultFolderIconImageView = dialog.findViewById(R.id.edit_folder_default_icon_imageview);
- EditText editFolderNameEditText = dialog.findViewById(R.id.edit_folder_name_edittext);
+ // Get handles for the views from the dialog fragment.
+ RadioButton currentFolderIconRadioButton = dialog.findViewById(R.id.current_icon_radiobutton);
+ RadioButton defaultFolderIconRadioButton = dialog.findViewById(R.id.default_icon_radiobutton);
+ ImageView defaultFolderIconImageView = dialog.findViewById(R.id.default_icon_imageview);
+ EditText editFolderNameEditText = dialog.findViewById(R.id.folder_name_edittext);
// Get the new folder name.
String newFolderNameString = editFolderNameEditText.getText().toString();
contextualActionMode.finish();
}
+ private int countBookmarkFolderContents(int databaseId) {
+ // Initialize the bookmark counter.
+ int bookmarkCounter = 0;
+
+ // Get the name of the folder.
+ String folderName = bookmarksDatabaseHelper.getFolderName(databaseId);
+
+ // Get the contents of the folder.
+ Cursor folderCursor = bookmarksDatabaseHelper.getBookmarkIds(folderName);
+
+ // Count each of the bookmarks in the folder.
+ for (int i = 0; i < folderCursor.getCount(); i++) {
+ // Move the folder cursor to the current row.
+ folderCursor.moveToPosition(i);
+
+ // Get the database ID of the item.
+ int itemDatabaseId = folderCursor.getInt(folderCursor.getColumnIndex(BookmarksDatabaseHelper._ID));
+
+ // If this is a folder, recursively count the contents first.
+ if (bookmarksDatabaseHelper.isFolder(itemDatabaseId)) {
+ // Add the bookmarks from the folder to the running total.
+ bookmarkCounter = bookmarkCounter + countBookmarkFolderContents(itemDatabaseId);
+ }
+
+ // Add the bookmark to the running total.
+ bookmarkCounter++;
+ }
+
+ // Return the bookmark counter.
+ return bookmarkCounter;
+ }
+
private void deleteBookmarkFolderContents(int databaseId) {
// Get the name of the folder.
String folderName = bookmarksDatabaseHelper.getFolderName(databaseId);
// Get the contents of the folder.
- Cursor folderCursor = bookmarksDatabaseHelper.getBookmarkIDs(folderName);
+ Cursor folderCursor = bookmarksDatabaseHelper.getBookmarkIds(folderName);
// Delete each of the bookmarks in the folder.
for (int i = 0; i < folderCursor.getCount(); i++) {
- // Move `folderCursor` to the current row.
+ // Move the folder cursor to the current row.
folderCursor.moveToPosition(i);
// Get the database ID of the item.