Added button to delete block sender rules

pull/206/head
M66B 4 years ago
parent 7904267e9b
commit 2369f6dbea

@ -75,6 +75,11 @@ public interface DaoContact {
@Query("DELETE FROM contact WHERE id = :id")
int deleteContact(long id);
@Query("DELETE FROM contact" +
" WHERE account = :account" +
" AND type = :type")
int deleteContact(long account, int type);
@Query("DELETE FROM contact" +
" WHERE account = :account" +
" AND type = :type" +

@ -52,7 +52,7 @@ public class FragmentContacts extends FragmentBase {
private ContentLoadingProgressBar pbWait;
private Group grpReady;
private boolean junk = BuildConfig.DEBUG;
private boolean junk = false;
private String searching = null;
private AdapterContact adapter;

@ -34,14 +34,21 @@ import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.preference.PreferenceManager;
import org.json.JSONObject;
import java.util.List;
public class FragmentDialogJunk extends FragmentDialogBase {
@NonNull
@Override
@ -63,12 +70,12 @@ public class FragmentDialogJunk extends FragmentDialogBase {
final CheckBox cbBlockDomain = view.findViewById(R.id.cbBlockDomain);
final ImageButton ibMore = view.findViewById(R.id.ibMore);
final TextView tvMore = view.findViewById(R.id.tvMore);
final Button btnEditRules = view.findViewById(R.id.btnEditRules);
final CheckBox cbJunkFilter = view.findViewById(R.id.cbJunkFilter);
final ImageButton ibInfoFilter = view.findViewById(R.id.ibInfoFilter);
final CheckBox cbBlocklist = view.findViewById(R.id.cbBlocklist);
final TextView tvBlocklist = view.findViewById(R.id.tvBlocklist);
final ImageButton ibInfoBlocklist = view.findViewById(R.id.ibInfoBlocklist);
final Button btnClear = view.findViewById(R.id.btnClear);
final Group grpInJunk = view.findViewById(R.id.grpInJunk);
final Group grpMore = view.findViewById(R.id.grpMore);
@ -108,54 +115,6 @@ public class FragmentDialogJunk extends FragmentDialogBase {
ibMore.setOnClickListener(onMore);
tvMore.setOnClickListener(onMore);
btnEditRules.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (inJunk) {
new SimpleTask<EntityFolder>() {
@Override
protected EntityFolder onExecute(Context context, Bundle args) throws Throwable {
long account = args.getLong("account");
DB db = DB.getInstance(context);
EntityFolder inbox = db.folder().getFolderByType(account, EntityFolder.INBOX);
if (inbox == null)
throw new IllegalArgumentException(context.getString(R.string.title_no_inbox));
return inbox;
}
@Override
protected void onExecuted(Bundle args, EntityFolder inbox) {
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
lbm.sendBroadcast(
new Intent(ActivityView.ACTION_EDIT_RULES)
.putExtra("account", account)
.putExtra("protocol", protocol)
.putExtra("folder", inbox.id)
.putExtra("type", inbox.type));
dismiss();
}
@Override
protected void onException(Bundle args, Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex);
}
}.execute(FragmentDialogJunk.this, args, "junk:rules");
} else {
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
lbm.sendBroadcast(
new Intent(ActivityView.ACTION_EDIT_RULES)
.putExtra("account", account)
.putExtra("protocol", protocol)
.putExtra("folder", folder)
.putExtra("type", type));
dismiss();
}
}
});
cbJunkFilter.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@ -237,6 +196,59 @@ public class FragmentDialogJunk extends FragmentDialogBase {
}
});
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle args = new Bundle();
args.putLong("folder", folder);
new SimpleTask<Void>() {
@Override
protected Void onExecute(Context context, Bundle args) throws Throwable {
long fid = args.getLong("folder");
DB db = DB.getInstance(context);
EntityFolder folder = db.folder().getFolder(fid);
if (folder == null)
return null;
EntityFolder junk = db.folder().getFolderByType(folder.account, EntityFolder.JUNK);
if (junk == null)
return null;
List<EntityRule> rules = db.rule().getRules(fid);
if (rules == null)
return null;
for (EntityRule rule : rules) {
JSONObject jaction = new JSONObject(rule.action);
int type = jaction.optInt("type", -1);
long target = jaction.optLong("target", -1);
if (type == EntityRule.TYPE_MOVE && target == junk.id) {
EntityLog.log(context, "Deleting junk rule=" + rule.id);
db.rule().deleteRule(rule.id);
}
}
int count = db.contact().deleteContact(account, EntityContact.TYPE_JUNK);
EntityLog.log(context, "Deleted junk contacts=" + count);
return null;
}
@Override
protected void onExecuted(Bundle args, Void data) {
ToastEx.makeText(getContext(), R.string.title_completed, Toast.LENGTH_LONG).show();
}
@Override
protected void onException(Bundle args, Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex);
}
}.execute(FragmentDialogJunk.this, args, "junk:clear");
}
});
// Initialize
tvMessage.setText(inJunk
? getString(R.string.title_folder_junk)

@ -249,12 +249,6 @@ public class FragmentRules extends FragmentBase {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(@NonNull Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.menu_delete_junk).setVisible(!EntityFolder.JUNK.equals(type));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
@ -265,10 +259,7 @@ public class FragmentRules extends FragmentBase {
onMenuImport();
return true;
} else if (itemId == R.id.menu_delete_all) {
onMenuDelete(true);
return true;
} else if (itemId == R.id.menu_delete_junk) {
onMenuDelete(false);
onMenuDelete();
return true;
}
return super.onOptionsItemSelected(item);
@ -296,13 +287,10 @@ public class FragmentRules extends FragmentBase {
startActivityForResult(intent, REQUEST_IMPORT);
}
private void onMenuDelete(boolean all) {
private void onMenuDelete() {
Bundle aargs = new Bundle();
aargs.putString("question", getString(all
? R.string.title_rules_delete_all_confirm
: R.string.title_rules_delete_junk_confirm));
aargs.putString("question", getString(R.string.title_rules_delete_all_confirm));
aargs.putLong("folder", folder);
aargs.putBoolean("all", all);
FragmentDialogAsk ask = new FragmentDialogAsk();
ask.setArguments(aargs);
@ -497,35 +485,12 @@ public class FragmentRules extends FragmentBase {
@Override
protected Void onExecute(Context context, Bundle args) throws Throwable {
long fid = args.getLong("folder");
boolean all = args.getBoolean("all");
DB db = DB.getInstance(context);
try {
db.beginTransaction();
if (all)
db.rule().deleteRules(fid);
else {
EntityFolder folder = db.folder().getFolder(fid);
if (folder == null)
return null;
EntityFolder junk = db.folder().getFolderByType(folder.account, EntityFolder.JUNK);
if (junk == null)
return null;
List<EntityRule> rules = db.rule().getRules(fid);
if (rules == null)
return null;
for (EntityRule rule : rules) {
JSONObject jaction = new JSONObject(rule.action);
int type = jaction.optInt("type", -1);
long target = jaction.optLong("target", -1);
if (type == EntityRule.TYPE_MOVE && target == junk.id)
db.rule().deleteRule(rule.id);
}
}
db.rule().deleteRules(fid);
db.setTransactionSuccessful();
} finally {

@ -105,18 +105,6 @@
app:layout_constraintStart_toEndOf="@+id/ibMore"
app:layout_constraintTop_toTopOf="@+id/ibMore" />
<Button
android:id="@+id/btnEditRules"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:drawableEnd="@drawable/twotone_edit_24"
android:drawablePadding="6dp"
android:text="@string/title_edit_rules"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvMore" />
<CheckBox
android:id="@+id/cbJunkFilter"
android:layout_width="0dp"
@ -126,7 +114,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintEnd_toStartOf="@+id/ibInfoFilter"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnEditRules" />
app:layout_constraintTop_toBottomOf="@id/tvMore" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvJunkFilterHint"
@ -205,6 +193,31 @@
app:srcCompat="@drawable/twotone_info_24"
app:tint="?attr/colorAccent" />
<Button
android:id="@+id/btnClear"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:drawableEnd="@drawable/twotone_delete_24"
android:drawablePadding="6dp"
android:text="@string/title_junk_clear"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvBlocklistHint" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvClearHint"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/title_junk_clear_hint"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?attr/colorWarning"
android:textStyle="italic"
app:layout_constraintEnd_toStartOf="@+id/ibInfoFilter"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnClear" />
<androidx.constraintlayout.widget.Group
android:id="@+id/grpInJunk"
android:layout_width="0dp"
@ -218,8 +231,8 @@
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="
btnEditRules,
cbJunkFilter,tvJunkFilterHint,ibInfoFilter,
cbBlocklist,tvBlocklist,tvBlocklistHint,ibInfoBlocklist" />
cbBlocklist,tvBlocklist,tvBlocklistHint,ibInfoBlocklist,
btnClear,tvClearHint" />
</androidx.constraintlayout.widget.ConstraintLayout>
</eu.faircode.email.ScrollViewEx>

@ -25,10 +25,5 @@
android:id="@+id/menu_delete_all"
android:title="@string/title_rules_delete_all"
app:showAsAction="never" />
<item
android:id="@+id/menu_delete_junk"
android:title="@string/title_rules_delete_junk"
app:showAsAction="never" />
</group>
</menu>

@ -101,6 +101,8 @@
<string name="title_junk_filter">Use local spam filter</string>
<string name="title_junk_filter_hint">This can increase battery usage and incorrectly mark messages as spam</string>
<string name="title_junk_blocklist">Use spam block lists</string>
<string name="title_junk_clear">Clear</string>
<string name="title_junk_clear_hint">This will delete all block sender rules</string>
<string name="title_notification_sending">Sending messages</string>
<string name="title_notification_waiting">Waiting for suitable connection</string>
@ -1692,9 +1694,7 @@
<string name="title_rules_export">Export rules</string>
<string name="title_rules_import">Import rules</string>
<string name="title_rules_delete_all">Delete all rules</string>
<string name="title_rules_delete_junk">Delete spam rules</string>
<string name="title_rules_delete_all_confirm">Delete all rules?</string>
<string name="title_rules_delete_junk_confirm">Delete all rules moving messages to the spam folder?</string>
<string name="title_debug_info">Debug info</string>
<string name="title_debug_info_remark">Please describe the problem and indicate the time of the problem:</string>
<string name="title_crash_info_remark">Please describe what you were doing when the app crashed:</string>

Loading…
Cancel
Save