MultiSmsSender/src/com/openwide/android/MultiSmsSender.java

286 lines
7.9 KiB
Java
Raw Normal View History

2009-10-22 14:26:02 +02:00
package com.openwide.android;
2010-01-22 15:21:33 +01:00
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
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;
import android.content.DialogInterface;
import android.content.Intent;
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-01-05 14:57:29 +01:00
import android.telephony.PhoneNumberUtils;
2010-01-27 17:59:55 +01:00
import android.util.Log;
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;
2009-10-22 14:26:02 +02:00
import android.widget.TextView;
public class MultiSmsSender extends Activity {
private Button mAddButton;
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
2010-01-22 15:21:33 +01:00
private DeliveryDbAdapter mDbHelper;
2009-10-22 14:26:02 +02:00
private ProgressDialog mSendingDialog;
public static final int ACTIVITY_EDIT = 0;
public static final int ACTIVITY_ADD_GROUP = 1;
2010-01-22 15:21:33 +01:00
public static final int ACTIVITY_DELIVERY = 2;
2009-10-22 14:26:02 +02:00
private static final int SENDING_DIALOG_KEY = 0;
private static final int INSERT_ID = Menu.FIRST;
public static final String PARAM_NUMBERS_LIST = "param number list";
2010-01-22 15:21:33 +01:00
public static final String PARAM_FLUSH = "param flush";
public static final String PARAM_ENTRY_ID = "entry_id";
2010-01-27 17:59:55 +01:00
public static final String DEBUG_TAG="MultiSmsSender";
2009-10-22 14:26:02 +02:00
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
2010-01-22 15:21:33 +01:00
mDbHelper = new DeliveryDbAdapter(this);
mDbHelper.open();
2009-10-22 14:26:02 +02:00
mAddButton = (Button) findViewById(R.id.contacts);
mSend = (Button) findViewById(R.id.send);
mContacts = (TextView) findViewById(R.id.numbers);
mEditor = (TextView) findViewById(R.id.editor);
2010-01-22 15:21:33 +01:00
mDeliveryCheckBox = (CheckBox) findViewById(R.id.deliveryCheckBox);
2009-10-22 14:26:02 +02:00
mContacts.setImeOptions(EditorInfo.IME_ACTION_NEXT);
mEditor.setImeOptions(EditorInfo.IME_ACTION_DONE);
mAddButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
selectNumbers();
}
});
mSend.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
sendMessage();
}
});
}
public void selectNumbers() {
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);
}
public void sendMessage() {
MySMSManager manager = new MySMSManager();
2009-10-22 14:26:02 +02:00
String message = mEditor.getText().toString();
2010-01-27 13:47:08 +01:00
if("".equals(message)) {
return;
}
2009-10-22 14:26:02 +02:00
String[] numbers = mContacts.getText().toString().split(",");
HashSet<String> allreadySend = new HashSet<String>();
int size = numbers.length;
2010-01-22 15:21:33 +01:00
boolean haveDeliveryReports = mDeliveryCheckBox.isChecked();
long deliveryId = -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
//showDialog(SENDING_DIALOG_KEY);
mSendingDialog = new ProgressDialog(this);
mSendingDialog.setTitle(R.string.sending);
mSendingDialog.setMessage(getResources().getString(R.string.wait));
mSendingDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mSendingDialog.setIndeterminate(true);
mSendingDialog.setCancelable(false);
mSendingDialog.setMax(size);
mSendingDialog.show();
2010-01-26 18:28:38 +01:00
2010-01-22 15:21:33 +01:00
if (haveDeliveryReports) {
deliveryId = mDbHelper.createDelivery(message.substring(0, Math.min(30, message
.length())).replace('\n', ' '), DateFormat.getDateInstance()
.format(new Date()));
}
if (numbers.length != 0) {
2009-10-22 14:26:02 +02:00
for (int i = 0; i < numbers.length; i++) {
String newN = numbers[i].trim();
2010-01-26 18:28:38 +01:00
2010-01-22 15:21:33 +01:00
if (!newN.equals("")
&& PhoneNumberUtils.isWellFormedSmsAddress(newN)) {
2009-10-22 14:26:02 +02:00
mSendingDialog.setProgress(i / size);
2010-01-22 15:21:33 +01:00
2009-10-22 14:26:02 +02:00
if (!allreadySend.contains(newN)) {
allreadySend.add(newN);
2010-01-26 18:28:38 +01:00
ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>(messageCount);
2010-01-22 15:21:33 +01:00
ArrayList<PendingIntent> sentIntents = null;
2010-01-26 18:28:38 +01:00
2010-01-22 15:21:33 +01:00
if (haveDeliveryReports) {
2010-01-25 17:58:12 +01:00
long entryId = mDbHelper.createEntry(mDbHelper.nameFromNumber(newN), newN, deliveryId);
2010-01-27 17:59:55 +01:00
Log.d(DEBUG_TAG, "entry is "+entryId);
2010-01-22 15:21:33 +01:00
for (int j = 0; j < messageCount; j++) {
2010-01-27 17:59:55 +01:00
Uri entryURI = Uri.withAppendedPath(EntryContentProvider.CONTENT_URI, ""+entryId);
Intent intent = new Intent(MessageReceiver.MESSAGE_RECEIVED,entryURI, this, MessageReceiver.class);
//intent.putExtra(PARAM_ENTRY_ID, entryId);
2010-01-26 18:28:38 +01:00
deliveryIntents.add(PendingIntent.getBroadcast(
2010-01-27 17:59:55 +01:00
this, 0, intent, 0));
2010-01-22 15:21:33 +01:00
}
2010-01-26 18:28:38 +01:00
2010-01-22 15:21:33 +01:00
}
2010-01-27 13:47:08 +01:00
manager.sendMultipartTextMessage(newN, null, messages, sentIntents, deliveryIntents );
2009-10-22 14:26:02 +02:00
}
}
}
mSendingDialog.dismiss();
2010-01-22 15:21:33 +01:00
new AlertDialog.Builder(this).setPositiveButton(
getResources().getString(R.string.ok),
2009-10-22 14:26:02 +02:00
new DialogInterface.OnClickListener() {
2010-01-22 15:21:33 +01:00
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
2009-10-22 14:26:02 +02:00
2010-01-22 15:21:33 +01:00
}
}).setMessage(
allreadySend.size() + " "
+ getResources().getString(R.string.message_sent))
.show();
} else {
new AlertDialog.Builder(this).setPositiveButton(
getResources().getString(R.string.ok),
2009-10-22 14:26:02 +02:00
new DialogInterface.OnClickListener() {
2010-01-22 15:21:33 +01:00
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
2009-10-22 14:26:02 +02:00
2010-01-22 15:21:33 +01:00
}
}).setMessage(
getResources().getString(R.string.enter_number)).show();
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);
2009-10-22 14:26:02 +02:00
mSendingDialog.setIndeterminate(true);
2010-01-22 15:21:33 +01:00
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);
2010-01-22 15:21:33 +01:00
menu.add(0, INSERT_ID, 0, R.string.add_group);
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() {
mDbHelper.close();
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);
}
2009-10-22 14:26:02 +02:00
}