diff --git a/app/src/main/java/net/osmtracker/activity/WaypointList.java b/app/src/main/java/net/osmtracker/activity/WaypointList.java
index f337e7c51..c928de0cb 100644
--- a/app/src/main/java/net/osmtracker/activity/WaypointList.java
+++ b/app/src/main/java/net/osmtracker/activity/WaypointList.java
@@ -2,10 +2,15 @@
import net.osmtracker.db.TrackContentProvider;
import net.osmtracker.db.WaypointListAdapter;
-
import android.app.ListActivity;
import android.database.Cursor;
+import android.media.MediaPlayer;
+import android.net.Uri;
+import android.view.View;
import android.widget.CursorAdapter;
+import android.widget.ListView;
+
+import java.io.File;
/**
* Activity that lists the previous waypoints tracked by the user.
@@ -26,6 +31,26 @@ protected void onResume() {
super.onResume();
}
+
+ @Override
+ protected void onListItemClick(ListView lv, View v, int pos, long id) {
+
+
+ WaypointListAdapter wpa = (WaypointListAdapter)getListAdapter();
+
+ if (wpa != null) {
+ String audioFile = getIntent().getExtras().getString(TrackContentProvider.Schema.COL_LINK);
+ if (audioFile!=null && audioFile.endsWith(".3gpp")) {
+ Uri u = Uri.fromFile(new File(audioFile));
+ MediaPlayer player = MediaPlayer.create(this, u);
+ if (player != null) {
+ player.setLooping(false);
+ player.start();
+ }
+ }
+ }
+
+ }
@Override
protected void onPause() {
diff --git a/app/src/main/java/net/osmtracker/view/VoiceRecDialog.java b/app/src/main/java/net/osmtracker/view/VoiceRecDialog.java
index 711ff0d1f..e3e2282ce 100644
--- a/app/src/main/java/net/osmtracker/view/VoiceRecDialog.java
+++ b/app/src/main/java/net/osmtracker/view/VoiceRecDialog.java
@@ -9,6 +9,7 @@
import net.osmtracker.db.DataHelper;
import net.osmtracker.db.TrackContentProvider.Schema;
+import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -88,6 +89,8 @@ public class VoiceRecDialog extends ProgressDialog implements OnInfoListener{
* This is needed to check if a key was pressed before the dialog was shown
*/
private long dialogStartTime = 0;
+
+ private static final int UNLIMITED_REC_LENGTH = 600; // 10 minutes max
public VoiceRecDialog(Context context, long trackId) {
super(context);
@@ -98,17 +101,18 @@ public VoiceRecDialog(Context context, long trackId) {
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
this.setTitle(context.getResources().getString(R.string.tracklogger_voicerec_title));
-
- this.setButton(context.getResources().getString(R.string.tracklogger_voicerec_stop), new DialogInterface.OnClickListener() {
+
+ this.setButton(DialogInterface.BUTTON_POSITIVE, context.getResources().getString(R.string.tracklogger_voicerec_stop), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- mediaRecorder.stop();
+ // redundant with the safeClose that is triggered when the dialog closes
+ // mediaRecorder.stop();
VoiceRecDialog.this.dismiss();
}
});
}
-
-
+
+
/**
* @link android.app.Dialog#onStart()
*/
@@ -119,18 +123,30 @@ public void onStart() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- if (!isRecording)
- recordingDuration = Integer.parseInt(
- preferences.getString(OSMTracker.Preferences.KEY_VOICEREC_DURATION,
- OSMTracker.Preferences.VAL_VOICEREC_DURATION));
+ if (!isRecording) {
+
+ String recLen = preferences.getString(OSMTracker.Preferences.KEY_VOICEREC_DURATION, OSMTracker.Preferences.VAL_VOICEREC_DURATION);
+
+ if (recLen.equals(context.getResources().getString(R.string.unlimited_time_to_recording_option))){
+
+ this.setMessage(null);
+ recordingDuration = UNLIMITED_REC_LENGTH;
+
+ }
+ else{
+
+ recordingDuration = Integer.parseInt(recLen);
+
+ this.setMessage(context.getResources().getString(R.string.tracklogger_voicerec_text)
+ .replace("{0}", recLen));
+ }
+
+ }
else {
+
if (recordingDuration <= 0)
recordingDuration = Integer.parseInt(OSMTracker.Preferences.VAL_VOICEREC_DURATION);
}
-
- this.setMessage(
- context.getResources().getString(R.string.tracklogger_voicerec_text)
- .replace("{0}", String.valueOf(recordingDuration)));
// we need to avoid screen orientation change during recording because this causes some strange behavior
try{
@@ -254,7 +270,9 @@ public void onInfo(MediaRecorder mr, int what, int extra) {
protected void onStop() {
Log.d(TAG, "onStop() called");
- safeClose(mediaRecorder, false);
+ // why was it set to false ? We definitely want the audio recorder to stop when the dialog disappears !
+ safeClose(mediaRecorder, true);
+ // This is weird to stop the "beeps" in such a hard way. TODO: let them finish and release their resources afterwards
safeClose(mediaPlayerStart);
safeClose(mediaPlayerStop);
@@ -354,6 +372,13 @@ private void safeClose(MediaRecorder mr, boolean stopIt) {
try {
if (stopIt) {
mr.stop();
+ if (mediaPlayerStop != null) {
+ // short "beep" when we stop to record
+ mediaPlayerStop.start();
+ // gives it a small amount of time for the beeps to run
+ // TODO: wait for the beep to finish, or for a timeout
+ Thread.sleep(200);
+ }
}
} catch (Exception e) {
Log.w(TAG, "Failed to stop media recorder",e);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 74cb3aaaa..727390e08 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -187,4 +187,6 @@
Github Repository valid
Github Repository invalid
+
+ Unlimited
diff --git a/app/src/main/res/values/values-preferences.xml b/app/src/main/res/values/values-preferences.xml
index ae34c3e4b..9af075853 100644
--- a/app/src/main/res/values/values-preferences.xml
+++ b/app/src/main/res/values/values-preferences.xml
@@ -14,6 +14,7 @@
+ - @string/unlimited_time_to_recording_option
- 2
- 3
- 4