diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java index 8a195d9..f712f08 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java @@ -76,6 +76,7 @@ import java.util.List; import java.util.Locale; +import de.apps4ics.mountainnavigation.adapters.HikeListAdapter; import de.apps4ics.mountainnavigation.adapters.ImageListAdapter; import de.apps4ics.mountainnavigation.handlers.DatabaseHandler; import de.apps4ics.mountainnavigation.handlers.HikeHandler; @@ -291,7 +292,8 @@ if(!name.equals("")) { hikeHandler.stopRecording(); view.setText(hikeEntries[position]); - long hikeId = poiHandler.addPoi(new Hike(0, hikeHandler.getLength(), hikeHandler.getTime(), 0, name, "You", System.currentTimeMillis(), 0)); + long time = System.currentTimeMillis(); + long hikeId = poiHandler.addPoi(new Hike(0, hikeHandler.getLength(), hikeHandler.getTime(), (int) (time % 3), name, "You", time, 0)); for(HikePoint hp : hikePoints) { poiHandler.addGp(new DbGeoPoint(hp.getLocation(), System.currentTimeMillis(), hikeId, Types.HIKE)); } @@ -344,11 +346,26 @@ } } else if(key.equals(getString(R.string.hike_title_show_key))) { //TODO Open dialog with all hikes around current position (or enter position) - ArrayList hikes = (ArrayList) dbHandler.getPoiByType(Types.HIKE); - for(Poi p : hikes) { - Hike h = (Hike) p; - Log.d(TAG, h.getName() + " from " + h.getAuthor() + " with length of " + h.getLength() + "m and total time of " + h.getTime() + "s."); + ArrayList pois = (ArrayList) dbHandler.getPoiByType(Types.HIKE); + List> points = new ArrayList<>(); + ArrayList hikes = new ArrayList<>(); + int i = 0; + for(Poi p : pois) { + Hike hike = (Hike) p; + points.add(dbHandler.getGeoPointsForPoi(hike.getId(), hike.getType())); + hikes.add(hike); } + AlertDialog.Builder showHikesBuilder = new AlertDialog.Builder(MainActivity.this); + showHikesBuilder + .setAdapter(new HikeListAdapter(MainActivity.this, hikes, points), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Toaster("Clicked element " + which, false); + } + }) + .setTitle("Hikes around you"); + AlertDialog showHikesDialog = showHikesBuilder.create(); + showHikesDialog.show(); } } }); @@ -632,7 +649,9 @@ } public static void addPoiToMap(Poi poi) { - DbGeoPoint dbGeoPoint = dbHandler.getGeoPoint(poi.getId(), poi.getType()); + ArrayList dbGeoPoints = (ArrayList) dbHandler.getGeoPointsForPoi(poi.getId(), poi.getType()); + if(dbGeoPoints == null || dbGeoPoints.size() == 0) return; + DbGeoPoint dbGeoPoint = dbGeoPoints.get(0); if(dbGeoPoint == null) return; GeoPoint gp = new GeoPoint(dbGeoPoint.getLat(), dbGeoPoint.getLon(), dbGeoPoint.getAlt()); Marker marker = new Marker(mapView); diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/adapters/HikeListAdapter.java b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/HikeListAdapter.java new file mode 100644 index 0000000..1270e8c --- /dev/null +++ b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/HikeListAdapter.java @@ -0,0 +1,65 @@ +/** + * This file is part of MountainNavigation. + * + * MountainNavigation is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * MountainNavigation is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MountainNavigation. If not, see . + * + * @copyright Copyright (c) 2016 Vinzenz Rosenkanz + * + * @author Vinzenz Rosenkranz + */ + +package de.apps4ics.mountainnavigation.adapters; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import java.util.List; +import java.util.Locale; + +import de.apps4ics.mountainnavigation.MainActivity; +import de.apps4ics.mountainnavigation.R; +import de.apps4ics.mountainnavigation.pois.DbGeoPoint; +import de.apps4ics.mountainnavigation.pois.Hike; + +public class HikeListAdapter extends ArrayAdapter { + private Activity context; + private List hikes; + private List> points; + + public HikeListAdapter(Activity context, List hikes, List> points) { + super(context, R.layout.hike_list, new String[hikes.size()]); + this.context = context; + this.hikes = hikes; + this.points = points; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + LayoutInflater inflater = context.getLayoutInflater(); + View rowView = inflater.inflate(R.layout.hike_list, null, true); + TextView titleView = (TextView) rowView.findViewById(R.id.hike_list_item_title); + TextView lengthView = (TextView) rowView.findViewById(R.id.hike_list_item_length); + TextView timeView = (TextView) rowView.findViewById(R.id.hike_list_item_time); + TextView difficultyView = (TextView) rowView.findViewById(R.id.hike_list_item_difficulty); + titleView.setText(hikes.get(position).getName() + " (" + points.get(position).size() + ")"); + lengthView.setText(String.format(Locale.getDefault(), "Length: %.02fm", hikes.get(position).getLength())); + timeView.setText(String.format(Locale.getDefault(), "Time: %ds", hikes.get(position).getTime())); + difficultyView.setText(MainActivity.getRes().getStringArray(R.array.hike_difficulties)[hikes.get(position).getDifficulty()]); + return rowView; + } +} diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java index 286e59b..8966946 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java @@ -572,7 +572,8 @@ return getHutFromCursor(cursor); } - public DbGeoPoint getGeoPoint(long poiId, int poiType) { + public List getGeoPointsForPoi(long poiId, int poiType) { + List points = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_GP, null, @@ -582,9 +583,12 @@ null, null); if(cursor != null && cursor.moveToFirst()) { - return getGeoPointFromCursor(cursor); + do { + points.add(getGeoPointFromCursor(cursor)); + } while(cursor.moveToNext()); + } - return null; + return points; } public Poi getPoi(long id, int type){ diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java index 3de0577..059930e 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java @@ -354,7 +354,7 @@ List poiMarker = dbHandler.getAllPois(); for(Poi p : poiMarker){ - DbGeoPoint dbgp = dbHandler.getGeoPoint(p.getId(), p.getType()); + DbGeoPoint dbgp = dbHandler.getGeoPointsForPoi(p.getId(), p.getType()).get(0); GeoPoint gp = new GeoPoint(dbgp.getLat(), dbgp.getLon(), dbgp.getAlt()); OverlayItem oI = new OverlayItem(String.valueOf(dbgp.getTime()), String.valueOf(p.getId()), String.valueOf(p.getType()), gp); Drawable[] iconLayer = new Drawable[2]; @@ -431,7 +431,7 @@ List poiMarker = dbHandler.getAllPois(); for(Poi p : poiMarker){ - DbGeoPoint dbgp = dbHandler.getGeoPoint(p.getId(), p.getType()); + DbGeoPoint dbgp = dbHandler.getGeoPointsForPoi(p.getId(), p.getType()).get(0); GeoPoint gp = new GeoPoint(dbgp.getLat(), dbgp.getLon(), dbgp.getAlt()); OverlayItem oI = new OverlayItem(String.valueOf(dbgp.getTime()), String.valueOf(p.getId()), String.valueOf(p.getType()), gp); Drawable[] iconLayer = new Drawable[2]; @@ -528,7 +528,7 @@ List overlayItemList = new ArrayList<>(); List poiMarker = dbHandler.getAllPois(); for(Poi p : poiMarker){ - DbGeoPoint dbgp = dbHandler.getGeoPoint(p.getId(), p.getType()); + DbGeoPoint dbgp = dbHandler.getGeoPointsForPoi(p.getId(), p.getType()).get(0); GeoPoint gp = new GeoPoint(dbgp.getLat(), dbgp.getLon(), dbgp.getAlt()); OverlayItem oI = new OverlayItem(String.valueOf(dbgp.getTime()), String.valueOf(p.getId()), String.valueOf(p.getType()), gp); Drawable[] iconLayer = new Drawable[2]; @@ -655,7 +655,7 @@ dbgp = new DbGeoPoint(exifLatLon[0], exifLatLon[1], alt, time, imgId, Types.PIC); } else { - dbgp = dbHandler.getGeoPoint(id, type); + dbgp = dbHandler.getGeoPointsForPoi(id, type).get(0); dbgp.set_poiId(imgId); dbgp.set_poiType(Types.PIC); } @@ -750,7 +750,8 @@ List tempPoiList = params[0]; //This is only one list for(int i=0; i dbgps = (ArrayList) MainActivity.getDbHandler().getGeoPointsForPoi(poi.getId(), poi.getType()); + DbGeoPoint dbgp = dbgps.get(0); GeoPoint gp = new GeoPoint(dbgp.getLat(), dbgp.getLon(), dbgp.getAlt()); String titleText = title; String snippetText = res.getString(R.string.osm_marker_snippet, gp.getLatitude(), gp.getLongitude(), gp.getAltitude(), MainActivity.df_full.format(new Date(dbgp.getTime()))); @@ -761,7 +762,7 @@ break; case Types.PATH: { Path p = (Path) poi; - DbGeoPoint pathEnd = MainActivity.getDbHandler().getGeoPoint(p.getId(), p.getType()); //TODO should return second result for path + DbGeoPoint pathEnd = dbgps.get(1); titleText += " (" + p.getLength() + ")"; snippetText += "\n"; snippetText += "Exposed: " + ((p.getExposed() == 1) ? "Yes!" : "No!"); diff --git a/app/src/main/res/layout/hike_list.xml b/app/src/main/res/layout/hike_list.xml new file mode 100644 index 0000000..66c8635 --- /dev/null +++ b/app/src/main/res/layout/hike_list.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 609637d..e6a0f04 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -154,6 +154,11 @@ WiFi Lift + + Easy + Medium + Hard + Download Settings