mirror of
https://github.com/deltachat/deltachat-android.git
synced 2025-10-03 17:59:39 +02:00
don't use email address as contact unique identifier
This commit is contained in:
parent
8aedbc60a4
commit
fbf8637c97
9 changed files with 59 additions and 63 deletions
|
@ -9,9 +9,8 @@ public class AttachContactActivity extends ContactSelectionActivity {
|
||||||
public static final String CONTACT_ID_EXTRA = "contact_id_extra";
|
public static final String CONTACT_ID_EXTRA = "contact_id_extra";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onContactSelected(int specialId, String addr) {
|
public void onContactSelected(int contactId) {
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
int contactId = DcHelper.getContext(this).lookupContactIdByAddr(addr);
|
|
||||||
intent.putExtra(CONTACT_ID_EXTRA, contactId);
|
intent.putExtra(CONTACT_ID_EXTRA, contactId);
|
||||||
setResult(RESULT_OK, intent);
|
setResult(RESULT_OK, intent);
|
||||||
finish();
|
finish();
|
||||||
|
|
|
@ -33,6 +33,8 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public class ContactMultiSelectionActivity extends ContactSelectionActivity {
|
public class ContactMultiSelectionActivity extends ContactSelectionActivity {
|
||||||
|
|
||||||
|
public static final String CONTACTS_EXTRA = "contacts_extra";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle icicle, boolean ready) {
|
protected void onCreate(Bundle icicle, boolean ready) {
|
||||||
getIntent().putExtra(ContactSelectionListFragment.MULTI_SELECT, true);
|
getIntent().putExtra(ContactSelectionListFragment.MULTI_SELECT, true);
|
||||||
|
@ -68,12 +70,8 @@ public class ContactMultiSelectionActivity extends ContactSelectionActivity {
|
||||||
|
|
||||||
private void saveSelection() {
|
private void saveSelection() {
|
||||||
Intent resultIntent = getIntent();
|
Intent resultIntent = getIntent();
|
||||||
List<String> selectedContacts = contactsFragment.getSelectedContacts();
|
List<Integer> selectedContacts = contactsFragment.getSelectedContacts();
|
||||||
|
resultIntent.putIntegerArrayListExtra(CONTACTS_EXTRA, new ArrayList<>(selectedContacts));
|
||||||
if (selectedContacts != null) {
|
|
||||||
resultIntent.putStringArrayListExtra("contacts", new ArrayList<>(selectedContacts));
|
|
||||||
}
|
|
||||||
|
|
||||||
setResult(RESULT_OK, resultIntent);
|
setResult(RESULT_OK, resultIntent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,8 +89,8 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onContactSelected(int specialId, String number) {}
|
public void onContactSelected(int contactId) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onContactDeselected(int specialId, String number) {}
|
public void onContactDeselected(int contactId) {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ public class ContactSelectionListFragment extends Fragment
|
||||||
|
|
||||||
private DcContext dcContext;
|
private DcContext dcContext;
|
||||||
|
|
||||||
private Set<String> selectedContacts;
|
private Set<Integer> selectedContacts;
|
||||||
private OnContactSelectedListener onContactSelectedListener;
|
private OnContactSelectedListener onContactSelectedListener;
|
||||||
private String cursorFilter;
|
private String cursorFilter;
|
||||||
private RecyclerView recyclerView;
|
private RecyclerView recyclerView;
|
||||||
|
@ -234,8 +234,8 @@ public class ContactSelectionListFragment extends Fragment
|
||||||
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
|
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NonNull List<String> getSelectedContacts() {
|
public @NonNull List<Integer> getSelectedContacts() {
|
||||||
List<String> selected = new LinkedList<>();
|
List<Integer> selected = new LinkedList<>();
|
||||||
if (selectedContacts != null) {
|
if (selectedContacts != null) {
|
||||||
selected.addAll(selectedContacts);
|
selected.addAll(selectedContacts);
|
||||||
}
|
}
|
||||||
|
@ -258,7 +258,7 @@ public class ContactSelectionListFragment extends Fragment
|
||||||
isMulti(),
|
isMulti(),
|
||||||
true);
|
true);
|
||||||
selectedContacts = adapter.getSelectedContacts();
|
selectedContacts = adapter.getSelectedContacts();
|
||||||
ArrayList<String> preselectedContacts = getActivity().getIntent().getStringArrayListExtra(PRESELECTED_CONTACTS);
|
ArrayList<Integer> preselectedContacts = getActivity().getIntent().getIntegerArrayListExtra(PRESELECTED_CONTACTS);
|
||||||
if(preselectedContacts!=null) {
|
if(preselectedContacts!=null) {
|
||||||
selectedContacts.addAll(preselectedContacts);
|
selectedContacts.addAll(preselectedContacts);
|
||||||
}
|
}
|
||||||
|
@ -336,10 +336,9 @@ public class ContactSelectionListFragment extends Fragment
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int specialId = contact.getSpecialId();
|
int contactId = contact.getSpecialId();
|
||||||
String addr = contact.getNumber();
|
if (!isMulti() || !selectedContacts.contains(contactId)) {
|
||||||
if (!isMulti() || !selectedContacts.contains(addr)) {
|
if (contactId == DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT) {
|
||||||
if (specialId == DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT) {
|
|
||||||
Intent intent = new Intent(getContext(), NewContactActivity.class);
|
Intent intent = new Intent(getContext(), NewContactActivity.class);
|
||||||
if (dcContext.mayBeValidAddr(cursorFilter)) {
|
if (dcContext.mayBeValidAddr(cursorFilter)) {
|
||||||
intent.putExtra(NewContactActivity.ADDR_EXTRA, cursorFilter);
|
intent.putExtra(NewContactActivity.ADDR_EXTRA, cursorFilter);
|
||||||
|
@ -363,16 +362,16 @@ public class ContactSelectionListFragment extends Fragment
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedContacts.add(addr);
|
selectedContacts.add(contactId);
|
||||||
contact.setChecked(true);
|
contact.setChecked(true);
|
||||||
if (onContactSelectedListener != null) {
|
if (onContactSelectedListener != null) {
|
||||||
onContactSelectedListener.onContactSelected(specialId, addr);
|
onContactSelectedListener.onContactSelected(contactId);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
selectedContacts.remove(addr);
|
selectedContacts.remove(contactId);
|
||||||
contact.setChecked(false);
|
contact.setChecked(false);
|
||||||
if (onContactSelectedListener != null) {
|
if (onContactSelectedListener != null) {
|
||||||
onContactSelectedListener.onContactDeselected(specialId, addr);
|
onContactSelectedListener.onContactDeselected(contactId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -398,8 +397,8 @@ public class ContactSelectionListFragment extends Fragment
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface OnContactSelectedListener {
|
public interface OnContactSelectedListener {
|
||||||
void onContactSelected(int specialId, String number);
|
void onContactSelected(int contactId);
|
||||||
void onContactDeselected(int specialId, String number);
|
void onContactDeselected(int contactId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -413,7 +412,10 @@ public class ContactSelectionListFragment extends Fragment
|
||||||
public void onActivityResult(int reqCode, int resultCode, final Intent data) {
|
public void onActivityResult(int reqCode, int resultCode, final Intent data) {
|
||||||
super.onActivityResult(reqCode, resultCode, data);
|
super.onActivityResult(reqCode, resultCode, data);
|
||||||
if (resultCode == Activity.RESULT_OK && reqCode == CONTACT_ADDR_RESULT_CODE) {
|
if (resultCode == Activity.RESULT_OK && reqCode == CONTACT_ADDR_RESULT_CODE) {
|
||||||
selectedContacts.add(data.getStringExtra(NewContactActivity.ADDR_EXTRA));
|
int contactId = data.getIntExtra(NewContactActivity.CONTACT_ID_EXTRA, 0);
|
||||||
|
if (contactId != 0) {
|
||||||
|
selectedContacts.add(contactId);
|
||||||
|
}
|
||||||
getLoaderManager().restartLoader(0, null, ContactSelectionListFragment.this);
|
getLoaderManager().restartLoader(0, null, ContactSelectionListFragment.this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -244,10 +244,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||||
if (contactId == DcContact.DC_CONTACT_ID_ADD_MEMBER) {
|
if (contactId == DcContact.DC_CONTACT_ID_ADD_MEMBER) {
|
||||||
Intent intent = new Intent(this, ContactMultiSelectionActivity.class);
|
Intent intent = new Intent(this, ContactMultiSelectionActivity.class);
|
||||||
intent.putExtra(ContactSelectionListFragment.SELECT_VERIFIED_EXTRA, verified);
|
intent.putExtra(ContactSelectionListFragment.SELECT_VERIFIED_EXTRA, verified);
|
||||||
ArrayList<String> preselectedContacts = new ArrayList<>();
|
ArrayList<Integer> preselectedContacts = new ArrayList<>(getAdapter().getContacts());
|
||||||
for (int id : getAdapter().getContacts()) {
|
|
||||||
preselectedContacts.add(dcContext.getContact(id).getAddr());
|
|
||||||
}
|
|
||||||
intent.putExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS, preselectedContacts);
|
intent.putExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS, preselectedContacts);
|
||||||
startActivityForResult(intent, PICK_CONTACT);
|
startActivityForResult(intent, PICK_CONTACT);
|
||||||
}
|
}
|
||||||
|
@ -333,9 +330,9 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||||
|
|
||||||
case PICK_CONTACT:
|
case PICK_CONTACT:
|
||||||
ArrayList<Integer> contactIds = new ArrayList<>();
|
ArrayList<Integer> contactIds = new ArrayList<>();
|
||||||
for (String addr : Objects.requireNonNull(data.getStringArrayListExtra("contacts"))) {
|
for (Integer contactId : Objects.requireNonNull(data.getIntegerArrayListExtra(ContactMultiSelectionActivity.CONTACTS_EXTRA))) {
|
||||||
if(addr != null) {
|
if(contactId != null) {
|
||||||
contactIds.add(dcContext.createContact(null, addr));
|
contactIds.add(contactId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getAdapter().changeData(contactIds);
|
getAdapter().changeData(contactIds);
|
||||||
|
|
|
@ -72,7 +72,17 @@ public class NewConversationActivity extends ContactSelectionActivity {
|
||||||
if (!textToShare.isEmpty()) {
|
if (!textToShare.isEmpty()) {
|
||||||
getIntent().putExtra(TEXT_EXTRA, textToShare);
|
getIntent().putExtra(TEXT_EXTRA, textToShare);
|
||||||
}
|
}
|
||||||
onContactSelected(DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT, recipientsArray[0]);
|
final String addr = recipientsArray[0];
|
||||||
|
final DcContext dcContext = DcHelper.getContext(this);
|
||||||
|
int contactId = dcContext.lookupContactIdByAddr(addr);
|
||||||
|
if (contactId == 0 && dcContext.mayBeValidAddr(addr)) {
|
||||||
|
contactId = dcContext.createContact(null, recipientsArray[0]);
|
||||||
|
}
|
||||||
|
if (contactId == 0) {
|
||||||
|
Toast.makeText(this, R.string.bad_email_address, Toast.LENGTH_LONG).show();
|
||||||
|
} else {
|
||||||
|
onContactSelected(contactId);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Intent shareIntent = new Intent(this, ShareActivity.class);
|
Intent shareIntent = new Intent(this, ShareActivity.class);
|
||||||
shareIntent.putExtra(Intent.EXTRA_TEXT, textToShare);
|
shareIntent.putExtra(Intent.EXTRA_TEXT, textToShare);
|
||||||
|
@ -89,37 +99,28 @@ public class NewConversationActivity extends ContactSelectionActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onContactSelected(int specialId, String addr) {
|
public void onContactSelected(int contactId) {
|
||||||
final DcContext dcContext = DcHelper.getContext(this);
|
if(contactId == DcContact.DC_CONTACT_ID_NEW_GROUP) {
|
||||||
if(specialId == DcContact.DC_CONTACT_ID_NEW_GROUP) {
|
|
||||||
startActivity(new Intent(this, GroupCreateActivity.class));
|
startActivity(new Intent(this, GroupCreateActivity.class));
|
||||||
} else if(specialId == DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST) {
|
} else if(contactId == DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST) {
|
||||||
Intent intent = new Intent(this, GroupCreateActivity.class);
|
Intent intent = new Intent(this, GroupCreateActivity.class);
|
||||||
intent.putExtra(GroupCreateActivity.CREATE_BROADCAST, true);
|
intent.putExtra(GroupCreateActivity.CREATE_BROADCAST, true);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} else if (specialId == DcContact.DC_CONTACT_ID_QR_INVITE) {
|
} else if (contactId == DcContact.DC_CONTACT_ID_QR_INVITE) {
|
||||||
new IntentIntegrator(this).setCaptureActivity(QrActivity.class).initiateScan();
|
new IntentIntegrator(this).setCaptureActivity(QrActivity.class).initiateScan();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int contactId = dcContext.lookupContactIdByAddr(addr);
|
final DcContext dcContext = DcHelper.getContext(this);
|
||||||
if (contactId!=0 && dcContext.getChatIdByContactId(contactId)!=0) {
|
if (dcContext.getChatIdByContactId(contactId)!=0) {
|
||||||
openConversation(dcContext.getChatIdByContactId(contactId));
|
openConversation(dcContext.getChatIdByContactId(contactId));
|
||||||
} else {
|
} else {
|
||||||
String nameNAddr = contactId == 0 ? addr : dcContext.getContact(contactId).getNameNAddr();
|
String nameNAddr = dcContext.getContact(contactId).getNameNAddr();
|
||||||
new AlertDialog.Builder(this)
|
new AlertDialog.Builder(this)
|
||||||
.setMessage(getString(R.string.ask_start_chat_with, nameNAddr))
|
.setMessage(getString(R.string.ask_start_chat_with, nameNAddr))
|
||||||
.setCancelable(true)
|
.setCancelable(true)
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||||
int contactId1 = dcContext.lookupContactIdByAddr(addr);
|
openConversation(dcContext.createChatByContactId(contactId));
|
||||||
if (contactId1 == 0) {
|
|
||||||
contactId1 = dcContext.createContact(null, addr);
|
|
||||||
if (contactId1 == 0) {
|
|
||||||
Toast.makeText(NewConversationActivity.this, R.string.bad_email_address, Toast.LENGTH_LONG).show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
openConversation(dcContext.createChatByContactId(contactId1));
|
|
||||||
}).show();
|
}).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -207,10 +207,9 @@ public class ProfileSettingsFragment extends Fragment
|
||||||
DcChat dcChat = dcContext.getChat(chatId);
|
DcChat dcChat = dcContext.getChat(chatId);
|
||||||
Intent intent = new Intent(getContext(), ContactMultiSelectionActivity.class);
|
Intent intent = new Intent(getContext(), ContactMultiSelectionActivity.class);
|
||||||
intent.putExtra(ContactSelectionListFragment.SELECT_VERIFIED_EXTRA, dcChat.isProtected());
|
intent.putExtra(ContactSelectionListFragment.SELECT_VERIFIED_EXTRA, dcChat.isProtected());
|
||||||
ArrayList<String> preselectedContacts = new ArrayList<>();
|
ArrayList<Integer> preselectedContacts = new ArrayList<>();
|
||||||
int[] memberIds = dcContext.getChatContacts(chatId);
|
for (int memberId : dcContext.getChatContacts(chatId)) {
|
||||||
for (int memberId : memberIds) {
|
preselectedContacts.add(memberId);
|
||||||
preselectedContacts.add(dcContext.getContact(memberId).getAddr());
|
|
||||||
}
|
}
|
||||||
intent.putExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS, preselectedContacts);
|
intent.putExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS, preselectedContacts);
|
||||||
startActivityForResult(intent, REQUEST_CODE_PICK_CONTACT);
|
startActivityForResult(intent, REQUEST_CODE_PICK_CONTACT);
|
||||||
|
@ -318,13 +317,12 @@ public class ProfileSettingsFragment extends Fragment
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode==REQUEST_CODE_PICK_CONTACT && resultCode==Activity.RESULT_OK && data!=null) {
|
if (requestCode==REQUEST_CODE_PICK_CONTACT && resultCode==Activity.RESULT_OK && data!=null) {
|
||||||
List<String> selected = data.getStringArrayListExtra("contacts");
|
List<Integer> selected = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.CONTACTS_EXTRA);
|
||||||
if(selected == null) return;
|
if(selected == null) return;
|
||||||
Util.runOnAnyBackgroundThread(() -> {
|
Util.runOnAnyBackgroundThread(() -> {
|
||||||
for (String addr : selected) {
|
for (Integer contactId : selected) {
|
||||||
if (addr!=null) {
|
if (contactId!=null) {
|
||||||
int toAddId = dcContext.createContact(null, addr);
|
dcContext.addContactToChat(chatId, contactId);
|
||||||
dcContext.addContactToChat(chatId, toAddId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -63,7 +63,7 @@ public class ContactSelectionListAdapter extends RecyclerView.Adapter<ContactSel
|
||||||
private final LayoutInflater li;
|
private final LayoutInflater li;
|
||||||
private final ItemClickListener clickListener;
|
private final ItemClickListener clickListener;
|
||||||
private final GlideRequests glideRequests;
|
private final GlideRequests glideRequests;
|
||||||
private final Set<String> selectedContacts = new HashSet<>(); // TODO: maybe better use contact-id here
|
private final Set<Integer> selectedContacts = new HashSet<>(); // TODO: maybe better use contact-id here
|
||||||
private final SparseIntArray actionModeSelection = new SparseIntArray();
|
private final SparseIntArray actionModeSelection = new SparseIntArray();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -292,7 +292,7 @@ public class ContactSelectionListAdapter extends RecyclerView.Adapter<ContactSel
|
||||||
enabled = !(dcContact.getId() == DcContact.DC_CONTACT_ID_SELF && itemMultiSelect);
|
enabled = !(dcContact.getId() == DcContact.DC_CONTACT_ID_SELF && itemMultiSelect);
|
||||||
}
|
}
|
||||||
viewHolder.bind(glideRequests, id, dcContact, name, addr, null, itemMultiSelect, enabled);
|
viewHolder.bind(glideRequests, id, dcContact, name, addr, null, itemMultiSelect, enabled);
|
||||||
viewHolder.setChecked(selectedContacts.contains(addr));
|
viewHolder.setChecked(selectedContacts.contains(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -300,7 +300,7 @@ public class ContactSelectionListAdapter extends RecyclerView.Adapter<ContactSel
|
||||||
return VIEW_TYPE_CONTACT;
|
return VIEW_TYPE_CONTACT;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<String> getSelectedContacts() {
|
public Set<Integer> getSelectedContacts() {
|
||||||
return selectedContacts;
|
return selectedContacts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ public class NewContactActivity extends PassphraseRequiredActionBarActivity
|
||||||
{
|
{
|
||||||
|
|
||||||
public static final String ADDR_EXTRA = "contact_addr";
|
public static final String ADDR_EXTRA = "contact_addr";
|
||||||
|
public static final String CONTACT_ID_EXTRA = "contact_id";
|
||||||
|
|
||||||
private TextInputEditText nameInput;
|
private TextInputEditText nameInput;
|
||||||
private TextInputEditText addrInput;
|
private TextInputEditText addrInput;
|
||||||
|
@ -81,7 +82,7 @@ public class NewContactActivity extends PassphraseRequiredActionBarActivity
|
||||||
}
|
}
|
||||||
if (getCallingActivity() != null) { // called for result
|
if (getCallingActivity() != null) { // called for result
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
intent.putExtra(ADDR_EXTRA, addr);
|
intent.putExtra(CONTACT_ID_EXTRA, contactId);
|
||||||
setResult(RESULT_OK, intent);
|
setResult(RESULT_OK, intent);
|
||||||
} else {
|
} else {
|
||||||
int chatId = dcContext.createChatByContactId(contactId);
|
int chatId = dcContext.createChatByContactId(contactId);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue