diff options
author | Diogo Ferreira <defer@cyngn.com> | 2016-05-10 14:54:37 +0100 |
---|---|---|
committer | Diogo Ferreira <defer@cyngn.com> | 2016-05-10 14:54:37 +0100 |
commit | 83c79c084e724accad065b4bed8868a3a72c49e2 (patch) | |
tree | 8d58eca12a3a87b54e3815e130d06c424d4efabb | |
parent | 8534069d0ec5cc022f18ff53d7913351d9216d3e (diff) | |
download | android_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.java | 11 |
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); |