Contacts, Progress Dialog, No Group, Integration

- Using Android 2.0 API for contacts lookup
- Progress dialogue with progress bar when sending SMS
- Desactive Group as they are not using Android2.0 API (Sync and so on...)
- Every SMS sent are registrer in the sysem DB so they are available for the
MMS App
This commit is contained in:
Mathieu Maret 2010-12-10 22:31:06 +01:00
parent 6a69514a10
commit 465b131420
4 changed files with 144 additions and 45 deletions

View File

@ -21,9 +21,10 @@
</receiver> </receiver>
<provider android:authorities="com.openwide.android" android:name="EntryContentProvider"></provider> <provider android:authorities="com.openwide.android" android:name="EntryContentProvider"></provider>
</application> </application>
<uses-sdk android:minSdkVersion="3" /> <uses-sdk android:minSdkVersion="5" />
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
</manifest> </manifest>

View File

@ -7,7 +7,7 @@ import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri; import android.net.Uri;
import android.provider.Contacts.Phones; import android.provider.ContactsContract.PhoneLookup;
import android.util.Log; import android.util.Log;
public class DeliveryDbAdapter { public class DeliveryDbAdapter {
@ -237,12 +237,16 @@ public class DeliveryDbAdapter {
public String nameFromNumber(String number) { public String nameFromNumber(String number) {
Uri contactUri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, Uri.encode(number)); Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
Cursor c = mCtx.getContentResolver().query(uri, new String[]{PhoneLookup.DISPLAY_NAME},null, null, null);
/*Uri contactUri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, Uri.encode(number));
Cursor c = mCtx.getContentResolver().query(contactUri, new String[] { Phones.DISPLAY_NAME }, null, null, null); Cursor c = mCtx.getContentResolver().query(contactUri, new String[] { Phones.DISPLAY_NAME }, null, null, null);
*/
if(c != null) { if(c != null) {
c.moveToFirst(); c.moveToFirst();
if(c.isFirst()) { if(c.isFirst()) {
return c.getString(c.getColumnIndex(Phones.DISPLAY_NAME)); return c.getString(c.getColumnIndex(PhoneLookup.DISPLAY_NAME));
}else { }else {
return ""; return "";
} }

View File

@ -10,10 +10,13 @@ import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.telephony.PhoneNumberUtils; import android.telephony.PhoneNumberUtils;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
@ -41,12 +44,62 @@ public class MultiSmsSender extends Activity {
private static final int SENDING_DIALOG_KEY = 0; private static final int SENDING_DIALOG_KEY = 0;
private static final int INSERT_ID = Menu.FIRST; private static final int INSERT_ID = Menu.FIRST;
private static final int DIALOG_PROGRESS = 0;
private static final int DIALOG_FINISHED = 1;
private static final int DIALOG_NONUMBER = 2;
public static final String PARAM_NUMBERS_LIST = "param number list"; public static final String PARAM_NUMBERS_LIST = "param number list";
public static final String PARAM_FLUSH = "param flush"; public static final String PARAM_FLUSH = "param flush";
public static final String PARAM_ENTRY_ID = "entry_id"; public static final String PARAM_ENTRY_ID = "entry_id";
public static final String DEBUG_TAG="MultiSmsSender"; public static final String DEBUG_TAG="MultiSmsSender";
final Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
int type = msg.getData().getInt("ORIGIN");
switch (type) {
case DIALOG_PROGRESS:{
int total = msg.getData().getInt("total");
Log.d(DEBUG_TAG, "========= total is "+total);
mSendingDialog.setProgress(total);
}
break;
case DIALOG_FINISHED:{
dismissDialog(SENDING_DIALOG_KEY);
int total = msg.getData().getInt("total");
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();
break;
}
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();
}
}
}
};
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -74,13 +127,17 @@ public class MultiSmsSender extends Activity {
mSend.setOnClickListener(new OnClickListener() { mSend.setOnClickListener(new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
sendMessage(); showDialog(SENDING_DIALOG_KEY);
MessageSenderThread sender = new MessageSenderThread(mHandler);
sender.start();
//sendMessage();
} }
}); });
} }
public void selectNumbers() { public void selectNumbers() {
//startActivityForResult(new Intent(Intent.ACTION_PICK, People.CONTENT_URI), 0);
Intent i = new Intent(this, PhoneNumberSelection.class); Intent i = new Intent(this, PhoneNumberSelection.class);
String rawNumbers = mContacts.getText().toString(); String rawNumbers = mContacts.getText().toString();
String[] numbers = rawNumbers.split(","); String[] numbers = rawNumbers.split(",");
@ -88,7 +145,21 @@ public class MultiSmsSender extends Activity {
startActivityForResult(i, ACTIVITY_EDIT); startActivityForResult(i, ACTIVITY_EDIT);
} }
public void sendMessage() {
private class MessageSenderThread extends Thread{
Handler mHandler;
public MessageSenderThread( Handler h) {
mHandler = h;
}
public void run() {
sendMessage(mHandler);
}
}
public void sendMessage(Handler handler) {
MySMSManager manager = new MySMSManager(); MySMSManager manager = new MySMSManager();
String message = mEditor.getText().toString(); String message = mEditor.getText().toString();
@ -105,14 +176,14 @@ public class MultiSmsSender extends Activity {
int messageCount = messages.size(); int messageCount = messages.size();
//showDialog(SENDING_DIALOG_KEY); //showDialog(SENDING_DIALOG_KEY);
mSendingDialog = new ProgressDialog(this); /*mSendingDialog = new ProgressDialog(this);
mSendingDialog.setTitle(R.string.sending); mSendingDialog.setTitle(R.string.sending);
mSendingDialog.setMessage(getResources().getString(R.string.wait)); mSendingDialog.setMessage(getResources().getString(R.string.wait));
mSendingDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mSendingDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mSendingDialog.setIndeterminate(true); mSendingDialog.setIndeterminate(true);
mSendingDialog.setCancelable(false); mSendingDialog.setCancelable(false);
mSendingDialog.setMax(size); mSendingDialog.setMax(size);
mSendingDialog.show(); mSendingDialog.show();*/
if (haveDeliveryReports) { if (haveDeliveryReports) {
deliveryId = mDbHelper.createDelivery(message.substring(0, Math.min(30, message deliveryId = mDbHelper.createDelivery(message.substring(0, Math.min(30, message
@ -126,7 +197,13 @@ public class MultiSmsSender extends Activity {
if (!newN.equals("") if (!newN.equals("")
&& PhoneNumberUtils.isWellFormedSmsAddress(newN)) { && PhoneNumberUtils.isWellFormedSmsAddress(newN)) {
mSendingDialog.setProgress(i / size); Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putInt("ORIGIN", DIALOG_PROGRESS);
b.putInt("total", (i*100)/size);
msg.setData(b);
handler.sendMessage(msg);
//mSendingDialog.setProgress( i/ size);
if (!allreadySend.contains(newN)) { if (!allreadySend.contains(newN)) {
allreadySend.add(newN); allreadySend.add(newN);
@ -137,6 +214,11 @@ public class MultiSmsSender extends Activity {
if (haveDeliveryReports) { if (haveDeliveryReports) {
ContentValues values = new ContentValues();
values.put("address", newN);
values.put("body", message);
getContentResolver().insert(Uri.parse("content://sms/sent"), values);
long entryId = mDbHelper.createEntry(mDbHelper.nameFromNumber(newN), newN, deliveryId); long entryId = mDbHelper.createEntry(mDbHelper.nameFromNumber(newN), newN, deliveryId);
Log.d(DEBUG_TAG, "entry is "+entryId); Log.d(DEBUG_TAG, "entry is "+entryId);
for (int j = 0; j < messageCount; j++) { for (int j = 0; j < messageCount; j++) {
@ -154,30 +236,20 @@ public class MultiSmsSender extends Activity {
} }
} }
} }
mSendingDialog.dismiss(); Message msg = handler.obtainMessage();
new AlertDialog.Builder(this).setPositiveButton( Bundle b = new Bundle();
getResources().getString(R.string.ok), b.putInt("ORIGIN", DIALOG_FINISHED);
new DialogInterface.OnClickListener() { b.putInt("total", allreadySend.size() );
msg.setData(b);
handler.sendMessage(msg);
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).setMessage(
allreadySend.size() + " "
+ getResources().getString(R.string.message_sent))
.show();
} else { } else {
new AlertDialog.Builder(this).setPositiveButton( Message msg = handler.obtainMessage();
getResources().getString(R.string.ok), Bundle b = new Bundle();
new DialogInterface.OnClickListener() { b.putInt("ORIGIN", DIALOG_NONUMBER);
msg.setData(b);
handler.sendMessage(msg);
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).setMessage(
getResources().getString(R.string.enter_number)).show();
} }
} }
@ -190,7 +262,6 @@ public class MultiSmsSender extends Activity {
mSendingDialog.setTitle(R.string.sending); mSendingDialog.setTitle(R.string.sending);
mSendingDialog.setMessage(getResources().getString(R.string.wait)); mSendingDialog.setMessage(getResources().getString(R.string.wait));
mSendingDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mSendingDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mSendingDialog.setIndeterminate(true);
mSendingDialog.setCancelable(false); mSendingDialog.setCancelable(false);
return mSendingDialog; return mSendingDialog;
@ -246,7 +317,7 @@ public class MultiSmsSender extends Activity {
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu); super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, 0, R.string.add_group); //menu.add(0, INSERT_ID, 0, R.string.add_group);
menu.add(0, INSERT_ID + 1, 0, R.string.delivery); menu.add(0, INSERT_ID + 1, 0, R.string.delivery);
return true; return true;
} }

View File

@ -7,12 +7,14 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Contacts.Phones; import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.SimpleCursorAdapter; import android.widget.SimpleCursorAdapter;
@ -27,6 +29,7 @@ public class PhoneNumberSelection extends ListActivity
private static final int SELECT_ALL_ID = Menu.FIRST + 1; private static final int SELECT_ALL_ID = Menu.FIRST + 1;
private static final int DESELECT_ALL_ID = Menu.FIRST + 2; private static final int DESELECT_ALL_ID = Menu.FIRST + 2;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -70,18 +73,30 @@ public class PhoneNumberSelection extends ListActivity
} }
private void fillData() { private void fillData() {
Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null, null, Phones.NAME);
Cursor c = getContentResolver().query(Data.CONTENT_URI,
new String[] {Data._ID, Data.MIMETYPE, Phone.NUMBER, Phone.TYPE, Phone.LABEL, Contacts.DISPLAY_NAME},
Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
null, Contacts.DISPLAY_NAME);
startManagingCursor(c);
mAdpater = new PhoneDataListAdapter(this, R.layout.number_row, c, new String[] {
Contacts.DISPLAY_NAME, Phone.NUMBER
}, new int[] {R.id.name, R.id.phone}, mSelectedSet);
/*Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null, null, Phones.NAME);
startManagingCursor(c); startManagingCursor(c);
mAdpater = new PhoneDataListAdapter(this, R.layout.number_row, c, new String[] { mAdpater = new PhoneDataListAdapter(this, R.layout.number_row, c, new String[] {
Phones.NAME, Phones.NUMBER Phones.NAME, Phones.NUMBER
}, new int[] {R.id.name, R.id.phone}, mSelectedSet); }, new int[] {R.id.name, R.id.phone}, mSelectedSet);*/
setListAdapter(mAdpater); setListAdapter(mAdpater);
} }
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu); super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID,0, R.string.add_group); //menu.add(0, INSERT_ID,0, R.string.add_group);
menu.add(0, SELECT_ALL_ID, 0, R.string.select_all); menu.add(0, SELECT_ALL_ID, 0, R.string.select_all);
menu.add(0, DESELECT_ALL_ID, 0, R.string.deselect_all); menu.add(0, DESELECT_ALL_ID, 0, R.string.deselect_all);
return true; return true;
@ -94,8 +109,16 @@ public class PhoneNumberSelection extends ListActivity
display_group_list(); display_group_list();
return true; return true;
case SELECT_ALL_ID: case SELECT_ALL_ID:
Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null, null, Phones.NAME);
/*Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null, null, Phones.NAME);
int numberIdx = c.getColumnIndex(Phones.NUMBER); int numberIdx = c.getColumnIndex(Phones.NUMBER);
*/
Cursor c = getContentResolver().query(Data.CONTENT_URI,
new String[] {Data._ID, Data.MIMETYPE, Phone.NUMBER, Phone.TYPE, Phone.LABEL, Contacts.DISPLAY_NAME},
Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
null, null);
int numberIdx = c.getColumnIndex(Phone.NUMBER);
startManagingCursor(c);
c.moveToFirst(); c.moveToFirst();
for (int i = 0; i < c.getCount(); i++) { for (int i = 0; i < c.getCount(); i++) {
mSelectedSet.add(c.getString(numberIdx)); mSelectedSet.add(c.getString(numberIdx));
@ -144,8 +167,8 @@ public class PhoneNumberSelection extends ListActivity
public PhoneDataListAdapter(Context context, int layout, Cursor c, public PhoneDataListAdapter(Context context, int layout, Cursor c,
String[] from, int[] to, HashSet<String> selected) { String[] from, int[] to, HashSet<String> selected) {
super(context, layout, c, from, to); super(context, layout, c, from, to);
nameidx = c.getColumnIndex(Phones.NAME); nameidx = c.getColumnIndex(Contacts.DISPLAY_NAME);
numberidx = c.getColumnIndex(Phones.NUMBER); numberidx = c.getColumnIndex(Phone.NUMBER);
mContext = context; mContext = context;