From d7c5f16c6f2b73747749d0d750156fa9cd6cd7f7 Mon Sep 17 00:00:00 2001 From: Nancy Chen Date: Mon, 14 Sep 2015 16:34:00 -0700 Subject: Refactor all voicemail audio handling to new audio manager class. Since voicemail audio handling is about to get more complicated (adding head phone switching and bluetooth), we need a separate class to handle audio. Bug: 23816959 Change-Id: If891739ef80f5646145d7a44ec70f5b7544010b0 --- .../dialer/voicemail/VoicemailAudioManager.java | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/com/android/dialer/voicemail/VoicemailAudioManager.java (limited to 'src/com/android/dialer/voicemail/VoicemailAudioManager.java') diff --git a/src/com/android/dialer/voicemail/VoicemailAudioManager.java b/src/com/android/dialer/voicemail/VoicemailAudioManager.java new file mode 100644 index 000000000..e64e180b6 --- /dev/null +++ b/src/com/android/dialer/voicemail/VoicemailAudioManager.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.dialer.voicemail; + +import android.content.Context; +import android.media.AudioManager; +import android.media.AudioManager.OnAudioFocusChangeListener; +import android.util.Log; + +import java.util.concurrent.RejectedExecutionException; + +/** + * This class manages all audio changes for voicemail playback. + */ +final class VoicemailAudioManager implements OnAudioFocusChangeListener { + private static final String TAG = VoicemailAudioManager.class.getSimpleName(); + + public static final int PLAYBACK_STREAM = AudioManager.STREAM_VOICE_CALL; + + private AudioManager mAudioManager; + private VoicemailPlaybackPresenter mVoicemailPlaybackPresenter; + + public VoicemailAudioManager(Context context, + VoicemailPlaybackPresenter voicemailPlaybackPresenter) { + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + mVoicemailPlaybackPresenter = voicemailPlaybackPresenter; + } + + public void requestAudioFocus() { + int result = mAudioManager.requestAudioFocus( + this, + PLAYBACK_STREAM, + AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); + if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { + throw new RejectedExecutionException("Could not capture audio focus."); + } + } + + public void abandonAudioFocus() { + mAudioManager.abandonAudioFocus(this); + } + + @Override + public void onAudioFocusChange(int focusChange) { + Log.d(TAG, "onAudioFocusChange: focusChange=" + focusChange); + mVoicemailPlaybackPresenter.onAudioFocusChange(focusChange == AudioManager.AUDIOFOCUS_GAIN); + } + + public void turnOnSpeaker(boolean on) { + if (mAudioManager.isSpeakerphoneOn() != on) { + Log.i(TAG, "turning speaker phone on: " + on); + mAudioManager.setSpeakerphoneOn(on); + } + } + + public boolean isSpeakerphoneOn() { + return mAudioManager.isSpeakerphoneOn(); + } +} \ No newline at end of file -- cgit v1.2.3