package com.openwide.android; import java.util.HashSet; import android.app.ListActivity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.provider.Contacts.Phones; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.ListView; import android.widget.SimpleCursorAdapter; public class PhoneNumberSelection extends ListActivity { PhoneDataListAdapter mAdpater; String[] mSelected; HashSet mSelectedSet; private static final int INSERT_ID = Menu.FIRST; private static final int SELECT_ALL_ID = Menu.FIRST + 1; private static final int DESELECT_ALL_ID = Menu.FIRST + 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.number_list); mSelected = savedInstanceState != null ? savedInstanceState.getStringArray(MultiSmsSender.PARAM_NUMBERS_LIST ) : null; if (mSelected == null) { Bundle extras = getIntent().getExtras(); mSelected = extras != null ? extras.getStringArray(MultiSmsSender.PARAM_NUMBERS_LIST ) : null; } mSelectedSet = new HashSet(); for (int i = 0; i < mSelected.length; i++) { mSelectedSet.add(mSelected[i].trim()); } fillData(); Button ok = (Button) findViewById(R.id.okContacts); ok.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(); String [] numbers = new String[mAdpater.selected.size()]; mAdpater.selected.toArray(numbers); Bundle bundle = new Bundle(); bundle.putStringArray(MultiSmsSender.PARAM_NUMBERS_LIST, numbers); i.putExtras(bundle); setResult(RESULT_OK, i); finish(); } }); } private void fillData() { Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null, null, Phones.NAME); startManagingCursor(c); mAdpater = new PhoneDataListAdapter(this, R.layout.number_row, c, new String[] { Phones.NAME, Phones.NUMBER }, new int[] {R.id.name, R.id.phone}, mSelectedSet); setListAdapter(mAdpater); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, INSERT_ID,0, R.string.add_group); menu.add(0, SELECT_ALL_ID, 0, R.string.select_all); menu.add(0, DESELECT_ALL_ID, 0, R.string.deselect_all); return true; } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch(item.getItemId()) { case INSERT_ID: display_group_list(); return true; case SELECT_ALL_ID: Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null, null, Phones.NAME); int numberIdx = c.getColumnIndex(Phones.NUMBER); c.moveToFirst(); for (int i = 0; i < c.getCount(); i++) { mSelectedSet.add(c.getString(numberIdx)); c.moveToNext(); } fillData(); return true; case DESELECT_ALL_ID: mSelectedSet = new HashSet(); fillData(); return true; } return super.onMenuItemSelected(featureId, item); } public void display_group_list(){ Intent i = new Intent(this, SelectGroupActivity.class); startActivityForResult(i, MultiSmsSender.ACTIVITY_ADD_GROUP); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); l.getItemAtPosition(position); } /*@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putStringArray(MultiSmsSender.PARAM_NUMBERS_LIST, (String[] )mAdpater.selected.toArray()); } @Override protected void onPause() { super.onPause(); }*/ public class PhoneDataListAdapter extends SimpleCursorAdapter{ public HashSet selected; int nameidx; int numberidx; Context mContext; public PhoneDataListAdapter(Context context, int layout, Cursor c, String[] from, int[] to, HashSet selected) { super(context, layout, c, from, to); nameidx = c.getColumnIndex(Phones.NAME); numberidx = c.getColumnIndex(Phones.NUMBER); mContext = context; this.selected = selected; } public View getView(int position, View convertView, ViewGroup parent) { Cursor c = getCursor(); c.moveToPosition(position); String name = c.getString(nameidx); String number = c.getString(numberidx); ContactRow contact; if (convertView == null) { contact = new ContactRow(mContext); }else { contact = (ContactRow) convertView; } contact.display(name, number, selected.contains(number)); contact.mSelectedCheckBox.setOnClickListener(new addNumberToSelectedClickListener(contact)); return contact; } } private class addNumberToSelectedClickListener implements OnClickListener{ ContactRow contact; public addNumberToSelectedClickListener(ContactRow contact) { this.contact = contact; } public void onClick(View v) { CheckBox checkBox = (CheckBox)v; if(checkBox.isChecked()) { mSelectedSet.add(contact.mNumberView.getText().toString()); }else { mSelectedSet.remove(contact.mNumberView.getText().toString()); } } } protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if(intent != null) { String [] numbers = intent.getExtras().getStringArray(MultiSmsSender.PARAM_NUMBERS_LIST); HashSet mSelectedGlobal = new HashSet(); for (int i = 0; i < numbers.length; i++) { mSelectedSet.add(numbers[i]); } mSelected = new String[mSelectedSet.size()]; mSelectedGlobal.toArray(mSelected); fillData(); } } }