Loading media/java/android/media/AudioService.java +28 −20 Original line number Diff line number Diff line Loading @@ -773,20 +773,20 @@ public class AudioService extends IAudioService.Stub { } public void binderDied() { IBinder newModeOwner = null; int newModeOwnerPid = 0; synchronized(mSetModeDeathHandlers) { Log.w(TAG, "setMode() client died"); int index = mSetModeDeathHandlers.indexOf(this); if (index < 0) { Log.w(TAG, "unregistered setMode() client died"); } else { newModeOwner = setModeInt(AudioSystem.MODE_NORMAL, mCb, mPid); newModeOwnerPid = setModeInt(AudioSystem.MODE_NORMAL, mCb, mPid); } } // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all // SCO connections not started by the application changing the mode if (newModeOwner != null) { disconnectBluetoothSco(newModeOwner); if (newModeOwnerPid != 0) { disconnectBluetoothSco(newModeOwnerPid); } } Loading Loading @@ -817,28 +817,28 @@ public class AudioService extends IAudioService.Stub { return; } IBinder newModeOwner = null; int newModeOwnerPid = 0; synchronized(mSetModeDeathHandlers) { if (mode == AudioSystem.MODE_CURRENT) { mode = mMode; } newModeOwner = setModeInt(mode, cb, Binder.getCallingPid()); newModeOwnerPid = setModeInt(mode, cb, Binder.getCallingPid()); } // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all // SCO connections not started by the application changing the mode if (newModeOwner != null) { disconnectBluetoothSco(newModeOwner); if (newModeOwnerPid != 0) { disconnectBluetoothSco(newModeOwnerPid); } } // must be called synchronized on mSetModeDeathHandlers // setModeInt() returns a non null IBInder if the audio mode was successfully set to // setModeInt() returns a valid PID if the audio mode was successfully set to // any mode other than NORMAL. IBinder setModeInt(int mode, IBinder cb, int pid) { IBinder newModeOwner = null; int setModeInt(int mode, IBinder cb, int pid) { int newModeOwnerPid = 0; if (cb == null) { Log.e(TAG, "setModeInt() called with null binder"); return newModeOwner; return newModeOwnerPid; } SetModeDeathHandler hdlr = null; Loading Loading @@ -901,13 +901,17 @@ public class AudioService extends IAudioService.Stub { if (status == AudioSystem.AUDIO_STATUS_OK) { if (mode != AudioSystem.MODE_NORMAL) { newModeOwner = cb; if (mSetModeDeathHandlers.isEmpty()) { Log.e(TAG, "setMode() different from MODE_NORMAL with empty mode client stack"); } else { newModeOwnerPid = mSetModeDeathHandlers.get(0).getPid(); } } int streamType = getActiveStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE); int index = mStreamStates[STREAM_VOLUME_ALIAS[streamType]].mIndex; setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, true, false); } return newModeOwner; return newModeOwnerPid; } /** pre-condition: oldMode != newMode */ Loading Loading @@ -1351,6 +1355,10 @@ public class AudioService extends IAudioService.Stub { return mCb; } public int getPid() { return mCreatorPid; } public int totalCount() { synchronized(mScoClients) { int count = 0; Loading Loading @@ -1445,13 +1453,13 @@ public class AudioService extends IAudioService.Stub { } } public void clearAllScoClients(IBinder exceptBinder, boolean stopSco) { public void clearAllScoClients(int exceptPid, boolean stopSco) { synchronized(mScoClients) { ScoClient savedClient = null; int size = mScoClients.size(); for (int i = 0; i < size; i++) { ScoClient cl = mScoClients.get(i); if (cl.getBinder() != exceptBinder) { if (cl.getPid() != exceptPid) { cl.clearCount(stopSco); } else { savedClient = cl; Loading Loading @@ -1480,7 +1488,7 @@ public class AudioService extends IAudioService.Stub { return result; } private void disconnectBluetoothSco(IBinder exceptBinder) { private void disconnectBluetoothSco(int exceptPid) { synchronized(mScoClients) { checkScoAudioState(); if (mScoAudioState == SCO_STATE_ACTIVE_EXTERNAL || Loading @@ -1498,14 +1506,14 @@ public class AudioService extends IAudioService.Stub { } } } else { clearAllScoClients(exceptBinder, true); clearAllScoClients(exceptPid, true); } } } private void resetBluetoothSco() { synchronized(mScoClients) { clearAllScoClients(null, false); clearAllScoClients(0, false); mScoAudioState = SCO_STATE_INACTIVE; broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED); } Loading Loading @@ -2509,7 +2517,7 @@ public class AudioService extends IAudioService.Stub { case BluetoothHeadset.STATE_AUDIO_DISCONNECTED: state = AudioManager.SCO_AUDIO_STATE_DISCONNECTED; mScoAudioState = SCO_STATE_INACTIVE; clearAllScoClients(null, false); clearAllScoClients(0, false); break; case BluetoothHeadset.STATE_AUDIO_CONNECTING: if (mScoAudioState != SCO_STATE_ACTIVE_INTERNAL && Loading Loading
media/java/android/media/AudioService.java +28 −20 Original line number Diff line number Diff line Loading @@ -773,20 +773,20 @@ public class AudioService extends IAudioService.Stub { } public void binderDied() { IBinder newModeOwner = null; int newModeOwnerPid = 0; synchronized(mSetModeDeathHandlers) { Log.w(TAG, "setMode() client died"); int index = mSetModeDeathHandlers.indexOf(this); if (index < 0) { Log.w(TAG, "unregistered setMode() client died"); } else { newModeOwner = setModeInt(AudioSystem.MODE_NORMAL, mCb, mPid); newModeOwnerPid = setModeInt(AudioSystem.MODE_NORMAL, mCb, mPid); } } // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all // SCO connections not started by the application changing the mode if (newModeOwner != null) { disconnectBluetoothSco(newModeOwner); if (newModeOwnerPid != 0) { disconnectBluetoothSco(newModeOwnerPid); } } Loading Loading @@ -817,28 +817,28 @@ public class AudioService extends IAudioService.Stub { return; } IBinder newModeOwner = null; int newModeOwnerPid = 0; synchronized(mSetModeDeathHandlers) { if (mode == AudioSystem.MODE_CURRENT) { mode = mMode; } newModeOwner = setModeInt(mode, cb, Binder.getCallingPid()); newModeOwnerPid = setModeInt(mode, cb, Binder.getCallingPid()); } // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all // SCO connections not started by the application changing the mode if (newModeOwner != null) { disconnectBluetoothSco(newModeOwner); if (newModeOwnerPid != 0) { disconnectBluetoothSco(newModeOwnerPid); } } // must be called synchronized on mSetModeDeathHandlers // setModeInt() returns a non null IBInder if the audio mode was successfully set to // setModeInt() returns a valid PID if the audio mode was successfully set to // any mode other than NORMAL. IBinder setModeInt(int mode, IBinder cb, int pid) { IBinder newModeOwner = null; int setModeInt(int mode, IBinder cb, int pid) { int newModeOwnerPid = 0; if (cb == null) { Log.e(TAG, "setModeInt() called with null binder"); return newModeOwner; return newModeOwnerPid; } SetModeDeathHandler hdlr = null; Loading Loading @@ -901,13 +901,17 @@ public class AudioService extends IAudioService.Stub { if (status == AudioSystem.AUDIO_STATUS_OK) { if (mode != AudioSystem.MODE_NORMAL) { newModeOwner = cb; if (mSetModeDeathHandlers.isEmpty()) { Log.e(TAG, "setMode() different from MODE_NORMAL with empty mode client stack"); } else { newModeOwnerPid = mSetModeDeathHandlers.get(0).getPid(); } } int streamType = getActiveStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE); int index = mStreamStates[STREAM_VOLUME_ALIAS[streamType]].mIndex; setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, true, false); } return newModeOwner; return newModeOwnerPid; } /** pre-condition: oldMode != newMode */ Loading Loading @@ -1351,6 +1355,10 @@ public class AudioService extends IAudioService.Stub { return mCb; } public int getPid() { return mCreatorPid; } public int totalCount() { synchronized(mScoClients) { int count = 0; Loading Loading @@ -1445,13 +1453,13 @@ public class AudioService extends IAudioService.Stub { } } public void clearAllScoClients(IBinder exceptBinder, boolean stopSco) { public void clearAllScoClients(int exceptPid, boolean stopSco) { synchronized(mScoClients) { ScoClient savedClient = null; int size = mScoClients.size(); for (int i = 0; i < size; i++) { ScoClient cl = mScoClients.get(i); if (cl.getBinder() != exceptBinder) { if (cl.getPid() != exceptPid) { cl.clearCount(stopSco); } else { savedClient = cl; Loading Loading @@ -1480,7 +1488,7 @@ public class AudioService extends IAudioService.Stub { return result; } private void disconnectBluetoothSco(IBinder exceptBinder) { private void disconnectBluetoothSco(int exceptPid) { synchronized(mScoClients) { checkScoAudioState(); if (mScoAudioState == SCO_STATE_ACTIVE_EXTERNAL || Loading @@ -1498,14 +1506,14 @@ public class AudioService extends IAudioService.Stub { } } } else { clearAllScoClients(exceptBinder, true); clearAllScoClients(exceptPid, true); } } } private void resetBluetoothSco() { synchronized(mScoClients) { clearAllScoClients(null, false); clearAllScoClients(0, false); mScoAudioState = SCO_STATE_INACTIVE; broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED); } Loading Loading @@ -2509,7 +2517,7 @@ public class AudioService extends IAudioService.Stub { case BluetoothHeadset.STATE_AUDIO_DISCONNECTED: state = AudioManager.SCO_AUDIO_STATE_DISCONNECTED; mScoAudioState = SCO_STATE_INACTIVE; clearAllScoClients(null, false); clearAllScoClients(0, false); break; case BluetoothHeadset.STATE_AUDIO_CONNECTING: if (mScoAudioState != SCO_STATE_ACTIVE_INTERNAL && Loading