diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 3f45f3202f119..276164041c66f 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -141,7 +141,6 @@ public class AudioService extends IAudioService.Stub { private AudioHandler mAudioHandler; /** @see VolumeStreamState */ private VolumeStreamState[] mStreamStates; - private MasterMuteState mMasterMuteState; private SettingsObserver mSettingsObserver; private int mMode; @@ -443,7 +442,6 @@ public class AudioService extends IAudioService.Stub { for (int i = 0; i < numStreamTypes; i++) { streams[i] = new VolumeStreamState(System.VOLUME_SETTINGS[STREAM_VOLUME_ALIAS[i]], i); } - mMasterMuteState = new MasterMuteState(); // Correct stream index values for streams with aliases for (int i = 0; i < numStreamTypes; i++) { @@ -745,12 +743,13 @@ public class AudioService extends IAudioService.Stub { /** @see AudioManager#setMasterMute(boolean, IBinder) */ public void setMasterMute(boolean state, IBinder cb) { - mMasterMuteState.mute(cb, state); + AudioSystem.setMasterMute(state); + sendMasterMuteUpdate(state, AudioManager.FLAG_SHOW_UI); } /** get master mute state. */ public boolean isMasterMute() { - return (mMasterMuteState.muteCount() != 0); + return AudioSystem.getMasterMute(); } /** @see AudioManager#getStreamVolume(int) */ @@ -2150,122 +2149,6 @@ public class AudioService extends IAudioService.Stub { } } - public class MasterMuteState { - - private ArrayList mDeathHandlers; - - private MasterMuteState() { - mDeathHandlers = new ArrayList(); - } - - public void mute(IBinder cb, boolean state) { - MasterMuteDeathHandler handler = getDeathHandler(cb, state); - if (handler == null) { - Log.e(TAG, "Could not get client death handler for master volume"); - return; - } - handler.mute(state); - } - - private class MasterMuteDeathHandler implements IBinder.DeathRecipient { - private IBinder mICallback; // To be notified of client's death - private int mMuteCount; // Number of active mutes for this client - - MasterMuteDeathHandler(IBinder cb) { - mICallback = cb; - } - - public void mute(boolean state) { - synchronized(mDeathHandlers) { - if (state) { - if (mMuteCount == 0) { - // Register for client death notification - try { - // mICallback can be 0 if muted by AudioService - if (mICallback != null) { - mICallback.linkToDeath(this, 0); - } - mDeathHandlers.add(this); - // If the stream is not yet muted by any client, set lvel to 0 - if (muteCount() == 0) { - AudioSystem.setMasterMute(true); - sendMasterMuteUpdate(true, AudioManager.FLAG_SHOW_UI); - } - } catch (RemoteException e) { - // Client has died! - binderDied(); - mDeathHandlers.notify(); - return; - } - } else { - Log.w(TAG, "master volume was already muted by this client"); - } - mMuteCount++; - } else { - if (mMuteCount == 0) { - Log.e(TAG, "unexpected unmute for master volume"); - } else { - mMuteCount--; - if (mMuteCount == 0) { - // Unregistr from client death notification - mDeathHandlers.remove(this); - // mICallback can be 0 if muted by AudioService - if (mICallback != null) { - mICallback.unlinkToDeath(this, 0); - } - if (muteCount() == 0) { - AudioSystem.setMasterMute(false); - sendMasterMuteUpdate(false, AudioManager.FLAG_SHOW_UI); - } - } - } - } - mDeathHandlers.notify(); - } - } - - public void binderDied() { - Log.w(TAG, "Volume service client died for master volume"); - if (mMuteCount != 0) { - // Reset all active mute requests from this client. - mMuteCount = 1; - mute(false); - } - } - } - - private int muteCount() { - int count = 0; - int size = mDeathHandlers.size(); - for (int i = 0; i < size; i++) { - count += mDeathHandlers.get(i).mMuteCount; - } - return count; - } - - private MasterMuteDeathHandler getDeathHandler(IBinder cb, boolean state) { - synchronized(mDeathHandlers) { - MasterMuteDeathHandler handler; - int size = mDeathHandlers.size(); - for (int i = 0; i < size; i++) { - handler = mDeathHandlers.get(i); - if (cb == handler.mICallback) { - return handler; - } - } - // If this is the first mute request for this client, create a new - // client death handler. Otherwise, it is an out of sequence unmute request. - if (state) { - handler = new MasterMuteDeathHandler(cb); - } else { - Log.w(TAG, "stream was not muted by this client"); - handler = null; - } - return handler; - } - } - } - /** Thread that handles native AudioSystem control. */ private class AudioSystemThread extends Thread { AudioSystemThread() {