0
0
mirror of https://github.com/ankidroid/Anki-Android.git synced 2024-09-20 20:03:05 +02:00

Merge pull request #4270 from hssm/audio-record-fixes

Fix audio recording not saving and cases where recorder stops
This commit is contained in:
Tim Rae 2016-05-08 02:47:46 +09:00
commit 81c1a836f0
6 changed files with 39 additions and 12 deletions

View File

@ -195,6 +195,19 @@ public class AudioView extends LinearLayout {
if (mRecord != null) {
mRecord.update();
}
if (mRecorder != null && mStatus == Status.RECORDING) {
mRecorder.stop();
mStatus = Status.IDLE;
if (mOnRecordingFinishEventListener != null) {
mOnRecordingFinishEventListener.onRecordingFinish(AudioView.this);
}
}
}
public void notifyReleaseRecorder() {
if (mRecorder != null) {
mRecorder.release();
}
}
protected class PlayPauseButton extends ImageButton {
@ -396,13 +409,7 @@ public class AudioView extends LinearLayout {
case RECORDING:
setImageResource(mResRecordStopImage);
mRecorder.stop();
mStatus = Status.IDLE; // Back to idle, so if play
// pressed, initialize player
notifyStopRecord();
if (mOnRecordingFinishEventListener != null) {
mOnRecordingFinishEventListener.onRecordingFinish(AudioView.this);
}
break;
default:

View File

@ -162,18 +162,21 @@ public class MultimediaEditFieldActivity extends AnkiActivity
switch (item.getItemId()) {
case R.id.multimedia_edit_field_to_text:
Timber.i("To text field button pressed");
mFieldController.onFocusLost();
toTextField();
supportInvalidateOptionsMenu();
return true;
case R.id.multimedia_edit_field_to_image:
Timber.i("To image button pressed");
mFieldController.onFocusLost();
toImageField();
supportInvalidateOptionsMenu();
return true;
case R.id.multimedia_edit_field_to_audio:
Timber.i("To audio button pressed");
mFieldController.onFocusLost();
toAudioField();
supportInvalidateOptionsMenu();
return true;

View File

@ -44,6 +44,7 @@ public class BasicAudioFieldController extends FieldControllerBase implements IF
*/
private String tempAudioPath;
private String origAudioPath;
private AudioView mAudioView;
@Override
@ -74,10 +75,9 @@ public class BasicAudioFieldController extends FieldControllerBase implements IF
}
}
AudioView audioView = AudioView.createRecorderInstance(mActivity, R.drawable.av_play, R.drawable.av_pause,
mAudioView = AudioView.createRecorderInstance(mActivity, R.drawable.av_play, R.drawable.av_pause,
R.drawable.av_stop, R.drawable.av_rec, R.drawable.av_rec_stop, tempAudioPath);
audioView.setOnRecordingFinishEventListener(new AudioView.OnRecordingFinishEventListener() {
mAudioView.setOnRecordingFinishEventListener(new AudioView.OnRecordingFinishEventListener() {
@Override
public void onRecordingFinish(View v) {
// currentFilePath.setText("Recording done, you can preview it. Hit save after finish");
@ -85,22 +85,27 @@ public class BasicAudioFieldController extends FieldControllerBase implements IF
mField.setHasTemporaryMedia(true);
}
});
layout.addView(audioView, LinearLayout.LayoutParams.FILL_PARENT);
layout.addView(mAudioView, LinearLayout.LayoutParams.FILL_PARENT);
}
@Override
public void onDone() {
mAudioView.notifyStopRecord();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
@Override
public void onFocusLost() {
mAudioView.notifyReleaseRecorder();
}
@Override
public void onDestroy() {
mAudioView.notifyReleaseRecorder();
}
}

View File

@ -178,6 +178,11 @@ public class BasicImageFieldController extends FieldControllerBase implements IF
setPreviewImage(mField.getImagePath(), getMaxImageSize());
}
@Override
public void onFocusLost() {
}
@Override
public void onDone() {

View File

@ -317,6 +317,11 @@ public class BasicTextFieldController extends FieldControllerBase implements IFi
}
}
@Override
public void onFocusLost() {
}
/**
* @param context

View File

@ -62,6 +62,8 @@ public interface IFieldController {
// called back on result.
void onActivityResult(int requestCode, int resultCode, Intent data);
// Called when the controller has stopped showing the field in favor of another one
void onFocusLost();
// Is called to apply in the field new data from UI.
void onDone();