package de.guerda.matekarte.details; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; import com.octo.android.robospice.persistence.exception.SpiceException; import com.octo.android.robospice.request.listener.RequestListener; import java.util.ArrayList; import java.util.Map; import de.guerda.matekarte.R; import de.guerda.matekarte.common.SpicedActivity; import de.guerda.matekarte.common.request.DealerDetailsRequest; import de.guerda.matekarte.dealers.Dealer; import de.guerda.matekarte.dealers.DrinkStatus; import it.sephiroth.android.library.widget.HListView; public class DetailsActivity extends SpicedActivity implements RequestListener<Dealer> { private static final String LOGTAG = DetailsActivity.class.getSimpleName(); private DealerDetailsRequest dealerDetailsRequest; private Dealer dealer; private DrinkListAdapter drinkListAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); Bundle tmpExtras = getIntent().getExtras(); dealer = tmpExtras.getParcelable("message"); TextView tmpTextView = (TextView) findViewById(R.id.detail_text); tmpTextView.setText(dealer.getName()); // Get drink list adapter to later update all available drinks drinkListAdapter = new DrinkListAdapter(this, new ArrayList<DrinkStatus>()); ((HListView) findViewById(R.id.detail_drinks)).setAdapter(drinkListAdapter); dealerDetailsRequest = new DealerDetailsRequest(dealer.getId()); } @Override protected void onStart() { super.onStart(); getSpiceManager().execute(dealerDetailsRequest, this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.detail, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); return super.onOptionsItemSelected(item); } public void onAddressClick(View aView) { Intent intent = new Intent(Intent.ACTION_VIEW); String label = dealer.getName(); String uriBegin = "geo:" + dealer.getLatitude() + "," + dealer.getLongitude(); String query = dealer.getLatitude() + "," + dealer.getLongitude() + "(" + label + ")"; String encodedQuery = Uri.encode(query); String uriString = uriBegin + "?q=" + encodedQuery + "&z=10"; Uri uri = Uri.parse(uriString); intent.setData(uri); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } public void onPhoneClick(View aView) { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:" + dealer.getPhone())); } @Override public void onRequestSuccess(Dealer aDealer) { if (aDealer == null) { return; } dealer = aDealer; String tmpAddressText = String.format("%s\n%s %s\n%s", dealer.getAddress(), dealer.getZip(), dealer.getCity(), dealer.getCountry()); ((TextView) findViewById(R.id.detail_address)).setText(tmpAddressText); if (dealer.getPhone() == null || dealer.getPhone().trim().length() == 0) { findViewById(R.id.button_phone).setVisibility(View.INVISIBLE); } ((TextView) findViewById(R.id.detail_phone)).setText(dealer.getPhone()); drinkListAdapter.clear(); Map<String, DrinkStatus> tmpStatusesMap = aDealer.getStatuses(); for (String tmpDrinkId : tmpStatusesMap.keySet()) { drinkListAdapter.add(tmpStatusesMap.get(tmpDrinkId)); } Log.i(LOGTAG, "Displaying " + aDealer.getStatuses().size() + " dealers"); drinkListAdapter.notifyDataSetChanged(); } @Override public void onRequestFailure(SpiceException spiceException) { } }