mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-21 18:21:30 +00:00
Add correct contextual menu options on 'Send' button.
[Send TextSecure message | Send unencrypted SMS | Send encrypted SMS] // FREEBIE
This commit is contained in:
parent
7c9282f306
commit
68747142d6
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<item android:title="@string/conversation_button_context__menu_send_unencrypted"
|
|
||||||
android:id="@+id/menu_context_send_unencrypted" />
|
|
||||||
</menu>
|
|
8
res/menu/conversation_button_context_insecure_push.xml
Normal file
8
res/menu/conversation_button_context_insecure_push.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:title="@string/conversation_button_context__send_textsecure_message"
|
||||||
|
android:id="@+id/menu_context_send_push" />
|
||||||
|
<item android:title="@string/conversation_button_context__send_unencrypted_sms"
|
||||||
|
android:id="@+id/menu_context_send_unencrypted_sms" />
|
||||||
|
</menu>
|
10
res/menu/conversation_button_context_secure_push.xml
Normal file
10
res/menu/conversation_button_context_secure_push.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:title="@string/conversation_button_context__send_textsecure_message"
|
||||||
|
android:id="@+id/menu_context_send_push" />
|
||||||
|
<item android:title="@string/conversation_button_context__send_encrypted_sms"
|
||||||
|
android:id="@+id/menu_context_send_encrypted_sms" />
|
||||||
|
<item android:title="@string/conversation_button_context__send_unencrypted_sms"
|
||||||
|
android:id="@+id/menu_context_send_unencrypted_sms" />
|
||||||
|
</menu>
|
8
res/menu/conversation_button_context_secure_sms.xml
Normal file
8
res/menu/conversation_button_context_secure_sms.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:title="@string/conversation_button_context__send_encrypted_sms"
|
||||||
|
android:id="@+id/menu_context_send_encrypted_sms" />
|
||||||
|
<item android:title="@string/conversation_button_context__send_unencrypted_sms"
|
||||||
|
android:id="@+id/menu_context_send_unencrypted_sms" />
|
||||||
|
</menu>
|
@ -781,7 +781,9 @@
|
|||||||
<string name="push_directory__menu_refresh">Refresh contact list</string>
|
<string name="push_directory__menu_refresh">Refresh contact list</string>
|
||||||
|
|
||||||
<!-- conversation_button_context -->
|
<!-- conversation_button_context -->
|
||||||
<string name="conversation_button_context__menu_send_unencrypted">Send unencrypted</string>
|
<string name="conversation_button_context__send_textsecure_message">Send TextSecure message</string>
|
||||||
|
<string name="conversation_button_context__send_unencrypted_sms">Send unencrypted SMS</string>
|
||||||
|
<string name="conversation_button_context__send_encrypted_sms">Send encrypted SMS</string>
|
||||||
|
|
||||||
<!-- conversation_callable -->
|
<!-- conversation_callable -->
|
||||||
<string name="conversation_callable__menu_call">Call</string>
|
<string name="conversation_callable__menu_call">Call</string>
|
||||||
@ -841,6 +843,7 @@
|
|||||||
|
|
||||||
<!-- verify_keys -->
|
<!-- verify_keys -->
|
||||||
<string name="verify_keys__menu_verified">Verified</string>
|
<string name="verify_keys__menu_verified">Verified</string>
|
||||||
|
|
||||||
<!-- EOF -->
|
<!-- EOF -->
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -193,7 +193,6 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
|
|
||||||
super.onResume();
|
super.onResume();
|
||||||
dynamicTheme.onResume(this);
|
dynamicTheme.onResume(this);
|
||||||
dynamicLanguage.onResume(this);
|
dynamicLanguage.onResume(this);
|
||||||
@ -312,16 +311,28 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
||||||
if (isEncryptedConversation) {
|
if (isEncryptedConversation && isSingleConversation()) {
|
||||||
android.view.MenuInflater inflater = getMenuInflater();
|
boolean isPushDestination = DirectoryHelper.isPushDestination(this, getRecipients());
|
||||||
inflater.inflate(R.menu.conversation_button_context, menu);
|
Recipient primaryRecipient = getRecipients() == null ? null : getRecipients().getPrimaryRecipient();
|
||||||
|
boolean hasSession = Session.hasSession(this, masterSecret, primaryRecipient);
|
||||||
|
|
||||||
|
int context;
|
||||||
|
|
||||||
|
if (isPushDestination && hasSession) context = R.menu.conversation_button_context_secure_push;
|
||||||
|
else if (isPushDestination) context = R.menu.conversation_button_context_insecure_push;
|
||||||
|
else if (hasSession) context = R.menu.conversation_button_context_secure_sms;
|
||||||
|
else return;
|
||||||
|
|
||||||
|
getMenuInflater().inflate(context, menu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onContextItemSelected(android.view.MenuItem item) {
|
public boolean onContextItemSelected(android.view.MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.menu_context_send_unencrypted: sendMessage(true); return true;
|
case R.id.menu_context_send_push: sendMessage(false, false); return true;
|
||||||
|
case R.id.menu_context_send_encrypted_sms: sendMessage(false, true); return true;
|
||||||
|
case R.id.menu_context_send_unencrypted_sms: sendMessage(true, true); return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -402,7 +413,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
|||||||
new OutgoingEndSessionMessage(new OutgoingTextMessage(getRecipients(), "TERMINATE"));
|
new OutgoingEndSessionMessage(new OutgoingTextMessage(getRecipients(), "TERMINATE"));
|
||||||
|
|
||||||
long allocatedThreadId = MessageSender.send(self, masterSecret,
|
long allocatedThreadId = MessageSender.send(self, masterSecret,
|
||||||
endSessionMessage, threadId);
|
endSessionMessage, threadId, false);
|
||||||
|
|
||||||
sendComplete(recipients, allocatedThreadId, allocatedThreadId != self.threadId);
|
sendComplete(recipients, allocatedThreadId, allocatedThreadId != self.threadId);
|
||||||
} else {
|
} else {
|
||||||
@ -444,7 +455,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
|||||||
|
|
||||||
OutgoingGroupMediaMessage outgoingMessage = new OutgoingGroupMediaMessage(self, getRecipients(),
|
OutgoingGroupMediaMessage outgoingMessage = new OutgoingGroupMediaMessage(self, getRecipients(),
|
||||||
context, null);
|
context, null);
|
||||||
MessageSender.send(self, masterSecret, outgoingMessage, threadId);
|
MessageSender.send(self, masterSecret, outgoingMessage, threadId, false);
|
||||||
DatabaseFactory.getGroupDatabase(self).remove(groupId, TextSecurePreferences.getLocalNumber(self));
|
DatabaseFactory.getGroupDatabase(self).remove(groupId, TextSecurePreferences.getLocalNumber(self));
|
||||||
initializeEnabledCheck();
|
initializeEnabledCheck();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -1009,45 +1020,22 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
|||||||
fragment.scrollToBottom();
|
fragment.scrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendMessage(boolean forcePlaintext) {
|
private void sendMessage(boolean forcePlaintext, boolean forceSms) {
|
||||||
try {
|
try {
|
||||||
Recipients recipients = getRecipients();
|
Recipients recipients = getRecipients();
|
||||||
|
|
||||||
if (recipients == null)
|
if (recipients == null)
|
||||||
throw new RecipientFormattingException("Badly formatted");
|
throw new RecipientFormattingException("Badly formatted");
|
||||||
|
|
||||||
String body = getMessage();
|
|
||||||
long allocatedThreadId;
|
long allocatedThreadId;
|
||||||
|
|
||||||
if ((!recipients.isSingleRecipient() || recipients.isEmailRecipient()) && !isMmsEnabled) {
|
if ((!recipients.isSingleRecipient() || recipients.isEmailRecipient()) && !isMmsEnabled) {
|
||||||
handleManualMmsRequired();
|
handleManualMmsRequired();
|
||||||
return;
|
return;
|
||||||
} else if (attachmentManager.isAttachmentPresent() || !recipients.isSingleRecipient() || recipients.isGroupRecipient() || recipients.isEmailRecipient()) {
|
} else if (attachmentManager.isAttachmentPresent() || !recipients.isSingleRecipient() || recipients.isGroupRecipient() || recipients.isEmailRecipient()) {
|
||||||
SlideDeck slideDeck;
|
allocatedThreadId = sendMediaMessage(forcePlaintext, forceSms);
|
||||||
|
|
||||||
if (attachmentManager.isAttachmentPresent()) slideDeck = attachmentManager.getSlideDeck();
|
|
||||||
else slideDeck = new SlideDeck();
|
|
||||||
|
|
||||||
OutgoingMediaMessage outgoingMessage = new OutgoingMediaMessage(this, recipients, slideDeck,
|
|
||||||
body, distributionType);
|
|
||||||
|
|
||||||
if (isEncryptedConversation && !forcePlaintext) {
|
|
||||||
outgoingMessage = new OutgoingSecureMediaMessage(outgoingMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
allocatedThreadId = MessageSender.send(this, masterSecret, outgoingMessage, threadId);
|
|
||||||
} else {
|
} else {
|
||||||
OutgoingTextMessage message;
|
allocatedThreadId = sendTextMessage(forcePlaintext, forceSms);
|
||||||
|
|
||||||
if (isEncryptedConversation && !forcePlaintext) {
|
|
||||||
message = new OutgoingEncryptedMessage(recipients, body);
|
|
||||||
} else {
|
|
||||||
message = new OutgoingTextMessage(recipients, body);
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.w(TAG, "Sending message...");
|
|
||||||
allocatedThreadId = MessageSender.send(ConversationActivity.this, masterSecret,
|
|
||||||
message, threadId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sendComplete(recipients, allocatedThreadId, allocatedThreadId != this.threadId);
|
sendComplete(recipients, allocatedThreadId, allocatedThreadId != this.threadId);
|
||||||
@ -1065,6 +1053,41 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private long sendMediaMessage(boolean forcePlaintext, boolean forceSms)
|
||||||
|
throws InvalidMessageException, MmsException
|
||||||
|
{
|
||||||
|
SlideDeck slideDeck;
|
||||||
|
|
||||||
|
if (attachmentManager.isAttachmentPresent()) slideDeck = attachmentManager.getSlideDeck();
|
||||||
|
else slideDeck = new SlideDeck();
|
||||||
|
|
||||||
|
OutgoingMediaMessage outgoingMessage = new OutgoingMediaMessage(this, recipients, slideDeck,
|
||||||
|
getMessage(), distributionType);
|
||||||
|
|
||||||
|
if (isEncryptedConversation && !forcePlaintext) {
|
||||||
|
outgoingMessage = new OutgoingSecureMediaMessage(outgoingMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
return MessageSender.send(this, masterSecret, outgoingMessage, threadId, forceSms);
|
||||||
|
}
|
||||||
|
|
||||||
|
private long sendTextMessage(boolean forcePlaintext, boolean forceSms)
|
||||||
|
throws InvalidMessageException
|
||||||
|
{
|
||||||
|
OutgoingTextMessage message;
|
||||||
|
|
||||||
|
if (isEncryptedConversation && !forcePlaintext) {
|
||||||
|
message = new OutgoingEncryptedMessage(recipients, getMessage());
|
||||||
|
} else {
|
||||||
|
message = new OutgoingTextMessage(recipients, getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.w(TAG, "Sending message...");
|
||||||
|
|
||||||
|
return MessageSender.send(ConversationActivity.this, masterSecret, message, threadId, forceSms);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Listeners
|
// Listeners
|
||||||
|
|
||||||
private class AttachmentTypeListener implements DialogInterface.OnClickListener {
|
private class AttachmentTypeListener implements DialogInterface.OnClickListener {
|
||||||
@ -1092,7 +1115,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
|||||||
private class SendButtonListener implements OnClickListener, TextView.OnEditorActionListener {
|
private class SendButtonListener implements OnClickListener, TextView.OnEditorActionListener {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
sendMessage(false);
|
sendMessage(false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -459,7 +459,7 @@ public class GroupCreateActivity extends PassphraseRequiredSherlockFragmentActiv
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
OutgoingGroupMediaMessage outgoingMessage = new OutgoingGroupMediaMessage(this, groupRecipient, context, avatar);
|
OutgoingGroupMediaMessage outgoingMessage = new OutgoingGroupMediaMessage(this, groupRecipient, context, avatar);
|
||||||
long threadId = MessageSender.send(this, masterSecret, outgoingMessage, -1);
|
long threadId = MessageSender.send(this, masterSecret, outgoingMessage, -1, false);
|
||||||
|
|
||||||
return new Pair<Long, Recipients>(threadId, groupRecipient);
|
return new Pair<Long, Recipients>(threadId, groupRecipient);
|
||||||
} catch (RecipientFormattingException e) {
|
} catch (RecipientFormattingException e) {
|
||||||
|
@ -77,7 +77,7 @@ public class KeyExchangeInitiator {
|
|||||||
sessionRecordV2.getSessionState().setPendingKeyExchange(sequence, baseKey, ephemeralKey, identityKey);
|
sessionRecordV2.getSessionState().setPendingKeyExchange(sequence, baseKey, ephemeralKey, identityKey);
|
||||||
sessionRecordV2.save();
|
sessionRecordV2.save();
|
||||||
|
|
||||||
MessageSender.send(context, masterSecret, textMessage, -1);
|
MessageSender.send(context, masterSecret, textMessage, -1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean hasInitiatedSession(Context context, MasterSecret masterSecret,
|
private static boolean hasInitiatedSession(Context context, MasterSecret masterSecret,
|
||||||
|
@ -206,7 +206,7 @@ public class KeyExchangeProcessorV2 extends KeyExchangeProcessor {
|
|||||||
|
|
||||||
OutgoingKeyExchangeMessage textMessage = new OutgoingKeyExchangeMessage(recipient,
|
OutgoingKeyExchangeMessage textMessage = new OutgoingKeyExchangeMessage(recipient,
|
||||||
ourMessage.serialize());
|
ourMessage.serialize());
|
||||||
MessageSender.send(context, masterSecret, textMessage, threadId);
|
MessageSender.send(context, masterSecret, textMessage, threadId, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.getSequence() != sessionRecord.getSessionState().getPendingKeyExchangeSequence()) {
|
if (message.getSequence() != sessionRecord.getSessionState().getPendingKeyExchangeSequence()) {
|
||||||
|
@ -59,13 +59,13 @@ public class EncryptingSmsDatabase extends SmsDatabase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<Long> insertMessageOutbox(MasterSecret masterSecret, long threadId,
|
public List<Long> insertMessageOutbox(MasterSecret masterSecret, long threadId,
|
||||||
OutgoingTextMessage message)
|
OutgoingTextMessage message, boolean forceSms)
|
||||||
{
|
{
|
||||||
long type = Types.BASE_OUTBOX_TYPE;
|
long type = Types.BASE_OUTBOX_TYPE;
|
||||||
message = message.withBody(getEncryptedBody(masterSecret, message.getMessageBody()));
|
message = message.withBody(getEncryptedBody(masterSecret, message.getMessageBody()));
|
||||||
type |= Types.ENCRYPTION_SYMMETRIC_BIT;
|
type |= Types.ENCRYPTION_SYMMETRIC_BIT;
|
||||||
|
|
||||||
return insertMessageOutbox(threadId, message, type);
|
return insertMessageOutbox(threadId, message, type, forceSms);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Pair<Long, Long> insertMessageInbox(MasterSecret masterSecret,
|
public Pair<Long, Long> insertMessageInbox(MasterSecret masterSecret,
|
||||||
|
@ -572,14 +572,14 @@ public class MmsDatabase extends Database implements MmsSmsColumns {
|
|||||||
Trimmer.trimThread(context, threadId);
|
Trimmer.trimThread(context, threadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public long insertMessageOutbox(MasterSecret masterSecret, OutgoingMediaMessage message, long threadId)
|
public long insertMessageOutbox(MasterSecret masterSecret, OutgoingMediaMessage message,
|
||||||
|
long threadId, boolean forceSms)
|
||||||
throws MmsException
|
throws MmsException
|
||||||
{
|
{
|
||||||
long type = Types.BASE_OUTBOX_TYPE | Types.ENCRYPTION_SYMMETRIC_BIT;
|
long type = Types.BASE_OUTBOX_TYPE | Types.ENCRYPTION_SYMMETRIC_BIT;
|
||||||
|
|
||||||
if (message.isSecure()) {
|
if (message.isSecure()) type |= Types.SECURE_MESSAGE_BIT;
|
||||||
type |= Types.SECURE_MESSAGE_BIT;
|
if (forceSms) type |= Types.MESSAGE_FORCE_SMS_BIT;
|
||||||
}
|
|
||||||
|
|
||||||
if (message.isGroup()) {
|
if (message.isGroup()) {
|
||||||
if (((OutgoingGroupMediaMessage)message).isGroupUpdate()) type |= Types.GROUP_UPDATE_BIT;
|
if (((OutgoingGroupMediaMessage)message).isGroupUpdate()) type |= Types.GROUP_UPDATE_BIT;
|
||||||
|
@ -362,10 +362,13 @@ public class SmsDatabase extends Database implements MmsSmsColumns {
|
|||||||
return insertMessageInbox(message, Types.BASE_INBOX_TYPE);
|
return insertMessageInbox(message, Types.BASE_INBOX_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<Long> insertMessageOutbox(long threadId, OutgoingTextMessage message, long type) {
|
protected List<Long> insertMessageOutbox(long threadId, OutgoingTextMessage message,
|
||||||
|
long type, boolean forceSms)
|
||||||
|
{
|
||||||
if (message.isKeyExchange()) type |= Types.KEY_EXCHANGE_BIT;
|
if (message.isKeyExchange()) type |= Types.KEY_EXCHANGE_BIT;
|
||||||
else if (message.isSecureMessage()) type |= Types.SECURE_MESSAGE_BIT;
|
else if (message.isSecureMessage()) type |= Types.SECURE_MESSAGE_BIT;
|
||||||
else if (message.isEndSession()) type |= Types.END_SESSION_BIT;
|
else if (message.isEndSession()) type |= Types.END_SESSION_BIT;
|
||||||
|
if (forceSms) type |= Types.MESSAGE_FORCE_SMS_BIT;
|
||||||
|
|
||||||
long date = System.currentTimeMillis();
|
long date = System.currentTimeMillis();
|
||||||
List<Long> messageIds = new LinkedList<Long>();
|
List<Long> messageIds = new LinkedList<Long>();
|
||||||
|
@ -32,14 +32,14 @@ import ws.com.google.android.mms.MmsException;
|
|||||||
public class MessageSender {
|
public class MessageSender {
|
||||||
|
|
||||||
public static long send(Context context, MasterSecret masterSecret,
|
public static long send(Context context, MasterSecret masterSecret,
|
||||||
OutgoingTextMessage message, long threadId)
|
OutgoingTextMessage message, long threadId,
|
||||||
|
boolean forceSms)
|
||||||
{
|
{
|
||||||
if (threadId == -1)
|
if (threadId == -1)
|
||||||
threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(message.getRecipients());
|
threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(message.getRecipients());
|
||||||
|
|
||||||
List<Long> messageIds = DatabaseFactory.getEncryptingSmsDatabase(context)
|
List<Long> messageIds = DatabaseFactory.getEncryptingSmsDatabase(context)
|
||||||
.insertMessageOutbox(masterSecret, threadId, message);
|
.insertMessageOutbox(masterSecret, threadId, message, forceSms);
|
||||||
|
|
||||||
|
|
||||||
for (long messageId : messageIds) {
|
for (long messageId : messageIds) {
|
||||||
Log.w("SMSSender", "Got message id for new message: " + messageId);
|
Log.w("SMSSender", "Got message id for new message: " + messageId);
|
||||||
@ -53,14 +53,16 @@ public class MessageSender {
|
|||||||
return threadId;
|
return threadId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long send(Context context, MasterSecret masterSecret, OutgoingMediaMessage message, long threadId)
|
public static long send(Context context, MasterSecret masterSecret,
|
||||||
|
OutgoingMediaMessage message,
|
||||||
|
long threadId, boolean forceSms)
|
||||||
throws MmsException
|
throws MmsException
|
||||||
{
|
{
|
||||||
if (threadId == -1)
|
if (threadId == -1)
|
||||||
threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(message.getRecipients(), message.getDistributionType());
|
threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(message.getRecipients(), message.getDistributionType());
|
||||||
|
|
||||||
long messageId = DatabaseFactory.getMmsDatabase(context)
|
long messageId = DatabaseFactory.getMmsDatabase(context)
|
||||||
.insertMessageOutbox(masterSecret, message, threadId);
|
.insertMessageOutbox(masterSecret, message, threadId, forceSms);
|
||||||
|
|
||||||
Intent intent = new Intent(SendReceiveService.SEND_MMS_ACTION, null,
|
Intent intent = new Intent(SendReceiveService.SEND_MMS_ACTION, null,
|
||||||
context, SendReceiveService.class);
|
context, SendReceiveService.class);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user