diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java index a8597286..e7696ad0 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -15,8 +15,11 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.SubMenu; import android.widget.LinearLayout; +import android.widget.SearchView; import android.widget.Toast; +import androidx.core.view.MenuItemCompat; + import com.beemdevelopment.aegis.AegisApplication; import com.beemdevelopment.aegis.R; import com.beemdevelopment.aegis.SortCategory; @@ -67,8 +70,10 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene private DatabaseManager _db; private boolean _loaded; private String _checkedGroup; + private boolean _searchSubmitted; private Menu _menu; + private SearchView _searchView; private FloatingActionsMenu _fabMenu; private EntryListView _entryListView; @@ -417,6 +422,16 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene @Override public void onBackPressed() { + if (!_searchView.isIconified() || _searchSubmitted ) { + _searchSubmitted = false; + _entryListView.setSearchFilter(null); + + collapseSearchView(); + setTitle("Aegis"); + setGroupFilter(_checkedGroup); + return; + } + if (_app.isAutoLockEnabled()) { _app.lock(); } @@ -477,6 +492,31 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene updateGroupFilterMenu(); updateSortCategoryMenu(); } + + MenuItem searchViewMenuItem = menu.findItem(R.id.mi_search); + + _searchView = (SearchView) searchViewMenuItem.getActionView(); + _searchView.setFocusable(false); + _searchView.setQueryHint(getString(R.string.search)); + _searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String s) { + setTitle(getString(R.string.search)); + getSupportActionBar().setSubtitle(s); + _searchSubmitted = true; + collapseSearchView(); + return false; + } + + @Override + public boolean onQueryTextChange(String s) { + if (!_searchSubmitted) { + _entryListView.setSearchFilter(s); + } + return false; + } + }); + return true; } @@ -531,6 +571,11 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene } } + private void collapseSearchView() { + _searchView.setQuery(null, false); + _searchView.setIconified(true); + } + private boolean unlockDatabase(DatabaseFileCredentials creds) { try { if (!_db.isLoaded()) { diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java index 77a27b80..da57ea3a 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryAdapter.java @@ -31,6 +31,7 @@ public class EntryAdapter extends RecyclerView.Adapter implements I private String _groupFilter; private SortCategory _sortCategory; private ViewMode _viewMode; + private String _searchFilter; private boolean _isPeriodUniform = true; // keeps track of the viewholders that are currently bound @@ -141,10 +142,13 @@ public class EntryAdapter extends RecyclerView.Adapter implements I private boolean isEntryFiltered(DatabaseEntry entry) { String group = entry.getGroup(); - if (_groupFilter == null) { - return false; + String issuer = entry.getIssuer().toLowerCase(); + + if (_groupFilter != null && (group == null || !group.equals(_groupFilter))) { + return true; } - return group == null || !group.equals(_groupFilter); + + return _searchFilter != null && !issuer.contains(_searchFilter); } private DatabaseEntry getEntryByUUID(UUID uuid) { @@ -187,6 +191,11 @@ public class EntryAdapter extends RecyclerView.Adapter implements I } } + public void setSearchFilter(String search) { + _searchFilter = search != null ? search.toLowerCase() : null; + updateShownEntries(); + } + private void updateShownEntries() { // clear the list of shown entries first _shownEntries.clear(); diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java index 64ba6b04..1df8f8fd 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java @@ -100,6 +100,11 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener { } } + public void setSearchFilter(String search) { + _touchCallback.setIsLongPressDragEnabled(search == null); + _adapter.setSearchFilter(search); + } + public void setViewMode(ViewMode mode) { _adapter.setViewMode(mode); } diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 4d9644d5..355633e7 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -2,6 +2,12 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="com.beemdevelopment.aegis.com.impy.aegis.ui.MainActivity"> + Unable to read and process QR code Select picture Toggle checkboxes + Search