diff --git a/res/values/strings.xml b/res/values/strings.xml index f1626a8f90..a06b35c1cc 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -121,6 +121,9 @@ Group Name New MMS Group You have selected a contact that doesn\'t support TextSecure groups, so this group will be MMS. + An unexpected error happened that has made group creation fail. + You need at least one person in your group! + One of the members of your group has a number that can\'t be read correctly. Please fix or remove that contact and try again. Import System SMS Database? diff --git a/src/org/thoughtcrime/securesms/GroupCreateActivity.java b/src/org/thoughtcrime/securesms/GroupCreateActivity.java index de9a4b767b..7a5d086fc2 100644 --- a/src/org/thoughtcrime/securesms/GroupCreateActivity.java +++ b/src/org/thoughtcrime/securesms/GroupCreateActivity.java @@ -1,7 +1,9 @@ package org.thoughtcrime.securesms; import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.os.AsyncTask; @@ -14,6 +16,7 @@ import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; +import android.widget.Toast; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; @@ -40,7 +43,6 @@ import org.thoughtcrime.securesms.util.Util; import org.whispersystems.textsecure.crypto.MasterSecret; import org.whispersystems.textsecure.directory.Directory; import org.whispersystems.textsecure.directory.NotInDirectoryException; -import org.whispersystems.textsecure.util.Base64; import org.whispersystems.textsecure.util.InvalidNumberException; import java.io.ByteArrayOutputStream; @@ -234,71 +236,99 @@ public class GroupCreateActivity extends PassphraseRequiredSherlockFragmentActiv finish(); return true; case R.id.menu_create_group: - if (whisperGroupUiEnabled()) { - findViewById(R.id.group_details_layout).setVisibility(View.GONE); - findViewById(R.id.creating_group_layout).setVisibility(View.VISIBLE); - findViewById(R.id.menu_create_group).setVisibility(View.GONE); - ((TextView)findViewById(R.id.creating_group_text)).setText("Creating " + groupName.getText().toString() + "..."); - new AsyncTask() { - - @Override - protected Void doInBackground(Void... voids) { - byte[] byteArray = null; - if (avatarBmp != null) { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - avatarBmp.compress(Bitmap.CompressFormat.PNG, 100, stream); - byteArray = stream.toByteArray(); - } - try { - handleCreatePushGroup(groupName.getText().toString(), byteArray, selectedContacts); - } catch (InvalidNumberException e) { - // TODO jake's gonna fill this in. - Log.w("GroupCreateActivity", e); - } catch (MmsException e) { - // TODO jake's gonna fill this in. - Log.w("GroupCreateActivity", e); - } - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - finish(); - } - - @Override - protected void onProgressUpdate(Void... values) { - super.onProgressUpdate(values); - } - }.execute(); - } else { - new AsyncTask() { - - @Override - protected Void doInBackground(Void... voids) { - handleCreateMmsGroup(selectedContacts); - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - finish(); - } - - @Override - protected void onProgressUpdate(Void... values) { - super.onProgressUpdate(values); - } - }.execute(); - } + handleGroupCreate(); return true; } return false; } + private void handleGroupCreate() { + if (selectedContacts.size() < 1) { + Toast.makeText(getApplicationContext(), R.string.GroupCreateActivity_contacts_no_members, Toast.LENGTH_SHORT); + return; + } + if (whisperGroupUiEnabled()) { + findViewById(R.id.group_details_layout).setVisibility(View.GONE); + findViewById(R.id.creating_group_layout).setVisibility(View.VISIBLE); + findViewById(R.id.menu_create_group).setVisibility(View.GONE); + ((TextView)findViewById(R.id.creating_group_text)).setText("Creating " + groupName.getText().toString() + "..."); + new AsyncTask() { + private long RES_BAD_NUMBER = -2; + private long RES_MMS_EXCEPTION = -3; + + @Override + protected Long doInBackground(Void... voids) { + byte[] byteArray = null; + if (avatarBmp != null) { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + avatarBmp.compress(Bitmap.CompressFormat.PNG, 100, stream); + byteArray = stream.toByteArray(); + } + try { + return Long.valueOf(handleCreatePushGroup(groupName.getText().toString(), byteArray, selectedContacts)); + } catch (MmsException e) { + Log.w("GroupCreateActivity", e); + return Long.valueOf(RES_MMS_EXCEPTION); + } catch (InvalidNumberException e) { + Log.w("GroupCreateActivity", e); + return Long.valueOf(RES_BAD_NUMBER); + } + } + + @Override + protected void onPostExecute(Long resultThread) { + super.onPostExecute(resultThread); + if (resultThread > -1) { + Intent intent = new Intent(GroupCreateActivity.this, ConversationActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra(ConversationActivity.MASTER_SECRET_EXTRA, masterSecret); + intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, resultThread.longValue()); + intent.putExtra(ConversationActivity.DISTRIBUTION_TYPE_EXTRA, ThreadDatabase.DistributionTypes.DEFAULT); + + ArrayList selectedContactsList = new ArrayList(selectedContacts.size()); + for (Recipient recipient : selectedContacts) { + selectedContactsList.add(recipient); + } + intent.putExtra(ConversationActivity.RECIPIENTS_EXTRA, new Recipients(selectedContactsList)); + startActivity(intent); + GroupCreateActivity.this.finish(); + } else if (resultThread == RES_BAD_NUMBER) { + Toast.makeText(getApplicationContext(), R.string.GroupCreateActivity_contacts_invalid_number, Toast.LENGTH_LONG).show(); + } else if (resultThread == RES_MMS_EXCEPTION) { + Toast.makeText(getApplicationContext(), R.string.GroupCreateActivity_contacts_mms_exception, Toast.LENGTH_LONG).show(); + finish(); + } + } + + @Override + protected void onProgressUpdate(Void... values) { + super.onProgressUpdate(values); + } + }.execute(); + } else { + new AsyncTask() { + + @Override + protected Void doInBackground(Void... voids) { + handleCreateMmsGroup(selectedContacts); + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + finish(); + } + + @Override + protected void onProgressUpdate(Void... values) { + super.onProgressUpdate(values); + } + }.execute(); + } + } + private void syncAdapterWithSelectedContacts() { SelectedRecipientsAdapter adapter = (SelectedRecipientsAdapter)lv.getAdapter(); adapter.clear();