blob: b1963a45413c2a61a1eeb7781264b73def18d3d1 [file] [log] [blame]
Alexandre Lision6d867b92013-10-25 15:36:28 -04001package org.sflphone.utils;
2
3import org.sflphone.service.SipService;
4
Alexandre Lision63870a72013-10-28 16:33:47 -04005import android.content.Context;
6import android.media.AudioManager;
Alexandre Lision6e9c7e52013-10-29 15:54:11 -04007import android.media.AudioManager.OnAudioFocusChangeListener;
Alexandre Lision6d867b92013-10-25 15:36:28 -04008import android.os.Handler;
9import android.util.Log;
10
Alexandre Lision35577132013-12-06 15:21:15 -050011public class MediaManager implements OnAudioFocusChangeListener {
Alexandre Lision6d867b92013-10-25 15:36:28 -040012
13 private static final String TAG = MediaManager.class.getSimpleName();
14 private SipService mService;
15 private SettingsContentObserver mSettingsContentObserver;
Alexandre Lision63870a72013-10-28 16:33:47 -040016 AudioManager mAudioManager;
Alexandre Lision6d867b92013-10-25 15:36:28 -040017
18 public MediaManager(SipService aService) {
19 mService = aService;
20 mSettingsContentObserver = new SettingsContentObserver(mService, new Handler());
Alexandre Lision63870a72013-10-28 16:33:47 -040021 mAudioManager = (AudioManager) aService.getSystemService(Context.AUDIO_SERVICE);
Alexandre Lision6d867b92013-10-25 15:36:28 -040022 }
23
24 public void startService() {
25 mService.getApplicationContext().getContentResolver()
26 .registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver);
27 }
28
29 public void stopService() {
30 Log.i(TAG, "Remove media manager....");
31 mService.getApplicationContext().getContentResolver().unregisterContentObserver(mSettingsContentObserver);
32 }
33
Alexandre Lision63870a72013-10-28 16:33:47 -040034 public AudioManager getAudioManager() {
35 return mAudioManager;
36 }
37
Alexandre Lisionbaeeb212013-12-09 12:54:47 -050038 public void obtainAudioFocus(boolean requestSpeakerOn) {
Alexandre Lision6e9c7e52013-10-29 15:54:11 -040039 mAudioManager.requestAudioFocus(this, Compatibility.getInCallStream(false), AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
Alexandre Lision7e390652013-12-06 16:58:22 -050040 mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
Alexandre Lisionbaeeb212013-12-09 12:54:47 -050041 if(requestSpeakerOn){
42 RouteToSpeaker();
43 }
Alexandre Lision6e9c7e52013-10-29 15:54:11 -040044 }
45
46 @Override
47 public void onAudioFocusChange(int arg0) {
Alexandre Lision35577132013-12-06 15:21:15 -050048
Alexandre Lision6e9c7e52013-10-29 15:54:11 -040049 }
50
Alexandre Lision35577132013-12-06 15:21:15 -050051 public void abandonAudioFocus() {
52 mAudioManager.abandonAudioFocus(this);
53 if (mAudioManager.isSpeakerphoneOn()) {
54 mAudioManager.setSpeakerphoneOn(false);
55 }
Alexandre Lision7e390652013-12-06 16:58:22 -050056 mAudioManager.setMode(AudioManager.MODE_NORMAL);
Alexandre Lision35577132013-12-06 15:21:15 -050057 }
58
59 public void RouteToSpeaker() {
60 mAudioManager.setSpeakerphoneOn(true);
61 }
62
63 public void RouteToInternalSpeaker() {
64 mAudioManager.setSpeakerphoneOn(false);
65 }
Alexandre Lision6d867b92013-10-25 15:36:28 -040066}