package us.achromaticmetaphor.imcktg;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.SparseBooleanArray;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class SelectContacts extends ListActivity {
private final String menuSelectAll = "Select all";
private final String menuSelectNone = "Select none";
private final String menuInvertSelection = "Invert selection";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_contacts);
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
new String[] {ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER},
ContactsContract.Contacts.DISPLAY_NAME + " is not null and " + ContactsContract.Contacts.HAS_PHONE_NUMBER,
null,
ContactsContract.Contacts.DISPLAY_NAME + " asc");
getListView().setAdapter(new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_checked,
cursor,
new String[] {ContactsContract.Contacts.DISPLAY_NAME},
new int[] {android.R.id.text1}));
}
private void invertSelection() {
final ListView lv = getListView();
final int count = lv.getCount();
final SparseBooleanArray selected = lv.getCheckedItemPositions();
for (int i = 0; i < count; i++)
lv.setItemChecked(i, ! selected.get(i));
}
private void selectAll(boolean b) {
final ListView lv = getListView();
final int count = lv.getCount();
for (int i = 0; i < count; i++)
lv.setItemChecked(i, b);
}
private static MenuItem addMenuItem(Menu menu, String title) {
MenuItem mi = menu.add(title);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
mi.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return mi;
}
private static MenuItem addMenuItem(Menu menu, String title, int ic) {
MenuItem mi = addMenuItem(menu, title);
mi.setIcon(ic);
return mi;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
addMenuItem(menu, menuSelectAll, R.drawable.ic_action_select_all);
addMenuItem(menu, menuSelectNone, R.drawable.ic_action_select_none);
addMenuItem(menu, menuInvertSelection, R.drawable.ic_action_invert_selection);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem mi) {
super.onOptionsItemSelected(mi);
if (mi.getTitle().equals(menuInvertSelection))
invertSelection();
if (mi.getTitle().equals(menuSelectAll))
selectAll(true);
if (mi.getTitle().equals(menuSelectNone))
selectAll(false);
return true;
}
public void confirmContacts(View view) {
long [] selection = getListView().getCheckedItemIds();
Intent intent = new Intent(this, ConfirmContacts.class);
intent.putExtra(ConfirmContacts.extrakeySelection, selection);
startActivity(intent);
finish();
}
}