diff --git a/app/src/main/java/org/osmtracker/activity/OpenStreetMapUpload.java b/app/src/main/java/org/osmtracker/activity/OpenStreetMapUpload.java index 3ef18ea50..0b42fc8d2 100644 --- a/app/src/main/java/org/osmtracker/activity/OpenStreetMapUpload.java +++ b/app/src/main/java/org/osmtracker/activity/OpenStreetMapUpload.java @@ -50,7 +50,9 @@ public class OpenStreetMapUpload extends TrackDetailEditor { private static final CommonsHttpOAuthConsumer oAuthConsumer = new CommonsHttpOAuthConsumer( OpenStreetMapConstants.OAuth.CONSUMER_KEY, OpenStreetMapConstants.OAuth.CONSUMER_SECRET); - + private ExportToTempFileTask exportToTempFileTask; + private UploadToOpenStreetMapTask uploadToOpenStreetMapTask; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -126,6 +128,16 @@ protected void onResume() { new RetrieveAccessTokenTask(this, oAuthProvider, oAuthConsumer, verifier).execute(); } } + @Override + protected void onPause(){ + super.onPause(); + if(exportToTempFileTask != null){ + exportToTempFileTask.parentNotVisible(); + } + if(uploadToOpenStreetMapTask != null){ + uploadToOpenStreetMapTask.parentNotVisible(); + } + } /** * Either starts uploading directly if we are authenticated against OpenStreetMap, @@ -150,15 +162,17 @@ private void startUpload() { * Exports track on disk then upload to OSM. */ public void uploadToOsm() { - new ExportToTempFileTask(this, trackId) { + exportToTempFileTask = new ExportToTempFileTask(this, trackId) { @Override protected void executionCompleted() { - new UploadToOpenStreetMapTask(OpenStreetMapUpload.this, trackId, oAuthConsumer, this.getTmpFile(), + uploadToOpenStreetMapTask = new UploadToOpenStreetMapTask(OpenStreetMapUpload.this, trackId, oAuthConsumer, this.getTmpFile(), this.getFilename(), etDescription.getText().toString(), etTags.getText().toString(), - Track.OSMVisibility.fromPosition(OpenStreetMapUpload.this.spVisibility.getSelectedItemPosition())) - .execute(); + Track.OSMVisibility.fromPosition(OpenStreetMapUpload.this.spVisibility.getSelectedItemPosition())); + uploadToOpenStreetMapTask + .execute(); } - }.execute(); + }; + exportToTempFileTask.execute(); } } diff --git a/app/src/main/java/org/osmtracker/activity/TrackDetail.java b/app/src/main/java/org/osmtracker/activity/TrackDetail.java index 604e20411..24c0669d5 100644 --- a/app/src/main/java/org/osmtracker/activity/TrackDetail.java +++ b/app/src/main/java/org/osmtracker/activity/TrackDetail.java @@ -70,7 +70,8 @@ public class TrackDetail extends TrackDetailEditor implements AdapterView.OnItem * List with track info */ private ListView lv; - + private ExportToStorageTask exportToStorageTask; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState, R.layout.trackdetail, getIntent().getExtras().getLong(TrackContentProvider.Schema.COL_TRACK_ID)); @@ -197,6 +198,13 @@ protected void onResume() { // Click on Waypoint count to see the track's WaypointList lv.setOnItemClickListener(this); } + @Override + public void onPause() { + super.onPause(); + if(exportToStorageTask != null) { + exportToStorageTask.parentNotVisible(); + } + } @Override public boolean onCreateOptionsMenu(Menu menu) { @@ -230,7 +238,8 @@ public boolean onOptionsItemSelected(MenuItem item) { startActivity(i); break; case R.id.trackdetail_menu_export: - new ExportToStorageTask(this, trackId).execute(); + exportToStorageTask = new ExportToStorageTask(this, trackId); + exportToStorageTask.execute(); // Pick last list item (Exported date) and update it SimpleAdapter adapter = ((SimpleAdapter) lv.getAdapter()); @SuppressWarnings("unchecked") diff --git a/app/src/main/java/org/osmtracker/activity/TrackManager.java b/app/src/main/java/org/osmtracker/activity/TrackManager.java index a0f13de75..53020001b 100644 --- a/app/src/main/java/org/osmtracker/activity/TrackManager.java +++ b/app/src/main/java/org/osmtracker/activity/TrackManager.java @@ -57,6 +57,7 @@ public class TrackManager extends ListActivity { /** The previous item visible, or -1; for scrolling back to its position in {@link #onResume()} */ private int prevItemVisible = -1; + private ExportToStorageTask exportToStorageTask; @Override protected void onCreate(Bundle savedInstanceState) { @@ -116,6 +117,9 @@ protected void onResume() { @Override protected void onPause() { + if(exportToStorageTask!= null) { + exportToStorageTask.parentNotVisible(); + } // Remember position in listview (before any adapter change) prevItemVisible = getListView().getFirstVisiblePosition(); @@ -242,7 +246,8 @@ public void onClick(DialogInterface dialog, int which) { ids[i++] = cursor.getLong(idCol); } while (cursor.moveToNext()); - new ExportToStorageTask(TrackManager.this, ids).execute(); + exportToStorageTask = new ExportToStorageTask(TrackManager.this, ids); + exportToStorageTask.execute(); } cursor.close(); } @@ -328,8 +333,9 @@ public void onClick(DialogInterface dialog, int which) { }).create().show(); break; - case R.id.trackmgr_contextmenu_export: - new ExportToStorageTask(this, info.id).execute(); + case R.id.trackmgr_contextmenu_export: + exportToStorageTask = new ExportToStorageTask(this, info.id); + exportToStorageTask.execute(); break; case R.id.trackmgr_contextmenu_osm_upload: i = new Intent(this, OpenStreetMapUpload.class); diff --git a/app/src/main/java/org/osmtracker/gpx/ExportTrackTask.java b/app/src/main/java/org/osmtracker/gpx/ExportTrackTask.java index 0628a6b2e..978969f40 100644 --- a/app/src/main/java/org/osmtracker/gpx/ExportTrackTask.java +++ b/app/src/main/java/org/osmtracker/gpx/ExportTrackTask.java @@ -143,7 +143,11 @@ protected Boolean doInBackground(Void... params) { } return true; } - + public void parentNotVisible(){ + if(getStatus() == Status.FINISHED || getStatus() == Status.RUNNING) { + dialog.dismiss(); + } + } @Override protected void onProgressUpdate(Long... values) { if (values.length == 1) { @@ -152,7 +156,9 @@ protected void onProgressUpdate(Long... values) { } else if (values.length == 3) { // To initialise the dialog, 3 values are passed to onProgressUpdate() // trackId, number of track points, number of waypoints - dialog.dismiss(); + if(dialog.isShowing()) { + dialog.dismiss(); + } dialog = new ProgressDialog(context); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); @@ -170,7 +176,9 @@ protected void onProgressUpdate(Long... values) { @Override protected void onPostExecute(Boolean success) { - dialog.dismiss(); + if(dialog.isShowing()) { + dialog.dismiss(); + } if (!success) { new AlertDialog.Builder(context) .setTitle(android.R.string.dialog_alert_title) @@ -181,7 +189,9 @@ protected void onPostExecute(Boolean success) { .setNeutralButton(android.R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); + if(((AlertDialog)dialog).isShowing()){ + dialog.dismiss(); + } } }) .show(); diff --git a/app/src/main/java/org/osmtracker/osm/UploadToOpenStreetMapTask.java b/app/src/main/java/org/osmtracker/osm/UploadToOpenStreetMapTask.java index be9e8d43b..a33dc0b96 100644 --- a/app/src/main/java/org/osmtracker/osm/UploadToOpenStreetMapTask.java +++ b/app/src/main/java/org/osmtracker/osm/UploadToOpenStreetMapTask.java @@ -159,14 +159,18 @@ public void run() { protected void onPostExecute(Void result) { switch (resultCode) { case -1: - dialog.dismiss(); + if(dialog.isShowing()) { + dialog.dismiss(); + } // Internal error, the request didn't start at all DialogUtils.showErrorDialog(activity, activity.getResources().getString(R.string.osm_upload_error) + ": " + errorMsg); break; case HttpStatus.SC_OK: - dialog.dismiss(); + if(dialog.isShowing()) { + dialog.dismiss(); + } // Success ! Update database and close activity DataHelper.setTrackUploadDate(trackId, System.currentTimeMillis(), activity.getContentResolver()); @@ -185,7 +189,9 @@ public void onClick(DialogInterface dialog, int which) { break; case HttpStatus.SC_UNAUTHORIZED: - dialog.dismiss(); + if(dialog.isShowing()) { + dialog.dismiss(); + } // Authorization issue. Provide a way to clear credentials new AlertDialog.Builder(activity) .setTitle(android.R.string.dialog_alert_title) @@ -195,7 +201,9 @@ public void onClick(DialogInterface dialog, int which) { .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); + if(((AlertDialog)dialog).isShowing()) { + dialog.dismiss(); + } } }) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @@ -205,8 +213,9 @@ public void onClick(DialogInterface dialog, int which) { editor.remove(OSMTracker.Preferences.KEY_OSM_OAUTH_TOKEN); editor.remove(OSMTracker.Preferences.KEY_OSM_OAUTH_SECRET); editor.commit(); - - dialog.dismiss(); + if(((AlertDialog)dialog).isShowing()) { + dialog.dismiss(); + } } }).create().show(); @@ -220,8 +229,9 @@ public void onClick(DialogInterface dialog, int which) { while ( (line = reader.readLine()) != null) { sb.append(line).append(System.getProperty("line.separator")); } - - dialog.dismiss(); + if(dialog.isShowing()) { + dialog.dismiss(); + } DialogUtils.showErrorDialog(activity, activity.getResources().getString(R.string.osm_upload_bad_response) @@ -256,4 +266,9 @@ protected Void doInBackground(Void... params) { return null; } + public void parentNotVisible(){ + if(getStatus() == Status.FINISHED || getStatus() == Status.RUNNING) { + dialog.dismiss(); + } + } }