/* * Geopaparazzi - Digital field mapping on Android based devices * Copyright (C) 2016 HydroloGIS (www.hydrologis.com) * * This program 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package eu.geopaparazzi.core.ui.dialogs; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import java.io.File; import java.io.IOException; import java.util.List; import eu.geopaparazzi.library.style.ColorUtilities; import eu.geopaparazzi.library.database.GPLog; import eu.geopaparazzi.library.gpx.GpxItem; import eu.geopaparazzi.library.gpx.parser.GpxParser; import eu.geopaparazzi.library.gpx.parser.WayPoint; import eu.geopaparazzi.library.util.FileUtilities; import eu.geopaparazzi.library.util.StringAsyncTask; import eu.geopaparazzi.core.R; import eu.geopaparazzi.core.database.DaoGpsLog; /** * Dialog for gpx files import. * * @author Andrea Antonello */ public class GpxImportDialogFragment extends DialogFragment { public static final String GPX_PATH = "gpxPath"; private ProgressBar progressBar; private String gpxPath; private boolean isInterrupted = false; private AlertDialog alertDialog; private Button positiveButton; private StringAsyncTask task; public static GpxImportDialogFragment newInstance(String gpxPath) { GpxImportDialogFragment f = new GpxImportDialogFragment(); Bundle args = new Bundle(); args.putString(GPX_PATH, gpxPath); f.setArguments(args); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gpxPath = getArguments().getString(GPX_PATH); } @Override public Dialog onCreateDialog(Bundle bundle) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); View gpsinfoDialogView = getActivity().getLayoutInflater().inflate( R.layout.fragment_dialog_progressbar, null); builder.setView(gpsinfoDialogView); builder.setMessage(R.string.gpx_import_processing); progressBar = (ProgressBar) gpsinfoDialogView.findViewById( R.id.progressBar); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { isInterrupted = true; } } ); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { } } ); progressBar.setIndeterminate(true); alertDialog = builder.create(); return alertDialog; } private void startImport() { task = new StringAsyncTask(getActivity()) { protected String doBackgroundWork() { try { File file = new File(gpxPath); String fileName = FileUtilities.getNameWithoutExtention(file); GpxParser parser = new GpxParser(gpxPath); if (parser.parse()) { List<WayPoint> wayPoints = parser.getWayPoints(); if (wayPoints.size() > 0) { GpxItem item = new GpxItem(); item.setName(fileName); item.setWidth("2"); //$NON-NLS-1$ item.setVisible(false); item.setColor(ColorUtilities.BLUE.getHex()); //$NON-NLS-1$ item.setData(wayPoints); DaoGpsLog.importGpxToMap(item); } List<GpxParser.TrackSegment> tracks = parser.getTracks(); if (tracks.size() > 0) { for (GpxParser.TrackSegment trackSegment : tracks) { if (isInterrupted) break; String tName = trackSegment.getName(); if (tName == null) { tName = ""; //$NON-NLS-1$ } else { tName = " - " + tName; //$NON-NLS-1$ } String name = fileName + tName; GpxItem item = new GpxItem(); item.setName(name); item.setWidth("2"); //$NON-NLS-1$ item.setVisible(false); item.setColor("red"); //$NON-NLS-1$ item.setData(trackSegment); DaoGpsLog.importGpxToMap(item); } } List<GpxParser.Route> routes = parser.getRoutes(); if (routes.size() > 0) { for (GpxParser.Route route : routes) { if (isInterrupted) break; String rName = route.getName(); if (rName == null) { rName = ""; //$NON-NLS-1$ } else { rName = " - " + rName; //$NON-NLS-1$ } String name = fileName + rName; GpxItem item = new GpxItem(); item.setName(name); item.setWidth("2"); //$NON-NLS-1$ item.setVisible(false); item.setColor(ColorUtilities.GREEN.getHex()); //$NON-NLS-1$ item.setData(route); DaoGpsLog.importGpxToMap(item); } } } else { if (GPLog.LOG) GPLog.addLogEntry(this, "ERROR"); //$NON-NLS-1$ } } catch (IOException e) { GPLog.error(this, e.getLocalizedMessage(), e); return "ERROR: " + e.getLocalizedMessage(); } return ""; } protected void doUiPostWork(String response) { progressBar.setVisibility(View.GONE); if (response.length() != 0) { alertDialog.setMessage(response); } else { alertDialog.setMessage(getString(R.string.gpx_file_imported)); positiveButton.setEnabled(true); } } }; task.execute(); } @Override public void onDestroy() { if (task != null) task.dispose(); super.onDestroy(); } public void onStart() { super.onStart(); AlertDialog d = (AlertDialog) getDialog(); if (d != null) { positiveButton = d.getButton(Dialog.BUTTON_POSITIVE); positiveButton.setEnabled(false); } startImport(); } }