+ protected void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
+ // Run the default commands.
+ super.onSaveInstanceState(savedInstanceState);
+
+ // Get a handle for the domain settings scrollview.
+ ScrollView domainSettingsScrollView = findViewById(R.id.domain_settings_scrollview);
+
+ // Check to see if the domain settings scrollview exists.
+ if (domainSettingsScrollView == null) { // The domain settings are not displayed.
+ // Store the domain settings status in the bundle.
+ savedInstanceState.putBoolean(DOMAIN_SETTINGS_DISPLAYED, false);
+ savedInstanceState.putInt(DOMAIN_SETTINGS_DATABASE_ID, -1);
+ savedInstanceState.putInt(DOMAIN_SETTINGS_SCROLL_Y, 0);
+ } else { // The domain settings are displayed.
+ // Save any changes that have been made to the domain settings.
+ saveDomainSettings(coordinatorLayout, resources);
+
+ // Get the domain settings scroll Y.
+ int domainSettingsScrollY = domainSettingsScrollView.getScrollY();
+
+ // Store the domain settings status in the bundle.
+ savedInstanceState.putBoolean(DOMAIN_SETTINGS_DISPLAYED, true);
+ savedInstanceState.putInt(DOMAIN_SETTINGS_DATABASE_ID, DomainSettingsFragment.databaseId);
+ savedInstanceState.putInt(DOMAIN_SETTINGS_SCROLL_Y, domainSettingsScrollY);
+ }
+
+ // Check to see if the domains listview exists.
+ if (domainsListView != null) {
+ // Get the domains listview position.
+ int domainsListViewPosition = domainsListView.getFirstVisiblePosition();
+
+ // Store the listview position in the bundle.
+ savedInstanceState.putInt(LISTVIEW_POSITION, domainsListViewPosition);
+ }
+ }
+
+ // Control what the navigation bar back button does.
+ @Override
+ public void onBackPressed() {
+ // Get a handle for the fragment manager.
+ FragmentManager fragmentManager = getSupportFragmentManager();
+
+ if (twoPanedMode) { // The device is in two-paned mode.
+ // Save the current domain settings if the domain settings fragment is displayed.
+ if (findViewById(R.id.domain_settings_scrollview) != null) {
+ saveDomainSettings(coordinatorLayout, resources);
+ }
+
+ // Dismiss the undo delete SnackBar if it is shown.
+ if ((undoDeleteSnackbar != null) && undoDeleteSnackbar.isShown()) {
+ // Set the close flag.
+ closeActivityAfterDismissingSnackbar = true;
+
+ // Dismiss the snackbar.
+ undoDeleteSnackbar.dismiss();
+ } else {
+ // Pass `onBackPressed()` to the system.
+ super.onBackPressed();
+ }
+ } else if (closeOnBack) { // Go directly back to the main WebView activity because the domains activity was launched from the options menu.
+ // Save the current domain settings.
+ saveDomainSettings(coordinatorLayout, resources);
+
+ // Pass `onBackPressed()` to the system.
+ super.onBackPressed();
+ } else if (findViewById(R.id.domain_settings_scrollview) != null) { // The device is in single-paned mode and domain settings fragment is displayed.
+ // Save the current domain settings.
+ saveDomainSettings(coordinatorLayout, resources);
+
+ // Display the domains list fragment.
+ DomainsListFragment domainsListFragment = new DomainsListFragment();
+ fragmentManager.beginTransaction().replace(R.id.domains_listview_fragment_container, domainsListFragment).commit();
+ fragmentManager.executePendingTransactions();
+
+ // Populate the list of domains. `-1` highlights the first domain if in two-paned mode. It has no effect in single-paned mode.
+ populateDomainsListView(-1, domainsListViewPosition);
+
+ // Show the add domain floating action button.
+ addDomainFAB.show();
+
+ // Hide the delete menu item.
+ deleteMenuItem.setVisible(false);
+ } else { // The device is in single-paned mode and the domain list fragment is displayed.
+ // Dismiss the undo delete SnackBar if it is shown.
+ if ((undoDeleteSnackbar != null) && undoDeleteSnackbar.isShown()) {
+ // Set the close flag.
+ closeActivityAfterDismissingSnackbar = true;
+
+ // Dismiss the snackbar.
+ undoDeleteSnackbar.dismiss();
+ } else {
+ // Pass `onBackPressed()` to the system.
+ super.onBackPressed();
+ }
+ }
+ }
+
+ @Override
+ public void onAddDomain(@NonNull DialogFragment dialogFragment) {
+ // Dismiss the undo delete snackbar if it is currently displayed.
+ if ((undoDeleteSnackbar != null) && undoDeleteSnackbar.isShown()) {
+ undoDeleteSnackbar.dismiss();
+ }
+
+ // Remove the incorrect lint warning below that the dialog might be null.
+ assert dialogFragment.getDialog() != null;
+
+ // Get a handle for the domain name edit text.
+ EditText domainNameEditText = dialogFragment.getDialog().findViewById(R.id.domain_name_edittext);
+
+ // Get the domain name string.