@ -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,69 +236,97 @@ 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 < Void , Void , Void > ( ) {
@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 ;
}
handleGroupCreate ( ) ;
return true ;
}
@Override
protected void onPostExecute ( Void aVoid ) {
super . onPostExecute ( aVoid ) ;
finish ( ) ;
}
return false ;
}
@Override
protected void onProgressUpdate ( Void . . . values ) {
super . onProgressUpdate ( values ) ;
}
} . execute ( ) ;
} else {
new AsyncTask < Void , Void , Void > ( ) {
@Override
protected Void doInBackground ( Void . . . voids ) {
handleCreateMmsGroup ( selectedContacts ) ;
return null ;
}
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 < Void , Void , Long > ( ) {
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 ( Void aVoid ) {
super . onPostExecute ( aVoid ) ;
finish ( ) ;
@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 < Recipient > selectedContactsList = new ArrayList < Recipient > ( 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 ( ) ;
@Override
protected void onProgressUpdate ( Void . . . values ) {
super . onProgressUpdate ( values ) ;
}
} . execute ( ) ;
} else {
new AsyncTask < Void , Void , Void > ( ) {
@Override
protected Void doInBackground ( Void . . . voids ) {
handleCreateMmsGroup ( selectedContacts ) ;
return null ;
}
return true ;
}
return false ;
@Override
protected void onPostExecute ( Void aVoid ) {
super . onPostExecute ( aVoid ) ;
finish ( ) ;
}
@Override
protected void onProgressUpdate ( Void . . . values ) {
super . onProgressUpdate ( values ) ;
}
} . execute ( ) ;
}
}
private void syncAdapterWithSelectedContacts ( ) {