FM: Fix the issue with save the recording file
If open file explorer during FM recording, audio file
will be added to video database.FM will fail to insert
into audio database when stop recording.
If the recorded file already exists with same name,
remove the same and insert the new recorded file.
CRs-Fixed: 696466
Change-Id: I644340658e652a7da9a4d4c05ad605b3000e2ef1
diff --git a/FMRecord/src/com/codeaurora/fmrecording/FMRecordingService.java b/FMRecord/src/com/codeaurora/fmrecording/FMRecordingService.java
index da55d8c..e101584 100644
--- a/FMRecord/src/com/codeaurora/fmrecording/FMRecordingService.java
+++ b/FMRecord/src/com/codeaurora/fmrecording/FMRecordingService.java
@@ -372,6 +372,7 @@
Log.d(TAG, "In addToMediaDB");
Resources res = getResources();
ContentValues cv = new ContentValues();
+ int audioId = -1;
long current = System.currentTimeMillis();
long modDate = file.lastModified();
long recordDuration = stopTimerMs - startTimerMs;
@@ -393,6 +394,11 @@
res.getString(R.string.audio_db_artist_name));
cv.put(MediaStore.Audio.Media.ALBUM,
res.getString(R.string.audio_db_album_name));
+ audioId = getFileIdInVideoDB(file);
+ if (audioId != -1) {//remove the record if it is already added into video table.
+ removeRecordInVideoDB(audioId);
+ Log.d(TAG, "Remove audio record " + audioId + " in video database");
+ }
Log.d(TAG, "Inserting audio record: " + cv.toString());
ContentResolver resolver = getContentResolver();
Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
@@ -405,7 +411,7 @@
if (getPlaylistId(res) == -1) {
createPlaylist(res, resolver);
}
- int audioId = Integer.valueOf(result.getLastPathSegment());
+ audioId = Integer.valueOf(result.getLastPathSegment());
addToPlaylist(resolver, audioId, getPlaylistId(res));
// Notify those applications such as Music listening to the
@@ -414,6 +420,36 @@
return result;
}
+ private int getFileIdInVideoDB(File file) {
+ int id = -1;
+ final String where = MediaStore.Video.Media.DATA + "=?";
+ final String[] args = new String[] { file.getAbsolutePath() };
+ final String[] ids = new String[] { MediaStore.Video.Media._ID };
+ Uri base = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
+
+ Cursor cursor = query(base, ids, where, args, null);
+ if (cursor == null) {
+ Log.v(TAG, "Data query returns null");
+ } else {
+ if (cursor.moveToNext() != false) {
+ id = cursor.getInt(0);
+ cursor.close();
+ }
+ }
+ return id;
+ }
+
+ private void removeRecordInVideoDB(int id) {
+ final String where = MediaStore.Video.Media._ID + "=" + id;
+ Uri base = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
+ ContentValues cv = new ContentValues();
+ ContentResolver resolver = getContentResolver();
+
+ cv.put(MediaStore.Video.Media.DATA, "null");
+ resolver.update(base, cv, where, null);
+ resolver.delete(base, where, null);
+ }
+
private int getPlaylistId(Resources res) {
Uri uri = MediaStore.Audio.Playlists.getContentUri("external");
final String[] ids = new String[] { MediaStore.Audio.Playlists._ID };