From 06573cd57fce72fc555d8aaa153993d723cecbdc Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 6 Apr 2023 09:31:47 +0200 Subject: [PATCH] Added rule/group suggestions --- .../main/java/eu/faircode/email/DaoRule.java | 5 +++ .../faircode/email/EditTextAutoComplete.java | 41 +++++++++++++++++++ .../java/eu/faircode/email/FragmentRule.java | 13 +++++- app/src/main/res/layout/fragment_rule.xml | 2 +- 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/eu/faircode/email/EditTextAutoComplete.java diff --git a/app/src/main/java/eu/faircode/email/DaoRule.java b/app/src/main/java/eu/faircode/email/DaoRule.java index 7182622ccc..cc30b6e3ec 100644 --- a/app/src/main/java/eu/faircode/email/DaoRule.java +++ b/app/src/main/java/eu/faircode/email/DaoRule.java @@ -62,6 +62,11 @@ public interface DaoRule { " WHERE rule.folder = :folder") LiveData> liveRules(long folder); + @Query("SELECT DISTINCT `group` FROM rule" + + " WHERE NOT `group` IS NULL" + + " ORDER by `group` COLLATE NOCASE") + List getGroups(); + @Query("SELECT COUNT(*) FROM rule") int countTotal(); diff --git a/app/src/main/java/eu/faircode/email/EditTextAutoComplete.java b/app/src/main/java/eu/faircode/email/EditTextAutoComplete.java new file mode 100644 index 0000000000..11912e43b2 --- /dev/null +++ b/app/src/main/java/eu/faircode/email/EditTextAutoComplete.java @@ -0,0 +1,41 @@ +package eu.faircode.email; + +/* + This file is part of FairEmail. + + FairEmail is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + FairEmail is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FairEmail. If not, see . + + Copyright 2018-2023 by Marcel Bokhorst (M66B) +*/ + +import android.content.Context; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatAutoCompleteTextView; + +public class EditTextAutoComplete extends AppCompatAutoCompleteTextView { + public EditTextAutoComplete(@NonNull Context context) { + super(context); + } + + public EditTextAutoComplete(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public EditTextAutoComplete(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } +} diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java index 9fdc4975de..e9ee492c92 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRule.java +++ b/app/src/main/java/eu/faircode/email/FragmentRule.java @@ -43,6 +43,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; @@ -86,7 +87,7 @@ public class FragmentRule extends FragmentBase { private TextView tvFolder; private EditText etName; - private EditText etGroup; + private AutoCompleteTextView etGroup; private EditText etOrder; private CheckBox cbEnabled; private CheckBox cbDaily; @@ -185,6 +186,7 @@ public class FragmentRule extends FragmentBase { private Group grpDelete; private Group grpLocalOnly; + private ArrayAdapter adapterGroup; private ArrayAdapter adapterDay; private ArrayAdapter adapterAction; private ArrayAdapter adapterIdentity; @@ -369,6 +371,10 @@ public class FragmentRule extends FragmentBase { grpDelete = view.findViewById(R.id.grpDelete); grpLocalOnly = view.findViewById(R.id.grpLocalOnly); + adapterGroup = new ArrayAdapter<>(getContext(), R.layout.spinner_item1_dropdown, android.R.id.text1); + etGroup.setThreshold(1); + etGroup.setAdapter(adapterGroup); + cbDaily.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @@ -839,6 +845,7 @@ public class FragmentRule extends FragmentBase { DB db = DB.getInstance(context); data.account = db.account().getAccount(aid); data.folder = db.folder().getFolder(fid); + data.groups = db.rule().getGroups(); data.identities = db.identity().getSynchronizingIdentities(aid); data.answers = db.answer().getAnswers(false); @@ -851,6 +858,9 @@ public class FragmentRule extends FragmentBase { data.account == null ? "" : data.account.name, data.folder.getDisplayName(getContext()))); + adapterGroup.clear(); + adapterGroup.addAll(data.groups); + adapterIdentity.clear(); adapterIdentity.addAll(data.identities); @@ -1692,6 +1702,7 @@ public class FragmentRule extends FragmentBase { private static class RefData { EntityAccount account; EntityFolder folder; + List groups; List identities; List answers; } diff --git a/app/src/main/res/layout/fragment_rule.xml b/app/src/main/res/layout/fragment_rule.xml index 6fbff5922c..2bf4c06d4e 100644 --- a/app/src/main/res/layout/fragment_rule.xml +++ b/app/src/main/res/layout/fragment_rule.xml @@ -81,7 +81,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/etName" /> -