Allow to add emails as particpants

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2021-05-12 17:31:58 +02:00
parent e40e3d6c07
commit 98fa8642d3
No known key found for this signature in database
GPG Key ID: 7076EA9751AACDDA
5 changed files with 65 additions and 21 deletions

View File

@ -191,6 +191,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
private Set<String> selectedUserIds; private Set<String> selectedUserIds;
private Set<String> selectedGroupIds; private Set<String> selectedGroupIds;
private Set<String> selectedEmails;
private List<String> existingParticipants; private List<String> existingParticipants;
private boolean isAddingParticipantsView; private boolean isAddingParticipantsView;
private String conversationToken; private String conversationToken;
@ -217,6 +218,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
} }
} }
selectedEmails = new HashSet<>();
selectedGroupIds = new HashSet<>(); selectedGroupIds = new HashSet<>();
selectedUserIds = new HashSet<>(); selectedUserIds = new HashSet<>();
} }
@ -367,24 +369,28 @@ public class ContactsController extends BaseController implements SearchView.OnQ
} }
ArrayList<String> userIdsArray = new ArrayList<>(selectedUserIds); ArrayList<String> userIdsArray = new ArrayList<>(selectedUserIds);
ArrayList<String> emailsArray = new ArrayList<>(selectedEmails);
ArrayList<String> groupIdsArray = new ArrayList<>(selectedGroupIds); ArrayList<String> groupIdsArray = new ArrayList<>(selectedGroupIds);
bundle.putParcelable(BundleKeys.INSTANCE.getKEY_CONVERSATION_TYPE(), Parcels.wrap(roomType)); bundle.putParcelable(BundleKeys.INSTANCE.getKEY_CONVERSATION_TYPE(), Parcels.wrap(roomType));
bundle.putStringArrayList(BundleKeys.INSTANCE.getKEY_INVITED_PARTICIPANTS(), userIdsArray); bundle.putStringArrayList(BundleKeys.INSTANCE.getKEY_INVITED_PARTICIPANTS(), userIdsArray);
bundle.putStringArrayList(BundleKeys.INSTANCE.getKEY_INVITED_GROUP(), groupIdsArray); bundle.putStringArrayList(BundleKeys.INSTANCE.getKEY_INVITED_GROUP(), groupIdsArray);
bundle.putStringArrayList(BundleKeys.INSTANCE.getKEY_INVITED_EMAIL(), emailsArray);
bundle.putInt(BundleKeys.INSTANCE.getKEY_OPERATION_CODE(), 11); bundle.putInt(BundleKeys.INSTANCE.getKEY_OPERATION_CODE(), 11);
prepareAndShowBottomSheetWithBundle(bundle, true); prepareAndShowBottomSheetWithBundle(bundle, true);
} }
} else { } else {
String[] userIdsArray = selectedUserIds.toArray(new String[selectedUserIds.size()]); String[] userIdsArray = selectedUserIds.toArray(new String[selectedUserIds.size()]);
String[] groupIdsArray = selectedGroupIds.toArray(new String[selectedGroupIds.size()]); String[] groupIdsArray = selectedGroupIds.toArray(new String[selectedGroupIds.size()]);
String[] emailsArray = selectedEmails.toArray(new String[selectedEmails.size()]);
Data.Builder data = new Data.Builder(); Data.Builder data = new Data.Builder();
data.putLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), currentUser.getId()); data.putLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), currentUser.getId());
data.putString(BundleKeys.INSTANCE.getKEY_TOKEN(), conversationToken); data.putString(BundleKeys.INSTANCE.getKEY_TOKEN(), conversationToken);
data.putStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_USERS(), userIdsArray); data.putStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_USERS(), userIdsArray);
data.putStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_GROUPS(), groupIdsArray); data.putStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_GROUPS(), groupIdsArray);
data.putStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_EMAILS(), emailsArray);
OneTimeWorkRequest addParticipantsToConversationWorker = OneTimeWorkRequest addParticipantsToConversationWorker =
new OneTimeWorkRequest.Builder(AddParticipantsToConversation.class).setInputData(data.build()).build(); new OneTimeWorkRequest.Builder(AddParticipantsToConversation.class).setInputData(data.build()).build();
@ -467,15 +473,22 @@ public class ContactsController extends BaseController implements SearchView.OnQ
modifiedQueryMap.put("itemId", conversationToken); modifiedQueryMap.put("itemId", conversationToken);
} }
List<String> shareTypesList = null; List<String> shareTypesList;
shareTypesList = new ArrayList<>(); shareTypesList = new ArrayList<>();
// users // users
shareTypesList.add("0"); shareTypesList.add("0");
if (!isAddingParticipantsView) {
// groups // groups
shareTypesList.add("1"); shareTypesList.add("1");
} else if (currentUser.hasSpreedFeatureCapability("invite-groups-and-mails")) {
// groups
shareTypesList.add("1");
// emails
shareTypesList.add("4");
}
modifiedQueryMap.put("shareTypes[]", shareTypesList); modifiedQueryMap.put("shareTypes[]", shareTypesList);
ncApi.getContactsWithSearchParam( ncApi.getContactsWithSearchParam(
credentials, credentials,
@ -747,7 +760,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
private void checkAndHandleDoneMenuItem() { private void checkAndHandleDoneMenuItem() {
if (adapter != null && doneMenuItem != null) { if (adapter != null && doneMenuItem != null) {
if ((selectedGroupIds.size() + selectedUserIds.size() > 0) || isPublicCall) { if ((selectedEmails.size() + selectedGroupIds.size() + selectedUserIds.size() > 0) || isPublicCall) {
doneMenuItem.setVisible(true); doneMenuItem.setVisible(true);
} else { } else {
doneMenuItem.setVisible(false); doneMenuItem.setVisible(false);
@ -899,6 +912,12 @@ public class ContactsController extends BaseController implements SearchView.OnQ
} else { } else {
selectedGroupIds.remove(participant.getActorId()); selectedGroupIds.remove(participant.getActorId());
} }
} else if ("emails".equals(participant.getSource())) {
if (participant.isSelected()) {
selectedEmails.add(participant.getActorId());
} else {
selectedEmails.remove(participant.getActorId());
}
} else { } else {
if (participant.isSelected()) { if (participant.isSelected()) {
selectedUserIds.add(participant.getActorId()); selectedUserIds.add(participant.getActorId());

View File

@ -582,10 +582,13 @@ public class OperationsMenuController extends BaseController {
if ((localInvitedGroups.size() > 0 && currentUser.hasSpreedFeatureCapability("invite-groups-and-mails"))) { if ((localInvitedGroups.size() > 0 && currentUser.hasSpreedFeatureCapability("invite-groups-and-mails"))) {
for (int i = 0; i < localInvitedGroups.size(); i++) { for (int i = 0; i < localInvitedGroups.size(); i++) {
final String groupId = localInvitedGroups.get(i); final String groupId = localInvitedGroups.get(i);
retrofitBucket = ApiUtils.getRetrofitBucketForAddGroupParticipant(apiVersion, retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipantWithSource(
currentUser.getBaseUrl(), apiVersion,
conversation.getToken(), currentUser.getBaseUrl(),
groupId); conversation.getToken(),
"groups",
groupId
);
ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())

View File

@ -64,6 +64,7 @@ public class AddParticipantsToConversation extends Worker {
Data data = getInputData(); Data data = getInputData();
String[] selectedUserIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_USERS()); String[] selectedUserIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_USERS());
String[] selectedGroupIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_GROUPS()); String[] selectedGroupIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_GROUPS());
String[] selectedEmails = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_EMAILS());
UserEntity user = userUtils.getUserWithInternalId(data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1)); UserEntity user = userUtils.getUserWithInternalId(data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1));
int apiVersion = ApiUtils.getConversationApiVersion(user, new int[] {ApiUtils.APIv4, 1}); int apiVersion = ApiUtils.getConversationApiVersion(user, new int[] {ApiUtils.APIv4, 1});
@ -83,8 +84,27 @@ public class AddParticipantsToConversation extends Worker {
} }
for (String groupId : selectedGroupIds) { for (String groupId : selectedGroupIds) {
retrofitBucket = ApiUtils.getRetrofitBucketForAddGroupParticipant(apiVersion, user.getBaseUrl(), conversationToken, retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipantWithSource(
groupId); apiVersion,
user.getBaseUrl(),
conversationToken,
"groups",
groupId
);
ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
.subscribeOn(Schedulers.io())
.blockingSubscribe();
}
for (String email : selectedEmails) {
retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipantWithSource(
apiVersion,
user.getBaseUrl(),
conversationToken,
"emails",
email
);
ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())

View File

@ -289,15 +289,15 @@ public class ApiUtils {
} }
public static RetrofitBucket getRetrofitBucketForAddGroupParticipant(int version, String baseUrl, String token, String group) { public static RetrofitBucket getRetrofitBucketForAddParticipantWithSource(
RetrofitBucket retrofitBucket = getRetrofitBucketForAddParticipant(version, baseUrl, token, group); int version,
retrofitBucket.getQueryMap().put("source", "groups"); String baseUrl,
return retrofitBucket; String token,
} String source,
String id
public static RetrofitBucket getRetrofitBucketForAddMailParticipant(int version, String baseUrl, String token, String mail) { ) {
RetrofitBucket retrofitBucket = getRetrofitBucketForAddParticipant(version, baseUrl, token, mail); RetrofitBucket retrofitBucket = getRetrofitBucketForAddParticipant(version, baseUrl, token, id);
retrofitBucket.getQueryMap().put("source", "emails"); retrofitBucket.getQueryMap().put("source", source);
return retrofitBucket; return retrofitBucket;
} }

View File

@ -23,6 +23,7 @@ package com.nextcloud.talk.utils.bundle
object BundleKeys { object BundleKeys {
val KEY_SELECTED_USERS = "KEY_SELECTED_USERS" val KEY_SELECTED_USERS = "KEY_SELECTED_USERS"
val KEY_SELECTED_GROUPS = "KEY_SELECTED_GROUPS" val KEY_SELECTED_GROUPS = "KEY_SELECTED_GROUPS"
val KEY_SELECTED_EMAILS = "KEY_SELECTED_EMAILS"
val KEY_USERNAME = "KEY_USERNAME" val KEY_USERNAME = "KEY_USERNAME"
val KEY_TOKEN = "KEY_TOKEN" val KEY_TOKEN = "KEY_TOKEN"
val KEY_BASE_URL = "KEY_BASE_URL" val KEY_BASE_URL = "KEY_BASE_URL"
@ -49,6 +50,7 @@ object BundleKeys {
val KEY_CONVERSATION_TYPE = "KEY_CONVERSATION_TYPE" val KEY_CONVERSATION_TYPE = "KEY_CONVERSATION_TYPE"
val KEY_INVITED_PARTICIPANTS = "KEY_INVITED_PARTICIPANTS" val KEY_INVITED_PARTICIPANTS = "KEY_INVITED_PARTICIPANTS"
val KEY_INVITED_GROUP = "KEY_INVITED_GROUP" val KEY_INVITED_GROUP = "KEY_INVITED_GROUP"
val KEY_INVITED_EMAIL = "KEY_INVITED_EMAIL"
val KEY_CONVERSATION_NAME = "KEY_CONVERSATION_NAME" val KEY_CONVERSATION_NAME = "KEY_CONVERSATION_NAME"
val KEY_CALL_VOICE_ONLY = "KEY_CALL_VOICE_ONLY" val KEY_CALL_VOICE_ONLY = "KEY_CALL_VOICE_ONLY"
val KEY_ACTIVE_CONVERSATION = "KEY_ACTIVE_CONVERSATION" val KEY_ACTIVE_CONVERSATION = "KEY_ACTIVE_CONVERSATION"