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