diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java index c38c651a55..6ace129a25 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java @@ -52,26 +52,41 @@ public void save(RecentSearch recentSearch) { /** * This method is called on confirmation of delete recent searches. - * It deletes latest 10 recent searches from the database - * @param recentSearchesStringList list of recent searches to be deleted + * It deletes all recent searches from the database */ - public void deleteAll(List recentSearchesStringList) { + public void deleteAll() { + Cursor cursor = null; ContentProviderClient db = clientProvider.get(); - for (String recentSearchName : recentSearchesStringList) { - try { - RecentSearch recentSearch = find(recentSearchName); - if (recentSearch.getContentUri() == null) { - throw new RuntimeException("tried to delete item with no content URI"); - } else { - Timber.d("QUERY_NAME %s - delete tried", recentSearch.getContentUri()); - db.delete(recentSearch.getContentUri(), null, null); - Timber.d("QUERY_NAME %s - query deleted", recentSearch.getQuery()); + try { + cursor = db.query( + RecentSearchesContentProvider.BASE_URI, + Table.ALL_FIELDS, + null, + new String[]{}, + Table.COLUMN_LAST_USED + " DESC" + ); + while (cursor != null && cursor.moveToNext()) { + try { + RecentSearch recentSearch = find(fromCursor(cursor).getQuery()); + if (recentSearch.getContentUri() == null) { + throw new RuntimeException("tried to delete item with no content URI"); + } else { + Timber.d("QUERY_NAME %s - delete tried", recentSearch.getContentUri()); + db.delete(recentSearch.getContentUri(), null, null); + Timber.d("QUERY_NAME %s - query deleted", recentSearch.getQuery()); + } + } catch (RemoteException e) { + Timber.e(e, "query deleted"); + throw new RuntimeException(e); + } finally { + db.release(); } - } catch (RemoteException e) { - Timber.e(e, "query deleted"); - throw new RuntimeException(e); - } finally { - db.release(); + } + } catch (RemoteException e) { + throw new RuntimeException(e); + } finally { + if (cursor != null) { + cursor.close(); } } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java index 289def4b2d..be76ef0ed3 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java @@ -54,7 +54,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, new AlertDialog.Builder(getContext()) .setMessage(getString(R.string.delete_recent_searches_dialog)) .setPositiveButton(android.R.string.yes, (dialog, which) -> { - recentSearchesDao.deleteAll(recentSearches); + recentSearchesDao.deleteAll(); recent_searches_delete_button.setVisibility(View.GONE); recent_searches_text_view.setText(R.string.no_recent_searches); Toast.makeText(getContext(),getString(R.string.search_history_deleted),Toast.LENGTH_SHORT).show(); @@ -70,7 +70,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, }); currentThemeIsDark = PreferenceManager.getDefaultSharedPreferences(getContext()).getBoolean("theme", false); setAdapterForThemes(getContext(), currentThemeIsDark); - + recentSearchesList.setAdapter(adapter); recentSearchesList.setOnItemClickListener((parent, view, position, id) -> ( (SearchActivity)getContext()).updateText(recentSearches.get(position)));