package com.openvehicles.OVMS;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.SimpleAdapter;
import android.widget.SlidingDrawer;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
public class TabMap extends MapActivity
{
private final int CAR_MARKER_ANIMATION_DURATION_MS = 2000;
private final int CAR_MARKER_ANIMATION_FRAMES = 40;
private Bitmap DirectionalMarker;
private final int LABEL_SHADOW_XY = 1;
private final int LABEL_TEXT_SIZE = 20;
private final int SYSTEM_OVERLAY_COUNT = 3;
private Runnable animateCarMarker = new Runnable()
{
public void run()
{
CarData_Group localCarData_Group = null;
String[] arrayOfString = new String[TabMap.this.data.Group.size()];
TabMap.this.data.Group.keySet().toArray(arrayOfString);
int i = 0;
if (i >= TabMap.this.carMarkers.size());
while (true)
{
TabMap.this.mapView.invalidate();
TabMap localTabMap = TabMap.this;
int m = 1 + localTabMap.carMarkerAnimationFrame;
localTabMap.carMarkerAnimationFrame = m;
if (m < 40)
TabMap.this.carMarkerAnimationTimerHandler.postDelayed(TabMap.this.animateCarMarker, 50L);
return;
if (i <= 0)
break label203;
if (arrayOfString.length >= i)
break;
Object[] arrayOfObject2 = new Object[2];
arrayOfObject2[0] = Integer.valueOf(TabMap.this.carMarkers.size());
arrayOfObject2[1] = Integer.valueOf(1 + arrayOfString.length);
Log.d("MAP", String.format("ERROR! Found %s markers but only %s car data.", arrayOfObject2));
}
localCarData_Group = (CarData_Group)TabMap.this.data.Group.get(arrayOfString[(i - 1)]);
label203: if (i == 0);
for (GeoPoint localGeoPoint1 = Utilities.GetCarGeopoint(TabMap.this.data); ; localGeoPoint1 = Utilities.GetCarGeopoint(localCarData_Group.Latitude, localCarData_Group.Longitude))
{
if (!TabMap.this.carMarkers.getItem(i).getPoint().equals(localGeoPoint1))
break label265;
i++;
break;
}
label265: int j = (localGeoPoint1.getLatitudeE6() - TabMap.this.lastCarGeoPoints[i].getLatitudeE6()) / 40;
int k = (localGeoPoint1.getLongitudeE6() - TabMap.this.lastCarGeoPoints[i].getLongitudeE6()) / 40;
GeoPoint localGeoPoint2;
label329: String str2;
Object[] arrayOfObject1;
if (TabMap.this.carMarkerAnimationFrame == 39)
{
localGeoPoint2 = localGeoPoint1;
Log.d("MAP", "Car Marker " + i + " Transitional Point: " + localGeoPoint2.getLatitudeE6() + ", " + localGeoPoint2.getLongitudeE6());
if (i != 0)
break label556;
String str1 = "-";
if (TabMap.this.data.Data_LastCarUpdate != null)
str1 = new SimpleDateFormat("MMM d, K:mm:ss a").format(TabMap.this.data.Data_LastCarUpdate);
str2 = TabMap.this.data.VehicleID;
arrayOfObject1 = new Object[1];
arrayOfObject1[0] = str1;
}
label556: for (Utilities.CarMarker localCarMarker = new Utilities.CarMarker(localGeoPoint2, str2, String.format("Last reported: %s", arrayOfObject1), (int)TabMap.this.data.Data_Direction); ; localCarMarker = new Utilities.CarMarker(localGeoPoint2, localCarData_Group.VehicleID, "", (int)localCarData_Group.Direction))
{
TabMap.this.carMarkers.setOverlay(i, localCarMarker);
break;
localGeoPoint2 = new GeoPoint(TabMap.this.lastCarGeoPoints[i].getLatitudeE6() + j * TabMap.this.carMarkerAnimationFrame, TabMap.this.lastCarGeoPoints[i].getLongitudeE6() + k * TabMap.this.carMarkerAnimationFrame);
break label329;
}
}
};
private ArrayList<HashMap<String, Object>> availableCarColors;
private CustomSpinnerAdapter availableCarColorsSpinnerAdapter;
private int carMarkerAnimationFrame = 0;
private Handler carMarkerAnimationTimerHandler = new Handler();
private Utilities.CarMarkerOverlay carMarkers;
mapCenteringMode centeringMode;
private String currentVehicleID = "";
private CarData data;
private GroupCarsListViewAdapter groupCarsListAdapter;
final Runnable initializeMapCentering = new Runnable()
{
public void run()
{
Log.d("OVMS", "Centering Map");
GeoPoint localGeoPoint = Utilities.GetCarGeopoint(TabMap.this.data);
switch (TabMap.this.centeringMode.getMode())
{
default:
TabMap.this.mc.animateTo(localGeoPoint);
TabMap.this.mc.setZoom(18);
case 4:
case 1:
case 2:
case 3:
case 5:
}
while (true)
{
TabMap.this.mapView.invalidate();
return;
if (TabMap.this.myLocationOverlay.getMyLocation() != null)
TabMap.this.mc.animateTo(TabMap.this.myLocationOverlay.getMyLocation());
TabMap.this.mc.setZoom(17);
continue;
TabMap.this.mc.animateTo(localGeoPoint);
TabMap.this.mc.setZoom(17);
continue;
if (TabMap.this.mapOverlays.size() <= 3)
{
TabMap.this.centeringMode.setMode(2);
TabMap.this.mc.animateTo(localGeoPoint);
TabMap.this.mc.setZoom(17);
}
else
{
RouteOverlay localRouteOverlay1 = (RouteOverlay)TabMap.this.mapOverlays.get(3);
int i = localRouteOverlay1.gp1.getLatitudeE6();
int j = localRouteOverlay1.gp1.getLongitudeE6();
int k = localRouteOverlay1.gp1.getLatitudeE6();
int m = localRouteOverlay1.gp1.getLongitudeE6();
for (int n = 3; ; n++)
{
if (n >= TabMap.this.mapOverlays.size())
{
Object[] arrayOfObject = new Object[4];
arrayOfObject[0] = Integer.valueOf(i);
arrayOfObject[1] = Integer.valueOf(k);
arrayOfObject[2] = Integer.valueOf(j);
arrayOfObject[3] = Integer.valueOf(m);
Log.d("Map", String.format("Zoom Span: %s %s %s %s", arrayOfObject));
TabMap.this.mapView.getController().zoomToSpan(100 + (k - i), 100 + (m - j));
TabMap.this.mapView.getController().animateTo(new GeoPoint((k + i) / 2, (m + j) / 2));
((RadioButton)TabMap.this.findViewById(2131296397)).setChecked(false);
break;
}
RouteOverlay localRouteOverlay2 = (RouteOverlay)TabMap.this.mapOverlays.get(n);
if (i > localRouteOverlay2.gp1.getLatitudeE6())
i = localRouteOverlay2.gp1.getLatitudeE6();
if (k < localRouteOverlay2.gp1.getLatitudeE6())
k = localRouteOverlay2.gp1.getLatitudeE6();
if (j > localRouteOverlay2.gp1.getLongitudeE6())
j = localRouteOverlay2.gp1.getLongitudeE6();
if (m < localRouteOverlay2.gp1.getLongitudeE6())
m = localRouteOverlay2.gp1.getLongitudeE6();
}
if (TabMap.this.data.Group.get(TabMap.this.centeringMode.GroupCar_VehicleID) == null)
{
TabMap.this.centeringMode.setMode(4);
}
else
{
TabMap.this.mc.animateTo(Utilities.GetCarGeopoint(((CarData_Group)TabMap.this.data.Group.get(TabMap.this.centeringMode.GroupCar_VehicleID)).Latitude, ((CarData_Group)TabMap.this.data.Group.get(TabMap.this.centeringMode.GroupCar_VehicleID)).Longitude));
TabMap.this.mc.setZoom(18);
}
}
}
}
};
private boolean isLoggedIn;
private GeoPoint[] lastCarGeoPoints;
private GeoPoint lastKnownDeviceGeoPoint;
private Runnable lastUpdateTimer = new Runnable()
{
public void run()
{
TabMap.this.updateLastUpdatedView();
TabMap.this.lastUpdateTimerHandler.postDelayed(TabMap.this.lastUpdateTimer, 5000L);
}
};
private Handler lastUpdateTimerHandler = new Handler();
private LocationListener locationListener;
private LocationManager locationManager;
private float mapDragLastX;
private float mapDragLastY;
private List<Overlay> mapOverlays;
private MapView mapView;
private MapController mc;
private Runnable myLocationDisable = new Runnable()
{
public void run()
{
TabMap.this.myLocationOverlay.disableMyLocation();
}
};
private Runnable myLocationEnable = new Runnable()
{
public void run()
{
TabMap.this.myLocationOverlay.enableMyLocation();
}
};
private MyLocationOverlayCustom myLocationOverlay;
private boolean planWalkingDirection;
private Handler refreshUIHandler = new Handler()
{
public void handleMessage(Message paramAnonymousMessage)
{
Log.d("OVMS", "Refreshing Map");
GeoPoint localGeoPoint = Utilities.GetCarGeopoint(TabMap.this.data);
int j;
label114: TextView localTextView;
String str3;
String str5;
label230: label248: label254: int i;
Iterator localIterator;
label306: ListView localListView;
if (TabMap.this.carMarkers.size() > 0)
{
TabMap.this.lastCarGeoPoints = new GeoPoint[TabMap.this.carMarkers.size()];
j = 0;
if (j >= TabMap.this.carMarkers.size())
{
TabMap.this.carMarkerAnimationTimerHandler.removeCallbacks(TabMap.this.animateCarMarker);
TabMap.this.carMarkerAnimationFrame = 0;
TabMap.this.carMarkerAnimationTimerHandler.postDelayed(TabMap.this.animateCarMarker, 0L);
localTextView = (TextView)TabMap.this.findViewById(2131296387);
str3 = (String)TabMap.this.data.Data_Parameters.get(Integer.valueOf(11));
if ((str3 == null) || (str3.length() <= 0))
break label723;
if (TabMap.this.data.Group == null)
break label695;
Object[] arrayOfObject3 = new Object[3];
arrayOfObject3[0] = str3;
arrayOfObject3[1] = Integer.valueOf(TabMap.this.data.Group.size());
if (TabMap.this.data.Group.size() <= 1)
break label687;
str5 = "s";
arrayOfObject3[2] = str5;
localTextView.setText(String.format("Group: %s (%s vehicle%s)", arrayOfObject3));
localTextView.setVisibility(0);
if ((TabMap.this.data.Group != null) && (TabMap.this.data.Group.size() > 0))
{
i = 1;
localIterator = TabMap.this.data.Group.keySet().iterator();
if (localIterator.hasNext())
break label733;
}
switch (TabMap.this.centeringMode.getMode())
{
default:
TabMap.this.mc.animateTo(localGeoPoint);
TabMap.this.mc.setZoom(18);
case 4:
label384: localListView = (ListView)TabMap.this.findViewById(2131296398);
if (TabMap.this.data.Group != null)
{
HashMap localHashMap = (HashMap)TabMap.this.data.Group.clone();
localHashMap.remove(TabMap.this.data.VehicleID);
TabMap.this.groupCarsListAdapter = new TabMap.GroupCarsListViewAdapter(TabMap.this, TabMap.this, 2130903058, localHashMap.values().toArray());
localListView.setAdapter(TabMap.this.groupCarsListAdapter);
}
break;
case 1:
case 2:
case 3:
case 5:
}
}
}
while (true)
{
Log.d("Routing", "Redrawing Map with " + (-3 + TabMap.this.mapOverlays.size()) + " waypoints");
TabMap.this.mapView.invalidate();
return;
TabMap.this.lastCarGeoPoints[j] = TabMap.this.carMarkers.getItem(j).getPoint();
j++;
break;
String str1 = "-";
if (TabMap.this.data.Data_LastCarUpdate != null)
str1 = new SimpleDateFormat("MMM d, K:mm:ss a").format(TabMap.this.data.Data_LastCarUpdate);
String str2 = TabMap.this.data.VehicleID;
Object[] arrayOfObject1 = new Object[1];
arrayOfObject1[0] = str1;
Utilities.CarMarker localCarMarker1 = new Utilities.CarMarker(localGeoPoint, str2, String.format("Last reported: %s", arrayOfObject1), (int)TabMap.this.data.Data_Direction);
TabMap.this.carMarkers.addOverlay(localCarMarker1);
break label114;
label687: str5 = "";
break label230;
label695: Object[] arrayOfObject2 = new Object[1];
arrayOfObject2[0] = str3;
localTextView.setText(String.format("Group: %s", arrayOfObject2));
break label248;
label723: localTextView.setVisibility(8);
break label254;
label733: String str4 = (String)localIterator.next();
if (str4.equals(TabMap.this.data.VehicleID))
break label306;
CarData_Group localCarData_Group = (CarData_Group)TabMap.this.data.Group.get(str4);
Utilities.CarMarker localCarMarker2 = new Utilities.CarMarker(Utilities.GetCarGeopoint(localCarData_Group.Latitude, localCarData_Group.Longitude), localCarData_Group.VehicleID, "", (int)localCarData_Group.Direction);
Drawable localDrawable = TabMap.this.getResources().getDrawable(TabMap.this.getResources().getIdentifier(localCarData_Group.VehicleImageDrawable + "32x32", "drawable", "com.openvehicles.OVMS"));
if (localDrawable == null)
localDrawable = TabMap.this.getResources().getDrawable(TabMap.this.getResources().getIdentifier("car_roadster_arcticwhite32x32", "drawable", "com.openvehicles.OVMS"));
localDrawable.setBounds(-localDrawable.getIntrinsicWidth() / 2, -localDrawable.getIntrinsicHeight(), localDrawable.getIntrinsicWidth() / 2, 0);
localCarMarker2.setMarker(localDrawable);
if (TabMap.this.carMarkers.size() > i)
TabMap.this.carMarkers.setOverlay(i, localCarMarker2);
while (true)
{
i++;
break;
TabMap.this.carMarkers.addOverlay(localCarMarker2);
}
if (TabMap.this.myLocationOverlay.getMyLocation() != null)
{
TabMap.this.mc.animateTo(TabMap.this.myLocationOverlay.getMyLocation());
break label384;
}
Toast.makeText(TabMap.this, "Waiting for device location...", 0).show();
break label384;
TabMap.this.mc.animateTo(localGeoPoint);
break label384;
if (TabMap.this.myLocationOverlay.getMyLocation() != null)
{
TabMap.this.mc.animateTo(TabMap.this.myLocationOverlay.getMyLocation());
break label384;
}
Toast.makeText(TabMap.this, "Waiting for device location...", 0).show();
break label384;
if (TabMap.this.data.Group.get(TabMap.this.centeringMode.GroupCar_VehicleID) == null)
{
TabMap.this.centeringMode.setMode(4);
break label384;
}
TabMap.this.mc.animateTo(Utilities.GetCarGeopoint(((CarData_Group)TabMap.this.data.Group.get(TabMap.this.centeringMode.GroupCar_VehicleID)).Latitude, ((CarData_Group)TabMap.this.data.Group.get(TabMap.this.centeringMode.GroupCar_VehicleID)).Longitude));
break label384;
if (TabMap.this.groupCarsListAdapter != null)
{
TabMap.this.groupCarsListAdapter.clear();
localListView.setAdapter(TabMap.this.groupCarsListAdapter);
}
}
}
};
private Runnable routeError = new Runnable()
{
public void run()
{
Log.d("Routing", "Route Failed");
Toast.makeText(TabMap.this, "Route Failed", 0);
}
};
final Runnable updateCenteringOptions = new Runnable()
{
public void run()
{
switch (TabMap.this.centeringMode.getMode())
{
default:
case 0:
case 2:
case 1:
case 3:
case 4:
case 5:
}
while (true)
{
return;
((RadioButton)TabMap.this.findViewById(2131296391)).setChecked(true);
continue;
((RadioButton)TabMap.this.findViewById(2131296392)).setChecked(true);
continue;
((RadioButton)TabMap.this.findViewById(2131296393)).setChecked(true);
continue;
((RadioButton)TabMap.this.findViewById(2131296394)).setChecked(true);
}
}
};
private void cancelRoute()
{
if ((this.centeringMode.getMode() == 4) || (this.centeringMode.getMode() == 3))
this.centeringMode.setMode(2);
clearRoute();
((RadioButton)findViewById(2131296397)).setChecked(true);
this.refreshUIHandler.sendEmptyMessage(0);
Toast.makeText(this, "Route Cancelled", 0).show();
}
private void clearRoute()
{
for (int i = -1 + this.mapOverlays.size(); ; i--)
{
if (i < 3)
return;
this.mapOverlays.remove(i);
}
}
private void drawRoute(List<GeoPoint> paramList, int paramInt)
{
Log.d("Route", "Creating overlay");
if (this.mapOverlays.size() > 3)
clearRoute();
for (int i = 1; ; i++)
{
if (i >= paramList.size())
return;
this.mapOverlays.add(new RouteOverlay((GeoPoint)paramList.get(i - 1), (GeoPoint)paramList.get(i), paramInt));
}
}
private List getRouteGeoPoints()
{
Log.d("Route", "Getting waypoints from google");
String s = getMapKMLUrl(lastKnownDeviceGeoPoint, Utilities.GetCarGeopoint(data), planWalkingDirection);
HttpGet httpget;
DefaultHttpClient defaulthttpclient;
Log.d("Route", (new StringBuilder("Request URL: ")).append(s).toString());
httpget = new HttpGet(s);
defaulthttpclient = new DefaultHttpClient();
HttpResponse httpresponse = defaulthttpclient.execute(httpget);
BufferedInputStream bufferedinputstream;
BufferedReader bufferedreader;
StringBuilder stringbuilder;
bufferedinputstream = new BufferedInputStream(httpresponse.getEntity().getContent());
InputStreamReader inputstreamreader = new InputStreamReader(bufferedinputstream);
bufferedreader = new BufferedReader(inputstreamreader, 40960);
stringbuilder = new StringBuilder();
_L6:
String s1 = bufferedreader.readLine();
if(s1 != null) goto _L2; else goto _L1
_L1:
String s2;
bufferedreader.close();
bufferedinputstream.close();
s2 = stringbuilder.toString();
Log.d("Route", (new StringBuilder("KML Data Length: ")).append(s2.length()).toString());
if(s2.length() > 0 && s2.indexOf("<LineString>") >= 0) goto _L4; else goto _L3
_L3:
Object obj = null;
_L5:
return ((List) (obj));
Exception exception;
exception;
exception.printStackTrace();
obj = null;
goto _L5
Exception exception1;
exception1;
exception1.printStackTrace();
obj = null;
goto _L5
_L2:
stringbuilder.append(s1);
goto _L6
Exception exception2;
exception2;
obj = null;
goto _L5
_L4:
DocumentBuilderFactory documentbuilderfactory;
DocumentBuilder documentbuilder;
Document document;
documentbuilderfactory = DocumentBuilderFactory.newInstance();
documentbuilder = null;
document = null;
DocumentBuilder documentbuilder1 = documentbuilderfactory.newDocumentBuilder();
documentbuilder = documentbuilder1;
_L7:
Document document1;
StringReader stringreader = new StringReader(s2);
document1 = documentbuilder.parse(new InputSource(stringreader));
document = document1;
_L8:
String s3 = document.getElementsByTagName("LineString").item(0).getChildNodes().item(0).getFirstChild().getNodeValue();
if(s3.length() != 0)
break MISSING_BLOCK_LABEL_435;
obj = null;
goto _L5
ParserConfigurationException parserconfigurationexception;
parserconfigurationexception;
parserconfigurationexception.printStackTrace();
goto _L7
SAXException saxexception;
saxexception;
saxexception.printStackTrace();
goto _L8
IOException ioexception;
ioexception;
ioexception.printStackTrace();
goto _L8
Exception exception4;
exception4;
if("".length() == 0)
obj = null;
else
obj = null;
goto _L5
Exception exception3;
exception3;
if("".length() == 0)
obj = null;
else
throw exception3;
goto _L5
String as[];
int i;
int j;
Log.d("Route", (new StringBuilder("KML lineStrings: ")).append(s3).toString());
as = s3.split(" ");
obj = new ArrayList();
i = as.length;
j = 0;
_L9:
label0:
{
if(j < i)
break label0;
Log.d("Route", (new StringBuilder("Waypoint count: ")).append(((List) (obj)).size()).toString());
}
goto _L5
String s4 = as[j];
int k = (int)(1000000D * Double.parseDouble(s4.split(",")[0]));
int l = (int)(1000000D * Double.parseDouble(s4.split(",")[1]));
GeoPoint geopoint = new GeoPoint(l, k);
((List) (obj)).add(geopoint);
j++;
goto _L9
}
private void hidePopup()
{
SlidingDrawer localSlidingDrawer = (SlidingDrawer)findViewById(2131296388);
if (localSlidingDrawer.isOpened())
localSlidingDrawer.close();
}
private void initPopup()
{
SlidingDrawer localSlidingDrawer = (SlidingDrawer)findViewById(2131296388);
localSlidingDrawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener()
{
public void onDrawerOpened()
{
((TextView)TabMap.this.findViewById(2131296390)).setText("▼ Close Panel ▼");
}
});
localSlidingDrawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener()
{
public void onDrawerClosed()
{
((TextView)TabMap.this.findViewById(2131296390)).setText("▲ Map Options ▲");
}
});
}
private void planRoute()
{
Toast.makeText(this, "Routing...", 0).show();
try
{
Thread.sleep(100L);
new Thread()
{
public void run()
{
Log.d("Route", "Starting routing thread");
TabMap.this.updateRoute();
TabMap.this.centeringMode.setMode(3);
TabMap.this.refreshUIHandler.post(TabMap.this.initializeMapCentering);
}
}
.start();
return;
}
catch (InterruptedException localInterruptedException)
{
while (true)
localInterruptedException.printStackTrace();
}
}
private void showGroupCarPopup(String paramString)
{
if (this.data.Group == null)
return;
Object localObject1 = null;
Iterator localIterator = this.data.Group.values().iterator();
label29: label38: final Object localObject2;
View localView;
final Spinner localSpinner;
TextView localTextView4;
label153: String str1;
label223: String str2;
label293: Object[] arrayOfObject4;
String str3;
if (!localIterator.hasNext())
{
localObject2 = localObject1;
localView = LayoutInflater.from(this).inflate(2130903057, null);
localSpinner = (Spinner)localView.findViewById(2131296399);
TextView localTextView1 = (TextView)localView.findViewById(2131296400);
TextView localTextView2 = (TextView)localView.findViewById(2131296401);
TextView localTextView3 = (TextView)localView.findViewById(2131296402);
localTextView4 = (TextView)localView.findViewById(2131296403);
localSpinner.setAdapter(this.availableCarColorsSpinnerAdapter);
if ((localObject2.VehicleImageDrawable != null) && (localObject2.VehicleImageDrawable.length() != 0))
break label539;
localSpinner.setSelection(0);
Object[] arrayOfObject1 = new Object[1];
arrayOfObject1[0] = Double.valueOf(localObject2.SOC);
localTextView1.setText(String.format("%s%%", arrayOfObject1));
Object[] arrayOfObject2 = new Object[2];
arrayOfObject2[0] = Double.valueOf(localObject2.Speed);
if (!this.data.Data_DistanceUnit.equals("K"))
break label602;
str1 = "kph";
arrayOfObject2[1] = str1;
localTextView2.setText(String.format("%s %s", arrayOfObject2));
Object[] arrayOfObject3 = new Object[3];
arrayOfObject3[0] = Double.valueOf(localObject2.Direction);
arrayOfObject3[1] = Double.valueOf(localObject2.Altitude);
if (!this.data.Data_DistanceUnit.equals("K"))
break label610;
str2 = "m";
arrayOfObject3[2] = str2;
localTextView3.setText(String.format("%s' %s%s", arrayOfObject3));
arrayOfObject4 = new Object[2];
if (!localObject2.GPSLocked)
break label618;
str3 = "LOCK";
label331: arrayOfObject4[0] = str3;
if (!localObject2.GPSDataStale)
break label626;
}
label539: label600: label602: label610: label618: label626: for (String str4 = "(STALE)"; ; str4 = "")
{
arrayOfObject4[1] = str4;
localTextView4.setText(String.format("%s %s", arrayOfObject4));
AlertDialog.Builder localBuilder1 = new AlertDialog.Builder(this);
Object[] arrayOfObject5 = new Object[2];
arrayOfObject5[0] = localObject2.VehicleID;
arrayOfObject5[1] = this.data.Data_Parameters.get(Integer.valueOf(11));
AlertDialog.Builder localBuilder2 = localBuilder1.setTitle(String.format("%s (%s)", arrayOfObject5)).setView(localView).setCancelable(true);
DialogInterface.OnClickListener local18 = new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt)
{
if ((localObject2.VehicleImageDrawable == null) || (!localObject2.VehicleImageDrawable.equals(((HashMap)TabMap.this.availableCarColors.get(localSpinner.getSelectedItemPosition())).get("Name").toString())))
{
localObject2.VehicleImageDrawable = ((HashMap)TabMap.this.availableCarColors.get(localSpinner.getSelectedItemPosition())).get("Name").toString();
((OVMSActivity)TabMap.this.getParent()).saveCars();
}
Toast.makeText(TabMap.this, "Locating " + localObject2.VehicleID, 0).show();
TabMap.this.centeringMode.GroupCar_VehicleID = localObject2.VehicleID;
TabMap.this.centeringMode.setMode(5);
TabMap.this.refreshUIHandler.post(TabMap.this.initializeMapCentering);
paramAnonymousDialogInterface.dismiss();
TabMap.this.hidePopup();
}
};
AlertDialog.Builder localBuilder3 = localBuilder2.setPositiveButton("Goto", local18);
DialogInterface.OnClickListener local19 = new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt)
{
if ((localObject2.VehicleImageDrawable == null) || (!localObject2.VehicleImageDrawable.equals(((HashMap)TabMap.this.availableCarColors.get(localSpinner.getSelectedItemPosition())).get("Name").toString())))
{
localObject2.VehicleImageDrawable = ((HashMap)TabMap.this.availableCarColors.get(localSpinner.getSelectedItemPosition())).get("Name").toString();
((OVMSActivity)TabMap.this.getParent()).saveCars();
TabMap.this.refreshUIHandler.sendEmptyMessage(0);
}
paramAnonymousDialogInterface.dismiss();
}
};
localBuilder3.setNegativeButton("Close", local19);
AlertDialog localAlertDialog = localBuilder1.create();
if (isFinishing())
break;
localAlertDialog.show();
break;
CarData_Group localCarData_Group = (CarData_Group)localIterator.next();
if (!localCarData_Group.VehicleID.equals(paramString))
break label29;
localObject1 = localCarData_Group;
break label38;
for (int i = 0; ; i++)
{
if (i >= this.availableCarColors.size())
break label600;
if (((HashMap)this.availableCarColors.get(i)).get("Name").toString().equals(localObject2.VehicleImageDrawable))
{
localSpinner.setSelection(i);
break;
}
}
break label153;
str1 = "mph";
break label223;
str2 = "ft";
break label293;
str3 = "Searching...";
break label331;
}
}
private void showPopup()
{
((SlidingDrawer)findViewById(2131296388)).open();
}
private void updateLastUpdatedView()
{
}
private void updateRoute()
{
this.myLocationOverlay.disableMyLocation();
List localList = getRouteGeoPoints();
if (localList != null)
drawRoute(localList, -16711936);
while (true)
{
this.refreshUIHandler.postDelayed(this.myLocationEnable, 200L);
Log.d("Route", "Route complete");
return;
runOnUiThread(this.routeError);
}
}
public void Refresh(CarData paramCarData, boolean paramBoolean)
{
this.data = paramCarData;
this.isLoggedIn = paramBoolean;
if (this.data.Group == null)
this.data.Group = new HashMap();
if (!this.currentVehicleID.equals(paramCarData.VehicleID))
{
this.currentVehicleID = paramCarData.VehicleID;
this.carMarkers = new Utilities.CarMarkerOverlay(getResources().getDrawable(getResources().getIdentifier(this.data.VehicleImageDrawable + "32x32", "drawable", "com.openvehicles.OVMS")), 20, this, this.DirectionalMarker, 1);
this.mapOverlays.set(0, this.carMarkers);
this.carMarkers.addOnGroupCarTappedListener(new Utilities.OnGroupCarTappedListener()
{
public void OnGroupCarTapped(String paramAnonymousString)
{
TabMap.this.showGroupCarPopup(paramAnonymousString);
}
});
}
this.refreshUIHandler.sendEmptyMessage(0);
}
public String getMapKMLUrl(GeoPoint paramGeoPoint1, GeoPoint paramGeoPoint2, boolean paramBoolean)
{
StringBuilder localStringBuilder = new StringBuilder();
localStringBuilder.append("http://maps.google.com/maps?f=d&hl=en");
localStringBuilder.append("&saddr=");
localStringBuilder.append(Double.toString(paramGeoPoint1.getLatitudeE6() / 1000000.0D));
localStringBuilder.append(",");
localStringBuilder.append(Double.toString(paramGeoPoint1.getLongitudeE6() / 1000000.0D));
localStringBuilder.append("&daddr=");
localStringBuilder.append(Double.toString(paramGeoPoint2.getLatitudeE6() / 1000000.0D));
localStringBuilder.append(",");
localStringBuilder.append(Double.toString(paramGeoPoint2.getLongitudeE6() / 1000000.0D));
localStringBuilder.append("&ie=UTF8&0&om=0&output=kml");
if (paramBoolean)
localStringBuilder.append("&dirflg=w");
return localStringBuilder.toString();
}
protected boolean isRouteDisplayed()
{
return false;
}
public void onBackPressed()
{
SlidingDrawer localSlidingDrawer = (SlidingDrawer)findViewById(2131296388);
if (localSlidingDrawer.isOpened())
localSlidingDrawer.close();
while (true)
{
return;
super.onBackPressed();
}
}
public void onCreate(Bundle paramBundle)
{
super.onCreate(paramBundle);
setContentView(2130903056);
this.mapView = ((MapView)findViewById(2131296386));
this.mc = this.mapView.getController();
this.mapView.setBuiltInZoomControls(true);
this.centeringMode = new mapCenteringMode(null);
this.centeringMode.setOnMapCenteringModeChangedListener(new OnCenteringModeChangedListener()
{
public void OnCenteringModeChanged(int paramAnonymousInt)
{
TabMap.this.refreshUIHandler.post(TabMap.this.updateCenteringOptions);
}
});
this.DirectionalMarker = BitmapFactory.decodeResource(getResources(), 2130837512);
this.mapOverlays = this.mapView.getOverlays();
this.carMarkers = new Utilities.CarMarkerOverlay(getResources().getDrawable(2130837534), 20, this, this.DirectionalMarker, 1);
this.mapOverlays.add(0, this.carMarkers);
this.myLocationOverlay = new MyLocationOverlayCustom(this, this.mapView);
this.mapOverlays.add(1, this.myLocationOverlay);
TouchOverlay localTouchOverlay = new TouchOverlay(null);
this.mapOverlays.add(2, localTouchOverlay);
this.locationManager = ((LocationManager)getSystemService("location"));
this.locationListener = new LocationListener()
{
public void onLocationChanged(Location paramAnonymousLocation)
{
int i = (int)(1000000.0D * paramAnonymousLocation.getLatitude());
int j = (int)(1000000.0D * paramAnonymousLocation.getLongitude());
TabMap.this.lastKnownDeviceGeoPoint = new GeoPoint(i, j);
Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = Integer.valueOf(i);
arrayOfObject[1] = Integer.valueOf(j);
Log.d("GPS", String.format("lat: %s lng %s", arrayOfObject));
if (TabMap.this.centeringMode.getMode() == 1)
TabMap.this.refreshUIHandler.sendEmptyMessage(0);
}
public void onProviderDisabled(String paramAnonymousString)
{
}
public void onProviderEnabled(String paramAnonymousString)
{
}
public void onStatusChanged(String paramAnonymousString, int paramAnonymousInt, Bundle paramAnonymousBundle)
{
}
};
RadioButton localRadioButton1 = (RadioButton)findViewById(2131296391);
localRadioButton1.setOnClickListener(new View.OnClickListener()
{
public void onClick(View paramAnonymousView)
{
if (!((RadioButton)paramAnonymousView).isChecked());
while (true)
{
return;
Toast.makeText(TabMap.this, "Car Location", 0).show();
TabMap.this.centeringMode.setMode(2);
TabMap.this.refreshUIHandler.post(TabMap.this.initializeMapCentering);
TabMap.this.hidePopup();
}
}
});
localRadioButton1.setChecked(true);
((RadioButton)findViewById(2131296392)).setOnClickListener(new View.OnClickListener()
{
public void onClick(View paramAnonymousView)
{
if (!((RadioButton)paramAnonymousView).isChecked())
return;
if (TabMap.this.lastKnownDeviceGeoPoint == null)
Toast.makeText(TabMap.this, "Waiting for device location...", 0).show();
while (true)
{
TabMap.this.centeringMode.setMode(1);
TabMap.this.refreshUIHandler.post(TabMap.this.initializeMapCentering);
TabMap.this.hidePopup();
break;
Toast.makeText(TabMap.this, "Your Location", 0).show();
}
}
});
((RadioButton)findViewById(2131296393)).setOnClickListener(new View.OnClickListener()
{
public void onClick(View paramAnonymousView)
{
if (!((RadioButton)paramAnonymousView).isChecked());
while (true)
{
return;
if (TabMap.this.mapOverlays.size() > 3)
Toast.makeText(TabMap.this, "Fitting Route", 0).show();
TabMap.this.centeringMode.setMode(3);
TabMap.this.refreshUIHandler.post(TabMap.this.initializeMapCentering);
TabMap.this.hidePopup();
}
}
});
((RadioButton)findViewById(2131296396)).setOnClickListener(new View.OnClickListener()
{
public void onClick(View paramAnonymousView)
{
if (!((RadioButton)paramAnonymousView).isChecked());
while (true)
{
return;
if (TabMap.this.mapOverlays.size() > 3)
TabMap.this.clearRoute();
if (TabMap.this.lastKnownDeviceGeoPoint == null)
{
((RadioButton)TabMap.this.findViewById(2131296397)).setChecked(true);
Toast.makeText(TabMap.this, "Waiting for device location...", 0).show();
}
else
{
TabMap.this.planRoute();
TabMap.this.hidePopup();
}
}
}
});
((RadioButton)findViewById(2131296395)).setOnClickListener(new View.OnClickListener()
{
public void onClick(View paramAnonymousView)
{
if (!((RadioButton)paramAnonymousView).isChecked());
while (true)
{
return;
if (TabMap.this.mapOverlays.size() > 3)
TabMap.this.clearRoute();
if (TabMap.this.lastKnownDeviceGeoPoint == null)
{
Toast.makeText(TabMap.this, "Waiting for device location...", 0).show();
}
else
{
TabMap.this.planRoute();
TabMap.this.hidePopup();
}
}
}
});
RadioButton localRadioButton2 = (RadioButton)findViewById(2131296397);
localRadioButton2.setOnClickListener(new View.OnClickListener()
{
public void onClick(View paramAnonymousView)
{
if (!((RadioButton)paramAnonymousView).isChecked());
while (true)
{
return;
TabMap.this.cancelRoute();
TabMap.this.hidePopup();
}
}
});
localRadioButton2.setChecked(true);
((ListView)findViewById(2131296398)).setOnItemClickListener(new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> paramAnonymousAdapterView, View paramAnonymousView, int paramAnonymousInt, long paramAnonymousLong)
{
TextView localTextView = (TextView)paramAnonymousView.findViewById(2131296405);
TabMap.this.showGroupCarPopup(localTextView.getText().toString());
}
});
initPopup();
String[] arrayOfString1 = new String[23];
arrayOfString1[0] = "car_roadster_arcticwhite";
arrayOfString1[1] = "car_roadster_brilliantyellow";
arrayOfString1[2] = "car_roadster_electricblue";
arrayOfString1[3] = "car_roadster_fushionred";
arrayOfString1[4] = "car_roadster_glacierblue";
arrayOfString1[5] = "car_roadster_jetblack";
arrayOfString1[6] = "car_roadster_lightninggreen";
arrayOfString1[7] = "car_roadster_obsidianblack";
arrayOfString1[8] = "car_roadster_racinggreen";
arrayOfString1[9] = "car_roadster_radiantred";
arrayOfString1[10] = "car_roadster_sterlingsilver";
arrayOfString1[11] = "car_roadster_thundergray";
arrayOfString1[12] = "car_roadster_twilightblue";
arrayOfString1[13] = "car_roadster_veryorange";
arrayOfString1[14] = "car_models_anzabrown";
arrayOfString1[15] = "car_models_catalinawhite";
arrayOfString1[16] = "car_models_montereyblue";
arrayOfString1[17] = "car_models_sansimeonsilver";
arrayOfString1[18] = "car_models_sequolagreen";
arrayOfString1[19] = "car_models_shastapearlwhite";
arrayOfString1[20] = "car_models_sierrablack";
arrayOfString1[21] = "car_models_signaturered";
arrayOfString1[22] = "car_models_tiburongrey";
this.availableCarColors = new ArrayList();
for (int i = 0; ; i++)
{
if (i >= arrayOfString1.length)
{
ArrayList localArrayList = this.availableCarColors;
String[] arrayOfString2 = new String[1];
arrayOfString2[0] = "Icon";
int[] arrayOfInt = new int[1];
arrayOfInt[0] = 2131296312;
this.availableCarColorsSpinnerAdapter = new CustomSpinnerAdapter(this, localArrayList, 2130903051, arrayOfString2, arrayOfInt);
return;
}
HashMap localHashMap = new HashMap();
localHashMap.put("Name", arrayOfString1[i]);
Resources localResources = getResources();
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] = arrayOfString1[i];
localHashMap.put("Icon", Integer.valueOf(localResources.getIdentifier(String.format("%s96x44", arrayOfObject), "drawable", "com.openvehicles.OVMS")));
this.availableCarColors.add(localHashMap);
}
}
protected void onPause()
{
try
{
Log.d("GPS", "OFF");
this.locationManager.removeUpdates(this.locationListener);
this.myLocationOverlay.disableCompass();
this.myLocationOverlay.disableMyLocation();
label35: this.lastUpdateTimerHandler.removeCallbacks(this.lastUpdateTimer);
super.onPause();
return;
}
catch (Exception localException)
{
break label35;
}
}
public void onRestoreInstanceState(Bundle paramBundle)
{
super.onRestoreInstanceState(paramBundle);
this.planWalkingDirection = paramBundle.getBoolean("planWalkingDirection");
this.centeringMode.setMode(paramBundle.getInt("centeringMode"));
}
protected void onResume()
{
super.onResume();
if (this.locationManager.isProviderEnabled("gps"))
{
Log.d("GPS", "ON");
this.locationManager.requestLocationUpdates("network", 5000L, 5.0F, this.locationListener);
this.locationManager.requestLocationUpdates("gps", 5000L, 5.0F, this.locationListener);
}
this.lastKnownDeviceGeoPoint = null;
this.myLocationOverlay.enableCompass();
this.myLocationOverlay.enableMyLocation();
this.lastUpdateTimerHandler.postDelayed(this.lastUpdateTimer, 5000L);
}
public void onSaveInstanceState(Bundle paramBundle)
{
paramBundle.putBoolean("planWalkingDirection", this.planWalkingDirection);
paramBundle.putInt("centeringMode", this.centeringMode.getMode());
super.onSaveInstanceState(paramBundle);
}
class CustomSpinnerAdapter extends SimpleAdapter
{
LayoutInflater mInflater;
public CustomSpinnerAdapter(List<? extends Map<String, ?>> paramInt, int paramArrayOfString, String[] paramArrayOfInt, int[] arg5)
{
super(paramArrayOfString, paramArrayOfInt, arrayOfString, arrayOfInt);
this.mInflater = LayoutInflater.from(paramInt);
}
public View getView(int paramInt, View paramView, ViewGroup paramViewGroup)
{
if (paramView == null)
paramView = this.mInflater.inflate(2130903051, null);
HashMap localHashMap = (HashMap)getItem(paramInt);
ImageView localImageView = (ImageView)paramView.findViewById(2131296312);
StringBuilder localStringBuilder = new StringBuilder(String.valueOf(TabMap.this.getCacheDir().getAbsolutePath()));
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] = localHashMap.get("Name").toString();
Bitmap localBitmap = BitmapFactory.decodeFile(String.format("/%s.png", arrayOfObject));
if (localBitmap != null)
localImageView.setImageBitmap(localBitmap);
while (true)
{
return paramView;
localImageView.setImageBitmap(null);
localImageView.setBackgroundResource(((Integer)localHashMap.get("Icon")).intValue());
}
}
}
private class GroupCarsListViewAdapter extends ArrayAdapter<Object>
{
private Object[] items;
public GroupCarsListViewAdapter(Context paramInt, int paramArrayOfObject, Object[] arg4)
{
super(paramArrayOfObject, arrayOfObject);
this.items = arrayOfObject;
}
public View getView(int paramInt, View paramView, ViewGroup paramViewGroup)
{
CarData_Group localCarData_Group = (CarData_Group)this.items[paramInt];
if (localCarData_Group == null)
{
localView = null;
return localView;
}
View localView = paramView;
if (localView == null)
localView = ((LayoutInflater)TabMap.this.getSystemService("layout_inflater")).inflate(2130903058, null);
((TextView)localView.findViewById(2131296405)).setText(localCarData_Group.VehicleID);
TextView localTextView1 = (TextView)localView.findViewById(2131296406);
Object[] arrayOfObject1 = new Object[2];
arrayOfObject1[0] = Double.valueOf(localCarData_Group.SOC);
String str3;
label148: String str1;
label163: TextView localTextView2;
double d;
Object[] arrayOfObject2;
if (localCarData_Group.Speed > 0.0D)
{
Object[] arrayOfObject3 = new Object[2];
arrayOfObject3[0] = Double.valueOf(localCarData_Group.Speed);
if (TabMap.this.data.Data_DistanceUnit.equals("K"))
{
str3 = "kph";
arrayOfObject3[1] = str3;
str1 = String.format(" | %s%s", arrayOfObject3);
arrayOfObject1[1] = str1;
localTextView1.setText(String.format("%s%%", arrayOfObject1));
localTextView2 = (TextView)localView.findViewById(2131296407);
d = Utilities.GetDistanceBetweenCoordinatesKM(localCarData_Group.Latitude, localCarData_Group.Longitude, TabMap.this.data.Data_Latitude, TabMap.this.data.Data_Longitude);
arrayOfObject2 = new Object[2];
if (!TabMap.this.data.Data_DistanceUnit.equals("K"))
break label368;
label252: arrayOfObject2[0] = Double.valueOf(d);
if (!TabMap.this.data.Data_DistanceUnit.equals("K"))
break label379;
}
}
label368: label379: for (String str2 = "km"; ; str2 = "mi")
{
arrayOfObject2[1] = str2;
localTextView2.setText(String.format("%.1f%n %s", arrayOfObject2));
((ImageView)localView.findViewById(2131296404)).setImageResource(TabMap.this.getResources().getIdentifier(localCarData_Group.VehicleImageDrawable + "96x44", "drawable", "com.openvehicles.OVMS"));
break;
str3 = "mph";
break label148;
str1 = "";
break label163;
d *= 0.621371192D;
break label252;
}
}
}
private static abstract interface OnCenteringModeChangedListener
{
public abstract void OnCenteringModeChanged(int paramInt);
}
private class TouchOverlay extends Overlay
{
private TouchOverlay()
{
}
public boolean onTouchEvent(MotionEvent paramMotionEvent, MapView paramMapView)
{
if (paramMotionEvent.getAction() == 1)
{
TabMap.this.hidePopup();
if (TabMap.this.centeringMode.getMode() != 4)
{
float f1 = paramMotionEvent.getX();
float f2 = paramMotionEvent.getY();
if (Math.sqrt(Math.pow(f1 - TabMap.this.mapDragLastX, 2.0D) + Math.pow(f2 - TabMap.this.mapDragLastY, 2.0D)) > 100.0D)
TabMap.this.centeringMode.setMode(4);
}
}
while (true)
{
return false;
if (paramMotionEvent.getAction() == 0)
{
TabMap.this.mapDragLastX = paramMotionEvent.getX();
TabMap.this.mapDragLastY = paramMotionEvent.getY();
}
}
}
}
private class mapCenteringMode
{
public static final int CAR = 2;
public static final int CUSTOM = 4;
public static final int DEFAULT = 0;
public static final int DEVICE = 1;
public static final int GROUPCAR = 5;
public static final int ROUTE = 3;
public String GroupCar_VehicleID = "";
private int _centeringMode = 0;
private TabMap.OnCenteringModeChangedListener _listener = null;
private mapCenteringMode()
{
}
/** @deprecated */
private void fireCenteringModeChangedEvent()
{
try
{
if (this._listener != null)
this._listener.OnCenteringModeChanged(this._centeringMode);
return;
}
finally
{
localObject = finally;
throw localObject;
}
}
public int getMode()
{
return this._centeringMode;
}
/** @deprecated */
public void removeOnGroupCarTappedListener()
{
try
{
this._listener = null;
return;
}
finally
{
localObject = finally;
throw localObject;
}
}
public void setMode(int paramInt)
{
if (this._centeringMode == paramInt);
while (true)
{
return;
this._centeringMode = paramInt;
fireCenteringModeChangedEvent();
}
}
/** @deprecated */
public void setOnMapCenteringModeChangedListener(TabMap.OnCenteringModeChangedListener paramOnCenteringModeChangedListener)
{
try
{
this._listener = paramOnCenteringModeChangedListener;
return;
}
finally
{
localObject = finally;
throw localObject;
}
}
}
}