2010-12-12 02:36:52 +01:00
|
|
|
package com.hectorone.multismssender;
|
2009-10-22 14:26:02 +02:00
|
|
|
|
2010-01-22 15:21:33 +01:00
|
|
|
import java.text.DateFormat;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Date;
|
2011-07-25 01:00:48 +02:00
|
|
|
import java.util.HashMap;
|
2009-10-22 14:26:02 +02:00
|
|
|
import java.util.HashSet;
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.app.AlertDialog;
|
|
|
|
import android.app.Dialog;
|
2010-01-22 15:21:33 +01:00
|
|
|
import android.app.PendingIntent;
|
2009-10-22 14:26:02 +02:00
|
|
|
import android.app.ProgressDialog;
|
2012-11-05 18:05:48 +01:00
|
|
|
import android.content.ContentResolver;
|
2010-12-10 22:31:06 +01:00
|
|
|
import android.content.ContentValues;
|
2012-11-09 14:28:57 +01:00
|
|
|
import android.content.Context;
|
2009-10-22 14:26:02 +02:00
|
|
|
import android.content.DialogInterface;
|
|
|
|
import android.content.Intent;
|
2012-11-09 14:28:57 +01:00
|
|
|
import android.content.SharedPreferences;
|
2012-11-05 18:05:48 +01:00
|
|
|
import android.database.Cursor;
|
2010-01-27 17:59:55 +01:00
|
|
|
import android.net.Uri;
|
2009-10-22 14:26:02 +02:00
|
|
|
import android.os.Bundle;
|
2010-12-10 22:31:06 +01:00
|
|
|
import android.os.Handler;
|
|
|
|
import android.os.Message;
|
2012-11-05 18:05:48 +01:00
|
|
|
import android.provider.ContactsContract.PhoneLookup;
|
2010-01-05 14:57:29 +01:00
|
|
|
import android.telephony.PhoneNumberUtils;
|
2011-07-25 01:00:48 +02:00
|
|
|
import android.telephony.SmsManager;
|
2009-10-22 14:26:02 +02:00
|
|
|
import android.view.Menu;
|
|
|
|
import android.view.MenuItem;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.View.OnClickListener;
|
|
|
|
import android.view.inputmethod.EditorInfo;
|
|
|
|
import android.widget.Button;
|
2010-01-22 15:21:33 +01:00
|
|
|
import android.widget.CheckBox;
|
2012-11-09 14:28:57 +01:00
|
|
|
import android.widget.CompoundButton;
|
|
|
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
2009-10-22 14:26:02 +02:00
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
|
|
public class MultiSmsSender extends Activity {
|
|
|
|
private Button mAddButton;
|
2012-10-03 11:00:58 +02:00
|
|
|
private Button mAddGroupButton;
|
2009-10-22 14:26:02 +02:00
|
|
|
private Button mSend;
|
|
|
|
private TextView mContacts;
|
|
|
|
private TextView mEditor;
|
2010-01-22 15:21:33 +01:00
|
|
|
private CheckBox mDeliveryCheckBox;
|
2009-10-22 14:26:02 +02:00
|
|
|
|
|
|
|
private ProgressDialog mSendingDialog;
|
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
public static final int ACTIVITY_EDIT = 0;
|
2009-10-22 14:26:02 +02:00
|
|
|
public static final int ACTIVITY_ADD_GROUP = 1;
|
2012-11-06 10:35:01 +01:00
|
|
|
public static final int ACTIVITY_DELIVERY = 2;
|
2011-10-30 01:57:40 +02:00
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
private static final int INSERT_ID = Menu.FIRST;
|
2009-10-22 14:26:02 +02:00
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
public static final int MANY_MESSAGE = 50;
|
2010-12-12 02:28:33 +01:00
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
private static final int DIALOG_PROGRESS = 0;
|
|
|
|
private static final int DIALOG_FINISHED = 1;
|
|
|
|
private static final int DIALOG_NONUMBER = 2;
|
|
|
|
private static final int DIALOG_MANYMESSAGE = 3;
|
|
|
|
private static final int DIALOG_STARTWAIT = 4;
|
2010-12-12 02:28:33 +01:00
|
|
|
private static final int DIALOG_PROGRESS_CANCEL = 5;
|
2012-11-06 10:35:01 +01:00
|
|
|
private static final int SENDING_DIALOG_KEY = 6;
|
2010-12-10 22:31:06 +01:00
|
|
|
|
2009-10-22 14:26:02 +02:00
|
|
|
public static final String PARAM_NUMBERS_LIST = "param number list";
|
2012-11-09 14:28:57 +01:00
|
|
|
public static final String PARAM_FLUSH = "param flush";
|
|
|
|
public static final String PARAM_ENTRY_ID = "entry_id";
|
|
|
|
|
|
|
|
public static final String PREF_NAME = "com.hectorone.multismssender.pref";
|
|
|
|
public static final String PREF_USE_DELIVERY = "use_delivery";
|
2010-12-10 22:31:06 +01:00
|
|
|
|
2010-01-27 17:59:55 +01:00
|
|
|
public static final String DEBUG_TAG="MultiSmsSender";
|
2011-07-25 01:00:48 +02:00
|
|
|
|
2011-03-01 22:25:00 +01:00
|
|
|
private boolean appli_running = true;
|
2009-10-22 14:26:02 +02:00
|
|
|
|
2010-12-12 02:28:33 +01:00
|
|
|
MessageSenderThread mThreadSender;
|
|
|
|
private boolean mManyMessageContinue;
|
|
|
|
|
2010-12-10 22:31:06 +01:00
|
|
|
final Handler mHandler = new Handler() {
|
|
|
|
public void handleMessage(Message msg) {
|
|
|
|
int type = msg.getData().getInt("ORIGIN");
|
2012-11-06 10:35:01 +01:00
|
|
|
|
2010-12-10 22:31:06 +01:00
|
|
|
switch (type) {
|
2012-11-06 10:35:01 +01:00
|
|
|
case DIALOG_PROGRESS: {
|
2010-12-10 22:31:06 +01:00
|
|
|
int total = msg.getData().getInt("total");
|
|
|
|
mSendingDialog.setProgress(total);
|
|
|
|
}
|
2012-11-06 10:35:01 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case DIALOG_PROGRESS_CANCEL: {
|
2010-12-12 02:28:33 +01:00
|
|
|
mSendingDialog.cancel();
|
|
|
|
}
|
2012-11-06 10:35:01 +01:00
|
|
|
break;
|
2010-12-10 22:31:06 +01:00
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
case DIALOG_FINISHED: {
|
2010-12-10 22:31:06 +01:00
|
|
|
int total = msg.getData().getInt("total");
|
2012-11-06 10:35:01 +01:00
|
|
|
new AlertDialog.Builder(MultiSmsSender.this)
|
|
|
|
.setPositiveButton(
|
|
|
|
getResources().getString(R.string.ok),
|
|
|
|
new DialogInterface.OnClickListener() {
|
|
|
|
|
|
|
|
public void onClick(DialogInterface dialog,
|
|
|
|
int which) {
|
|
|
|
dialog.dismiss();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
.setMessage(
|
|
|
|
total
|
|
|
|
+ " "
|
|
|
|
+ getResources().getString(
|
|
|
|
R.string.message_sent)).show();
|
2010-12-10 22:31:06 +01:00
|
|
|
break;
|
|
|
|
}
|
2010-12-12 02:28:33 +01:00
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
case DIALOG_NONUMBER: {
|
|
|
|
new AlertDialog.Builder(MultiSmsSender.this)
|
|
|
|
.setPositiveButton(
|
|
|
|
getResources().getString(R.string.ok),
|
|
|
|
new DialogInterface.OnClickListener() {
|
|
|
|
|
|
|
|
public void onClick(DialogInterface dialog,
|
|
|
|
int which) {
|
|
|
|
dialog.dismiss();
|
|
|
|
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.setMessage(
|
|
|
|
getResources().getString(R.string.enter_number))
|
|
|
|
.show();
|
2010-12-12 02:28:33 +01:00
|
|
|
break;
|
|
|
|
}
|
2012-11-06 10:35:01 +01:00
|
|
|
case DIALOG_MANYMESSAGE: {
|
|
|
|
|
2010-12-12 02:28:33 +01:00
|
|
|
new AlertDialog.Builder(MultiSmsSender.this)
|
2012-11-06 10:35:01 +01:00
|
|
|
.setMessage(
|
|
|
|
getResources().getString(
|
|
|
|
R.string.warning_many_message))
|
|
|
|
.setCancelable(false)
|
|
|
|
.setPositiveButton(
|
|
|
|
getResources().getString(R.string.ok),
|
|
|
|
new DialogInterface.OnClickListener() {
|
|
|
|
public void onClick(DialogInterface dialog,
|
|
|
|
int id) {
|
|
|
|
synchronized (MultiSmsSender.this) {
|
|
|
|
MultiSmsSender.this.notify();
|
|
|
|
mManyMessageContinue = true;
|
|
|
|
}
|
|
|
|
dialog.dismiss();
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.setNegativeButton(
|
|
|
|
getResources().getString(R.string.cancel),
|
|
|
|
new DialogInterface.OnClickListener() {
|
|
|
|
public void onClick(DialogInterface dialog,
|
|
|
|
int id) {
|
|
|
|
synchronized (MultiSmsSender.this) {
|
|
|
|
MultiSmsSender.this.notify();
|
|
|
|
mManyMessageContinue = false;
|
|
|
|
}
|
|
|
|
dialog.dismiss();
|
|
|
|
}
|
|
|
|
}).show();
|
2010-12-12 02:28:33 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
2012-11-06 10:35:01 +01:00
|
|
|
case DIALOG_STARTWAIT: {
|
|
|
|
new AlertDialog.Builder(MultiSmsSender.this)
|
|
|
|
.setPositiveButton(
|
|
|
|
getResources().getString(R.string.ok),
|
|
|
|
new DialogInterface.OnClickListener() {
|
|
|
|
|
|
|
|
public void onClick(DialogInterface dialog,
|
|
|
|
int which) {
|
|
|
|
synchronized (MultiSmsSender.this) {
|
|
|
|
MultiSmsSender.this.notify();
|
|
|
|
}
|
|
|
|
dialog.dismiss();
|
|
|
|
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.setMessage(
|
|
|
|
getResources().getString(R.string.more_message))
|
|
|
|
.show();
|
2010-12-12 02:28:33 +01:00
|
|
|
break;
|
|
|
|
|
2010-12-10 22:31:06 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2009-10-22 14:26:02 +02:00
|
|
|
@Override
|
|
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
setContentView(R.layout.main);
|
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
mAddButton = (Button) findViewById(R.id.contacts);
|
|
|
|
mAddGroupButton = (Button) findViewById(R.id.groups);
|
|
|
|
mSend = (Button) findViewById(R.id.send);
|
|
|
|
mContacts = (TextView) findViewById(R.id.numbers);
|
|
|
|
mEditor = (TextView) findViewById(R.id.editor);
|
|
|
|
mDeliveryCheckBox = (CheckBox) findViewById(R.id.deliveryCheckBox);
|
2009-10-22 14:26:02 +02:00
|
|
|
|
|
|
|
mContacts.setImeOptions(EditorInfo.IME_ACTION_NEXT);
|
2012-11-06 10:35:01 +01:00
|
|
|
// mEditor.setImeOptions(EditorInfo.IME_ACTION_DONE);
|
2009-10-22 14:26:02 +02:00
|
|
|
|
|
|
|
mAddButton.setOnClickListener(new OnClickListener() {
|
|
|
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
selectNumbers();
|
|
|
|
}
|
|
|
|
});
|
2012-11-06 10:35:01 +01:00
|
|
|
|
2012-10-03 11:00:58 +02:00
|
|
|
mAddGroupButton.setOnClickListener(new OnClickListener() {
|
|
|
|
public void onClick(View v) {
|
|
|
|
display_group_list();
|
|
|
|
}
|
|
|
|
});
|
2009-10-22 14:26:02 +02:00
|
|
|
|
|
|
|
mSend.setOnClickListener(new OnClickListener() {
|
|
|
|
|
|
|
|
public void onClick(View v) {
|
2010-12-10 22:31:06 +01:00
|
|
|
showDialog(SENDING_DIALOG_KEY);
|
2010-12-12 02:28:33 +01:00
|
|
|
mThreadSender = new MessageSenderThread(mHandler);
|
|
|
|
mThreadSender.start();
|
2009-10-22 14:26:02 +02:00
|
|
|
}
|
|
|
|
});
|
2012-11-09 14:28:57 +01:00
|
|
|
|
|
|
|
//delivery preference
|
|
|
|
SharedPreferences settings = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
|
|
|
|
boolean deliveryEnabled = settings.getBoolean(PREF_USE_DELIVERY, false);
|
|
|
|
|
|
|
|
mDeliveryCheckBox.setChecked(deliveryEnabled);
|
|
|
|
mDeliveryCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
|
|
|
SharedPreferences settings = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
|
|
|
|
settings.edit().putBoolean(PREF_USE_DELIVERY, isChecked);
|
|
|
|
//TODO prefer apply() to commit() since API 9
|
|
|
|
settings.edit().commit();
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2009-10-22 14:26:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void selectNumbers() {
|
2012-11-06 10:35:01 +01:00
|
|
|
// startActivityForResult(new Intent(Intent.ACTION_PICK,
|
|
|
|
// People.CONTENT_URI), 0);
|
2009-10-22 14:26:02 +02:00
|
|
|
Intent i = new Intent(this, PhoneNumberSelection.class);
|
|
|
|
String rawNumbers = mContacts.getText().toString();
|
|
|
|
String[] numbers = rawNumbers.split(",");
|
|
|
|
i.putExtra(PARAM_NUMBERS_LIST, numbers);
|
|
|
|
startActivityForResult(i, ACTIVITY_EDIT);
|
|
|
|
}
|
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
private class MessageSenderThread extends Thread {
|
2010-12-10 22:31:06 +01:00
|
|
|
|
|
|
|
Handler mHandler;
|
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
public MessageSenderThread(Handler h) {
|
2010-12-10 22:31:06 +01:00
|
|
|
mHandler = h;
|
|
|
|
}
|
2012-11-06 10:35:01 +01:00
|
|
|
|
2010-12-12 02:28:33 +01:00
|
|
|
public synchronized void run() {
|
|
|
|
super.run();
|
2010-12-10 22:31:06 +01:00
|
|
|
sendMessage(mHandler);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2012-11-06 10:35:01 +01:00
|
|
|
|
2013-09-11 14:16:00 +02:00
|
|
|
public long createMessageId(String messageName, int messageNbPart) {
|
|
|
|
ContentValues values = new ContentValues(2);
|
|
|
|
|
|
|
|
values.put(DeliveryDbAdapter.KEY_MESSAGE_NAME, messageName);
|
|
|
|
values.put(DeliveryDbAdapter.KEY_MESSAGE_DATE, DateFormat
|
|
|
|
.getDateInstance().format(new Date()));
|
|
|
|
|
|
|
|
return Long.parseLong(getContentResolver()
|
|
|
|
.insert(DeliveryDbAdapter.CONTENT_MESSAGE_URI, values)
|
|
|
|
.getPathSegments().get(1));
|
|
|
|
}
|
|
|
|
|
|
|
|
public long createEntryId(String number, long messageId) {
|
|
|
|
ContentValues values = new ContentValues(3);
|
|
|
|
values.put(DeliveryDbAdapter.KEY_DELIVERY_ENTRY_NAME,
|
|
|
|
nameFromNumber(getContentResolver(), number));
|
|
|
|
values.put(DeliveryDbAdapter.KEY_DELIVERY_ENTRY_NUMBER,
|
|
|
|
number);
|
|
|
|
values.put(DeliveryDbAdapter.KEY_DELIVERY_ENTRY_MESSAGE_ID,
|
|
|
|
messageId);
|
|
|
|
|
|
|
|
return Long.parseLong(getContentResolver()
|
|
|
|
.insert(DeliveryDbAdapter.CONTENT_DELIVERY_URI,
|
|
|
|
values).getPathSegments().get(1));
|
|
|
|
}
|
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
public void sendMessage(Handler handler) {
|
|
|
|
|
|
|
|
SmsManager manager = SmsManager.getDefault();
|
|
|
|
String message = mEditor.getText().toString();
|
2011-07-25 01:00:48 +02:00
|
|
|
HashMap<String, Long> deliveryIdMap = new HashMap<String, Long>();
|
2012-11-06 10:35:01 +01:00
|
|
|
mManyMessageContinue = true;
|
2010-12-10 22:31:06 +01:00
|
|
|
|
2010-01-27 13:47:08 +01:00
|
|
|
if("".equals(message)) {
|
2010-12-12 02:28:33 +01:00
|
|
|
{
|
2011-07-25 01:00:48 +02:00
|
|
|
displayDialog(handler, DIALOG_PROGRESS_CANCEL,null);
|
2010-12-12 02:28:33 +01:00
|
|
|
}
|
2010-01-27 13:47:08 +01:00
|
|
|
return;
|
|
|
|
}
|
2010-12-10 22:31:06 +01:00
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
String[] numbers = mContacts.getText().toString().split(",");
|
2011-07-25 01:00:48 +02:00
|
|
|
ArrayList<String> phoneNumberConform = new ArrayList<String>();
|
2012-11-06 10:35:01 +01:00
|
|
|
int size = numbers.length;
|
|
|
|
boolean haveDeliveryReports = mDeliveryCheckBox.isChecked();
|
|
|
|
long messageId = -1;
|
|
|
|
ArrayList<String> messages = manager.divideMessage(message);
|
|
|
|
int messageCount = messages.size();
|
2010-01-26 18:28:38 +01:00
|
|
|
|
2010-01-22 15:21:33 +01:00
|
|
|
if (haveDeliveryReports) {
|
2013-09-11 14:16:00 +02:00
|
|
|
messageId = createMessageId(
|
2012-11-06 10:35:01 +01:00
|
|
|
message.substring(0, Math.min(30, message.length()))
|
2013-09-11 14:16:00 +02:00
|
|
|
.replace('\n', ' ')
|
|
|
|
, messageCount);
|
2012-11-06 10:35:01 +01:00
|
|
|
}
|
2011-07-25 01:00:48 +02:00
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
// Check if numbers are correct and prepare deliveryId
|
|
|
|
for (int i = 0; i < size; i++) {
|
2011-07-25 01:00:48 +02:00
|
|
|
String newN = numbers[i].trim();
|
2012-10-15 16:57:55 +02:00
|
|
|
newN = newN.replace(" ", "");
|
2011-07-25 01:00:48 +02:00
|
|
|
if (!newN.equals("")
|
|
|
|
&& PhoneNumberUtils.isWellFormedSmsAddress(newN)
|
|
|
|
&& !phoneNumberConform.contains(newN)) {
|
|
|
|
phoneNumberConform.add(newN);
|
2012-11-06 10:35:01 +01:00
|
|
|
if (haveDeliveryReports) {
|
2013-09-11 14:16:00 +02:00
|
|
|
long entryId = createEntryId(newN, messageId);
|
2012-11-06 10:35:01 +01:00
|
|
|
deliveryIdMap.put(newN, entryId);
|
|
|
|
}
|
2011-07-25 01:00:48 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
numbers = new String[size];
|
|
|
|
numbers = phoneNumberConform.toArray(numbers);
|
2012-11-06 10:35:01 +01:00
|
|
|
size = phoneNumberConform.size();
|
2011-07-25 01:00:48 +02:00
|
|
|
|
2010-12-12 02:28:33 +01:00
|
|
|
if (size != 0) {
|
2012-11-06 10:35:01 +01:00
|
|
|
if (size > MANY_MESSAGE) {
|
2010-12-12 02:28:33 +01:00
|
|
|
{
|
2012-11-06 10:35:01 +01:00
|
|
|
displayDialog(handler, DIALOG_MANYMESSAGE, null);
|
2010-12-12 02:28:33 +01:00
|
|
|
}
|
|
|
|
synchronized (MultiSmsSender.this) {
|
|
|
|
try {
|
|
|
|
MultiSmsSender.this.wait();
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
2010-01-22 15:21:33 +01:00
|
|
|
|
2010-12-12 02:28:33 +01:00
|
|
|
}
|
2010-01-26 18:28:38 +01:00
|
|
|
|
2011-10-30 01:18:11 +02:00
|
|
|
if (mManyMessageContinue) {
|
2011-07-25 01:00:48 +02:00
|
|
|
|
2010-12-12 02:28:33 +01:00
|
|
|
int message_sent = 0;
|
2012-11-06 10:35:01 +01:00
|
|
|
int chunk_max = Math.min(MANY_MESSAGE, size);
|
2010-12-12 02:28:33 +01:00
|
|
|
do {
|
2011-10-30 01:18:11 +02:00
|
|
|
if (message_sent > 0) {
|
|
|
|
displayDialog(handler, DIALOG_STARTWAIT, null);
|
2010-12-12 02:28:33 +01:00
|
|
|
synchronized (MultiSmsSender.this) {
|
|
|
|
try {
|
|
|
|
MultiSmsSender.this.wait();
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
2010-12-10 22:31:06 +01:00
|
|
|
|
2010-12-12 02:28:33 +01:00
|
|
|
}
|
2011-10-30 01:18:11 +02:00
|
|
|
// Log.d(DEBUG_TAG,
|
|
|
|
// "size is"+size+" message_sent "+message_sent+" max"+chunk_max);
|
|
|
|
for (int i = message_sent; i < chunk_max; i++) {
|
|
|
|
message_sent++;
|
2011-07-25 01:00:48 +02:00
|
|
|
String newN = numbers[i];
|
|
|
|
Message msg = handler.obtainMessage();
|
2012-11-06 10:35:01 +01:00
|
|
|
Bundle b = new Bundle();
|
2011-07-25 01:00:48 +02:00
|
|
|
b.putInt("ORIGIN", DIALOG_PROGRESS);
|
2011-10-30 01:18:11 +02:00
|
|
|
b.putInt("total", (i * 100) / size);
|
2011-07-25 01:00:48 +02:00
|
|
|
msg.setData(b);
|
|
|
|
handler.sendMessage(msg);
|
2010-12-12 02:28:33 +01:00
|
|
|
|
2011-07-25 01:00:48 +02:00
|
|
|
ArrayList<PendingIntent> deliveryIntents = null;
|
2012-11-06 10:35:01 +01:00
|
|
|
ArrayList<PendingIntent> sentIntents = null;
|
2010-01-26 18:28:38 +01:00
|
|
|
|
2011-07-25 01:00:48 +02:00
|
|
|
if (haveDeliveryReports) {
|
2011-10-30 01:18:11 +02:00
|
|
|
deliveryIntents = new ArrayList<PendingIntent>(
|
|
|
|
messageCount);
|
2012-11-05 18:05:48 +01:00
|
|
|
sentIntents = new ArrayList<PendingIntent>(
|
|
|
|
messageCount);
|
2011-07-25 01:00:48 +02:00
|
|
|
// Add to the Google MMS app
|
|
|
|
ContentValues values = new ContentValues();
|
|
|
|
values.put("address", newN);
|
|
|
|
values.put("body", message);
|
2010-12-12 02:28:33 +01:00
|
|
|
|
2011-10-30 01:18:11 +02:00
|
|
|
getContentResolver().insert(
|
|
|
|
Uri.parse("content://sms/sent"), values);
|
2010-12-12 02:28:33 +01:00
|
|
|
|
2011-07-25 01:00:48 +02:00
|
|
|
long entryId = deliveryIdMap.get(newN);
|
2011-10-30 01:18:11 +02:00
|
|
|
// Log.d(DEBUG_TAG,
|
|
|
|
// "entry is "+entryId+" to number"+newN);
|
2011-07-25 01:00:48 +02:00
|
|
|
for (int j = 0; j < messageCount; j++) {
|
2012-11-06 10:35:01 +01:00
|
|
|
if (j == (messageCount - 1)) {
|
|
|
|
Uri entryURI = Uri
|
|
|
|
.withAppendedPath(
|
|
|
|
DeliveryDbAdapter.CONTENT_DELIVERY_URI,
|
|
|
|
"" + entryId);
|
2012-11-05 18:05:48 +01:00
|
|
|
Intent intent = new Intent(
|
|
|
|
MessageReceiver.MESSAGE_RECEIVED,
|
2012-11-06 10:35:01 +01:00
|
|
|
entryURI, this,
|
|
|
|
MessageReceiver.class);
|
|
|
|
|
|
|
|
deliveryIntents.add(PendingIntent
|
|
|
|
.getBroadcast(this, 0, intent, 0));
|
|
|
|
} else {
|
2012-11-05 18:05:48 +01:00
|
|
|
deliveryIntents.add(null);
|
|
|
|
}
|
2011-07-25 01:00:48 +02:00
|
|
|
}
|
2010-12-12 02:28:33 +01:00
|
|
|
|
2010-01-22 15:21:33 +01:00
|
|
|
}
|
2011-10-30 01:18:11 +02:00
|
|
|
manager.sendMultipartTextMessage(newN, null, messages,
|
|
|
|
sentIntents, deliveryIntents);
|
2009-10-22 14:26:02 +02:00
|
|
|
|
|
|
|
}
|
2011-10-30 01:18:11 +02:00
|
|
|
chunk_max = Math.min(message_sent + MANY_MESSAGE, size);
|
2010-12-12 02:28:33 +01:00
|
|
|
|
2011-10-30 01:18:11 +02:00
|
|
|
} while (((size - message_sent) > 0) && appli_running);
|
2009-10-22 14:26:02 +02:00
|
|
|
|
2011-10-30 01:18:11 +02:00
|
|
|
Message msg = handler.obtainMessage();
|
2012-11-06 10:35:01 +01:00
|
|
|
Bundle b = new Bundle();
|
2011-10-30 01:18:11 +02:00
|
|
|
b.putInt("ORIGIN", DIALOG_FINISHED);
|
|
|
|
b.putInt("total", phoneNumberConform.size());
|
|
|
|
msg.setData(b);
|
|
|
|
handler.sendMessage(msg);
|
|
|
|
}
|
2012-11-06 10:35:01 +01:00
|
|
|
displayDialog(handler, DIALOG_PROGRESS_CANCEL, null);
|
2010-12-12 02:28:33 +01:00
|
|
|
|
2010-01-22 15:21:33 +01:00
|
|
|
} else {
|
2012-11-06 10:35:01 +01:00
|
|
|
displayDialog(handler, DIALOG_NONUMBER, null);
|
2009-10-22 14:26:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2012-11-06 10:35:01 +01:00
|
|
|
private void displayDialog(Handler handler, int dialogId,
|
|
|
|
HashMap<String, Integer> params) {
|
2011-07-25 01:00:48 +02:00
|
|
|
Message msg = handler.obtainMessage();
|
|
|
|
Bundle b = new Bundle();
|
|
|
|
b.putInt("ORIGIN", dialogId);
|
|
|
|
if (params != null) {
|
|
|
|
for (String paramName : params.keySet()) {
|
|
|
|
b.putInt(paramName, params.get(paramName));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
msg.setData(b);
|
|
|
|
handler.sendMessage(msg);
|
|
|
|
}
|
|
|
|
|
2009-10-22 14:26:02 +02:00
|
|
|
@Override
|
|
|
|
protected Dialog onCreateDialog(int id) {
|
|
|
|
switch (id) {
|
|
|
|
case SENDING_DIALOG_KEY: {
|
|
|
|
mSendingDialog = new ProgressDialog(this);
|
|
|
|
mSendingDialog.setTitle(R.string.sending);
|
|
|
|
mSendingDialog.setMessage(getResources().getString(R.string.wait));
|
2010-01-22 15:21:33 +01:00
|
|
|
mSendingDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
|
|
|
|
mSendingDialog.setCancelable(false);
|
|
|
|
|
2009-10-22 14:26:02 +02:00
|
|
|
return mSendingDialog;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onActivityResult(int requestCode, int resultCode,
|
|
|
|
Intent intent) {
|
|
|
|
super.onActivityResult(requestCode, resultCode, intent);
|
2010-01-22 15:21:33 +01:00
|
|
|
switch (requestCode) {
|
|
|
|
case ACTIVITY_ADD_GROUP:
|
|
|
|
case ACTIVITY_EDIT:
|
|
|
|
if (intent != null) {
|
|
|
|
String[] numbers = intent.getExtras().getStringArray(
|
|
|
|
PARAM_NUMBERS_LIST);
|
|
|
|
boolean flush = intent.getExtras().getBoolean(PARAM_FLUSH);
|
|
|
|
String string = "";
|
|
|
|
HashSet<String> res = new HashSet<String>();
|
|
|
|
for (int i = 0; i < numbers.length; i++) {
|
|
|
|
String newN = numbers[i].trim();
|
|
|
|
if (!newN.equals("")) {
|
|
|
|
res.add(newN);
|
|
|
|
}
|
2009-10-22 14:26:02 +02:00
|
|
|
}
|
2010-01-22 15:21:33 +01:00
|
|
|
if (!flush) {
|
|
|
|
String oldContactsString = mContacts.getText().toString();
|
|
|
|
String[] oldContacts = oldContactsString.split(",");
|
|
|
|
for (int i = 0; i < oldContacts.length; i++) {
|
|
|
|
String newN = oldContacts[i].trim();
|
|
|
|
if (!newN.equals("")) {
|
|
|
|
res.add(newN);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (String number : res) {
|
|
|
|
string += number + ", ";
|
2009-10-22 14:26:02 +02:00
|
|
|
}
|
|
|
|
|
2010-01-22 15:21:33 +01:00
|
|
|
mContacts.setText(string);
|
2009-10-22 14:26:02 +02:00
|
|
|
}
|
2010-01-22 15:21:33 +01:00
|
|
|
break;
|
2009-10-22 14:26:02 +02:00
|
|
|
|
2010-01-22 15:21:33 +01:00
|
|
|
default:
|
|
|
|
break;
|
2009-10-22 14:26:02 +02:00
|
|
|
}
|
2010-01-22 15:21:33 +01:00
|
|
|
|
2009-10-22 14:26:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onCreateOptionsMenu(Menu menu) {
|
|
|
|
super.onCreateOptionsMenu(menu);
|
2011-01-10 11:39:18 +01:00
|
|
|
menu.add(0, INSERT_ID, 0, R.string.add_group);
|
2010-01-22 15:21:33 +01:00
|
|
|
menu.add(0, INSERT_ID + 1, 0, R.string.delivery);
|
2009-10-22 14:26:02 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onMenuItemSelected(int featureId, MenuItem item) {
|
2010-01-22 15:21:33 +01:00
|
|
|
switch (item.getItemId()) {
|
2009-10-22 14:26:02 +02:00
|
|
|
case INSERT_ID:
|
|
|
|
display_group_list();
|
|
|
|
return true;
|
2010-01-22 15:21:33 +01:00
|
|
|
case INSERT_ID + 1:
|
|
|
|
display_delivery_list();
|
|
|
|
return true;
|
|
|
|
}
|
2009-10-22 14:26:02 +02:00
|
|
|
return super.onMenuItemSelected(featureId, item);
|
|
|
|
}
|
|
|
|
|
2010-01-22 15:21:33 +01:00
|
|
|
protected void onDestroy() {
|
2011-03-01 22:25:00 +01:00
|
|
|
appli_running = false;
|
2010-01-22 15:21:33 +01:00
|
|
|
super.onDestroy();
|
|
|
|
}
|
2009-10-22 14:26:02 +02:00
|
|
|
|
2010-01-22 15:21:33 +01:00
|
|
|
public void display_group_list() {
|
2009-10-22 14:26:02 +02:00
|
|
|
|
|
|
|
Intent i = new Intent(this, SelectGroupActivity.class);
|
|
|
|
startActivityForResult(i, ACTIVITY_ADD_GROUP);
|
|
|
|
}
|
2010-01-22 15:21:33 +01:00
|
|
|
|
|
|
|
public void display_delivery_list() {
|
|
|
|
|
|
|
|
Intent i = new Intent(this, SelectDeliveryActivity.class);
|
|
|
|
startActivityForResult(i, ACTIVITY_DELIVERY);
|
|
|
|
}
|
|
|
|
|
2012-11-05 18:05:48 +01:00
|
|
|
// *********************** HELPER ****************************************
|
2012-11-06 10:35:01 +01:00
|
|
|
|
|
|
|
public String nameFromNumber(ContentResolver resolver, String number) {
|
|
|
|
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
|
|
|
|
Uri.encode(number));
|
|
|
|
Cursor c = null;
|
|
|
|
try {
|
|
|
|
c = resolver.query(uri, new String[] { PhoneLookup.DISPLAY_NAME },
|
|
|
|
null, null, null);
|
2012-11-05 18:05:48 +01:00
|
|
|
} catch (Exception e) {
|
|
|
|
return "";
|
|
|
|
}
|
2012-11-06 10:35:01 +01:00
|
|
|
|
|
|
|
if (c != null) {
|
|
|
|
c.moveToFirst();
|
|
|
|
if (c.isFirst()) {
|
|
|
|
return c.getString(c.getColumnIndex(PhoneLookup.DISPLAY_NAME));
|
|
|
|
} else {
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
2010-01-22 15:21:33 +01:00
|
|
|
|
2011-07-29 14:55:17 +02:00
|
|
|
}
|