package com.gemokodero.zk; import java.util.ArrayList; import android.accounts.Account; import android.accounts.AccountManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.ListActivity; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import com.gemokodero.zk.core.Result; import com.gemokodero.zk.core.Search; import com.gemokodero.zk.utils.AccountData; import com.gemokodero.zk.utils.AddContact; import com.gemokodero.zk.utils.ResultsAdapter; import com.gemokodero.zk.utils.Utils; public class ResultsActivity extends ListActivity implements OnItemClickListener { private static final int ACCOUNT_LIST = 0; private ArrayList<Result> resultItems; private Result mClickedResult; private ArrayList<String> mAccounts; private int mCurrentPage = 0; private ResultsAdapter mAdapter; private Search mSearch; private int mResCount; private Button mNextPageButton, mPrevPageButton; private TextView mPageCountView; private Thread polly = null; final Handler mHandler = new Handler() { public void handleMessage(Message msg) { if(msg.what == 666) { findViewById(R.id.search_progress).setVisibility(View.GONE); } }}; public ResultsActivity() { mAccounts = new ArrayList<String>(); resultItems = new ArrayList<Result>(); } @Override public void onCreate(Bundle sInstanceState) { super.onCreate(sInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.results_list_view); mNextPageButton = (Button) findViewById(R.id.nextPage); mPrevPageButton = (Button) findViewById(R.id.prevPage); mPageCountView = (TextView) findViewById(R.id.pageCount); mPrevPageButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { polly.interrupt(); if(mSearch != null) { mAdapter.clear(); mCurrentPage--; String tmpCurrPage = Integer.toString(mCurrentPage + 1); mPageCountView.setText(tmpCurrPage + "/" + mResCount); if(mCurrentPage == 0) { mPrevPageButton.setVisibility(View.GONE); } doSearch(); } } }); mNextPageButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(mSearch != null) { polly.interrupt(); mAdapter.clear(); // mAdapter.notifyDataSetChanged(); mCurrentPage++; String tmpCurrPage = Integer.toString(mCurrentPage + 1); mPageCountView.setText(tmpCurrPage + "/" + mResCount); mPrevPageButton.setVisibility(View.VISIBLE); if(mResCount - 1 == mCurrentPage) { mNextPageButton.setVisibility(View.GONE); } doSearch(); } } }); initList(); initSearch(); registerForContextMenu(getListView()); } private void initSearch() { mSearch = new Search(mHandler, resultItems, mAdapter); String location = getIntent().getExtras().getString("location"); String term = getIntent().getExtras().getString("searchTerm"); mResCount = getIntent().getExtras().getInt("resCount"); mSearch.setSearchLocation(location); mSearch.setTerm(term); // mResCount = mSearch.getResultsCount(); if(mResCount <= 1) { // finish(); } else if(mResCount > 1) { String tmpCurrPage = Integer.toString(mCurrentPage + 1); mPageCountView.setText(tmpCurrPage + "/" + mResCount); mNextPageButton.setVisibility(View.VISIBLE); } doSearch(); } private void doSearch() { polly = new Thread(new Runnable() { @Override public void run() { mSearch.exec(mCurrentPage); } }); polly.start(); findViewById(R.id.search_progress).setVisibility(View.VISIBLE); } private void initList() { mAdapter = new ResultsAdapter(this, R.layout.results_single_row, resultItems); setListAdapter(mAdapter); } @Override public void onListItemClick(ListView l, View v, int position, long id) { mClickedResult = resultItems.get(position); Utils.showOnMap(this, v.getContext(), mClickedResult); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); menuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; switch (item.getItemId()) { case 0: Utils.openWebsite(this, mClickedResult.getWebsite()); break; case 1: Utils.callNumber(this, mClickedResult.getPhoneNumber()); break; case 2: showDialog(ACCOUNT_LIST); break; case 3: Utils.showOnMap(this, this, mClickedResult); break; default: return super.onContextItemSelected(item); } return true; } @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; info = (AdapterView.AdapterContextMenuInfo) menuInfo; mClickedResult = resultItems.get(info.position); menu.setHeaderTitle(getString(R.string.choose)); if(mClickedResult.getWebsite() != null) { menu.add(0, 0, 0, getString(R.string.openwww)); } if(mClickedResult.getPhoneNumber() != null) { menu.add(0, 1, 0, getString(R.string.dial)); } menu.add(0, 2, 0, getString(R.string.savecontact)); menu.add(0, 3, 0, getString(R.string.showOnMap)); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { } @Override protected Dialog onCreateDialog(int dialog) { switch(dialog) { case ACCOUNT_LIST: final Account[] list = AccountManager.get(this).getAccounts(); for(int i = 0; i < list.length; i++) { mAccounts.add(list[i].name); } return new AlertDialog.Builder(this) .setTitle(getString(R.string.chooseAccount)) .setItems(mAccounts.toArray(new CharSequence[mAccounts.size()]), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { AccountData accountData = new AccountData(list[which].name, list[which].type); AddContact cAdder = new AddContact(mClickedResult, accountData, ResultsActivity.this); String resultString = String.format(getString(R.string.contactSaved), mClickedResult.getName()); if(!cAdder.createContactEntry()) { resultString = getString(R.string.contactNotSaved); } Toast.makeText(getApplicationContext(), resultString, Toast.LENGTH_SHORT).show(); } }) .create(); } return null; } public void onCatsClick(View v) { Utils.goCategoriesList(this); } public void onHomeClick(View v) { Utils.goHome(this); } }