diff --git a/CHANGELOG.md b/CHANGELOG.md index 726246a26..c8898fb7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### Upcoming Release + +* Fix bug when entering only a space into the search dialog. + ### 0.98 (2015-02-02) * Add opt-in crash reporting via ACRA diff --git a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java index 90935ee8e..bb5e57bf6 100644 --- a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java +++ b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java @@ -614,15 +614,14 @@ public class AppProvider extends FDroidProvider { } private AppQuerySelection querySearch(String query) { - final String[] columns = { - getTableName() + ".id", - getTableName() + ".name", - getTableName() + ".summary", - getTableName() + ".description", - }; - - // Remove duplicates, surround in % for wildcard searching + // Put in a Set to remove duplicates final Set keywordSet = new HashSet<>(Arrays.asList(query.split("\\s"))); + + if (keywordSet.size() == 0) { + return new AppQuerySelection(); + } + + // Surround each keyword in % for wildcard searching final String[] keywords = new String[keywordSet.size()]; int iKeyword = 0; for (final String keyword : keywordSet) { @@ -630,6 +629,13 @@ public class AppProvider extends FDroidProvider { iKeyword++; } + final String[] columns = { + getTableName() + ".id", + getTableName() + ".name", + getTableName() + ".summary", + getTableName() + ".description", + }; + // Build selection string and fill out keyword arguments final StringBuilder selection = new StringBuilder(); final String[] selectionKeywords = new String[columns.length * keywords.length]; diff --git a/F-Droid/src/org/fdroid/fdroid/views/AppListFragmentPagerAdapter.java b/F-Droid/src/org/fdroid/fdroid/views/AppListFragmentPagerAdapter.java index 9e9e47ea3..59d1d4ec4 100644 --- a/F-Droid/src/org/fdroid/fdroid/views/AppListFragmentPagerAdapter.java +++ b/F-Droid/src/org/fdroid/fdroid/views/AppListFragmentPagerAdapter.java @@ -58,7 +58,22 @@ public class AppListFragmentPagerAdapter extends FragmentPagerAdapter { return parent.getString(R.string.tab_updates_count, updateCount); } + /** + * Changing the search query is quite an expensive operation, so this does some rudimentary + * checking to see if the two queries are meaningfully different. At present, it trims the + * strings and does a case insensitive comparison. + */ + private boolean isSearchQuerySame(String newQuery) { + String oldValueTrimmed = searchQuery == null ? "" : searchQuery.trim(); + String newValueTrimmed = newQuery == null ? "" : newQuery.trim(); + return oldValueTrimmed.equalsIgnoreCase(newValueTrimmed); + } + public void updateSearchQuery(@Nullable String query) { + if (isSearchQuerySame(query)) { + return; + } + searchQuery = query; for (AppListFragment fragment : registeredFragments) { if (fragment != null) {