diff --git a/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java b/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java index f639927..db97c95 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java +++ b/app/src/main/java/com/majinnaibu/monstercards/data/MonsterRepository.java @@ -3,8 +3,10 @@ package com.majinnaibu.monstercards.data; import androidx.annotation.NonNull; import com.majinnaibu.monstercards.AppDatabase; +import com.majinnaibu.monstercards.helpers.StringHelper; import com.majinnaibu.monstercards.models.Monster; +import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -31,7 +33,16 @@ public class MonsterRepository { public Flowable> searchMonsters(String searchText) { return m_db.monsterDAO() - .search(searchText) + .getAll() + .map(monsters -> { + ArrayList filteredMonsters = new ArrayList<>(); + for (Monster monster : monsters) { + if (Helpers.monsterMatchesSearch(monster, searchText)) { + filteredMonsters.add(monster); + } + } + return (List) filteredMonsters; + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } @@ -68,4 +79,34 @@ public class MonsterRepository { result.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); return result; } + + private static class Helpers { + static boolean monsterMatchesSearch(Monster monster, String searchText) { + if (StringHelper.isNullOrEmpty(searchText)) { + return true; + } + + if (StringHelper.containsCaseInsensitive(monster.name, searchText)) { + return true; + } + + if (StringHelper.containsCaseInsensitive(monster.size, searchText)) { + return true; + } + + if (StringHelper.containsCaseInsensitive(monster.type, searchText)) { + return true; + } + + if (StringHelper.containsCaseInsensitive(monster.subtype, searchText)) { + return true; + } + + if (StringHelper.containsCaseInsensitive(monster.alignment, searchText)) { + return true; + } + + return false; + } + } } diff --git a/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java b/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java index 1966500..b407000 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java +++ b/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java @@ -66,4 +66,9 @@ public final class StringHelper { return null; } } + + public static boolean containsCaseInsensitive(String text, String search) { + // TODO: find a locale independent way to do this + return text.toLowerCase().contains(search.toLowerCase()); + } }