Newer
Older
mountainnavigation / app / src / main / java / de / apps4ics / mountainnavigation / pois / AddPathDialog.java
/**
 * 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();
    }
}