Support for dual-sim SMS/MMS functionality

Allow source selection for sending SMS/MMS, and display the
SIM that received SMS/MMS.

Fixes #555
Closes #5199
// FREEBIE
This commit is contained in:
Moxie Marlinspike
2016-02-05 16:10:33 -08:00
parent c1106d98dd
commit 6da86e482d
53 changed files with 727 additions and 281 deletions

View File

@@ -63,9 +63,11 @@ public class MmsListener extends BroadcastReceiver {
isRelevant(context, intent)))
{
Log.w(TAG, "Relevant!");
int subscriptionId = intent.getExtras().getInt("subscription", -1);
ApplicationContext.getInstance(context)
.getJobManager()
.add(new MmsReceiveJob(context, intent.getByteArrayExtra("data")));
.add(new MmsReceiveJob(context, intent.getByteArrayExtra("data"), subscriptionId));
abortBroadcast();
}

View File

@@ -9,6 +9,8 @@ import android.widget.Toast;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.RecipientPreferenceDatabase.RecipientsPreferences;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
import org.thoughtcrime.securesms.mms.SlideDeck;
@@ -17,6 +19,7 @@ import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
import org.thoughtcrime.securesms.util.Rfc5724Uri;
import org.whispersystems.libaxolotl.util.guava.Optional;
import java.net.URISyntaxException;
import java.net.URLDecoder;
@@ -49,14 +52,17 @@ public class QuickResponseService extends MasterSecretIntentService {
if(numbers.contains("%")){
numbers = URLDecoder.decode(numbers);
}
Recipients recipients = RecipientFactory.getRecipientsFromString(this, numbers, false);
Recipients recipients = RecipientFactory.getRecipientsFromString(this, numbers, false);
Optional<RecipientsPreferences> preferences = DatabaseFactory.getRecipientPreferenceDatabase(this).getRecipientsPreferences(recipients.getIds());
int subscriptionId = preferences.isPresent() ? preferences.get().getDefaultSubscriptionId().or(-1) : -1;
if (!TextUtils.isEmpty(content)) {
if (recipients.isSingleRecipient()) {
MessageSender.send(this, masterSecret, new OutgoingTextMessage(recipients, content), -1, false);
MessageSender.send(this, masterSecret, new OutgoingTextMessage(recipients, content, subscriptionId), -1, false);
} else {
MessageSender.send(this, masterSecret, new OutgoingMediaMessage(recipients, new SlideDeck(), content, System.currentTimeMillis(),
ThreadDatabase.DistributionTypes.DEFAULT), -1, false);
subscriptionId, ThreadDatabase.DistributionTypes.DEFAULT), -1, false);
}
}
} catch (URISyntaxException e) {

View File

@@ -84,16 +84,6 @@ public class SmsListener extends BroadcastReceiver {
return bodyBuilder.toString();
}
// private ArrayList<IncomingTextMessage> getAsTextMessages(Intent intent) {
// Object[] pdus = (Object[])intent.getExtras().get("pdus");
// ArrayList<IncomingTextMessage> messages = new ArrayList<IncomingTextMessage>(pdus.length);
//
// for (int i=0;i<pdus.length;i++)
// messages.add(new IncomingTextMessage(SmsMessage.createFromPdu((byte[])pdus[i])));
//
// return messages;
// }
private boolean isRelevant(Context context, Intent intent) {
SmsMessage message = getSmsMessageFromIntent(intent);
String messageBody = getSmsMessageBodyFromIntent(intent);
@@ -164,14 +154,10 @@ public class SmsListener extends BroadcastReceiver {
} else if ((intent.getAction().equals(SMS_DELIVERED_ACTION)) ||
(intent.getAction().equals(SMS_RECEIVED_ACTION)) && isRelevant(context, intent))
{
Object[] pdus = (Object[])intent.getExtras().get("pdus");
ApplicationContext.getInstance(context).getJobManager().add(new SmsReceiveJob(context, pdus));
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
int subscriptionId = intent.getExtras().getInt("subscription", -1);
// Intent receivedIntent = new Intent(context, SendReceiveService.class);
// receivedIntent.setAction(SendReceiveService.RECEIVE_SMS_ACTION);
// receivedIntent.putExtra("ResultCode", this.getResultCode());
// receivedIntent.putParcelableArrayListExtra("text_messages",getAsTextMessages(intent));
// context.startService(receivedIntent);
ApplicationContext.getInstance(context).getJobManager().add(new SmsReceiveJob(context, pdus, subscriptionId));
abortBroadcast();
}