Added contacts account selection

pull/207/head
M66B 3 years ago
parent 2bbf90b037
commit 3888f7710a

@ -58,6 +58,7 @@ import androidx.recyclerview.widget.RecyclerView;
import java.io.InputStream;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutorService;
@ -72,6 +73,7 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
private int textColorSecondary;
private String search = null;
private Long account;
private List<Integer> types = new ArrayList<>();
private List<TupleContactEx> all = new ArrayList<>();
@ -389,20 +391,23 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
public void set(@NonNull List<TupleContactEx> contacts) {
Log.i("Set contacts=" + contacts.size() +
" search=" + search + " types=" + types.size());
" search=" + search +
" account=" + account +
" types=" + types.size());
all = contacts;
new SimpleTask<List<TupleContactEx>>() {
@Override
protected List<TupleContactEx> onExecute(Context context, Bundle args) throws Throwable {
protected List<TupleContactEx> onExecute(Context context, Bundle args) {
List<TupleContactEx> filtered;
if (types.size() == 0)
if (account == null && types.size() == 0)
filtered = contacts;
else {
filtered = new ArrayList<>();
for (TupleContactEx contact : contacts)
if (types.contains(contact.type))
if ((account == null || contact.account.equals(account)) &&
(types.size() == 0 || types.contains(contact.type)))
filtered.add(contact);
}
@ -469,8 +474,11 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
set(all);
}
public void filter(List<Integer> types) {
this.types = types;
public void filter(Long account, boolean junk) {
this.account = account;
this.types = junk
? Arrays.asList(EntityContact.TYPE_JUNK, EntityContact.TYPE_NO_JUNK)
: new ArrayList<>();
set(all);
}

@ -60,7 +60,6 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@ -71,7 +70,6 @@ import ezvcard.VCard;
import ezvcard.VCardVersion;
import ezvcard.io.text.VCardReader;
import ezvcard.io.text.VCardWriter;
import ezvcard.property.Categories;
import ezvcard.property.Email;
import ezvcard.property.FormattedName;
@ -88,11 +86,12 @@ public class FragmentContacts extends FragmentBase {
private AdapterContact adapter;
private static final int REQUEST_ACCOUNT = 1;
private static final int REQUEST_IMPORT = 2;
private static final int REQUEST_EXPORT = 3;
static final int REQUEST_EDIT_ACCOUNT = 4;
static final int REQUEST_EDIT_CONTACT = 5;
private static final int REQUEST_FILTER = 1;
private static final int REQUEST_ACCOUNT = 2;
private static final int REQUEST_IMPORT = 3;
private static final int REQUEST_EXPORT = 4;
static final int REQUEST_EDIT_ACCOUNT = 5;
static final int REQUEST_EDIT_CONTACT = 6;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -159,7 +158,7 @@ public class FragmentContacts extends FragmentBase {
account = null;
}
onMenuJunk(junk);
adapter.filter(account, junk);
adapter.search(searching);
fabAdd.setOnClickListener(new View.OnClickListener() {
@ -178,7 +177,7 @@ public class FragmentContacts extends FragmentBase {
final Context context = getContext();
DB db = DB.getInstance(context);
db.contact().liveContacts(account).observe(getViewLifecycleOwner(), new Observer<List<TupleContactEx>>() {
db.contact().liveContacts(null).observe(getViewLifecycleOwner(), new Observer<List<TupleContactEx>>() {
@Override
public void onChanged(List<TupleContactEx> contacts) {
if (contacts == null)
@ -254,6 +253,9 @@ public class FragmentContacts extends FragmentBase {
item.setChecked(!item.isChecked());
onMenuJunk(item.isChecked());
return true;
} else if (itemId == R.id.menu_account) {
onMenuAccount();
return true;
} else if (itemId == R.id.menu_import) {
onMenuVcard(false);
return true;
@ -274,19 +276,28 @@ public class FragmentContacts extends FragmentBase {
private void onMenuJunk(boolean junk) {
this.junk = junk;
setSubtitle(junk ? R.string.title_blocked_senders : R.string.menu_contacts);
adapter.filter(junk
? Arrays.asList(EntityContact.TYPE_JUNK, EntityContact.TYPE_NO_JUNK)
: new ArrayList<>());
adapter.filter(account, junk);
}
private void onMenuAccount() {
FragmentDialogSelectAccount fragment = new FragmentDialogSelectAccount();
fragment.setArguments(new Bundle());
fragment.setTargetFragment(this, REQUEST_FILTER);
fragment.show(getParentFragmentManager(), "contacts:select");
}
private void onMenuVcard(boolean export) {
Bundle args = new Bundle();
args.putBoolean("export", export);
FragmentDialogSelectAccount fragment = new FragmentDialogSelectAccount();
fragment.setArguments(args);
fragment.setTargetFragment(this, REQUEST_ACCOUNT);
fragment.show(getParentFragmentManager(), "contact:account");
if (account == null) {
FragmentDialogSelectAccount fragment = new FragmentDialogSelectAccount();
fragment.setArguments(args);
fragment.setTargetFragment(this, REQUEST_ACCOUNT);
fragment.show(getParentFragmentManager(), "contacts:vcard");
} else {
args.putLong("account", account);
onAccountSelected(args);
}
}
private void onMenuDeleteAll() {
@ -307,7 +318,7 @@ public class FragmentContacts extends FragmentBase {
FragmentContacts.FragmentDialogEditContact fragment = new FragmentContacts.FragmentDialogEditContact();
fragment.setArguments(args);
fragment.setTargetFragment(this, REQUEST_EDIT_CONTACT);
fragment.show(getParentFragmentManager(), "contact:add");
fragment.show(getParentFragmentManager(), "contacts:add");
}
@Override
@ -316,6 +327,10 @@ public class FragmentContacts extends FragmentBase {
try {
switch (requestCode) {
case REQUEST_FILTER:
if (resultCode == RESULT_OK && data != null)
onAccountFilter(data.getBundleExtra("args"));
break;
case REQUEST_ACCOUNT:
if (resultCode == RESULT_OK && data != null)
onAccountSelected(data.getBundleExtra("args"));
@ -342,6 +357,11 @@ public class FragmentContacts extends FragmentBase {
}
}
private void onAccountFilter(Bundle args) {
account = args.getLong("account");
adapter.filter(account, junk);
}
private void onAccountSelected(Bundle args) {
selected_account = args.getLong("account");
boolean export = args.getBoolean("export");
@ -441,7 +461,7 @@ public class FragmentContacts extends FragmentBase {
else
Log.unexpectedError(getParentFragmentManager(), ex);
}
}.execute(this, args, "setup:import");
}.execute(this, args, "contacts:import");
}
private void handleExport(Intent data) {
@ -510,7 +530,7 @@ public class FragmentContacts extends FragmentBase {
protected void onException(Bundle args, Throwable ex) {
Log.unexpectedError(getParentFragmentManager(), ex);
}
}.execute(this, args, "");
}.execute(this, args, "contacts:export");
}
private void onEditContact(Bundle args) {
@ -566,7 +586,7 @@ public class FragmentContacts extends FragmentBase {
else
Log.unexpectedError(getParentFragmentManager(), ex);
}
}.execute(this, args, "contact:name");
}.execute(this, args, "contacts:name");
}
public static class FragmentDelete extends FragmentDialogBase {

@ -20,6 +20,11 @@
android:icon="@drawable/twotone_report_24"
android:title="@string/title_spam" />
<item
android:id="@+id/menu_account"
android:icon="@drawable/twotone_account_circle_24"
android:title="@string/title_setup_select_account" />
<item
android:id="@+id/menu_import"
android:icon="@drawable/twotone_unarchive_24"

Loading…
Cancel
Save