Restore search query on screen rotation

This commit is contained in:
CristianAUnisa 2022-05-07 16:15:30 +02:00
parent 81d5915969
commit 49130cee73

View file

@ -74,10 +74,13 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
private static final int CODE_PERM_READ_STORAGE = 1;
private boolean _loaded;
private boolean _searchSubmitted;
private boolean _isRecreated;
private boolean _isDPadPressed;
private String _submittedSearchSubtitle;
private String _searchQueryInputText;
private String _activeSearchFilter;
private List<VaultEntry> _selectedEntries;
private ActionMode _actionMode;
@ -102,6 +105,9 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
if (savedInstanceState != null) {
_isRecreated = true;
_searchQueryInputText = savedInstanceState.getString("searchQueryInputText");
_activeSearchFilter = savedInstanceState.getString("activeSearchFilter");
_submittedSearchSubtitle = savedInstanceState.getString("submittedSearchSubtitle");
}
_entryListView = (EntryListView) getSupportFragmentManager().findFragmentById(R.id.key_profiles);
@ -162,6 +168,14 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
super.onPause();
}
@Override
protected void onSaveInstanceState(Bundle instance) {
super.onSaveInstanceState(instance);
instance.putString("activeSearchFilter", _activeSearchFilter);
instance.putString("submittedSearchSubtitle", _submittedSearchSubtitle);
instance.putString("searchQueryInputText", _searchQueryInputText);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
@ -505,9 +519,10 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
@Override
public void onBackPressed() {
if (!_searchView.isIconified() || _searchSubmitted) {
_searchSubmitted = false;
if (!_searchView.isIconified() || _submittedSearchSubtitle != null) {
_submittedSearchSubtitle = null;
_entryListView.setSearchFilter(null);
_activeSearchFilter = null;
collapseSearchView();
setTitle(R.string.app_name);
@ -531,6 +546,8 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
saveAndBackupVault();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
_menu = menu;
@ -552,31 +569,47 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
_searchView.requestFocus();
_searchView.requestFocusFromTouch();
}
_searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
setTitle(getString(R.string.search));
getSupportActionBar().setSubtitle(s);
_searchSubmitted = true;
_searchQueryInputText = null;
_submittedSearchSubtitle = s;
collapseSearchView();
return false;
}
@Override
public boolean onQueryTextChange(String s) {
if (!_searchSubmitted) {
if (_submittedSearchSubtitle == null) {
_entryListView.setSearchFilter(s);
_activeSearchFilter = s;
_searchQueryInputText = s;
}
return false;
}
});
_searchView.setOnSearchClickListener(v -> {
if (_searchSubmitted) {
_searchSubmitted = false;
if (_submittedSearchSubtitle != null) {
_entryListView.setSearchFilter(null);
_activeSearchFilter = null;
_submittedSearchSubtitle = null;
}
});
if(_submittedSearchSubtitle != null) {
getSupportActionBar().setSubtitle(_submittedSearchSubtitle);
}
if(_activeSearchFilter != null) {
_entryListView.setSearchFilter(_activeSearchFilter);
}
if(_searchQueryInputText != null) {
_searchView.setQuery(_searchQueryInputText, false);
_searchView.setIconified(false);
}
return true;
}