/*
- * Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2016-2022 Soren Stoutner <soren@stoutner.com>.
*
- * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+ * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
*
- * Privacy Browser is free software: you can redistribute it and/or modify
+ * Privacy Browser Android is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
- * Privacy Browser is distributed in the hope that it will be useful,
+ * Privacy Browser Android is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with Privacy Browser. If not, see <http://www.gnu.org/licenses/>.
+ * along with Privacy Browser Android. If not, see <http://www.gnu.org/licenses/>.
*/
package com.stoutner.privacybrowser.activities;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.content.res.Configuration;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.view.Window;
import android.view.WindowManager;
import android.widget.AbsListView;
import android.widget.CursorAdapter;
// Get a handle for the shared preferences.
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- // Get the screenshot preference.
- boolean allowScreenshots = sharedPreferences.getBoolean("allow_screenshots", false);
+ // Get the preferences.
+ boolean allowScreenshots = sharedPreferences.getBoolean(getString(R.string.allow_screenshots_key), false);
+ boolean bottomAppBar = sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false);
// Disable screenshots if not allowed.
if (!allowScreenshots) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
- // Set the theme.
- setTheme(R.style.PrivacyBrowser);
-
// Run the default commands.
super.onCreate(savedInstanceState);
// Convert the favorite icon byte array to a bitmap.
Bitmap favoriteIconBitmap = BitmapFactory.decodeByteArray(favoriteIconByteArray, 0, favoriteIconByteArray.length);
- // Set the content view.
- setContentView(R.layout.bookmarks_coordinatorlayout);
+ // Set the content according to the app bar position.
+ if (bottomAppBar) {
+ // Set the content view.
+ setContentView(R.layout.bookmarks_bottom_appbar);
+ } else {
+ // `Window.FEATURE_ACTION_MODE_OVERLAY` makes the contextual action mode cover the support action bar. It must be requested before the content is set.
+ supportRequestWindowFeature(Window.FEATURE_ACTION_MODE_OVERLAY);
+
+ // Set the content view.
+ setContentView(R.layout.bookmarks_top_appbar);
+ }
- // The AndroidX toolbar must be used until the minimum API is >= 21.
+ // Get a handle for the toolbar.
final Toolbar toolbar = findViewById(R.id.bookmarks_toolbar);
+
+ // Set the support action bar.
setSupportActionBar(toolbar);
// Get handles for the views.
// Display the home arrow on the app bar.
appBar.setDisplayHomeAsUpEnabled(true);
- // Initialize the database helper. `this` specifies the context. The two `nulls` do not specify the database name or a `CursorFactory`.
- // The `0` specifies a database version, but that is ignored and set instead using a constant in `BookmarksDatabaseHelper`.
- bookmarksDatabaseHelper = new BookmarksDatabaseHelper(this, null, null, 0);
+ // Initialize the database helper.
+ bookmarksDatabaseHelper = new BookmarksDatabaseHelper(this);
// Load the home folder.
loadFolder();
bookmarkCursor.moveToFirst();
// Act upon the bookmark according to the type.
- if (bookmarkCursor.getInt(bookmarkCursor.getColumnIndex(BookmarksDatabaseHelper.IS_FOLDER)) == 1) { // The selected bookmark is a folder.
+ if (bookmarkCursor.getInt(bookmarkCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.IS_FOLDER)) == 1) { // The selected bookmark is a folder.
// Update the current folder.
- currentFolder = bookmarkCursor.getString(bookmarkCursor.getColumnIndex(BookmarksDatabaseHelper.BOOKMARK_NAME));
+ currentFolder = bookmarkCursor.getString(bookmarkCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.BOOKMARK_NAME));
// Load the new folder.
loadFolder();
bookmarksCursor.moveToPosition(i);
// Update the display order only if it is not correct in the database.
- if (bookmarksCursor.getInt(bookmarksCursor.getColumnIndex(BookmarksDatabaseHelper.DISPLAY_ORDER)) != i) {
+ if (bookmarksCursor.getInt(bookmarksCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.DISPLAY_ORDER)) != i) {
bookmarksDatabaseHelper.updateDisplayOrder(currentBookmarkDatabaseId, i);
}
}
bookmarksCursor.moveToPosition(i);
// Update the display order only if it is not correct in the database.
- if (bookmarksCursor.getInt(bookmarksCursor.getColumnIndex(BookmarksDatabaseHelper.DISPLAY_ORDER)) != i) {
+ if (bookmarksCursor.getInt(bookmarksCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.DISPLAY_ORDER)) != i) {
bookmarksDatabaseHelper.updateDisplayOrder(currentBookmarkDatabaseId, i);
}
}
bookmarksCursor.moveToPosition(selectedBookmarkPosition);
// Find out if this bookmark is a folder.
- boolean isFolder = (bookmarksCursor.getInt(bookmarksCursor.getColumnIndex(BookmarksDatabaseHelper.IS_FOLDER)) == 1);
+ boolean isFolder = (bookmarksCursor.getInt(bookmarksCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.IS_FOLDER)) == 1);
// Get the selected bookmark database ID.
- int databaseId = bookmarksCursor.getInt(bookmarksCursor.getColumnIndex(BookmarksDatabaseHelper._ID));
+ int databaseId = bookmarksCursor.getInt(bookmarksCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.ID));
// Show the edit bookmark or edit bookmark folder dialog.
if (isFolder) {
// Save the current folder name, which is used in `onSaveBookmarkFolder()`.
- oldFolderNameString = bookmarksCursor.getString(bookmarksCursor.getColumnIndex(BookmarksDatabaseHelper.BOOKMARK_NAME));
+ oldFolderNameString = bookmarksCursor.getString(bookmarksCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.BOOKMARK_NAME));
// Instantiate the edit bookmark folder dialog.
DialogFragment editFolderDialog = EditBookmarkFolderDialog.folderDatabaseId(databaseId, favoriteIconBitmap);
bookmarksCursor.moveToPosition(i);
// Update the display order only if it is not correct in the database.
- if (bookmarksCursor.getInt(bookmarksCursor.getColumnIndex(BookmarksDatabaseHelper.DISPLAY_ORDER)) != i) {
+ if (bookmarksCursor.getInt(bookmarksCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.DISPLAY_ORDER)) != i) {
bookmarksDatabaseHelper.updateDisplayOrder(currentBookmarkDatabaseId, i);
}
}
bookmarksListView.setItemChecked(i, true);
}
} else if (menuItemId == R.id.bookmarks_database_view) {
+ // Close the contextual action bar if it is displayed. This can happen if the bottom app bar is enabled.
+ if (contextualActionMode != null) {
+ contextualActionMode.finish();
+ }
+
// Create an intent to launch the bookmarks database view activity.
Intent bookmarksDatabaseViewIntent = new Intent(this, BookmarksDatabaseViewActivity.class);
folderCursor.moveToPosition(i);
// Get the database ID of the item.
- int itemDatabaseId = folderCursor.getInt(folderCursor.getColumnIndex(BookmarksDatabaseHelper._ID));
+ int itemDatabaseId = folderCursor.getInt(folderCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.ID));
// If this is a folder, recursively count the contents first.
if (bookmarksDatabaseHelper.isFolder(itemDatabaseId)) {
folderCursor.moveToPosition(i);
// Get the database ID of the item.
- int itemDatabaseId = folderCursor.getInt(folderCursor.getColumnIndex(BookmarksDatabaseHelper._ID));
+ int itemDatabaseId = folderCursor.getInt(folderCursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.ID));
// If this is a folder, recursively delete the contents first.
if (bookmarksDatabaseHelper.isFolder(itemDatabaseId)) {
// bookmarksListView is 0 indexed.
int lastBookmarkDatabaseId = (int) bookmarksListView.getItemIdAtPosition(bookmarksListView.getCount() - 1);
- // Get the current theme status.
- int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
-
- // Update the move bookmark up `MenuItem`.
+ // Update the move bookmark up menu item.
if (selectedBookmarkDatabaseId == firstBookmarkDatabaseId) { // The selected bookmark is in the first position.
- // Disable the move bookmark up `MenuItem`.
+ // Disable the move bookmark up menu item.
moveBookmarkUpMenuItem.setEnabled(false);
- // Set the move bookmark up icon to be ghosted.
+ // Set the icon.
moveBookmarkUpMenuItem.setIcon(R.drawable.move_up_disabled);
} else { // The selected bookmark is not in the first position.
// Enable the move bookmark up menu item.
moveBookmarkUpMenuItem.setEnabled(true);
// Set the icon according to the theme.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
- moveBookmarkUpMenuItem.setIcon(R.drawable.move_up_enabled_night);
- } else {
- moveBookmarkUpMenuItem.setIcon(R.drawable.move_up_enabled_day);
- }
+ moveBookmarkUpMenuItem.setIcon(R.drawable.move_up_enabled);
}
- // Update the move bookmark down `MenuItem`.
+ // Update the move bookmark down menu item.
if (selectedBookmarkDatabaseId == lastBookmarkDatabaseId) { // The selected bookmark is in the last position.
- // Disable the move bookmark down `MenuItem`.
+ // Disable the move bookmark down menu item.
moveBookmarkDownMenuItem.setEnabled(false);
- // Set the move bookmark down icon to be ghosted.
+ // Set the icon.
moveBookmarkDownMenuItem.setIcon(R.drawable.move_down_disabled);
} else { // The selected bookmark is not in the last position.
- // Enable the move bookmark down `MenuItem`.
+ // Enable the move bookmark down menu item.
moveBookmarkDownMenuItem.setEnabled(true);
- // Set the icon according to the theme.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
- moveBookmarkDownMenuItem.setIcon(R.drawable.move_down_enabled_night);
- } else {
- moveBookmarkDownMenuItem.setIcon(R.drawable.move_down_enabled_day);
- }
+ // Set the icon.
+ moveBookmarkDownMenuItem.setIcon(R.drawable.move_down_enabled);
}
}
TextView bookmarkNameTextView = view.findViewById(R.id.bookmark_name);
// Get the favorite icon byte array from the `Cursor`.
- byte[] favoriteIconByteArray = cursor.getBlob(cursor.getColumnIndex(BookmarksDatabaseHelper.FAVORITE_ICON));
+ byte[] favoriteIconByteArray = cursor.getBlob(cursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.FAVORITE_ICON));
// Convert the byte array to a `Bitmap` beginning at the first byte and ending at the last.
Bitmap favoriteIconBitmap = BitmapFactory.decodeByteArray(favoriteIconByteArray, 0, favoriteIconByteArray.length);
bookmarkFavoriteIcon.setImageBitmap(favoriteIconBitmap);
// Get the bookmark name from the cursor and display it in `bookmarkNameTextView`.
- String bookmarkNameString = cursor.getString(cursor.getColumnIndex(BookmarksDatabaseHelper.BOOKMARK_NAME));
+ String bookmarkNameString = cursor.getString(cursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.BOOKMARK_NAME));
bookmarkNameTextView.setText(bookmarkNameString);
// Make the font bold for folders.
- if (cursor.getInt(cursor.getColumnIndex(BookmarksDatabaseHelper.IS_FOLDER)) == 1) {
+ if (cursor.getInt(cursor.getColumnIndexOrThrow(BookmarksDatabaseHelper.IS_FOLDER)) == 1) {
bookmarkNameTextView.setTypeface(Typeface.DEFAULT_BOLD);
} else { // Reset the font to default for normal bookmarks.
bookmarkNameTextView.setTypeface(Typeface.DEFAULT);