Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9ac96f7 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 6454 into donut

* changes:
  Fix issue 1967295: Add a method to request reloading of audio settings by AudioService.
parents d21572cd 4050c936
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -1063,6 +1063,21 @@ public class AudioManager {
        }
    }

    /**
     *  @hide
     *  Reload audio settings. This method is called by Settings backup
     *  agent when audio settings are restored and causes the AudioService
     *  to read and apply restored settings.
     */
    public void reloadAudioSettings() {
        IAudioService service = getService();
        try {
            service.reloadAudioSettings();
        } catch (RemoteException e) {
            Log.e(TAG, "Dead object in reloadAudioSettings"+e);
        }
    }

     /**
      * {@hide}
      */
+47 −5
Original line number Diff line number Diff line
@@ -508,14 +508,14 @@ public class AudioService extends IAudioService.Stub {
    /** @see AudioManager#setRingerMode(int) */
    public void setRingerMode(int ringerMode) {
        if (ringerMode != mRingerMode) {
            setRingerModeInt(ringerMode);
            setRingerModeInt(ringerMode, true);

            // Send sticky broadcast
            broadcastRingerMode();
        }
    }

    private void setRingerModeInt(int ringerMode) {
    private void setRingerModeInt(int ringerMode, boolean persist) {
        mRingerMode = ringerMode;

        // Adjust volumes via posting message
@@ -543,9 +543,11 @@ public class AudioService extends IAudioService.Stub {
        }
        
        // Post a persist ringer mode msg
        if (persist) {
            sendMsg(mAudioHandler, MSG_PERSIST_RINGER_MODE, SHARED_MSG,
                    SENDMSG_REPLACE, 0, 0, null, PERSIST_DELAY);
        }
    }

    /** @see AudioManager#shouldVibrate(int) */
    public boolean shouldVibrate(int vibrateType) {
@@ -914,6 +916,46 @@ public class AudioService extends IAudioService.Stub {
        }
    }

    /** @see AudioManager#reloadAudioSettings() */
    public void reloadAudioSettings() {
        // restore ringer mode, ringer mode affected streams, mute affected streams and vibrate settings
        readPersistedSettings();

        // restore volume settings
        int numStreamTypes = AudioSystem.getNumStreamTypes();
        for (int streamType = 0; streamType < numStreamTypes; streamType++) {
            VolumeStreamState streamState = mStreamStates[streamType];

            // there is no volume setting for STREAM_BLUETOOTH_SCO
            if (streamType != AudioSystem.STREAM_BLUETOOTH_SCO) {
                String settingName = System.VOLUME_SETTINGS[streamType];
                String lastAudibleSettingName = settingName + System.APPEND_FOR_LAST_AUDIBLE;

                streamState.mIndex = streamState.getValidIndex(Settings.System.getInt(mContentResolver,
                        settingName,
                        AudioManager.DEFAULT_STREAM_VOLUME[streamType]));
                streamState.mLastAudibleIndex = streamState.getValidIndex(Settings.System.getInt(mContentResolver,
                        lastAudibleSettingName,
                        streamState.mIndex > 0 ? streamState.mIndex : AudioManager.DEFAULT_STREAM_VOLUME[streamType]));
            }
            // unmute stream that whas muted but is not affect by mute anymore
            if (streamState.muteCount() != 0 && !isStreamAffectedByMute(streamType)) {
                int size = streamState.mDeathHandlers.size();
                for (int i = 0; i < size; i++) {
                    streamState.mDeathHandlers.get(i).mMuteCount = 1;
                    streamState.mDeathHandlers.get(i).mute(false);
                }
            }
            // apply stream volume
            if (streamState.muteCount() == 0) {
                AudioSystem.setVolume(streamType, streamState.mVolumes[streamState.mIndex]);
            }
        }

        // apply new ringer mode
        setRingerModeInt(getRingerMode(), false);
    }

    ///////////////////////////////////////////////////////////////////////////
    // Internal methods
    ///////////////////////////////////////////////////////////////////////////
@@ -1426,7 +1468,7 @@ public class AudioService extends IAudioService.Stub {
             * Ensure all stream types that should be affected by ringer mode
             * are in the proper state.
             */
            setRingerModeInt(getRingerMode());
            setRingerModeInt(getRingerMode(), false);
        }
        
    }
+1 −0
Original line number Diff line number Diff line
@@ -71,4 +71,5 @@ interface IAudioService {
  
    oneway void unloadSoundEffects();

    oneway void reloadAudioSettings();
}