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

Commit c7c12e56 authored by Dongwon Kang's avatar Dongwon Kang Committed by Android (Google) Code Review
Browse files

Merge "Make MediaSessionService not blocked by AudioService." into mnc-dev

parents 9ce9ffec a38e1f4e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ import android.view.KeyEvent;
 */
interface IAudioService {

    void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags,
    oneway void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags,
            String callingPackage, String caller);

    void adjustStreamVolume(int streamType, int direction, int flags, String callingPackage);
+27 −7
Original line number Diff line number Diff line
@@ -242,19 +242,17 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
        }
        if (mVolumeType == PlaybackInfo.PLAYBACK_TYPE_LOCAL) {
            int stream = AudioAttributes.toLegacyStreamType(mAudioAttrs);
            // Adjust the volume with a handler not to be blocked by other system service.
            if (useSuggested) {
                if (AudioSystem.isStreamActive(stream, 0)) {
                    mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(stream, direction,
                            flags, packageName, uid);
                    postAdjustSuggestedStreamVolume(stream, direction, flags, packageName, uid);
                } else {
                    flags |= previousFlagPlaySound;
                    mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(
                            AudioManager.USE_DEFAULT_STREAM_TYPE, direction, flags, packageName,
                            uid);
                    postAdjustSuggestedStreamVolume(AudioManager.USE_DEFAULT_STREAM_TYPE, direction,
                            flags, packageName, uid);
                }
            } else {
                mAudioManagerInternal.adjustStreamVolumeForUid(stream, direction, flags,
                        packageName, uid);
                postAdjustStreamVolume(stream, direction, flags, packageName, uid);
            }
        } else {
            if (mVolumeControlType == VolumeProvider.VOLUME_CONTROL_FIXED) {
@@ -461,6 +459,28 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
        return mPackageName + "/" + mTag;
    }

    private void postAdjustSuggestedStreamVolume(final int streamType, final int direction,
            final int flags, final String callingPackage, final int uid) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(streamType, direction,
                        flags, callingPackage, uid);
            }
        });
    }

    private void postAdjustStreamVolume(final int streamType, final int direction, final int flags,
            final String callingPackage, final int uid) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                mAudioManagerInternal.adjustStreamVolumeForUid(streamType, direction, flags,
                        callingPackage, uid);
            }
        });
    }

    private String getShortMetadataString() {
        int fields = mMetadata == null ? 0 : mMetadata.size();
        MediaDescription description = mMetadata == null ? null : mMetadata