package com.michaelfotiadis.eventtriggeredskypecaller.activities; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; import android.provider.ContactsContract; import android.util.Pair; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ListView; import com.github.johnpersano.supertoasts.SuperActivityToast; import com.michaelfotiadis.eventtriggeredskypecaller.R; import com.michaelfotiadis.eventtriggeredskypecaller.containers.CustomConstants; import com.michaelfotiadis.eventtriggeredskypecaller.containers.CustomInfoAdapter; import com.michaelfotiadis.eventtriggeredskypecaller.utils.Logger; import com.michaelfotiadis.eventtriggeredskypecaller.utils.ToastUtils; public class RegisterContactActivity extends Activity implements OnItemClickListener { private ListView mContactListView; private BaseAdapter mListAdapter; private String mDisplay_name = null; private String mUserName = null; // private String mAddressToRegister; private SuperActivityToast mSuperActivityToast; private final String TAG = "SKYPE_CONTACT_PICKER"; private final String TOAST_STRING_1 = "Retrieving Skype Contacts. Please Wait..."; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register_contact); } public void onStart() { super.onStart(); Logger.d(TAG, "Generating List View"); mContactListView = (ListView) findViewById(R.id.contactSkypeListView); mContactListView.setOnItemClickListener(this); mListAdapter = new CustomInfoAdapter(this, new ArrayList<Pair<String, String>>()); Logger.d(TAG, "Setting List View Adapter"); mContactListView.setAdapter(mListAdapter); // Start a new toast while waiting for the ASyncTask to finish mSuperActivityToast = ToastUtils.makeProgressToast(this, mSuperActivityToast, TOAST_STRING_1); // Set up the query ASyncTask to retrieve skype contacts AsyncTaskRunner runner = new AsyncTaskRunner(); runner.execute(""); } @SuppressWarnings("unchecked") @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { mDisplay_name = ((Pair<String, String>) mListAdapter.getItem(position)).first; mUserName = ((Pair<String, String>) mListAdapter.getItem(position)).second; String message = "Selected: " + mDisplay_name + " with Skype Name: " + mUserName; Logger.i(TAG, message); mSuperActivityToast = ToastUtils.makeInfoToast(this, message); sendResult(mUserName); } private void sendResult(String result) { Logger.d(TAG, "Sending Result: " + result); Intent returnIntent = new Intent(); returnIntent.putExtra(CustomConstants.EXTRA_RESULT,result); setResult(RESULT_OK,returnIntent); finish(); } private class AsyncTaskRunner extends AsyncTask<String, String, String> { final List<Pair<String, String >> dataList = new ArrayList<Pair<String,String>>(); @Override protected String doInBackground(String... params) { Logger.d(TAG, "Starting ASyncTask in Background"); final Cursor skypeCursor = getContentResolver().query( ContactsContract.Data.CONTENT_URI, null, null, null, ContactsContract.Data.DISPLAY_NAME + " collate localized"); final Set<String> addedSkypeNames = new HashSet<String>(); while (skypeCursor.moveToNext()) { final int type = skypeCursor .getInt(skypeCursor .getColumnIndex(ContactsContract.CommonDataKinds.Im.PROTOCOL)); final String contactName = skypeCursor.getString(skypeCursor .getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); final String imName = skypeCursor .getString(skypeCursor .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)); if (type == ContactsContract.CommonDataKinds.Im.PROTOCOL_SKYPE) { if (imName != null && imName.trim().length() > 0) { final String skypeName = imName.trim(); if (!addedSkypeNames.contains(skypeName)) { dataList.add(new Pair<String, String>(contactName, skypeName)); addedSkypeNames.add(skypeName); } } } } skypeCursor.close(); Logger.d(TAG, "Cursor Closed"); return null; } @Override protected void onPostExecute(String result) { Logger.d(TAG, "ASyncTask Post Executing"); // execution of result of Long time consuming operation mListAdapter = new CustomInfoAdapter(RegisterContactActivity.this, dataList); mContactListView.setAdapter(mListAdapter); mSuperActivityToast.dismiss(); } } }