refined create conference dialog
This commit is contained in:
		
							parent
							
								
									4f1e71e3c4
								
							
						
					
					
						commit
						b0e1b5b02d
					
				| @ -29,6 +29,7 @@ import android.security.KeyChain; | |||||||
| import android.support.annotation.BoolRes; | import android.support.annotation.BoolRes; | ||||||
| import android.support.annotation.IntegerRes; | import android.support.annotation.IntegerRes; | ||||||
| import android.support.v4.app.RemoteInput; | import android.support.v4.app.RemoteInput; | ||||||
|  | import android.text.TextUtils; | ||||||
| import android.util.DisplayMetrics; | import android.util.DisplayMetrics; | ||||||
| import android.util.Log; | import android.util.Log; | ||||||
| import android.util.LruCache; | import android.util.LruCache; | ||||||
| @ -2375,7 +2376,7 @@ public class XmppConnectionService extends Service { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public boolean createAdhocConference(final Account account, | 	public boolean createAdhocConference(final Account account, | ||||||
| 	                                     final String subject, | 	                                     final String name, | ||||||
| 	                                     final Iterable<Jid> jids, | 	                                     final Iterable<Jid> jids, | ||||||
| 	                                     final UiCallback<Conversation> callback) { | 	                                     final UiCallback<Conversation> callback) { | ||||||
| 		Log.d(Config.LOGTAG, account.getJid().asBareJid().toString() + ": creating adhoc conference with " + jids.toString()); | 		Log.d(Config.LOGTAG, account.getJid().asBareJid().toString() + ": creating adhoc conference with " + jids.toString()); | ||||||
| @ -2388,24 +2389,25 @@ public class XmppConnectionService extends Service { | |||||||
| 					} | 					} | ||||||
| 					return false; | 					return false; | ||||||
| 				} | 				} | ||||||
| 				final Jid jid = Jid.of(new BigInteger(64, getRNG()).toString(Character.MAX_RADIX), server, null); | 				final Jid jid = Jid.of(CryptoHelper.pronounceable(getRNG()), server, null); | ||||||
| 				final Conversation conversation = findOrCreateConversation(account, jid, true, false, true); | 				final Conversation conversation = findOrCreateConversation(account, jid, true, false, true); | ||||||
| 				joinMuc(conversation, new OnConferenceJoined() { | 				joinMuc(conversation, new OnConferenceJoined() { | ||||||
| 					@Override | 					@Override | ||||||
| 					public void onConferenceJoined(final Conversation conversation) { | 					public void onConferenceJoined(final Conversation conversation) { | ||||||
| 						pushConferenceConfiguration(conversation, IqGenerator.defaultRoomConfiguration(), new OnConfigurationPushed() { | 						final Bundle configuration = IqGenerator.defaultRoomConfiguration(); | ||||||
|  | 						if (!TextUtils.isEmpty(name)) { | ||||||
|  | 							configuration.putString("muc#roomconfig_roomname", name); | ||||||
|  | 						} | ||||||
|  | 						pushConferenceConfiguration(conversation, configuration, new OnConfigurationPushed() { | ||||||
| 							@Override | 							@Override | ||||||
| 							public void onPushSucceeded() { | 							public void onPushSucceeded() { | ||||||
| 								if (subject != null && !subject.trim().isEmpty()) { |  | ||||||
| 									pushSubjectToConference(conversation, subject.trim()); |  | ||||||
| 								} |  | ||||||
| 								for (Jid invite : jids) { | 								for (Jid invite : jids) { | ||||||
| 									invite(conversation, invite); | 									invite(conversation, invite); | ||||||
| 								} | 								} | ||||||
| 								if (account.countPresences() > 1) { | 								if (account.countPresences() > 1) { | ||||||
| 									directInvite(conversation, account.getJid().asBareJid()); | 									directInvite(conversation, account.getJid().asBareJid()); | ||||||
| 								} | 								} | ||||||
| 								saveConversationAsBookmark(conversation, subject); | 								saveConversationAsBookmark(conversation, name); | ||||||
| 								if (callback != null) { | 								if (callback != null) { | ||||||
| 									callback.success(conversation); | 									callback.success(conversation); | ||||||
| 								} | 								} | ||||||
| @ -3755,8 +3757,8 @@ public class XmppConnectionService extends Service { | |||||||
| 		if (!conversation.getJid().isBareJid()) { | 		if (!conversation.getJid().isBareJid()) { | ||||||
| 			bookmark.setNick(conversation.getJid().getResource()); | 			bookmark.setNick(conversation.getJid().getResource()); | ||||||
| 		} | 		} | ||||||
| 		if (name != null && !name.trim().isEmpty()) { | 		if (!TextUtils.isEmpty(name)) { | ||||||
| 			bookmark.setBookmarkName(name.trim()); | 			bookmark.setBookmarkName(name); | ||||||
| 		} | 		} | ||||||
| 		bookmark.setAutojoin(getPreferences().getBoolean("autojoin", getResources().getBoolean(R.bool.autojoin))); | 		bookmark.setAutojoin(getPreferences().getBoolean("autojoin", getResources().getBoolean(R.bool.autojoin))); | ||||||
| 		account.getBookmarks().add(bookmark); | 		account.getBookmarks().add(bookmark); | ||||||
|  | |||||||
| @ -39,6 +39,11 @@ import rocks.xmpp.addr.Jid; | |||||||
| 
 | 
 | ||||||
| public class ChooseContactActivity extends AbstractSearchableListItemActivity implements MultiChoiceModeListener { | public class ChooseContactActivity extends AbstractSearchableListItemActivity implements MultiChoiceModeListener { | ||||||
|     public static final String EXTRA_TITLE_RES_ID = "extra_title_res_id"; |     public static final String EXTRA_TITLE_RES_ID = "extra_title_res_id"; | ||||||
|  |     public static final String EXTRA_GROUP_CHAT_NAME = "extra_group_chat_name"; | ||||||
|  |     public static final String EXTRA_SELECT_MULTIPLE = "extra_select_multiple"; | ||||||
|  |     public static final String EXTRA_SHOW_ENTER_JID = "extra_show_enter_jid"; | ||||||
|  |     public static final String EXTRA_CONVERSATION = "extra_conversation"; | ||||||
|  |     private static final String EXTRA_FILTERED_CONTACTS = "extra_filtered_contacts"; | ||||||
|     private List<String> mActivatedAccounts = new ArrayList<>(); |     private List<String> mActivatedAccounts = new ArrayList<>(); | ||||||
|     private Set<String> selected = new HashSet<>(); |     private Set<String> selected = new HashSet<>(); | ||||||
|     private Set<String> filterContacts; |     private Set<String> filterContacts; | ||||||
| @ -60,14 +65,31 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im | |||||||
|         } else { |         } else { | ||||||
|             contacts.add(conversation.getJid().asBareJid().toString()); |             contacts.add(conversation.getJid().asBareJid().toString()); | ||||||
|         } |         } | ||||||
|         intent.putExtra("filter_contacts", contacts.toArray(new String[contacts.size()])); |         intent.putExtra(EXTRA_FILTERED_CONTACTS, contacts.toArray(new String[contacts.size()])); | ||||||
|         intent.putExtra("conversation", conversation.getUuid()); |         intent.putExtra(EXTRA_CONVERSATION, conversation.getUuid()); | ||||||
|         intent.putExtra("multiple", true); |         intent.putExtra(EXTRA_SELECT_MULTIPLE, true); | ||||||
|         intent.putExtra("show_enter_jid", true); |         intent.putExtra(EXTRA_SHOW_ENTER_JID, true); | ||||||
|         intent.putExtra(EXTRA_ACCOUNT, conversation.getAccount().getJid().asBareJid().toString()); |         intent.putExtra(EXTRA_ACCOUNT, conversation.getAccount().getJid().asBareJid().toString()); | ||||||
|         return intent; |         return intent; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public static List<Jid> extractJabberIds(Intent result) { | ||||||
|  |         List<Jid> jabberIds = new ArrayList<>(); | ||||||
|  |         try { | ||||||
|  |             if (result.getBooleanExtra(EXTRA_SELECT_MULTIPLE, false)) { | ||||||
|  |                 String[] toAdd = result.getStringArrayExtra("contacts"); | ||||||
|  |                 for (String item : toAdd) { | ||||||
|  |                     jabberIds.add(Jid.of(item)); | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 jabberIds.add(Jid.of(result.getStringExtra("contact"))); | ||||||
|  |             } | ||||||
|  |             return jabberIds; | ||||||
|  |         } catch (IllegalArgumentException e) { | ||||||
|  |             return jabberIds; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public void onCreate(final Bundle savedInstanceState) { |     public void onCreate(final Bundle savedInstanceState) { | ||||||
|         super.onCreate(savedInstanceState); |         super.onCreate(savedInstanceState); | ||||||
| @ -80,14 +102,14 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         String[] contacts = getIntent().getStringArrayExtra("filter_contacts"); |         String[] contacts = getIntent().getStringArrayExtra(EXTRA_FILTERED_CONTACTS); | ||||||
|         if (contacts != null) { |         if (contacts != null) { | ||||||
|             Collections.addAll(filterContacts, contacts); |             Collections.addAll(filterContacts, contacts); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         Intent intent = getIntent(); |         Intent intent = getIntent(); | ||||||
| 
 | 
 | ||||||
|         final boolean multiple = intent.getBooleanExtra("multiple", false); |         final boolean multiple = intent.getBooleanExtra(EXTRA_SELECT_MULTIPLE, false); | ||||||
|         if (multiple) { |         if (multiple) { | ||||||
|             getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); |             getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); | ||||||
|             getListView().setMultiChoiceModeListener(this); |             getListView().setMultiChoiceModeListener(this); | ||||||
| @ -110,14 +132,13 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im | |||||||
|                 account = ((Contact) mListItem).getAccount().getJid().asBareJid().toString(); |                 account = ((Contact) mListItem).getAccount().getJid().asBareJid().toString(); | ||||||
|             } |             } | ||||||
|             data.putExtra(EXTRA_ACCOUNT, account); |             data.putExtra(EXTRA_ACCOUNT, account); | ||||||
|             data.putExtra("conversation", request.getStringExtra("conversation")); |             data.putExtra(EXTRA_SELECT_MULTIPLE, false); | ||||||
|             data.putExtra("multiple", false); |             copy(request, data); | ||||||
|             data.putExtra("subject", request.getStringExtra("subject")); |  | ||||||
|             setResult(RESULT_OK, data); |             setResult(RESULT_OK, data); | ||||||
|             finish(); |             finish(); | ||||||
|         }); |         }); | ||||||
|         final Intent i = getIntent(); |         final Intent i = getIntent(); | ||||||
|         this.showEnterJid = i != null && i.getBooleanExtra("show_enter_jid", false); |         this.showEnterJid = i != null && i.getBooleanExtra(EXTRA_SHOW_ENTER_JID, false); | ||||||
|         this.binding.fab.setOnClickListener(this::onFabClicked); |         this.binding.fab.setOnClickListener(this::onFabClicked); | ||||||
|         if (this.showEnterJid) { |         if (this.showEnterJid) { | ||||||
|             this.binding.fab.setVisibility(View.VISIBLE); |             this.binding.fab.setVisibility(View.VISIBLE); | ||||||
| @ -171,16 +192,19 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im | |||||||
|     private void submitSelection() { |     private void submitSelection() { | ||||||
|         final Intent request = getIntent(); |         final Intent request = getIntent(); | ||||||
|         final Intent data = new Intent(); |         final Intent data = new Intent(); | ||||||
|         data.putExtra("conversation", request.getStringExtra("conversation")); |         data.putExtra("contacts", getSelectedContactJids()); | ||||||
|         String[] selection = getSelectedContactJids(); |         data.putExtra(EXTRA_SELECT_MULTIPLE, true); | ||||||
|         data.putExtra("contacts", selection); |  | ||||||
|         data.putExtra("multiple", true); |  | ||||||
|         data.putExtra(EXTRA_ACCOUNT, request.getStringExtra(EXTRA_ACCOUNT)); |         data.putExtra(EXTRA_ACCOUNT, request.getStringExtra(EXTRA_ACCOUNT)); | ||||||
|         data.putExtra("subject", request.getStringExtra("subject")); |         copy(request, data); | ||||||
|         setResult(RESULT_OK, data); |         setResult(RESULT_OK, data); | ||||||
|         finish(); |         finish(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     private static void copy(Intent from, Intent to) { | ||||||
|  |         to.putExtra(EXTRA_CONVERSATION, from.getStringExtra(EXTRA_CONVERSATION)); | ||||||
|  |         to.putExtra(EXTRA_GROUP_CHAT_NAME, from.getStringExtra(EXTRA_GROUP_CHAT_NAME)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { |     public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { | ||||||
|         Contact item = (Contact) getListItems().get(position); |         Contact item = (Contact) getListItems().get(position); | ||||||
| @ -207,7 +231,7 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im | |||||||
|     public @StringRes |     public @StringRes | ||||||
|     int getTitleFromIntent() { |     int getTitleFromIntent() { | ||||||
|         final Intent intent = getIntent(); |         final Intent intent = getIntent(); | ||||||
|         boolean multiple = intent != null && intent.getBooleanExtra("multiple", false); |         boolean multiple = intent != null && intent.getBooleanExtra(EXTRA_SELECT_MULTIPLE, false); | ||||||
|         @StringRes int fallback = multiple ? R.string.title_activity_choose_contacts : R.string.title_activity_choose_contact; |         @StringRes int fallback = multiple ? R.string.title_activity_choose_contacts : R.string.title_activity_choose_contact; | ||||||
|         return intent != null ? intent.getIntExtra(EXTRA_TITLE_RES_ID, fallback) : fallback; |         return intent != null ? intent.getIntExtra(EXTRA_TITLE_RES_ID, fallback) : fallback; | ||||||
|     } |     } | ||||||
| @ -216,7 +240,7 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im | |||||||
|     public boolean onCreateOptionsMenu(final Menu menu) { |     public boolean onCreateOptionsMenu(final Menu menu) { | ||||||
|         super.onCreateOptionsMenu(menu); |         super.onCreateOptionsMenu(menu); | ||||||
|         final Intent i = getIntent(); |         final Intent i = getIntent(); | ||||||
|         boolean showEnterJid = i != null && i.getBooleanExtra("show_enter_jid", false); |         boolean showEnterJid = i != null && i.getBooleanExtra(EXTRA_SHOW_ENTER_JID, false); | ||||||
|         menu.findItem(R.id.action_scan_qr_code).setVisible(isCameraFeatureAvailable() && showEnterJid); |         menu.findItem(R.id.action_scan_qr_code).setVisible(isCameraFeatureAvailable() && showEnterJid); | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| @ -288,10 +312,8 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im | |||||||
|             final Intent data = new Intent(); |             final Intent data = new Intent(); | ||||||
|             data.putExtra("contact", contactJid.toString()); |             data.putExtra("contact", contactJid.toString()); | ||||||
|             data.putExtra(EXTRA_ACCOUNT, accountJid.toString()); |             data.putExtra(EXTRA_ACCOUNT, accountJid.toString()); | ||||||
|             data.putExtra("conversation", |             data.putExtra(EXTRA_SELECT_MULTIPLE, false); | ||||||
|                     request.getStringExtra("conversation")); |             copy(request, data); | ||||||
|             data.putExtra("multiple", false); |  | ||||||
|             data.putExtra("subject", request.getStringExtra("subject")); |  | ||||||
|             setResult(RESULT_OK, data); |             setResult(RESULT_OK, data); | ||||||
|             finish(); |             finish(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -17,6 +17,7 @@ import java.util.List; | |||||||
| 
 | 
 | ||||||
| import eu.siacs.conversations.R; | import eu.siacs.conversations.R; | ||||||
| import eu.siacs.conversations.databinding.CreateConferenceDialogBinding; | import eu.siacs.conversations.databinding.CreateConferenceDialogBinding; | ||||||
|  | import eu.siacs.conversations.ui.util.DelayedHintHelper; | ||||||
| 
 | 
 | ||||||
| public class CreateConferenceDialog extends DialogFragment { | public class CreateConferenceDialog extends DialogFragment { | ||||||
| 
 | 
 | ||||||
| @ -46,13 +47,9 @@ public class CreateConferenceDialog extends DialogFragment { | |||||||
|         ArrayList<String> mActivatedAccounts = getArguments().getStringArrayList(ACCOUNTS_LIST_KEY); |         ArrayList<String> mActivatedAccounts = getArguments().getStringArrayList(ACCOUNTS_LIST_KEY); | ||||||
|         StartConversationActivity.populateAccountSpinner(getActivity(), mActivatedAccounts, binding.account); |         StartConversationActivity.populateAccountSpinner(getActivity(), mActivatedAccounts, binding.account); | ||||||
|         builder.setView(binding.getRoot()); |         builder.setView(binding.getRoot()); | ||||||
|         builder.setPositiveButton(R.string.choose_participants, new DialogInterface.OnClickListener() { |         builder.setPositiveButton(R.string.choose_participants, (dialog, which) -> mListener.onCreateDialogPositiveClick(binding.account, binding.groupChatName.getText().toString().trim())); | ||||||
|             @Override |  | ||||||
|             public void onClick(DialogInterface dialog, int which) { |  | ||||||
|                 mListener.onCreateDialogPositiveClick(binding.account, binding.subject.getText().toString()); |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|         builder.setNegativeButton(R.string.cancel, null); |         builder.setNegativeButton(R.string.cancel, null); | ||||||
|  |         DelayedHintHelper.setHint(R.string.providing_a_name_is_optional, binding.groupChatName); | ||||||
|         return builder.create(); |         return builder.create(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -653,26 +653,10 @@ public class StartConversationActivity extends XmppActivity implements XmppConne | |||||||
| 				this.mPostponedActivityResult = null; | 				this.mPostponedActivityResult = null; | ||||||
| 				if (requestCode == REQUEST_CREATE_CONFERENCE) { | 				if (requestCode == REQUEST_CREATE_CONFERENCE) { | ||||||
| 					Account account = extractAccount(intent); | 					Account account = extractAccount(intent); | ||||||
| 					final String subject = intent.getStringExtra("subject"); | 					final String name = intent.getStringExtra(ChooseContactActivity.EXTRA_GROUP_CHAT_NAME); | ||||||
| 					List<Jid> jids = new ArrayList<>(); | 					final List<Jid> jids = ChooseContactActivity.extractJabberIds(intent); | ||||||
| 					if (intent.getBooleanExtra("multiple", false)) { |  | ||||||
| 						String[] toAdd = intent.getStringArrayExtra("contacts"); |  | ||||||
| 						for (String item : toAdd) { |  | ||||||
| 							try { |  | ||||||
| 								jids.add(Jid.of(item)); |  | ||||||
| 							} catch (IllegalArgumentException e) { |  | ||||||
| 								//ignored |  | ||||||
| 							} |  | ||||||
| 						} |  | ||||||
| 					} else { |  | ||||||
| 						try { |  | ||||||
| 							jids.add(Jid.of(intent.getStringExtra("contact"))); |  | ||||||
| 						} catch (Exception e) { |  | ||||||
| 							//ignored |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
| 					if (account != null && jids.size() > 0) { | 					if (account != null && jids.size() > 0) { | ||||||
| 						if (xmppConnectionService.createAdhocConference(account, subject, jids, mAdhocConferenceCallback)) { | 						if (xmppConnectionService.createAdhocConference(account, name, jids, mAdhocConferenceCallback)) { | ||||||
| 							mToast = Toast.makeText(this, R.string.creating_conference, Toast.LENGTH_LONG); | 							mToast = Toast.makeText(this, R.string.creating_conference, Toast.LENGTH_LONG); | ||||||
| 							mToast.show(); | 							mToast.show(); | ||||||
| 						} | 						} | ||||||
| @ -945,7 +929,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	public void onCreateDialogPositiveClick(Spinner spinner, String subject) { | 	public void onCreateDialogPositiveClick(Spinner spinner, String name) { | ||||||
| 		if (!xmppConnectionServiceBound) { | 		if (!xmppConnectionServiceBound) { | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| @ -954,10 +938,10 @@ public class StartConversationActivity extends XmppActivity implements XmppConne | |||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 		Intent intent = new Intent(getApplicationContext(), ChooseContactActivity.class); | 		Intent intent = new Intent(getApplicationContext(), ChooseContactActivity.class); | ||||||
| 		intent.putExtra("multiple", true); | 		intent.putExtra(ChooseContactActivity.EXTRA_SHOW_ENTER_JID, false); | ||||||
| 		intent.putExtra("show_enter_jid", true); | 		intent.putExtra(ChooseContactActivity.EXTRA_SELECT_MULTIPLE, true); | ||||||
| 		intent.putExtra("subject", subject); | 		intent.putExtra(ChooseContactActivity.EXTRA_GROUP_CHAT_NAME, name.trim()); | ||||||
| 		intent.putExtra(EXTRA_ACCOUNT, account.getJid().asBareJid().toString()); | 		intent.putExtra(ChooseContactActivity.EXTRA_ACCOUNT, account.getJid().asBareJid().toString()); | ||||||
| 		intent.putExtra(ChooseContactActivity.EXTRA_TITLE_RES_ID, R.string.choose_participants); | 		intent.putExtra(ChooseContactActivity.EXTRA_TITLE_RES_ID, R.string.choose_participants); | ||||||
| 		startActivityForResult(intent, REQUEST_CREATE_CONFERENCE); | 		startActivityForResult(intent, REQUEST_CREATE_CONFERENCE); | ||||||
| 	} | 	} | ||||||
| @ -1039,8 +1023,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		@Override | 		@Override | ||||||
| 		public void onCreateContextMenu(final ContextMenu menu, final View v, | 		public void onCreateContextMenu(final ContextMenu menu, final View v, final ContextMenuInfo menuInfo) { | ||||||
| 		                                final ContextMenuInfo menuInfo) { |  | ||||||
| 			super.onCreateContextMenu(menu, v, menuInfo); | 			super.onCreateContextMenu(menu, v, menuInfo); | ||||||
| 			final StartConversationActivity activity = (StartConversationActivity) getActivity(); | 			final StartConversationActivity activity = (StartConversationActivity) getActivity(); | ||||||
| 			if (activity == null) { | 			if (activity == null) { | ||||||
|  | |||||||
| @ -924,22 +924,11 @@ public abstract class XmppActivity extends ActionBarActivity { | |||||||
| 
 | 
 | ||||||
| 		public static ConferenceInvite parse(Intent data) { | 		public static ConferenceInvite parse(Intent data) { | ||||||
| 			ConferenceInvite invite = new ConferenceInvite(); | 			ConferenceInvite invite = new ConferenceInvite(); | ||||||
| 			invite.uuid = data.getStringExtra("conversation"); | 			invite.uuid = data.getStringExtra(ChooseContactActivity.EXTRA_CONVERSATION); | ||||||
| 			if (invite.uuid == null) { | 			if (invite.uuid == null) { | ||||||
| 				return null; | 				return null; | ||||||
| 			} | 			} | ||||||
| 			try { | 			invite.jids.addAll(ChooseContactActivity.extractJabberIds(data)); | ||||||
| 				if (data.getBooleanExtra("multiple", false)) { |  | ||||||
| 					String[] toAdd = data.getStringArrayExtra("contacts"); |  | ||||||
| 					for (String item : toAdd) { |  | ||||||
| 						invite.jids.add(Jid.of(item)); |  | ||||||
| 					} |  | ||||||
| 				} else { |  | ||||||
| 					invite.jids.add(Jid.of(data.getStringExtra("contact"))); |  | ||||||
| 				} |  | ||||||
| 			} catch (final IllegalArgumentException ignored) { |  | ||||||
| 				return null; |  | ||||||
| 			} |  | ||||||
| 			return invite; | 			return invite; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -35,6 +35,10 @@ import eu.siacs.conversations.http.AesGcmURLStreamHandler; | |||||||
| import rocks.xmpp.addr.Jid; | import rocks.xmpp.addr.Jid; | ||||||
| 
 | 
 | ||||||
| public final class CryptoHelper { | public final class CryptoHelper { | ||||||
|  | 
 | ||||||
|  | 	private static final char[] VOWELS = "aeiou".toCharArray(); | ||||||
|  | 	private static final char[] CONSONANTS = "bcfghjklmnpqrstvwxyz".toCharArray(); | ||||||
|  | 
 | ||||||
| 	private final static char[] hexArray = "0123456789abcdef".toCharArray(); | 	private final static char[] hexArray = "0123456789abcdef".toCharArray(); | ||||||
| 
 | 
 | ||||||
| 	public static final Pattern UUID_PATTERN = Pattern.compile("[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}"); | 	public static final Pattern UUID_PATTERN = Pattern.compile("[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}"); | ||||||
| @ -50,6 +54,16 @@ public final class CryptoHelper { | |||||||
| 		return new String(hexChars); | 		return new String(hexChars); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	public static String pronounceable(SecureRandom random) { | ||||||
|  | 		char[] output = new char[random.nextInt(4) * 2 + 5]; | ||||||
|  | 		boolean vowel = random.nextBoolean(); | ||||||
|  | 		for(int i = 0; i < output.length; ++i) { | ||||||
|  | 			output[i] = vowel ? VOWELS[random.nextInt(VOWELS.length)] : CONSONANTS[random.nextInt(CONSONANTS.length)]; | ||||||
|  | 			vowel = !vowel; | ||||||
|  | 		} | ||||||
|  | 		return String.valueOf(output); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	public static byte[] hexToBytes(String hexString) { | 	public static byte[] hexToBytes(String hexString) { | ||||||
| 		int len = hexString.length(); | 		int len = hexString.length(); | ||||||
| 		byte[] array = new byte[len / 2]; | 		byte[] array = new byte[len / 2]; | ||||||
|  | |||||||
| @ -22,12 +22,6 @@ | |||||||
|             android:layout_width="fill_parent" |             android:layout_width="fill_parent" | ||||||
|             android:layout_height="wrap_content"/> |             android:layout_height="wrap_content"/> | ||||||
| 
 | 
 | ||||||
|         <View |  | ||||||
|             android:layout_width="0dp" |  | ||||||
|             android:layout_height="0dp" |  | ||||||
|             android:focusable="true" |  | ||||||
|             android:focusableInTouchMode="true"/> |  | ||||||
| 
 |  | ||||||
|         <android.support.design.widget.TextInputLayout |         <android.support.design.widget.TextInputLayout | ||||||
|             android:layout_width="match_parent" |             android:layout_width="match_parent" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
| @ -35,13 +29,11 @@ | |||||||
|             app:hintTextAppearance="@style/TextAppearance.Conversations.Design.Hint"> |             app:hintTextAppearance="@style/TextAppearance.Conversations.Design.Hint"> | ||||||
| 
 | 
 | ||||||
|             <android.support.design.widget.TextInputEditText |             <android.support.design.widget.TextInputEditText | ||||||
|                 android:id="@+id/subject" |                 android:id="@+id/group_chat_name" | ||||||
|                 style="@style/Widget.Conversations.EditText" |                 style="@style/Widget.Conversations.EditText" | ||||||
|                 android:layout_width="match_parent" |                 android:layout_width="match_parent" | ||||||
|                 android:layout_height="wrap_content" |                 android:layout_height="wrap_content" | ||||||
|                 android:hint="@string/topic" |                 android:hint="@string/create_dialog_group_chat_name"/> | ||||||
|                 android:nextFocusDown="@+id/subject" |  | ||||||
|                 android:nextFocusUp="@+id/subject"/> |  | ||||||
|         </android.support.design.widget.TextInputLayout> |         </android.support.design.widget.TextInputLayout> | ||||||
|     </LinearLayout> |     </LinearLayout> | ||||||
| </layout> | </layout> | ||||||
|  | |||||||
| @ -717,4 +717,6 @@ | |||||||
|     <string name="contact_name">Contact name</string> |     <string name="contact_name">Contact name</string> | ||||||
|     <string name="nickname">Nickname</string> |     <string name="nickname">Nickname</string> | ||||||
|     <string name="group_chat_name">Name</string> |     <string name="group_chat_name">Name</string> | ||||||
|  |     <string name="providing_a_name_is_optional">Providing a name is optional</string> | ||||||
|  |     <string name="create_dialog_group_chat_name">Group chat name</string> | ||||||
| </resources> | </resources> | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch