summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDiogo Ferreira <defer@cyngn.com>2016-05-10 14:54:37 +0100
committerDiogo Ferreira <defer@cyngn.com>2016-05-10 14:54:37 +0100
commit83c79c084e724accad065b4bed8868a3a72c49e2 (patch)
tree8d58eca12a3a87b54e3815e130d06c424d4efabb
parent8534069d0ec5cc022f18ff53d7913351d9216d3e (diff)
downloadandroid_packages_apps_FMRadio-83c79c084e724accad065b4bed8868a3a72c49e2.tar.gz
android_packages_apps_FMRadio-83c79c084e724accad065b4bed8868a3a72c49e2.tar.bz2
android_packages_apps_FMRadio-83c79c084e724accad065b4bed8868a3a72c49e2.zip
tracks: Check track states before transitioning states
Prevents sporadic crashes when the user plugs/unplugs the headset rapidly. These were caused by performing track operations such as start, stop and record before checking whether the tracks had been stopped before. Change-Id: I54b5ba102ffbed4c453ee5f15533467e5f4771fd Ticket: CYNGNOS-2775
-rw-r--r--src/com/android/fmradio/FmService.java11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/com/android/fmradio/FmService.java b/src/com/android/fmradio/FmService.java
index b3d7715..973dceb 100644
--- a/src/com/android/fmradio/FmService.java
+++ b/src/com/android/fmradio/FmService.java
@@ -396,7 +396,7 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
mAudioRecord.release();
mAudioRecord = null;
}
- if (mAudioTrack != null) {
+ if (mAudioTrack != null && mAudioTrack.getState() == AudioTrack.STATE_INITIALIZED) {
mAudioTrack.stop();
mAudioTrack.release();
mAudioTrack = null;
@@ -448,7 +448,8 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
}
private void startAudioTrack() {
- if (mAudioTrack.getPlayState() == AudioTrack.PLAYSTATE_STOPPED) {
+ if (mAudioTrack.getState() == AudioTrack.STATE_INITIALIZED
+ && mAudioTrack.getPlayState() == AudioTrack.PLAYSTATE_STOPPED) {
ArrayList<AudioPatch> patches = new ArrayList<AudioPatch>();
mAudioManager.listAudioPatches(patches);
mAudioTrack.play();
@@ -477,11 +478,13 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
// Speaker mode or BT a2dp mode will come here and keep reading and writing.
// If we want FM sound output from speaker or BT a2dp, we must record data
// to AudioRecrd and write data to AudioTrack.
- if (mAudioRecord.getRecordingState() == AudioRecord.RECORDSTATE_STOPPED) {
+ if (mAudioRecord.getRecordingState() == AudioRecord.RECORDSTATE_STOPPED
+ && mAudioRecord.getState() == AudioRecord.STATE_INITIALIZED) {
mAudioRecord.startRecording();
}
- if (mAudioTrack.getPlayState() == AudioTrack.PLAYSTATE_STOPPED) {
+ if (mAudioTrack.getPlayState() == AudioTrack.PLAYSTATE_STOPPED
+ && mAudioTrack.getState() == AudioTrack.STATE_INITIALIZED) {
mAudioTrack.play();
}
int size = mAudioRecord.read(buffer, 0, RECORD_BUF_SIZE);