X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Factivities%2FBookmarksActivity.java;h=2b46600ee6dc319ee819c003f09b5402e9de1265;hp=cfceab0d79948726d84318b718a3a7e1f1814375;hb=85ae33a22d54866507ccc414fc5fcba5106ab38f;hpb=91154b307513e7bc6958b27fba518e4f9b564cf9 diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java index cfceab0d..2b46600e 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java @@ -309,7 +309,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // 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. @@ -465,6 +465,24 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // 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(); @@ -475,7 +493,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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. @@ -760,20 +778,20 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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; @@ -806,7 +824,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // 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. @@ -821,17 +839,17 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // 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. @@ -868,11 +886,11 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // 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(); @@ -1004,16 +1022,48 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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.