From 159975d3d895626f307fb09c0fc7bd3c9e1e2299 Mon Sep 17 00:00:00 2001 From: NekoInverter <7741672-NekoInverter@users.noreply.gitlab.com> Date: Mon, 28 Dec 2020 22:53:22 +0800 Subject: [PATCH] Fix filter fragment crash --- app/build.gradle | 2 +- app/src/main/java/com/hippo/ehviewer/EhDB.java | 17 ++++++++++++++--- .../com/hippo/ehviewer/client/EhFilter.java | 5 +++-- .../ehviewer/ui/fragment/FilterFragment.java | 18 ++++++++++++++---- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9be6dad69..b7e7d5bdc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,7 +26,7 @@ android { applicationId "io.github.nekoinverter.ehviewer" minSdkVersion 21 targetSdkVersion 30 - versionCode 131 + versionCode 132 versionName "1.7.20" resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", "es", "ja", "ko", "fr", "de", "th" diff --git a/app/src/main/java/com/hippo/ehviewer/EhDB.java b/app/src/main/java/com/hippo/ehviewer/EhDB.java index 61c73bed8..b7a217464 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhDB.java +++ b/app/src/main/java/com/hippo/ehviewer/EhDB.java @@ -595,9 +595,20 @@ public class EhDB { return sDaoSession.getFilterDao().queryBuilder().list(); } - public static synchronized void addFilter(Filter filter) { - filter.setId(null); - filter.setId(sDaoSession.getFilterDao().insert(filter)); + public static synchronized boolean addFilter(Filter filter) { + Filter existFilter; + try { + existFilter = sDaoSession.getFilterDao().queryBuilder().where(FilterDao.Properties.Text.eq(filter.text), FilterDao.Properties.Mode.eq(filter.mode)).unique(); + } catch (Exception e) { + existFilter = null; + } + if (existFilter == null) { + filter.setId(null); + filter.setId(sDaoSession.getFilterDao().insert(filter)); + return true; + } else { + return false; + } } public static synchronized void deleteFilter(Filter filter) { diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java b/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java index 811e8e34f..73942e1a9 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java @@ -88,10 +88,10 @@ public final class EhFilter { return mTagNamespaceFilterList; } - public synchronized void addFilter(Filter filter) { + public synchronized boolean addFilter(Filter filter) { // enable filter by default before it is added to database filter.enable = true; - EhDB.addFilter(filter); + if (!EhDB.addFilter(filter)) return false; switch (filter.mode) { case MODE_TITLE: @@ -113,6 +113,7 @@ public final class EhFilter { Log.d(TAG, "Unknown mode: " + filter.mode); break; } + return true; } public synchronized void triggerFilter(Filter filter) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.java index 012b88b65..b69cccbed 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/FilterFragment.java @@ -219,7 +219,12 @@ public class FilterFragment extends BaseFragment { Filter filter = new Filter(); filter.mode = mode; filter.text = text; - mFilterList.add(filter); + if (!mFilterList.add(filter)) { + mInputLayout.setError(getString(R.string.label_text_exist)); + return; + } else { + mInputLayout.setError(null); + } if (null != mAdapter) { mAdapter.notifyDataSetChanged(); @@ -314,7 +319,12 @@ public class FilterFragment extends BaseFragment { @Override public long getItemId(int position) { - return null != mFilterList ? mFilterList.get(position).text.hashCode() : 0; + if (mFilterList == null) { + return 0; + } else { + Filter filter = mFilterList.get(position); + return filter.text.hashCode() >> filter.mode; + } } } @@ -436,8 +446,8 @@ public class FilterFragment extends BaseFragment { throw new IndexOutOfBoundsException(); } - public void add(Filter filter) { - mEhFilter.addFilter(filter); + public boolean add(Filter filter) { + return mEhFilter.addFilter(filter); } public void delete(Filter filter) {