/**
*
*/
package net.osmand.plus.activities;
import java.text.MessageFormat;
import java.util.List;
import net.osmand.OsmAndFormatter;
import net.osmand.osm.MapUtils;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.RoutingHelper.RouteDirectionInfo;
import net.osmand.plus.activities.RoutingHelper.TurnType;
import net.osmand.plus.views.MapInfoLayer;
import android.app.ListActivity;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Paint.Style;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
*
*/
public class ShowRouteInfoActivity extends ListActivity {
private RoutingHelper helper;
private TextView header;
private DisplayMetrics dm;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
ListView lv = new ListView(this);
lv.setId(android.R.id.list);
header = new TextView(this);
helper = ((OsmandApplication)getApplication()).getRoutingHelper();
lv.addHeaderView(header);
setContentView(lv);
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
}
@Override
protected void onResume() {
super.onResume();
int dist = helper.getLeftDistance();
int hours = helper.getLeftTime() / (60 * 60);
int minutes = (helper.getLeftTime() / 60) % 60;
header.setText(MessageFormat.format(getString(R.string.route_general_information), OsmAndFormatter.getFormattedDistance(dist, this),
hours, minutes));
float f = Math.min(dm.widthPixels/(dm.density*160),dm.heightPixels/(dm.density*160));
if (f >= 3) {
// large screen
header.setTextSize(dm.scaledDensity * 23);
}
setListAdapter(new RouteInfoAdapter(((OsmandApplication)getApplication()).getRoutingHelper().getRouteDirections()));
}
public void onListItemClick(ListView parent, View v, int position, long id) {
if(position == 0){
return;
}
RouteDirectionInfo item = ((RouteInfoAdapter)getListAdapter()).getItem(position - 1);
Location loc = helper.getLocationFromRouteDirection(item);
if(loc != null){
OsmandSettings.setMapLocationToShow(this, loc.getLatitude(),loc.getLongitude());
startActivity(new Intent(this, MapActivity.class));
}
}
class RouteDrawable extends Drawable {
Paint paintRouteDirection;
Path p = new Path();
Path dp = new Path();
public RouteDrawable(){
paintRouteDirection = new Paint();
paintRouteDirection.setStyle(Style.FILL_AND_STROKE);
paintRouteDirection.setColor(Color.rgb(100, 0, 255));
paintRouteDirection.setAntiAlias(true);
}
@Override
protected void onBoundsChange(Rect bounds) {
Matrix m = new Matrix();
m.setScale(bounds.width()/96f, bounds.height()/96f);
p.transform(m, dp);
}
public void setRouteType(TurnType t){
MapInfoLayer.calcTurnPath(p, t, null);
onBoundsChange(getBounds());
}
@Override
public void draw(Canvas canvas) {
canvas.drawPath(dp, paintRouteDirection);
}
@Override
public int getOpacity() {
return 0;
}
@Override
public void setAlpha(int alpha) {
paintRouteDirection.setAlpha(alpha);
}
@Override
public void setColorFilter(ColorFilter cf) {
paintRouteDirection.setColorFilter(cf);
}
}
class RouteInfoAdapter extends ArrayAdapter<RouteDirectionInfo> {
RouteInfoAdapter(List<RouteDirectionInfo> list) {
super(ShowRouteInfoActivity.this, R.layout.route_info_list_item, list);
this.setNotifyOnChange(false);
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.route_info_list_item, parent, false);
}
RouteDirectionInfo model = (RouteDirectionInfo) getItem(position);
TextView label = (TextView) row.findViewById(R.id.description);
TextView distanceLabel = (TextView) row.findViewById(R.id.distance);
TextView timeLabel = (TextView) row.findViewById(R.id.time);
ImageView icon = (ImageView) row.findViewById(R.id.direction);
if(!(icon.getDrawable() instanceof RouteDrawable)){
icon.setImageDrawable(new RouteDrawable());
}
((RouteDrawable) icon.getDrawable()).setRouteType(model.turnType);
distanceLabel.setText(OsmAndFormatter.getFormattedDistance(model.distance, ShowRouteInfoActivity.this));
label.setText(model.descriptionRoute);
int seconds = model.expectedTime % 60;
int min = (model.expectedTime / 60) % 60;
int hours = (model.expectedTime / 3600);
if (hours == 0) {
timeLabel.setText(String.format("%02d:%02d", min, seconds)); //$NON-NLS-1$
} else {
timeLabel.setText(String.format("%d:%02d:%02d", hours, min, seconds)); //$NON-NLS-1$
}
return row;
}
}
}