Skip to content

Commit 6086451

Browse files
committed
receiver refactoring
1 parent 0c2c63b commit 6086451

File tree

1 file changed

+86
-29
lines changed

1 file changed

+86
-29
lines changed

callrecord/src/main/java/com/aykuttasil/callrecord/receiver/CallRecordReceiver.java

Lines changed: 86 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,50 @@ private void startRecord(Context context, String seed, String phoneNumber) {
7979
return;
8080
}
8181

82+
if (isRecordStarted) {
83+
try {
84+
recorder.stop(); // stop the recording
85+
} catch (RuntimeException e) {
86+
// RuntimeException is thrown when stop() is called immediately after start().
87+
// In this case the output file is not properly constructed ans should be deleted.
88+
Log.d(TAG, "RuntimeException: stop() is called immediately after start()");
89+
//noinspection ResultOfMethodCallIgnored
90+
audiofile.delete();
91+
}
92+
releaseMediaRecorder();
93+
isRecordStarted = false;
94+
} else {
95+
if (prepareAudioRecorder(context, seed, phoneNumber)) {
96+
recorder.start();
97+
isRecordStarted = true;
98+
onRecordingStarted(context, callRecord, audiofile);
99+
Log.i(TAG, "record start");
100+
} else {
101+
releaseMediaRecorder();
102+
}
103+
//new MediaPrepareTask().execute(null, null, null);
104+
}
105+
} catch (IllegalStateException e) {
106+
e.printStackTrace();
107+
}
108+
}
109+
110+
private void stopRecord(Context context) {
111+
try {
112+
if (recorder != null && isRecordStarted) {
113+
releaseMediaRecorder();
114+
isRecordStarted = false;
115+
onRecordingFinished(context, callRecord, audiofile);
116+
Log.i(TAG, "record stop");
117+
}
118+
} catch (Exception e) {
119+
releaseMediaRecorder();
120+
e.printStackTrace();
121+
}
122+
}
123+
124+
private boolean prepareAudioRecorder(Context context, String seed, String phoneNumber) {
125+
try {
82126
String file_name = PrefsHelper.readPrefString(context, CallRecord.PREF_FILE_NAME);
83127
String dir_path = PrefsHelper.readPrefString(context, CallRecord.PREF_DIR_PATH);
84128
String dir_name = PrefsHelper.readPrefString(context, CallRecord.PREF_DIR_NAME);
@@ -94,7 +138,6 @@ private void startRecord(Context context, String seed, String phoneNumber) {
94138
sampleDir.mkdirs();
95139
}
96140

97-
98141
StringBuilder fileNameBuilder = new StringBuilder();
99142
fileNameBuilder.append(file_name);
100143
fileNameBuilder.append("_");
@@ -138,18 +181,11 @@ private void startRecord(Context context, String seed, String phoneNumber) {
138181

139182
audiofile = File.createTempFile(file_name, suffix, sampleDir);
140183

141-
if (recorder != null) {
142-
recorder.stop();
143-
recorder.release();
144-
recorder = null;
145-
}
146-
147184
recorder = new MediaRecorder();
148185
recorder.setAudioSource(audio_source);
149186
recorder.setOutputFormat(output_format);
150187
recorder.setAudioEncoder(audio_encoder);
151188
recorder.setOutputFile(audiofile.getAbsolutePath());
152-
153189
recorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
154190
@Override
155191
public void onError(MediaRecorder mediaRecorder, int i, int i1) {
@@ -158,34 +194,55 @@ public void onError(MediaRecorder mediaRecorder, int i, int i1) {
158194
}
159195
});
160196

161-
recorder.prepare();
162-
recorder.start();
163-
164-
isRecordStarted = true;
165-
onRecordingStarted(context, callRecord, audiofile);
166-
167-
Log.i(TAG, "record start");
168-
} catch (IllegalStateException | IOException e) {
197+
try {
198+
recorder.prepare();
199+
} catch (IllegalStateException e) {
200+
Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
201+
releaseMediaRecorder();
202+
return false;
203+
} catch (IOException e) {
204+
Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
205+
releaseMediaRecorder();
206+
return false;
207+
}
208+
return true;
209+
} catch (Exception e) {
169210
e.printStackTrace();
211+
return false;
170212
}
171213
}
172214

173-
private void stopRecord(Context context) {
174-
try {
175-
if (recorder != null && isRecordStarted) {
176-
recorder.stop();
177-
recorder.reset();
178-
recorder.release();
179-
recorder = null;
180-
181-
isRecordStarted = false;
182-
onRecordingFinished(context, callRecord, audiofile);
215+
private void releaseMediaRecorder() {
216+
if (recorder != null) {
217+
recorder.reset();
218+
recorder.release();
219+
recorder = null;
220+
}
221+
}
183222

184-
Log.i(TAG, "record stop");
223+
/*
224+
class MediaPrepareTask extends AsyncTask<Void, Void, Boolean> {
225+
@Override
226+
protected Boolean doInBackground(Void... voids) {
227+
if (prepareAudioRecorder(, "", "")) {
228+
// Camera is available and unlocked, MediaRecorder is prepared,
229+
// now you can start recording
230+
recorder.start();
231+
Log.i(TAG, "record start");
232+
} else {
233+
// prepare didn't work, release the camera
234+
releaseMediaRecorder();
235+
return false;
185236
}
186-
} catch (Exception e) {
187-
e.printStackTrace();
237+
return true;
238+
}
239+
240+
@Override
241+
protected void onPostExecute(Boolean result) {
242+
isRecordStarted = true;
243+
onRecordingStarted(, callRecord, audiofile);
188244
}
189245
}
246+
*/
190247

191248
}

0 commit comments

Comments
 (0)