diff --git a/CHANGELOG.md b/CHANGELOG.md index aee407a7b..ca2a04ed6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased - 86 + +- Improve search with spaces + ## v2.7.0 - 85 (2021-10-05) Android 4.4 is no longer supported starting with this release. If you want to use Catima on Android 4.4, please use version 2.6.1. diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index 1469bb84e..d7fc4569d 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -7,6 +7,7 @@ import android.database.DatabaseUtils; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; +import android.text.TextUtils; import java.io.FileNotFoundException; import java.math.BigDecimal; @@ -663,38 +664,26 @@ public class DBHelper extends SQLiteOpenHelper return db.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE + " JOIN " + LoyaltyCardDbFTS.TABLE + " ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID + - (filter.isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") + + (filter.trim().isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") + groupFilter.toString() + " ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " + " (CASE WHEN " + LoyaltyCardDbIds.TABLE + "." + orderField + " IS NULL THEN 1 ELSE 0 END), " + LoyaltyCardDbIds.TABLE + "." + orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " + - limitString, filter.isEmpty() ? null : new String[] { filter + '*' }, null); + limitString, filter.trim().isEmpty() ? null : new String[] { TextUtils.join("* ", filter.split(" ")) + '*' }, null); } + /** + * Returns the amount of loyalty cards. + * + * @return Integer + */ public int getLoyaltyCardCount() { SQLiteDatabase db = getReadableDatabase(); return (int) DatabaseUtils.queryNumEntries(db, LoyaltyCardDbIds.TABLE); } - /** - * Returns the amount of loyalty cards with the filter text in either the store or note. - * - * @param filter - * @return Integer - */ - public int getLoyaltyCardCount(String filter) - { - if (filter.isEmpty()) { - return getLoyaltyCardCount(); - } - - SQLiteDatabase db = getReadableDatabase(); - return (int) DatabaseUtils.queryNumEntries(db, LoyaltyCardDbFTS.TABLE, - LoyaltyCardDbFTS.TABLE + " MATCH ? ", withArgs(filter + '*')); - } - /** * Returns a cursor to all groups. *