@ -112,7 +112,6 @@ import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus;
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo ;
import org.thoughtcrime.securesms.database.MmsSmsColumns.Types ;
import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState ;
import org.thoughtcrime.securesms.database.SmsDatabase ;
import org.thoughtcrime.securesms.database.ThreadDatabase ;
import org.thoughtcrime.securesms.database.identity.IdentityRecordList ;
import org.thoughtcrime.securesms.events.ReminderUpdateEvent ;
@ -1663,40 +1662,38 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
sendMediaMessage ( forceSms , getMessage ( ) , attachmentManager . buildSlideDeck ( ) , expiresIn , subscriptionId , initiating ) ;
}
private ListenableFuture < Void > sendMediaMessage ( final boolean forceSms , String body , SlideDeck slideDeck , final long expiresIn , final int subscriptionId , final boolean initiating )
throws InvalidMessageException
{
private ListenableFuture < Void > sendMediaMessage ( final boolean forceSms , String body , SlideDeck slideDeck , final long expiresIn , final int subscriptionId , final boolean initiating ) {
OutgoingMediaMessage outgoingMessageCandidate = new OutgoingMediaMessage ( recipient , slideDeck , body , System . currentTimeMillis ( ) , subscriptionId , expiresIn , distributionType ) ;
final SettableFuture < Void > future = new SettableFuture < > ( ) ;
final Context context = getApplicationContext ( ) ;
OutgoingMediaMessage outgoingMessage = new OutgoingMediaMessage ( recipient ,
slideDeck ,
body ,
System . currentTimeMillis ( ) ,
subscriptionId ,
expiresIn ,
distributionType ) ;
final OutgoingMediaMessage outgoingMessage ;
if ( isSecureText & & ! forceSms ) {
outgoingMessage = new OutgoingSecureMediaMessage ( outgoingMessage ) ;
outgoingMessage = new OutgoingSecureMediaMessage ( outgoingMessageCandidate ) ;
} else {
outgoingMessage = outgoingMessageCandidate ;
}
Permissions . with ( this )
. request ( Manifest . permission . SEND_SMS )
. ifNecessary ( isSecureText | | forceSms )
. withPermanentDenialDialog ( getString ( R . string . ConversationActivity_signal_needs_sms_permission_in_order_to_send_an_sms ) )
. onAllGranted ( ( ) - > {
attachmentManager . clear ( glideRequests , false ) ;
composeText . setText ( "" ) ;
final long id = fragment . stageOutgoingMessage ( outgoingMessage ) ;
new AsyncTask < OutgoingMediaMessage , Void , Long > ( ) {
new AsyncTask < Void , Void , Long > ( ) {
@Override
protected Long doInBackground ( OutgoingMediaMessage. . . messages ) {
protected Long doInBackground ( Void. . . param ) {
if ( initiating ) {
DatabaseFactory . getRecipientDatabase ( context ) . setProfileSharing ( recipient , true ) ;
}
return MessageSender . send ( context , masterSecret , messages [ 0 ] , threadId , forceSms , new SmsDatabase . InsertListener ( ) {
@Override
public void onComplete ( ) {
fragment . releaseOutgoingMessage ( id ) ;
}
} ) ;
return MessageSender . send ( context , masterSecret , outgoingMessage , threadId , forceSms , ( ) - > fragment . releaseOutgoingMessage ( id ) ) ;
}
@Override
@ -1704,7 +1701,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
sendComplete ( result ) ;
future . set ( null ) ;
}
} . executeOnExecutor ( AsyncTask . THREAD_POOL_EXECUTOR , outgoingMessage ) ;
} . executeOnExecutor ( AsyncTask . THREAD_POOL_EXECUTOR ) ;
} )
. onAnyDenied ( ( ) - > future . set ( null ) )
. execute ( ) ;
return future ;
}
@ -1713,14 +1713,21 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
throws InvalidMessageException
{
final Context context = getApplicationContext ( ) ;
final String messageBody = getMessage ( ) ;
OutgoingTextMessage message ;
if ( isSecureText & & ! forceSms ) {
message = new OutgoingEncryptedMessage ( recipient , getMessage( ) , expiresIn ) ;
message = new OutgoingEncryptedMessage ( recipient , messageBody , expiresIn ) ;
} else {
message = new OutgoingTextMessage ( recipient , getMessage( ) , expiresIn , subscriptionId ) ;
message = new OutgoingTextMessage ( recipient , messageBody , expiresIn , subscriptionId ) ;
}
Permissions . with ( this )
. request ( Manifest . permission . SEND_SMS )
. ifNecessary ( forceSms | | ! isSecureText )
. withPermanentDenialDialog ( getString ( R . string . ConversationActivity_signal_needs_sms_permission_in_order_to_send_an_sms ) )
. onAllGranted ( ( ) - > {
this . composeText . setText ( "" ) ;
final long id = fragment . stageOutgoingMessage ( message ) ;
@ -1731,12 +1738,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
DatabaseFactory . getRecipientDatabase ( context ) . setProfileSharing ( recipient , true ) ;
}
return MessageSender . send ( context , masterSecret , messages [ 0 ] , threadId , forceSms , new SmsDatabase . InsertListener ( ) {
@Override
public void onComplete ( ) {
fragment . releaseOutgoingMessage ( id ) ;
}
} ) ;
return MessageSender . send ( context , masterSecret , messages [ 0 ] , threadId , forceSms , ( ) - > fragment . releaseOutgoingMessage ( id ) ) ;
}
@Override
@ -1744,6 +1746,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
sendComplete ( result ) ;
}
} . executeOnExecutor ( AsyncTask . THREAD_POOL_EXECUTOR , message ) ;
} )
. execute ( ) ;
}
private void updateToggleButtonState ( ) {
@ -1830,7 +1835,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
future . addListener ( new ListenableFuture . Listener < Pair < Uri , Long > > ( ) {
@Override
public void onSuccess ( final @NonNull Pair < Uri , Long > result ) {
try {
boolean forceSms = sendButton . isManualSelection ( ) & & sendButton . getSelectedTransport ( ) . isSms ( ) ;
int subscriptionId = sendButton . getSelectedTransport ( ) . getSimSubscriptionId ( ) . or ( - 1 ) ;
long expiresIn = recipient . getExpireMessages ( ) * 1000 ;
@ -1851,10 +1855,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} . executeOnExecutor ( AsyncTask . THREAD_POOL_EXECUTOR ) ;
}
} ) ;
} catch ( InvalidMessageException e ) {
Log . w ( TAG , e ) ;
Toast . makeText ( ConversationActivity . this , R . string . ConversationActivity_error_sending_voice_message , Toast . LENGTH_LONG ) . show ( ) ;
}
}
@Override