diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 851ec26c22..eb5c7c0f4e 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -1646,6 +1646,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac private void onManageLocalContacts(Intent intent) { Bundle args = new Bundle(); + // All accounts args.putBoolean("junk", intent.getBooleanExtra("junk", false)); FragmentContacts fragment = new FragmentContacts(); diff --git a/app/src/main/java/eu/faircode/email/DaoContact.java b/app/src/main/java/eu/faircode/email/DaoContact.java index 8fc7a5c4b1..5e91e03ef3 100644 --- a/app/src/main/java/eu/faircode/email/DaoContact.java +++ b/app/src/main/java/eu/faircode/email/DaoContact.java @@ -38,8 +38,9 @@ public interface DaoContact { @Query("SELECT contact.*, account.name AS accountName" + " FROM contact" + " JOIN account ON account.id = contact.account" + + " WHERE (:account IS NULL OR contact.account = :account)" + " ORDER BY times_contacted DESC, last_contacted DESC") - LiveData> liveContacts(); + LiveData> liveContacts(Long account); @Query("SELECT email, name, avatar FROM contact" + " WHERE state <> " + EntityContact.STATE_IGNORE + diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 5118072ec9..42287031a7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -1916,8 +1916,11 @@ public class FragmentCompose extends FragmentBase { } private void onMenuManageLocalContacts() { + FragmentContacts fragment = new FragmentContacts(); + fragment.setArguments(new Bundle()); // all accounts + FragmentTransaction fragmentTransaction = getParentFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentContacts()).addToBackStack("contacts"); + fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("contacts"); fragmentTransaction.commit(); } diff --git a/app/src/main/java/eu/faircode/email/FragmentContacts.java b/app/src/main/java/eu/faircode/email/FragmentContacts.java index 783b3cb033..b51ebf9af0 100644 --- a/app/src/main/java/eu/faircode/email/FragmentContacts.java +++ b/app/src/main/java/eu/faircode/email/FragmentContacts.java @@ -75,9 +75,11 @@ public class FragmentContacts extends FragmentBase { private ContentLoadingProgressBar pbWait; private Group grpReady; - private long account; + private Long account = null; private boolean junk = false; private String searching = null; + private long selected_account; + private AdapterContact adapter; private static final int REQUEST_ACCOUNT = 1; @@ -90,7 +92,11 @@ public class FragmentContacts extends FragmentBase { super.onCreate(savedInstanceState); Bundle args = getArguments(); - this.junk = (args != null && args.getBoolean("junk")); + if (args == null) + args = new Bundle(); + + this.account = (args.containsKey("account") ? args.getLong("account") : null); + this.junk = args.getBoolean("junk"); } @Override @@ -127,6 +133,7 @@ public class FragmentContacts extends FragmentBase { outState.putLong("fair:account", account); outState.putBoolean("fair:junk", junk); outState.putString("fair:searching", searching); + outState.putLong("fair:selected_account", selected_account); super.onSaveInstanceState(outState); } @@ -138,12 +145,16 @@ public class FragmentContacts extends FragmentBase { account = savedInstanceState.getLong("fair:account"); junk = savedInstanceState.getBoolean("fair:junk"); searching = savedInstanceState.getString("fair:searching"); + selected_account = savedInstanceState.getLong("fair:selected_account"); } + onMenuJunk(junk); adapter.search(searching); - DB db = DB.getInstance(getContext()); - db.contact().liveContacts().observe(getViewLifecycleOwner(), new Observer>() { + final Context context = getContext(); + DB db = DB.getInstance(context); + + db.contact().liveContacts(account).observe(getViewLifecycleOwner(), new Observer>() { @Override public void onChanged(List contacts) { if (contacts == null) @@ -156,7 +167,7 @@ public class FragmentContacts extends FragmentBase { } }); - Shortcuts.update(getContext(), getViewLifecycleOwner()); + Shortcuts.update(context, getViewLifecycleOwner()); } @Override @@ -292,7 +303,7 @@ public class FragmentContacts extends FragmentBase { } private void onAccountSelected(Bundle args) { - account = args.getLong("account"); + selected_account = args.getLong("account"); boolean export = args.getBoolean("export"); final Context context = getContext(); @@ -321,7 +332,7 @@ public class FragmentContacts extends FragmentBase { Bundle args = new Bundle(); args.putParcelable("uri", uri); - args.putLong("account", account); + args.putLong("account", selected_account); new SimpleTask() { @Override @@ -390,7 +401,7 @@ public class FragmentContacts extends FragmentBase { private void handleExport(Intent data) { Bundle args = new Bundle(); args.putParcelable("uri", data.getData()); - args.putLong("account", account); + args.putLong("account", selected_account); new SimpleTask() { @Override @@ -401,6 +412,7 @@ public class FragmentContacts extends FragmentBase { @Override protected Void onExecute(Context context, Bundle args) throws Throwable { Uri uri = args.getParcelable("uri"); + long account = args.getLong("account"); if (uri == null) throw new FileNotFoundException(); diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogJunk.java b/app/src/main/java/eu/faircode/email/FragmentDialogJunk.java index 5eeac0009f..39564a7ebd 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogJunk.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogJunk.java @@ -236,11 +236,13 @@ public class FragmentDialogJunk extends FragmentDialogBase { @Override public void onClick(DialogInterface dialog, int which) { Bundle args = new Bundle(); + args.putLong("account", account); args.putLong("folder", folder); new SimpleTask() { @Override protected Void onExecute(Context context, Bundle args) throws Throwable { + long aid = args.getLong("account"); long fid = args.getLong("folder"); DB db = DB.getInstance(context); @@ -266,7 +268,7 @@ public class FragmentDialogJunk extends FragmentDialogBase { } } - int count = db.contact().deleteContact(account, EntityContact.TYPE_JUNK); + int count = db.contact().deleteContact(aid, EntityContact.TYPE_JUNK); EntityLog.log(context, "Deleted junk contacts=" + count); return null; @@ -313,6 +315,7 @@ public class FragmentDialogJunk extends FragmentDialogBase { @Override public void onClick(View v) { Bundle args = new Bundle(); + args.putLong("account", account); args.putBoolean("junk", true); FragmentContacts fragment = new FragmentContacts();