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=cea440a4239b0eb78f9bbf60c2ea856240e49a5c;hp=689773cf715aba0d312cd940bd5c26122f172ca4;hb=1b27ac6f2b7c046945fc97e2aff9adbde8a152ce;hpb=3dddbcd4bd22d5bd24dd76c8a215446cee829b98 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 689773cf..cea440a4 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java @@ -1,20 +1,20 @@ /* - * Copyright © 2016-2020 Soren Stoutner . + * Copyright © 2016-2022 Soren Stoutner . * - * This file is part of Privacy Browser . + * This file is part of 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 . + * along with Privacy Browser Android. If not, see . */ package com.stoutner.privacybrowser.activities; @@ -24,7 +24,6 @@ import android.app.Dialog; 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; @@ -39,6 +38,7 @@ import android.view.Menu; 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; @@ -71,15 +71,9 @@ import java.util.ArrayList; public class BookmarksActivity extends AppCompatActivity implements CreateBookmarkDialog.CreateBookmarkListener, CreateBookmarkFolderDialog.CreateBookmarkFolderListener, EditBookmarkDialog.EditBookmarkListener, EditBookmarkFolderDialog.EditBookmarkFolderListener, MoveToFolderDialog.MoveToFolderListener { - // `currentFolder` is public static so it can be accessed from `MoveToFolderDialog` and `BookmarksDatabaseViewActivity`. - // It is used in `onCreate`, `onOptionsItemSelected()`, `onBackPressed()`, `onCreateBookmark()`, `onCreateBookmarkFolder()`, `onSaveBookmark()`, `onSaveBookmarkFolder()`, `onMoveToFolder()`, - // and `loadFolder()`. + // `currentFolder` is public static so it can be accessed from `BookmarksDatabaseViewActivity`. public static String currentFolder; - // `checkedItemIds` is public static so it can be accessed from `MoveToFolderDialog`. It is also used in `onCreate()`, `onSaveBookmark()`, `onSaveBookmarkFolder()`, `onMoveToFolder()`, - // and `updateMoveIcons()`. - public static long[] checkedItemIds; - // `restartFromBookmarksDatabaseViewActivity` is public static so it can be accessed from `BookmarksDatabaseViewActivity`. It is also used in `onRestart()`. public static boolean restartFromBookmarksDatabaseViewActivity; @@ -129,8 +123,9 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // 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) { @@ -166,11 +161,22 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // 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); - // The AndroidX toolbar must be used until the minimum API is >= 21. + // Set the content view. + setContentView(R.layout.bookmarks_top_appbar); + } + + // 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. @@ -202,9 +208,9 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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(); @@ -315,7 +321,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. @@ -352,7 +358,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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); } } @@ -402,7 +408,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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); } } @@ -420,11 +426,8 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // Update the enabled status of the move icons. updateMoveIcons(); } else if (menuItemId == R.id.move_to_folder) { // Move to folder. - // Store the checked item IDs for use by the alert dialog. - checkedItemIds = bookmarksListView.getCheckedItemIds(); - // Instantiate the move to folder alert dialog. - DialogFragment moveToFolderDialog = new MoveToFolderDialog(); + DialogFragment moveToFolderDialog = MoveToFolderDialog.moveBookmarks(currentFolder, bookmarksListView.getCheckedItemIds()); // Show the move to folder alert dialog. moveToFolderDialog.show(getSupportFragmentManager(), getResources().getString(R.string.move_to_folder)); @@ -445,15 +448,15 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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); @@ -474,6 +477,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(); @@ -484,7 +505,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. @@ -528,7 +549,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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); } } @@ -686,6 +707,11 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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); @@ -769,20 +795,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; @@ -815,7 +841,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. @@ -830,17 +856,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. @@ -870,18 +896,18 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma } @Override - public void onSaveBookmarkFolder(DialogFragment dialogFragment, int selectedFolderDatabaseId, Bitmap favoriteIconBitmap) { + public void onSaveBookmarkFolder(DialogFragment dialogFragment, int selectedFolderDatabaseId, @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 `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(); @@ -1013,20 +1039,52 @@ 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.getColumnIndexOrThrow(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. - 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)) { @@ -1048,45 +1106,34 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // 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); } } @@ -1128,7 +1175,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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); @@ -1137,11 +1184,11 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma 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);