From 124b0a3001f124a7f5423cd567b331d05a8022e4 Mon Sep 17 00:00:00 2001 From: Ricky Barrette Date: Mon, 5 Mar 2012 08:31:04 -0500 Subject: [PATCH] Updated to meet the refactored location library Signed-off-by: Ricky Barrette --- FindMyCarLib/bin/findmycarlib.jar | Bin 83548 -> 74587 bytes FindMyCarLib/res/layout/list_row.xml | 22 -- FindMyCarLib/res/layout/listview.xml | 7 - FindMyCarLib/res/layout/map.xml | 2 +- .../FindMyCarLib/DirectionsAdapter.java | 117 ------ .../android/FindMyCarLib/Main.java | 6 +- .../FindMyCarLib/UI/DirectionsOverlay.java | 352 ------------------ .../android/FindMyCarLib/UI/PathOverlay.java | 86 ----- .../UI/fragments/DirectionsListFragment.java | 71 +--- .../UI/fragments/MapFragment.java | 6 +- 10 files changed, 15 insertions(+), 654 deletions(-) delete mode 100755 FindMyCarLib/res/layout/list_row.xml delete mode 100644 FindMyCarLib/res/layout/listview.xml delete mode 100644 FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/DirectionsAdapter.java delete mode 100644 FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/DirectionsOverlay.java delete mode 100644 FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/PathOverlay.java diff --git a/FindMyCarLib/bin/findmycarlib.jar b/FindMyCarLib/bin/findmycarlib.jar index 121a4ce014c0671b6478562319a017fb74a8f07d..c24e2b47fbe369aa1321e86ac424b80cc9e1c8b7 100644 GIT binary patch delta 19240 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 x%MFI*=|C%g;0z7y0Rtv*sOdcON2^md0f**5M` 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 Zz?^gdN-RM*K{#JxIJjXB*v$g>e*i<>0~i1R diff --git a/FindMyCarLib/res/layout/list_row.xml b/FindMyCarLib/res/layout/list_row.xml deleted file mode 100755 index e6ab51b..0000000 --- a/FindMyCarLib/res/layout/list_row.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - \ No newline at end of file diff --git a/FindMyCarLib/res/layout/listview.xml b/FindMyCarLib/res/layout/listview.xml deleted file mode 100644 index fd8cccf..0000000 --- a/FindMyCarLib/res/layout/listview.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/FindMyCarLib/res/layout/map.xml b/FindMyCarLib/res/layout/map.xml index 9ed1dc6..03ccd23 100755 --- a/FindMyCarLib/res/layout/map.xml +++ b/FindMyCarLib/res/layout/map.xml @@ -16,7 +16,7 @@ android:id="@+id/map_fragment" android:layout_width="match_parent" android:layout_height="match_parent" - class="com.TwentyCodes.android.SkyHook.SkyHoookUserOverlayMapFragment" > + class="com.TwentyCodes.android.fragments.SkyHoookUserOverlayMapFragment" > diff --git a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/DirectionsAdapter.java b/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/DirectionsAdapter.java deleted file mode 100644 index 499b421..0000000 --- a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/DirectionsAdapter.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * @author Twenty Codes, LLC - * @author ricky barrette - * @date Sep 22, 2010 - */ -package com.TwentyCodes.android.FindMyCarLib; - -import android.content.Context; -import android.text.Html; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; - -import com.TwentyCodes.android.FindMyCarLib.UI.DirectionsOverlay; - -/** - * this is a custom listview adaptor that wills a listview that has 2 textviews in each row. - * @author ricky barrette - */ -public class DirectionsAdapter extends BaseAdapter { - - private LayoutInflater mInflater; - private DirectionsOverlay mDirections; - - - /** - * - * @author ricky barrette - */ - public DirectionsAdapter(Context context, DirectionsOverlay directions) { - mInflater = LayoutInflater.from(context); - mDirections = directions; - } - - /** - * returns the size of the main list - * @see android.widget.Adapter#getCount() - * @return - * @author ricky barrette - */ - @Override - public int getCount() { - return mDirections.getDirections().size() + 1; - } - - /** - * (non-Javadoc) - * @see android.widget.Adapter#getItem(int) - * @param position - * @return - * @author ricky barrette - */ - @Override - public Object getItem(int position) { - return position; - } - - /** - * returns the current position in the list - * @see android.widget.Adapter#getItemId(int) - * @param position - * @return - * @author ricky barrette - */ - @Override - public long getItemId(int position) { - return position; - } - - /** - * inflates the row from xml, and sets the textviews to their intended vales - * @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup) - * @param position - * @param convertView - * @param parent - * @return - * @author ricky barrette - */ - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder holder; - if (convertView == null) { - convertView = mInflater.inflate(R.layout.list_row, null); - holder = new ViewHolder(); - holder.text = (TextView) convertView.findViewById(R.id.TextView01); - holder.text2 = (TextView) convertView.findViewById(R.id.TextView02); - - convertView.setTag(holder); - } else { - holder = (ViewHolder) convertView.getTag(); - } - - /** - * Display the copyrights on the bottom of the directions list - */ - if (position == mDirections.getDirections().size()){ - holder.text.setText(mDirections.getCopyrights()); - holder.text2.setText(""); - } else { - holder.text.setText(Html.fromHtml(mDirections.getDirections().get(position))); - holder.text2.setText(mDirections.getDurations().get(position) +" : "+ mDirections.getDistances().get(position)); - } - return convertView; - } - - /** - * this class will hold the TextViews - * @author ricky barrette - */ - class ViewHolder { - TextView text; - TextView text2; - } - -} \ No newline at end of file diff --git a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/Main.java b/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/Main.java index d78e050..2128b64 100644 --- a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/Main.java +++ b/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/Main.java @@ -29,15 +29,15 @@ import android.util.Log; import android.view.View; import com.TwentyCodes.android.FindMyCarLib.UI.CustomViewPager; -import com.TwentyCodes.android.FindMyCarLib.UI.DirectionsOverlay; import com.TwentyCodes.android.FindMyCarLib.UI.fragments.DirectionsListFragment; -import com.TwentyCodes.android.FindMyCarLib.UI.fragments.DirectionsListFragment.OnDirectionSelectedListener; import com.TwentyCodes.android.FindMyCarLib.UI.fragments.MapFragment; import com.TwentyCodes.android.FindMyCarLib.UI.fragments.MapFragment.MapFragmentListener; import com.TwentyCodes.android.FindMyCarLib.UI.fragments.NotesFragment; import com.TwentyCodes.android.FindMyCarLib.debug.Debug; import com.TwentyCodes.android.SkyHook.SkyHookRegistration; import com.TwentyCodes.android.exception.ExceptionHandler; +import com.TwentyCodes.android.location.OnDirectionSelectedListener; +import com.TwentyCodes.android.overlays.DirectionsOverlay; import com.google.ads.AdRequest; import com.google.ads.AdView; import com.google.android.maps.GeoPoint; @@ -542,7 +542,7 @@ public class Main extends FragmentActivity implements RegistrationCallback, MapF /** * called when a direction is selected * (non-Javadoc) - * @see com.TwentyCodes.android.FindMyCarLib.UI.fragments.DirectionsListFragment.OnDirectionSelectedListener#onDirectionSelected(com.google.android.maps.GeoPoint) + * @see com.TwentyCodes.android.location.DirectionsListFragment.OnDirectionSelectedListener#onDirectionSelected(com.google.android.maps.GeoPoint) */ @Override public void onDirectionSelected(GeoPoint point) { diff --git a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/DirectionsOverlay.java b/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/DirectionsOverlay.java deleted file mode 100644 index 60fb6c6..0000000 --- a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/DirectionsOverlay.java +++ /dev/null @@ -1,352 +0,0 @@ -/** - * DirectionsOverlay.java - * @date Nov 10, 2011 - * @author ricky barrette - * @author Twenty Codes, LLC - */ -package com.TwentyCodes.android.FindMyCarLib.UI; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; - -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.DefaultHttpClient; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import android.graphics.Color; -import android.util.Log; - -import com.TwentyCodes.android.FindMyCarLib.debug.Debug; -import com.TwentyCodes.android.location.MapView; -import com.google.android.maps.GeoPoint; - -/** - * This Overlay class will be used to display provided by the Google Directions API on a map - * @author ricky barrette - */ -public class DirectionsOverlay { - - private static final String TAG = "DirectionsOverlay"; - ArrayList mPath; - ArrayList mDirections; - private MapView mMapView; - private OnDirectionsCompleteListener mListener; - private String mCopyRights; - private ArrayList mPoints; - private ArrayList mDistance; - private ArrayList mDuration; - private ArrayList mWarnings; - - /** - * Downloads and Creates a new DirectionsOverlay from the provided points - * @param origin point - * @param destination point - * @author ricky barrette - * @throws IOException - * @throws ClientProtocolException - * @throws IllegalStateException - * @throws JSONException - */ - public DirectionsOverlay(MapView map, GeoPoint origin, GeoPoint destination, OnDirectionsCompleteListener listener) throws IllegalStateException, ClientProtocolException, IOException, JSONException { - mMapView = map; - mListener = listener; - String json = downloadJSON(generateUrl(origin, destination)); - drawPath(json); - } - - /** - * Creates a new DirectionsOverlay from the provided String JSON - * @param json - * @throws JSONException - * @author ricky barrette - */ - public DirectionsOverlay(MapView map, String json, OnDirectionsCompleteListener listener) throws JSONException{ - mListener = listener; - mMapView = map; - drawPath(json); - } - - /** - * Downloads Google Directions JSON from the Internet - * @param url - * @return - * @throws IllegalStateException - * @throws ClientProtocolException - * @throws IOException - * @author ricky barrette - */ - private String downloadJSON(String url) throws IllegalStateException, ClientProtocolException, IOException { - if(Debug.DEBUG) - Log.d(TAG, url); - if(url == null) - throw new NullPointerException(); - StringBuffer response = new StringBuffer(); - BufferedReader br = new BufferedReader(new InputStreamReader(new DefaultHttpClient().execute(new HttpGet(url)).getEntity().getContent())); - String buff = null; - while ((buff = br.readLine()) != null) - response.append(buff); - return response.toString(); - } - - /** - * Creates a new DirectionsOverlay from the json provided - * @param json of Google Directions API - * @author ricky barrette - * @return - * @throws JSONException - */ - public void drawPath(String json) throws JSONException{ - if(Debug.DEBUG){ - Log.d(TAG, "drawPath"); - Log.d(TAG, json); - } - mPath = new ArrayList(); - mDirections = new ArrayList(); - mPoints = new ArrayList(); - mDistance = new ArrayList(); - mDuration = new ArrayList(); - - //get first route - JSONObject route = new JSONObject(json).getJSONArray("routes").getJSONObject(0); - - mCopyRights = route.getString("copyrights"); - //route.getString("status"); - - JSONObject leg = route.getJSONArray("legs").getJSONObject(0); - getDistance(leg); - getDuration(leg); -// mMapView.getOverlays().add(new PathOverlay(getGeoPoint(leg.getJSONObject("start_location")), 12, Color.GREEN)); -// mMapView.getOverlays().add(new PathOverlay(getGeoPoint(leg.getJSONObject("end_location")), 12, Color.RED)); - - leg.getString("start_address"); - leg.getString("end_address"); - -// JSONArray warnings = leg.getJSONArray("warnings"); -// for(int i = 0; i < warnings.length(); i++){ -// mWarnings.add(warnings.get)w -// }w - - /* - * here we will parse the steps of the directions - */ - if(Debug.DEBUG) - Log.d(TAG, "processing steps"); - JSONArray steps = leg.getJSONArray("steps"); - JSONObject step = null; - for(int i = 0; i < steps.length(); i++){ - if(Debug.DEBUG) - Log.d(TAG, "step "+i); - - step = steps.getJSONObject(i); - - if(Debug.DEBUG){ - Log.d(TAG, "start "+getGeoPoint(step.getJSONObject("start_location")).toString()); - Log.d(TAG, "end "+getGeoPoint(step.getJSONObject("end_location")).toString()); - } - -// if(Debug.DEBUG) -// mMapView.getOverlays().add(new PathOverlay(getGeoPoint(step.getJSONObject("start_location")), getGeoPoint(step.getJSONObject("end_location")), Color.MAGENTA)); - - decodePoly(step); - - mDuration.add(getDuration(step)); - - mDistance.add(getDistance(step)); - - mDirections.add(step.getString("html_instructions")); -// Log.d("TEST", step.getString("html_instructions")); - mPoints.add(getGeoPoint(step.getJSONObject("start_location"))); - - } - if(Debug.DEBUG) - Log.d(TAG, "finished parsing"); - - if(mMapView != null){ - mMapView.getOverlays().addAll(mPath); - mMapView.postInvalidate(); - } - - if(mListener != null) - mListener.onDirectionsComplete(DirectionsOverlay.this); - } - - /** - * @param origin - * @param destination - * @return The Google API url for our directions - * @author ricky barrette - */ - private String generateUrl(GeoPoint origin, GeoPoint destination){ - return "http://maps.googleapis.com/maps/api/directions/json?&origin="+ - Double.toString(origin.getLatitudeE6() / 1.0E6)+ - ","+ - Double.toString(origin.getLongitudeE6() / 1.0E6)+ - "&destination="+ - Double.toString(destination.getLatitudeE6() / 1.0E6)+ - ","+ - Double.toString(destination.getLongitudeE6() / 1.0E6)+ - "&sensor=true&mode=walking"; - } - - - /** - * Deocodes googles polyline - * @param encoded - * @return a list of geopoints representing the path - * @author Mark McClure http://facstaff.unca.edu/mcmcclur/googlemaps/encodepolyline/ - * @author ricky barrette - * @throws JSONException - */ - private void decodePoly(JSONObject step) throws JSONException { - if(Debug.DEBUG) - Log.d(TAG, "decodePoly"); - - String encoded = step.getJSONObject("polyline").getString("points"); - int index = 0, len = encoded.length(); - int lat = 0, lng = 0; - - GeoPoint last = null; - while (index < len) { - int b, shift = 0, result = 0; - do { - b = encoded.charAt(index++) - 63; - result |= (b & 0x1f) << shift; - shift += 5; - } while (b >= 0x20); - int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); - lat += dlat; - - shift = 0; - result = 0; - do { - b = encoded.charAt(index++) - 63; - result |= (b & 0x1f) << shift; - shift += 5; - } while (b >= 0x20); - int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); - lng += dlng; - - GeoPoint p = new GeoPoint((int) (((double) lat / 1E5) * 1E6), (int) (((double) lng / 1E5) * 1E6)); - - if(Debug.DEBUG){ - Log.d(TAG, "current = "+ p.toString()); - if(last != null) - Log.d(TAG, "last = "+ last.toString()); - } - - - if(last != null) - mPath.add(new PathOverlay(last, p, Color.RED)); - - last = p; - } - - } - - /** - * Converts a JSON location object into a GeoPoint - * @param point - * @return Geopoint parsed from the provided JSON Object - * @throws JSONException - * @author ricky barrette - */ - private GeoPoint getGeoPoint(JSONObject point) throws JSONException{ - return new GeoPoint((int) (point.getDouble("lat")*1E6), (int) (point.getDouble("lng")*1E6)); - } - - /** - * @param step - * @return the duration of a step - * @throws JSONException - * @author ricky barrette - */ - private String getDuration(JSONObject step) throws JSONException{ - return step.getJSONObject("duration").getString("text"); - } - - /** - * @param step - * @return the distance of a step - * @throws JSONException - * @author ricky barrette - */ - private String getDistance(JSONObject step) throws JSONException{ - return step.getJSONObject("distance").getString("text"); - } - - /** - * @return the array of PathOverlays - * @author ricky barrette - */ - public ArrayList getPath(){ - return mPath; - } - - /** - * Removes the directions overlay from the map view - * @author ricky barrette - */ - public void removePath() { - if(mMapView.getOverlays().removeAll(mPath)); - } - - /** - * @author ricky barrette - */ - public interface OnDirectionsCompleteListener{ - public void onDirectionsComplete(DirectionsOverlay directionsOverlay); - } - - /** - * @return - * @author ricky barrette - */ - public ArrayList getDirections() { - return mDirections; - } - - /** - * @return - * @author ricky barrette - */ - public ArrayList getPoints() { - return mPoints; - } - - /** - * @return - * @author ricky barrette - */ - public ArrayList getDurations(){ - return mDuration; - } - - /** - * @return - * @author ricky barrette - */ - public ArrayList getDistances(){ - return mDistance; - } - - /** - * @return - * @author ricky barrette - */ - public String getCopyrights(){ - return mCopyRights; - } - - /** - * @return - * @author ricky barrette - */ - public ArrayList getWarnings() { - return mWarnings; - } -} \ No newline at end of file diff --git a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/PathOverlay.java b/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/PathOverlay.java deleted file mode 100644 index df6327a..0000000 --- a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/PathOverlay.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * PathOverlay.java - * @date Nov 11, 2011 - * @author ricky barrette - * @author Twenty Codes, LLC - */ -package com.TwentyCodes.android.FindMyCarLib.UI; - -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Point; -import android.graphics.RectF; - -import com.google.android.maps.GeoPoint; -import com.google.android.maps.MapView; -import com.google.android.maps.Overlay; -import com.google.android.maps.Projection; - -/** - * This overlay class is used to draw a path and points on a map - * @author ricky barrette - */ -public class PathOverlay extends Overlay { - - private static final int PATH = 0; - private static final int POINT = 1; - private GeoPoint mStart; - private GeoPoint mEnd; - private int mColor; - private int mMode; - private int mRadius; - - /** - * Creates a new PathOverlay in path mode - * @author ricky barrette - */ - public PathOverlay(GeoPoint start, GeoPoint end, int color) { - mStart = start; - mEnd = end; - mColor = color; - mMode = PATH; - } - - /** - * Creates a new PathOverlay in point mode. This is used to draw end points. - * @param point - * @param radius - * @param color - * @author ricky barrette - */ - public PathOverlay(GeoPoint point, int radius, int color){ - mMode = POINT; - mRadius = radius; - mStart = point; - } - - /** - * - * @param canvas canvas to be drawn on - * @param mapView - * @param shadow - * @param when - */ - @Override - public void draw(Canvas canvas, MapView mapView, boolean shadow) { - Projection projection = mapView.getProjection(); - Paint paint = new Paint(); - paint.setColor(mColor); - paint.setAntiAlias(true); - Point point = new Point(); - projection.toPixels(mStart, point); - - switch (mMode){ - case POINT: - RectF oval = new RectF(point.x - mRadius, point.y - mRadius, point.x + mRadius, point.y + mRadius); - canvas.drawOval(oval, paint); - case PATH: - Point point2 = new Point(); - projection.toPixels(mEnd, point2); - paint.setStrokeWidth(5); - paint.setAlpha(120); - canvas.drawLine(point.x, point.y, point2.x, point2.y, paint); - } - super.draw(canvas, mapView, shadow); - } -} \ No newline at end of file diff --git a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/fragments/DirectionsListFragment.java b/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/fragments/DirectionsListFragment.java index 9c2a6ea..e692e52 100644 --- a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/fragments/DirectionsListFragment.java +++ b/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/fragments/DirectionsListFragment.java @@ -1,47 +1,32 @@ /** * DirectionsListFragment.java - * @date Nov 25, 2011 + * @date Mar 5, 2012 * @author ricky barrette * @author Twenty Codes, LLC */ package com.TwentyCodes.android.FindMyCarLib.UI.fragments; -import java.util.ArrayList; - -import android.support.v4.app.ListFragment; -import android.view.View; -import android.widget.ArrayAdapter; -import android.widget.ListView; - -import com.TwentyCodes.android.FindMyCarLib.DirectionsAdapter; import com.TwentyCodes.android.FindMyCarLib.Main; import com.TwentyCodes.android.FindMyCarLib.R; -import com.TwentyCodes.android.FindMyCarLib.UI.DirectionsOverlay; -import com.google.android.maps.GeoPoint; +import com.TwentyCodes.android.location.OnDirectionSelectedListener; /** - * This fragment will be used to display directions to the user. - * When a specific direction is clicked, the corrispoding geopoint is returned via listener + * This is our direction's list fragment. * @author ricky barrette */ -public class DirectionsListFragment extends ListFragment { +public class DirectionsListFragment extends com.TwentyCodes.android.fragments.DirectionsListFragment { - public interface OnDirectionSelectedListener{ - public void onDirectionSelected(GeoPoint SelectedPoint); - } - - private OnDirectionSelectedListener mListener; - private ArrayList mPoints; - /** * Creates a new Directions List Fragment + * @param listener * @author ricky barrette */ - public DirectionsListFragment() { - super(); + public DirectionsListFragment(OnDirectionSelectedListener listener) { + super(listener); } /** + * We override onstart to set emptry list messasges * (non-Javadoc) * @see android.support.v4.app.Fragment#onStart() */ @@ -55,44 +40,4 @@ public class DirectionsListFragment extends ListFragment { super.onStart(); } - /** - * Creates a new Directions List Fragment - * @param listener - * @author ricky barrette - */ - public DirectionsListFragment(OnDirectionSelectedListener listener) { - this(); - mListener = listener; - } - - /** - * Displays the directions from the provided DirectionsOverlay object - * @param directions - * @author ricky barrette - */ - public void setDirections(final DirectionsOverlay directions) { - mPoints = directions.getPoints(); - this.setListAdapter(new DirectionsAdapter(getActivity(), directions)); - } - - /** - * Called when a list item is clicked. - * Checks to see if the list item is a direction, if to it reports the selected direction's geopoint to the listener - * (non-Javadoc) - * @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long) - */ - @Override - public void onListItemClick(ListView l, View w, int position, long id) { - if(position < mPoints.size()) - if(mListener != null) - mListener.onDirectionSelected(mPoints.get(position)); - } - - /** - * Deletes all content in the listview - * @author ricky barrette - */ - public void clear() { - this.setListAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, new ArrayList())); - } } diff --git a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/fragments/MapFragment.java b/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/fragments/MapFragment.java index 0f2ead2..f42e29f 100644 --- a/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/fragments/MapFragment.java +++ b/FindMyCarLib/src/com/TwentyCodes/android/FindMyCarLib/UI/fragments/MapFragment.java @@ -38,14 +38,14 @@ import com.TwentyCodes.android.FindMyCarLib.Main; import com.TwentyCodes.android.FindMyCarLib.ParkignTimerActivity; import com.TwentyCodes.android.FindMyCarLib.R; import com.TwentyCodes.android.FindMyCarLib.Settings; -import com.TwentyCodes.android.FindMyCarLib.UI.DirectionsOverlay; -import com.TwentyCodes.android.FindMyCarLib.UI.DirectionsOverlay.OnDirectionsCompleteListener; import com.TwentyCodes.android.FindMyCarLib.UI.FindMyCarOverlay; -import com.TwentyCodes.android.SkyHook.SkyHoookUserOverlayMapFragment; +import com.TwentyCodes.android.fragments.SkyHoookUserOverlayMapFragment; import com.TwentyCodes.android.location.GeoPointLocationListener; import com.TwentyCodes.android.location.GeoUtils; import com.TwentyCodes.android.location.MapView; import com.TwentyCodes.android.location.MidPoint; +import com.TwentyCodes.android.overlays.DirectionsOverlay; +import com.TwentyCodes.android.overlays.DirectionsOverlay.OnDirectionsCompleteListener; import com.google.android.maps.GeoPoint; /**