/**
* 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 <http://www.gnu.org/licenses/>.
*
* @copyright Copyright (c) 2016 Vinzenz Rosenkanz <vinzenz.rosenkranz@gmail.com>
*
* @author Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
*/
package de.apps4ics.mountainnavigation.pois;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import org.osmdroid.views.overlay.Polyline;
//import org.osmdroid.bonuspack.overlays.Polyline;
import org.osmdroid.bonuspack.routing.Road;
import org.osmdroid.bonuspack.routing.RoadManager;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.overlay.OverlayItem;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import de.apps4ics.mountainnavigation.adapters.CheckboxImageAdapter;
import de.apps4ics.mountainnavigation.Features;
import de.apps4ics.mountainnavigation.MainActivity;
import de.apps4ics.mountainnavigation.R;
import de.apps4ics.mountainnavigation.handlers.PoiHandler;
import de.apps4ics.mountainnavigation.handlers.GetRoadFromOsm;
public class AddPathDialog extends DialogFragment {
private PoiHandler poiHandler;
public AddPathDialog() {
this.poiHandler = MainActivity.getPoiHandler();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final CheckboxImageAdapter adapter = new CheckboxImageAdapter(getActivity(), PoiHandler.getPathOptions(), PoiHandler.getPathDescs(), PoiHandler.getPathOptionImgs());
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.path_dialog_title)
.setPositiveButton(R.string.ok_button, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int[] options = adapter.getCheckedItems();
int exposed = 0;
int diffWet = 0;
int giddiness = 0;
int climbing = 0;
for (int i = 0; i < options.length; ++i) {
switch (options[i]) {
case 0:
options[i] = Features.PATH_EXPOSED;
exposed = 1;
break;
case 1:
options[i] = Features.PATH_DIFF_WET;
diffWet = 1;
break;
case 2:
options[i] = Features.PATH_GIDDINESS;
giddiness = 1;
break;
case 3:
options[i] = Features.PATH_CLIMBING;
climbing = 1;
break;
}
}
ArrayList<OverlayItem> pathMarkers = MainActivity.getPathMarkers();
if(pathMarkers.size() < 2){
Log.e(MainActivity.TAG, "One of the path markers in addPathDialog is null!");
}
ArrayList<GeoPoint> waypoints = new ArrayList<>();
long poiId = poiHandler.addPoi(new Path(0, 0, exposed, diffWet, giddiness, climbing));
for(int i=0; i<pathMarkers.size(); ++i){
GeoPoint gp = (GeoPoint) pathMarkers.get(i).getPoint();
waypoints.add(gp);
long time = 0;
String uid = pathMarkers.get(i).getUid();
if(uid != null && !uid.equals("")){
String timeStr = pathMarkers.get(i).getUid();
if(timeStr != null && !timeStr.equals("")) time = Long.parseLong(timeStr) / 1000;
}
poiHandler.addGp(new DbGeoPoint(gp.getLatitude(), gp.getLongitude(), gp.getAltitude(), time, poiId, Types.PATH));
}
try {
Road road = new GetRoadFromOsm().execute(waypoints.toArray(new GeoPoint[waypoints.size()])).get();
Polyline line = RoadManager.buildRoadOverlay(road);
MainActivity.getMapView().getOverlays().add(line);
MainActivity.getMapView().invalidate();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
MainActivity.setPathMarkers(new ArrayList<OverlayItem>());
}
})
.setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
return builder.create();
}
}