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=735d3e39793c951699bb31475e881deb6d2fab0d;hp=67cff69d917672d1a2c2fe360341fb6240b9b8be;hb=b82022327701273b1b56419e8d6042895c0bc7b9;hpb=9df712df3780161d77d10c6f3a2444bf8f218c99 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 67cff69d..735d3e39 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java @@ -25,6 +25,7 @@ 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; @@ -51,7 +52,7 @@ 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. +import androidx.appcompat.widget.Toolbar; import androidx.core.app.NavUtils; import androidx.fragment.app.DialogFragment; @@ -67,6 +68,7 @@ import com.stoutner.privacybrowser.R; import com.stoutner.privacybrowser.helpers.BookmarksDatabaseHelper; import java.io.ByteArrayOutputStream; +import java.util.ArrayList; public class BookmarksActivity extends AppCompatActivity implements CreateBookmarkDialog.CreateBookmarkListener, CreateBookmarkFolderDialog.CreateBookmarkFolderListener, EditBookmarkDialog.EditBookmarkListener, EditBookmarkFolderDialog.EditBookmarkFolderListener, MoveToFolderDialog.MoveToFolderListener { @@ -84,6 +86,13 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma public static boolean restartFromBookmarksDatabaseViewActivity; + // Define the saved instance state constants. + private final String CHECKED_BOOKMARKS_ARRAY_LIST = "checked_bookmarks_array_list"; + + // Define the class menu items. + private MenuItem moveBookmarkUpMenuItem; + private MenuItem moveBookmarkDownMenuItem; + // `bookmarksDatabaseHelper` is used in `onCreate()`, `onOptionsItemSelected()`, `onBackPressed()`, `onCreateBookmark()`, `onCreateBookmarkFolder()`, `onSaveBookmark()`, `onSaveBookmarkFolder()`, // `onMoveToFolder()`, `deleteBookmarkFolderContents()`, `loadFolder()`, and `onDestroy()`. private BookmarksDatabaseHelper bookmarksDatabaseHelper; @@ -108,12 +117,6 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // `oldFolderName` is used in `onCreate()` and `onSaveBookmarkFolder()`. private String oldFolderNameString; - // `moveBookmarkUpMenuItem` is used in `onCreate()` and `updateMoveIcons()`. - private MenuItem moveBookmarkUpMenuItem; - - // `moveBookmarkDownMenuItem` is used in `onCreate()` and `updateMoveIcons()`. - private MenuItem moveBookmarkDownMenuItem; - // `bookmarksDeletedSnackbar` is used in `onCreate()`, `onOptionsItemSelected()`, and `onBackPressed()`. private Snackbar bookmarksDeletedSnackbar; @@ -128,8 +131,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // 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); + // Get the screenshot preference. boolean allowScreenshots = sharedPreferences.getBoolean("allow_screenshots", false); // Disable screenshots if not allowed. @@ -137,12 +139,8 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); } - // Set the activity theme. - if (darkTheme) { - setTheme(R.style.PrivacyBrowserDark_SecondaryActivity); - } else { - setTheme(R.style.PrivacyBrowserLight_SecondaryActivity); - } + // Set the theme. + setTheme(R.style.PrivacyBrowser); // Run the default commands. super.onCreate(savedInstanceState); @@ -587,6 +585,22 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // Display the create bookmark dialog. createBookmarkDialog.show(getSupportFragmentManager(), getResources().getString(R.string.create_bookmark)); }); + + // Restore the state if the app has been restarted. + if (savedInstanceState != null) { + // Update the bookmarks list view after it has loaded. + bookmarksListView.post(() -> { + // Get the checked bookmarks array list. + ArrayList checkedBookmarksArrayList = savedInstanceState.getIntegerArrayList(CHECKED_BOOKMARKS_ARRAY_LIST); + + // Check each previously checked bookmark in the list view. When the minimum API >= 24 a `forEach()` command can be used instead. + if (checkedBookmarksArrayList != null) { + for (int i = 0; i < checkedBookmarksArrayList.size(); i++) { + bookmarksListView.setItemChecked(checkedBookmarksArrayList.get(i), true); + } + } + }); + } } @Override @@ -604,6 +618,30 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma } } + @Override + public void onSaveInstanceState(@NonNull Bundle savedInstanceState) { + // Run the default commands. + super.onSaveInstanceState(savedInstanceState); + + // Get the array of the checked items. + SparseBooleanArray checkedBookmarksSparseBooleanArray = bookmarksListView.getCheckedItemPositions(); + + // Create a checked items array list. + ArrayList checkedBookmarksArrayList = new ArrayList<>(); + + // Add each checked bookmark position to the array list. + for (int i = 0; i < checkedBookmarksSparseBooleanArray.size(); i++) { + // Check to see if the bookmark is currently checked. Bookmarks that have previously been checked but currently aren't will be populated in the sparse boolean array, but will return false. + if (checkedBookmarksSparseBooleanArray.valueAt(i)) { + // Add the bookmark position to the checked bookmarks array list. + checkedBookmarksArrayList.add(checkedBookmarksSparseBooleanArray.keyAt(i)); + } + } + + // Store the checked items array list in the saved instance state. + savedInstanceState.putIntegerArrayList(CHECKED_BOOKMARKS_ARRAY_LIST, checkedBookmarksArrayList); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu. @@ -991,12 +1029,6 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma } private void updateMoveIcons() { - // 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); - // Get a long array of the selected bookmarks. long[] selectedBookmarksLongArray = bookmarksListView.getCheckedItemIds(); @@ -1006,6 +1038,9 @@ 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`. if (selectedBookmarkDatabaseId == firstBookmarkDatabaseId) { // The selected bookmark is in the first position. // Disable the move bookmark up `MenuItem`. @@ -1014,14 +1049,14 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma // Set the move bookmark up icon to be ghosted. moveBookmarkUpMenuItem.setIcon(R.drawable.move_up_disabled); } else { // The selected bookmark is not in the first position. - // Enable the move bookmark up `MenuItem`. + // Enable the move bookmark up menu item. moveBookmarkUpMenuItem.setEnabled(true); // Set the icon according to the theme. - if (darkTheme) { - moveBookmarkUpMenuItem.setIcon(R.drawable.move_up_enabled_dark); + if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) { + moveBookmarkUpMenuItem.setIcon(R.drawable.move_up_enabled_night); } else { - moveBookmarkUpMenuItem.setIcon(R.drawable.move_up_enabled_light); + moveBookmarkUpMenuItem.setIcon(R.drawable.move_up_enabled_day); } } @@ -1037,10 +1072,10 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma moveBookmarkDownMenuItem.setEnabled(true); // Set the icon according to the theme. - if (darkTheme) { - moveBookmarkDownMenuItem.setIcon(R.drawable.move_down_enabled_dark); + if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) { + moveBookmarkDownMenuItem.setIcon(R.drawable.move_down_enabled_night); } else { - moveBookmarkDownMenuItem.setIcon(R.drawable.move_down_enabled_light); + moveBookmarkDownMenuItem.setIcon(R.drawable.move_down_enabled_day); } } }