package com.osmnavigator; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import org.osmdroid.bonuspack.routing.Road; import org.osmdroid.bonuspack.routing.RoadNode; /** * Activity listing detailed itinerary as a list of nodes. * @author M.Kergall */ public class RouteActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.items_list); ListView list = (ListView) findViewById(R.id.items); Intent myIntent = getIntent(); final int selectedRoad = myIntent.getIntExtra("SELECTED_ROAD", 0); Road road = MapActivity.mRoads[selectedRoad]; //too big to pass safely in Extras final int currentNodeId = myIntent.getIntExtra("NODE_ID", -1); RoadNodesAdapter adapter = new RoadNodesAdapter(this, road); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long index) { Intent intent = new Intent(); intent.putExtra("NODE_ID", position); setResult(RESULT_OK, intent); finish(); } }); list.setAdapter(adapter); list.setSelection(currentNodeId); } } class RoadNodesAdapter extends BaseAdapter implements OnClickListener { private Context mContext; private Road mRoad; TypedArray iconIds; public RoadNodesAdapter(Context context, Road road) { mContext = context; mRoad = road; iconIds = mContext.getResources().obtainTypedArray(R.array.direction_icons); } @Override public int getCount() { if (mRoad == null || mRoad.mNodes == null) return 0; else return mRoad.mNodes.size(); } @Override public Object getItem(int position) { if (mRoad == null || mRoad.mNodes == null) return null; else return mRoad.mNodes.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup viewGroup) { RoadNode entry = (RoadNode)getItem(position); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_layout, null); } TextView tvTitle = (TextView)convertView.findViewById(R.id.title); String instructions = (entry.mInstructions==null ? "" : entry.mInstructions); tvTitle.setText("" + (position+1) + ". " + instructions); TextView tvDetails = (TextView)convertView.findViewById(R.id.details); tvDetails.setText(Road.getLengthDurationText(mContext, entry.mLength, entry.mDuration)); int iconId = iconIds.getResourceId(entry.mManeuverType, R.drawable.ic_empty); Drawable icon = mContext.getResources().getDrawable(iconId); ImageView ivManeuver = (ImageView)convertView.findViewById(R.id.thumbnail); ivManeuver.setImageDrawable(icon); return convertView; } @Override public void onClick(View arg0) { //nothing to do. } }