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