public class ContactsActivity extends AppCompatActivity implements SearchView.OnCloseListener,
SearchView.OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener {
static final String[] CONTACTS_SUMMARY_PROJECTION =
new String[]{
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.CONTACT_STATUS,
ContactsContract.Contacts.CONTACT_PRESENCE,
ContactsContract.Contacts.PHOTO_ID,
ContactsContract.Contacts.LOOKUP_KEY,
};
private ListView mListView;
private SearchView mSearchView;
private SimpleCursorAdapter mAdapter;
private String mCurFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setLogo(R.mipmap.ic_launcher);
toolbar.setTitle(
"Contacts");
setSupportActionBar(toolbar);
mListView = (ListView) findViewById(R.id.lv);
TextView emptyView = (TextView) findViewById(R.id.empty_view);
mListView.setEmptyView(emptyView);
setAdapter();
getSupportLoaderManager().initLoader(
0,
null,
this);
}
private void setAdapter() {
mAdapter =
new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_2,
null,
new String[]{ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHOTO_ID},
new int[]{android.R.id.text1, android.R.id.text2},
0);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(
this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem item = menu.findItem(R.id.search_view);
mSearchView = (SearchView) MenuItemCompat.getActionView(item);
mSearchView.setQuery(
"",
false);
mSearchView.setIconifiedByDefault(
true);
mSearchView.setOnCloseListener(
this);
mSearchView.setOnQueryTextListener(
this);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
@Override
public boolean onClose() {
if (!TextUtils.isEmpty(mSearchView.getQuery())) {
mSearchView.setQuery(
null,
true);
}
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
String newFilter = !TextUtils.isEmpty(newText) ? newText :
null;
if (mCurFilter ==
null && newFilter ==
null) {
return true;
}
if (mCurFilter !=
null && mCurFilter.equals(newFilter)) {
return true;
}
mCurFilter = newFilter;
getSupportLoaderManager().restartLoader(
0,
null,
this);
return true;
}
@Override
public Loader<Cursor> onCreateLoader(
int id, Bundle args) {
Uri baseUri;
if (mCurFilter !=
null) {
baseUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI,
Uri.encode(mCurFilter));
}
else {
baseUri = ContactsContract.Contacts.CONTENT_URI;
}
String selection =
"((" + ContactsContract.Contacts.DISPLAY_NAME +
" NOTNULL) AND ("
+ ContactsContract.Contacts.HAS_PHONE_NUMBER +
"=1) AND ("
+ ContactsContract.Contacts.DISPLAY_NAME +
" != '' ))";
return new CursorLoader(ContactsActivity.
this,
baseUri,
CONTACTS_SUMMARY_PROJECTION,
selection,
null,
ContactsContract.Contacts.DISPLAY_NAME +
" COLLATE LOCALIZED ASC"
);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (loader.getId() ==
0) {
mAdapter.swapCursor(data);
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(
null);
}
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position,
long id) {
Cursor cursor = (Cursor) parent.getItemAtPosition(position);
if (cursor ==
null) {
return;
}
int contactsId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Cursor c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +
" LIKE ?",
new String[]{String.valueOf(contactsId)},
null
);
String phoneNumber =
"";
try {
if (c.moveToFirst()) {
int numberColumn = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
do {
phoneNumber += c.getString(numberColumn) +
",";
}
while (c.moveToNext());
Toast.makeText(ContactsActivity.
this, name +
"phone: " + phoneNumber, Toast.LENGTH_SHORT).show();
}
}
finally {
if (c !=
null) {
c.close();
}
}
}
}