diff --git a/app/src/main/java/eu/faircode/email/AdapterRule.java b/app/src/main/java/eu/faircode/email/AdapterRule.java index d6b8d97f3b..0f2fe1fb3c 100644 --- a/app/src/main/java/eu/faircode/email/AdapterRule.java +++ b/app/src/main/java/eu/faircode/email/AdapterRule.java @@ -55,7 +55,7 @@ public class AdapterRule extends RecyclerView.Adapter { ViewHolder(View itemView) { super(itemView); - this.itemView = itemView; + this.itemView = itemView.findViewById(R.id.clItem); tvName = itemView.findViewById(R.id.tvName); } @@ -68,6 +68,7 @@ public class AdapterRule extends RecyclerView.Adapter { } private void bindTo(EntityRule rule) { + itemView.setActivated(!rule.enabled); tvName.setText(rule.name); } diff --git a/app/src/main/java/eu/faircode/email/DB.java b/app/src/main/java/eu/faircode/email/DB.java index 7ed8a7b869..d93234e325 100644 --- a/app/src/main/java/eu/faircode/email/DB.java +++ b/app/src/main/java/eu/faircode/email/DB.java @@ -445,9 +445,9 @@ public abstract class DB extends RoomDatabase { " `folder` INTEGER NOT NULL," + " `name` TEXT NOT NULL," + " `order` INTEGER NOT NULL," + + " `enabled` INTEGER NOT NULL," + " `condition` TEXT NOT NULL," + " `action` TEXT NOT NULL," + - " `enabled` INTEGER NOT NULL," + " FOREIGN KEY(`folder`) REFERENCES `folder`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE)"); db.execSQL("CREATE INDEX `index_rule_folder` ON `rule` (`folder`)"); db.execSQL("CREATE INDEX `index_rule_order` ON `rule` (`order`)"); diff --git a/app/src/main/java/eu/faircode/email/DaoRule.java b/app/src/main/java/eu/faircode/email/DaoRule.java index d048ac693c..89f3ec6abd 100644 --- a/app/src/main/java/eu/faircode/email/DaoRule.java +++ b/app/src/main/java/eu/faircode/email/DaoRule.java @@ -29,7 +29,9 @@ import androidx.room.Update; @Dao public interface DaoRule { - @Query("SELECT * FROM rule WHERE folder = :folder") + @Query("SELECT * FROM rule" + + " WHERE folder = :folder" + + " ORDER BY `order`") List getRules(long folder); @Query("SELECT rule.*, folder.account FROM rule" + @@ -37,7 +39,7 @@ public interface DaoRule { " WHERE rule.id = :id") TupleRuleEx getRule(long id); - @Query("SELECT * FROM rule") + @Query("SELECT * FROM rule ORDER BY `order`") LiveData> liveRules(); @Insert diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index 34a578e8f7..c745bcbf3f 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -57,11 +57,11 @@ public class EntityRule { @NonNull public int order; @NonNull + public boolean enabled; + @NonNull public String condition; @NonNull public String action; - @NonNull - public boolean enabled; static final int TYPE_SEEN = 1; static final int TYPE_UNSEEN = 2; @@ -135,9 +135,10 @@ public class EntityRule { EntityRule other = (EntityRule) obj; return this.folder.equals(other.folder) && this.name.equals(other.name) && + this.order == other.order && + this.enabled == other.enabled && this.condition.equals(other.condition) && - this.action.equals(other.action) && - this.enabled == other.enabled; + this.action.equals(other.action); } else return false; } diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java index a1c80cc4d0..d07612a403 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRule.java +++ b/app/src/main/java/eu/faircode/email/FragmentRule.java @@ -50,9 +50,10 @@ import androidx.lifecycle.Lifecycle; public class FragmentRule extends FragmentBase { private ViewGroup view; private EditText etName; + private EditText etOrder; + private CheckBox cbEnabled; private Spinner spAccount; private Spinner spFolder; - private EditText etOrder; private EditText etSender; private EditText etSubject; private EditText etText; @@ -86,9 +87,10 @@ public class FragmentRule extends FragmentBase { // Get controls etName = view.findViewById(R.id.etName); + etOrder = view.findViewById(R.id.etOrder); + cbEnabled = view.findViewById(R.id.cbEnabled); spAccount = view.findViewById(R.id.spAccount); spFolder = view.findViewById(R.id.spFolder); - etOrder = view.findViewById(R.id.etOrder); etSender = view.findViewById(R.id.etSender); etSubject = view.findViewById(R.id.etSubject); etText = view.findViewById(R.id.etText); @@ -199,6 +201,7 @@ public class FragmentRule extends FragmentBase { etName.setText(rule == null ? null : rule.name); etOrder.setText(rule == null ? null : Integer.toString(rule.order)); + cbEnabled.setChecked(rule == null ? true : rule.enabled); etSender.setText(jcondition.optString("sender")); etSubject.setText(jcondition.optString("subject")); etText.setText(jcondition.optString("text")); @@ -357,6 +360,7 @@ public class FragmentRule extends FragmentBase { args.putLong("folder", folder == null ? -1 : folder.id); args.putString("name", etName.getText().toString()); args.putString("order", etOrder.getText().toString()); + args.putBoolean("enabled", cbEnabled.isChecked()); args.putString("condition", jcondition.toString()); args.putString("action", jaction.toString()); @@ -377,6 +381,7 @@ public class FragmentRule extends FragmentBase { long folder = args.getLong("folder"); String name = args.getString("name"); String order = args.getString("order"); + boolean enabled = args.getBoolean("enabled"); String condition = args.getString("condition"); String action = args.getString("action"); @@ -392,6 +397,7 @@ public class FragmentRule extends FragmentBase { rule.folder = folder; rule.name = name; rule.order = Integer.parseInt(order); + rule.enabled = enabled; rule.condition = condition; rule.action = action; rule.id = db.rule().insertRule(rule); @@ -400,6 +406,7 @@ public class FragmentRule extends FragmentBase { rule.folder = folder; rule.name = name; rule.order = Integer.parseInt(order); + rule.enabled = enabled; rule.condition = condition; rule.action = action; db.rule().updateRule(rule); diff --git a/app/src/main/res/layout/fragment_rule.xml b/app/src/main/res/layout/fragment_rule.xml index 133e6b7664..f4e90c4ec5 100644 --- a/app/src/main/res/layout/fragment_rule.xml +++ b/app/src/main/res/layout/fragment_rule.xml @@ -37,6 +37,36 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvName" /> + + + + + + + app:layout_constraintTop_toBottomOf="@id/cbEnabled" /> - - - - + app:layout_constraintTop_toBottomOf="@id/tvFolderRemark" /> - - + android:background="?attr/drawableItemBackground"> - - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c9820af791..2a868b9b86 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -386,6 +386,7 @@ Folder The texts of messages in the selected folder will always be downloaded Order + Enabled Sender Subject Text