X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Factivities%2FBookmarksDatabaseViewActivity.java;h=9844f184ed188613001501cbd7c2adeba16f1164;hp=abff463207370a977e7ed07390ab950fd4b41653;hb=6bc00e202749ba0cb337be462825002ba74be8fc;hpb=ff636c77836983a078f33e60616204518dab61d1 diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksDatabaseViewActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksDatabaseViewActivity.java index abff4632..9844f184 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksDatabaseViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksDatabaseViewActivity.java @@ -1,5 +1,5 @@ /* - * Copyright © 2016-2019 Soren Stoutner . + * Copyright © 2016-2020 Soren Stoutner . * * This file is part of Privacy Browser . * @@ -20,8 +20,10 @@ package com.stoutner.privacybrowser.activities; import android.annotation.SuppressLint; +import android.app.Dialog; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.database.Cursor; import android.database.MatrixCursor; import android.database.MergeCursor; @@ -31,6 +33,7 @@ import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.preference.PreferenceManager; import android.util.SparseBooleanArray; import android.view.ActionMode; import android.view.Menu; @@ -48,6 +51,7 @@ import android.widget.ResourceCursorAdapter; import android.widget.Spinner; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; // The AndroidX toolbar must be used until the minimum API is >= 21. @@ -69,7 +73,7 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements EditBookmarkFolderDatabaseViewDialog.EditBookmarkFolderDatabaseViewListener { // Instantiate the constants. private static final int ALL_FOLDERS_DATABASE_ID = -2; - private static final int HOME_FOLDER_DATABASE_ID = -1; + public static final int HOME_FOLDER_DATABASE_ID = -1; // `bookmarksDatabaseHelper` is used in `onCreate()`, `updateBookmarksListView()`, `selectAllBookmarksInFolder()`, and `onDestroy()`. private BookmarksDatabaseHelper bookmarksDatabaseHelper; @@ -100,13 +104,20 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements @Override public void onCreate(Bundle savedInstanceState) { + // Get a handle for the shared preferences. + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + + // Get the theme and screenshot preferences. + boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false); + boolean allowScreenshots = sharedPreferences.getBoolean("allow_screenshots", false); + // Disable screenshots if not allowed. - if (!MainWebViewActivity.allowScreenshots) { + if (!allowScreenshots) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); } // Set the activity theme. - if (MainWebViewActivity.darkTheme) { + if (darkTheme) { setTheme(R.style.PrivacyBrowserDark_SecondaryActivity); } else { setTheme(R.style.PrivacyBrowserLight_SecondaryActivity); @@ -324,7 +335,7 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements bookmarkParentFolderTextView.setText(bookmarkParentFolder); // Set the text color according to the theme. - if (MainWebViewActivity.darkTheme) { + if (darkTheme) { bookmarkParentFolderTextView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.gray_300)); } else { bookmarkParentFolderTextView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.black)); @@ -510,7 +521,7 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements // Update the list view. bookmarksCursorAdapter.changeCursor(bookmarksCursor); - // Show a Snackbar with the number of deleted bookmarks. + // Create a Snackbar with the number of deleted bookmarks. bookmarksDeletedSnackbar = Snackbar.make(findViewById(R.id.bookmarks_databaseview_coordinatorlayout), getString(R.string.bookmarks_deleted) + " " + selectedBookmarksIdsLongArray.length, Snackbar.LENGTH_LONG) .setAction(R.string.undo, view -> { @@ -520,28 +531,23 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements @SuppressLint("SwitchIntDef") // Ignore the lint warning about not handling the other possible events as they are covered by `default:`. @Override public void onDismissed(Snackbar snackbar, int event) { - switch (event) { - // The user pushed the `Undo` button. - case Snackbar.Callback.DISMISS_EVENT_ACTION: - // Update the bookmarks list view with the current contents of the bookmarks database, including the "deleted bookmarks. - updateBookmarksListView(); - - // Re-select the previously selected bookmarks. - for (int i = 0; i < selectedBookmarksPositionsSparseBooleanArray.size(); i++) { - bookmarksListView.setItemChecked(selectedBookmarksPositionsSparseBooleanArray.keyAt(i), true); - } - break; - - // The Snackbar was dismissed without the `Undo` button being pushed. - default: - // Delete each selected bookmark. - for (long databaseIdLong : selectedBookmarksIdsLongArray) { - // Convert `databaseIdLong` to an int. - int databaseIdInt = (int) databaseIdLong; - - // Delete the selected bookmark. - bookmarksDatabaseHelper.deleteBookmark(databaseIdInt); - } + if (event == Snackbar.Callback.DISMISS_EVENT_ACTION) { // The user pushed the undo button. + // Update the bookmarks list view with the current contents of the bookmarks database, including the "deleted bookmarks. + updateBookmarksListView(); + + // Re-select the previously selected bookmarks. + for (int i = 0; i < selectedBookmarksPositionsSparseBooleanArray.size(); i++) { + bookmarksListView.setItemChecked(selectedBookmarksPositionsSparseBooleanArray.keyAt(i), true); + } + } else { // The Snackbar was dismissed without the undo button being pushed. + // Delete each selected bookmark. + for (long databaseIdLong : selectedBookmarksIdsLongArray) { + // Convert `databaseIdLong` to an int. + int databaseIdInt = (int) databaseIdLong; + + // Delete the selected bookmark. + bookmarksDatabaseHelper.deleteBookmark(databaseIdInt); + } } // Reset the deleting bookmarks flag. @@ -584,9 +590,16 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements @Override public boolean onOptionsItemSelected(MenuItem menuItem) { + // Get a handle for the shared preferences. + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + + // Get the theme preferences. + boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false); + // Get the ID of the menu item that was selected. int menuItemId = menuItem.getItemId(); + // Run the command that corresponds to the selected menu item. switch (menuItemId) { case android.R.id.home: // The home arrow is identified as `android.R.id.home`, not just `R.id.home`. // Exit the activity. @@ -603,7 +616,7 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements // Update the icon and display a snackbar. if (sortByDisplayOrder) { // Sort by display order. // Update the icon according to the theme. - if (MainWebViewActivity.darkTheme) { + if (darkTheme) { menuItem.setIcon(R.drawable.sort_selected_dark); } else { menuItem.setIcon(R.drawable.sort_selected_light); @@ -613,7 +626,7 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements Snackbar.make(bookmarksListView, R.string.sorted_by_display_order, Snackbar.LENGTH_SHORT).show(); } else { // Sort by database id. // Update the icon according to the theme. - if (MainWebViewActivity.darkTheme) { + if (darkTheme) { menuItem.setIcon(R.drawable.sort_dark); } else { menuItem.setIcon(R.drawable.sort_light); @@ -641,20 +654,12 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements bookmarksDeletedSnackbar.dismiss(); } else { // Go home immediately. // Update the current folder in the bookmarks activity. - switch (currentFolderDatabaseId) { - case ALL_FOLDERS_DATABASE_ID: - // Load the home folder. - BookmarksActivity.currentFolder = ""; - break; - - case HOME_FOLDER_DATABASE_ID: - // Load the home folder. - BookmarksActivity.currentFolder = ""; - break; - - default: - // Load the current folder. - BookmarksActivity.currentFolder = currentFolderName; + if ((currentFolderDatabaseId == ALL_FOLDERS_DATABASE_ID) || (currentFolderDatabaseId == HOME_FOLDER_DATABASE_ID)) { // All folders or the the home folder are currently displayed. + // Load the home folder. + BookmarksActivity.currentFolder = ""; + } else { // A subfolder is currently displayed. + // Load the current folder. + BookmarksActivity.currentFolder = currentFolderName; } // Reload the bookmarks list view when returning to the bookmarks activity. @@ -749,25 +754,31 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements } @Override - public void onSaveBookmark(DialogFragment dialogFragment, int selectedBookmarkDatabaseId, Bitmap favoriteIconBitmap) { + public void onSaveBookmark(DialogFragment dialogFragment, int selectedBookmarkDatabaseId, @NonNull Bitmap favoriteIconBitmap) { + // Get the dialog from the dialog fragment. + Dialog dialog = dialogFragment.getDialog(); + + // Remove the incorrect lint warning below that the dialog might be null. + assert dialog != null; + // Get handles for the views from dialog fragment. - RadioButton currentBookmarkIconRadioButton = dialogFragment.getDialog().findViewById(R.id.edit_bookmark_current_icon_radiobutton); - EditText editBookmarkNameEditText = dialogFragment.getDialog().findViewById(R.id.edit_bookmark_name_edittext); - EditText editBookmarkUrlEditText = dialogFragment.getDialog().findViewById(R.id.edit_bookmark_url_edittext); - Spinner folderSpinner = dialogFragment.getDialog().findViewById(R.id.edit_bookmark_folder_spinner); - EditText displayOrderEditText = dialogFragment.getDialog().findViewById(R.id.edit_bookmark_display_order_edittext); + RadioButton currentBookmarkIconRadioButton = dialog.findViewById(R.id.edit_bookmark_current_icon_radiobutton); + EditText editBookmarkNameEditText = dialog.findViewById(R.id.edit_bookmark_name_edittext); + EditText editBookmarkUrlEditText = dialog.findViewById(R.id.edit_bookmark_url_edittext); + Spinner folderSpinner = dialog.findViewById(R.id.edit_bookmark_folder_spinner); + EditText displayOrderEditText = dialog.findViewById(R.id.edit_bookmark_display_order_edittext); // Extract the bookmark information. String bookmarkNameString = editBookmarkNameEditText.getText().toString(); String bookmarkUrlString = editBookmarkUrlEditText.getText().toString(); int folderDatabaseId = (int) folderSpinner.getSelectedItemId(); - int displayOrderInt = Integer.valueOf(displayOrderEditText.getText().toString()); + int displayOrderInt = Integer.parseInt(displayOrderEditText.getText().toString()); // Instantiate the parent folder name `String`. String parentFolderNameString; // Set the parent folder name. - if (folderDatabaseId == EditBookmarkDatabaseViewDialog.HOME_FOLDER_DATABASE_ID) { // The home folder is selected. Use `""`. + if (folderDatabaseId == HOME_FOLDER_DATABASE_ID) { // The home folder is selected. Use `""`. parentFolderNameString = ""; } else { // Get the parent folder name from the database. parentFolderNameString = bookmarksDatabaseHelper.getFolderName(folderDatabaseId); @@ -796,24 +807,30 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements @Override public void onSaveBookmarkFolder(DialogFragment dialogFragment, int selectedBookmarkDatabaseId, Bitmap favoriteIconBitmap) { + // Get the dialog from the dialog fragment. + Dialog dialog = dialogFragment.getDialog(); + + // Remove the incorrect lint warning below that the dialog might be null. + assert dialog != null; + // Get handles for the views from dialog fragment. - RadioButton currentBookmarkIconRadioButton = dialogFragment.getDialog().findViewById(R.id.edit_folder_current_icon_radiobutton); - RadioButton defaultFolderIconRadioButton = dialogFragment.getDialog().findViewById(R.id.edit_folder_default_icon_radiobutton); - ImageView defaultFolderIconImageView = dialogFragment.getDialog().findViewById(R.id.edit_folder_default_icon_imageview); - EditText editBookmarkNameEditText = dialogFragment.getDialog().findViewById(R.id.edit_folder_name_edittext); - Spinner parentFolderSpinner = dialogFragment.getDialog().findViewById(R.id.edit_folder_parent_folder_spinner); - EditText displayOrderEditText = dialogFragment.getDialog().findViewById(R.id.edit_folder_display_order_edittext); + RadioButton currentBookmarkIconRadioButton = 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 editBookmarkNameEditText = dialog.findViewById(R.id.edit_folder_name_edittext); + Spinner parentFolderSpinner = dialog.findViewById(R.id.edit_folder_parent_folder_spinner); + EditText displayOrderEditText = dialog.findViewById(R.id.edit_folder_display_order_edittext); // Extract the folder information. String newFolderNameString = editBookmarkNameEditText.getText().toString(); int parentFolderDatabaseId = (int) parentFolderSpinner.getSelectedItemId(); - int displayOrderInt = Integer.valueOf(displayOrderEditText.getText().toString()); + int displayOrderInt = Integer.parseInt(displayOrderEditText.getText().toString()); // Instantiate the parent folder name `String`. String parentFolderNameString; // Set the parent folder name. - if (parentFolderDatabaseId == EditBookmarkFolderDatabaseViewDialog.HOME_FOLDER_DATABASE_ID) { // The home folder is selected. Use `""`. + if (parentFolderDatabaseId == HOME_FOLDER_DATABASE_ID) { // The home folder is selected. Use `""`. parentFolderNameString = ""; } else { // Get the parent folder name from the database. parentFolderNameString = bookmarksDatabaseHelper.getFolderName(parentFolderDatabaseId);