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

Commit 51cbaddf authored by Vlad Popa's avatar Vlad Popa Committed by Android (Google) Code Review
Browse files

Merge "Notify the client about the muted state"

parents c11c89f3 15f85a8f
Loading
Loading
Loading
Loading
+46 −7
Original line number Diff line number Diff line
@@ -218,6 +218,11 @@ public final class AudioPlaybackConfiguration implements Parcelable {
    public static final String EXTRA_PLAYER_EVENT_MUTE =
            "android.media.extra.PLAYER_EVENT_MUTE";

    /**
     * @hide
     * Mute state used for anonymization.
     */
    public static final int PLAYER_MUTE_INVALID = -1;
    /**
     * @hide
     * Flag used when muted by master volume.
@@ -265,6 +270,8 @@ public final class AudioPlaybackConfiguration implements Parcelable {

    private int mSessionId;

    @PlayerMuteEvent private int mMutedState;

    /**
     * Never use without initializing parameters afterwards
     */
@@ -285,6 +292,7 @@ public final class AudioPlaybackConfiguration implements Parcelable {
        mPlayerType = pic.mPlayerType;
        mClientUid = uid;
        mClientPid = pid;
        mMutedState = PLAYER_MUTE_INVALID;
        mDeviceId = PLAYER_DEVICEID_INVALID;
        mPlayerState = PLAYER_STATE_IDLE;
        mPlayerAttr = pic.mAttributes;
@@ -333,6 +341,7 @@ public final class AudioPlaybackConfiguration implements Parcelable {
        anonymCopy.mPlayerAttr = builder.build();
        anonymCopy.mDeviceId = in.mDeviceId;
        // anonymized data
        anonymCopy.mMutedState = PLAYER_MUTE_INVALID;
        anonymCopy.mPlayerType = PLAYER_TYPE_UNKNOWN;
        anonymCopy.mClientUid = PLAYER_UPID_INVALID;
        anonymCopy.mClientPid = PLAYER_UPID_INVALID;
@@ -391,6 +400,14 @@ public final class AudioPlaybackConfiguration implements Parcelable {
        return mSessionId;
    }

    /**
     * @hide
     * @return the mute state as a combination of {@link PlayerMuteEvent} flags
     */
    @PlayerMuteEvent public int getMutedState() {
        return mMutedState;
    }

    /**
     * @hide
     * Return the type of player linked to this configuration.
@@ -471,7 +488,7 @@ public final class AudioPlaybackConfiguration implements Parcelable {

    /**
     * @hide
     * Handle a change of audio session Id
     * Handle a change of audio session ID
     * @param sessionId the audio session ID
     */
    public boolean handleSessionIdEvent(int sessionId) {
@@ -480,6 +497,18 @@ public final class AudioPlaybackConfiguration implements Parcelable {
        return changed;
    }

    /**
     * @hide
     * Handle a change of the muted state
     * @param mutedState the mute reason as a combination of {@link PlayerMuteEvent} flags
     * @return true if the state changed, false otherwise
     */
    public boolean handleMutedEvent(@PlayerMuteEvent int mutedState) {
        final boolean changed = mMutedState != mutedState;
        mMutedState = mutedState;
        return changed;
    }

    /**
     * @hide
     * Handle a player state change
@@ -531,16 +560,17 @@ public final class AudioPlaybackConfiguration implements Parcelable {

    /**
     * @hide
     * Returns true if the player is considered "active", i.e. actively playing, and thus
     * in a state that should make it considered for the list public (sanitized) active playback
     * configurations
     * Returns true if the player is considered "active", i.e. actively playing with unmuted
     * volume, and thus in a state that should make it considered for the list public (sanitized)
     * active playback configurations
     * @return true if active
     */
    @SystemApi
    public boolean isActive() {
        switch (mPlayerState) {
            case PLAYER_STATE_STARTED:
                return true;
                return mMutedState == 0
                        || mMutedState == PLAYER_MUTE_INVALID;  // only send true if not muted
            case PLAYER_STATE_UNKNOWN:
            case PLAYER_STATE_RELEASED:
            case PLAYER_STATE_IDLE:
@@ -577,7 +607,7 @@ public final class AudioPlaybackConfiguration implements Parcelable {

    @Override
    public int hashCode() {
        return Objects.hash(mPlayerIId, mDeviceId, mPlayerType, mClientUid, mClientPid,
        return Objects.hash(mPlayerIId, mDeviceId, mMutedState, mPlayerType, mClientUid, mClientPid,
                mSessionId);
    }

@@ -590,6 +620,7 @@ public final class AudioPlaybackConfiguration implements Parcelable {
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mPlayerIId);
        dest.writeInt(mDeviceId);
        dest.writeInt(mMutedState);
        dest.writeInt(mPlayerType);
        dest.writeInt(mClientUid);
        dest.writeInt(mClientPid);
@@ -606,6 +637,7 @@ public final class AudioPlaybackConfiguration implements Parcelable {
    private AudioPlaybackConfiguration(Parcel in) {
        mPlayerIId = in.readInt();
        mDeviceId = in.readInt();
        mMutedState = in.readInt();
        mPlayerType = in.readInt();
        mClientUid = in.readInt();
        mClientPid = in.readInt();
@@ -625,6 +657,7 @@ public final class AudioPlaybackConfiguration implements Parcelable {

        return ((mPlayerIId == that.mPlayerIId)
                && (mDeviceId == that.mDeviceId)
                && (mMutedState == that.mMutedState)
                && (mPlayerType == that.mPlayerType)
                && (mClientUid == that.mClientUid)
                && (mClientPid == that.mClientPid))
@@ -639,7 +672,13 @@ public final class AudioPlaybackConfiguration implements Parcelable {
                + " u/pid:" + mClientUid + "/" + mClientPid
                + " state:" + toLogFriendlyPlayerState(mPlayerState)
                + " attr:" + mPlayerAttr
                + " sessionId:" + mSessionId;
                + " sessionId:" + mSessionId
                + " mutedState:"
                + " muteFromMasterMute=" + ((mMutedState & PLAYER_MUTE_MASTER) != 0)
                + " muteFromStreamVolume=" + ((mMutedState & PLAYER_MUTE_STREAM_VOLUME) != 0)
                + " muteFromStreamMuted=" + ((mMutedState & PLAYER_MUTE_STREAM_MUTED) != 0)
                + " muteFromPlaybackRestricted=" + ((mMutedState & PLAYER_MUTE_PLAYBACK_RESTRICTED)
                != 0);
    }

    //=====================================================================
+12 −2
Original line number Diff line number Diff line
@@ -1443,8 +1443,18 @@ public final class PlaybackActivityMonitor
                        }
                        @PlayerMuteEvent int eventValue = extras.getInt(EXTRA_PLAYER_EVENT_MUTE);

                        sEventLogger.log(new PlayerEvent(/*piid=*/msg.arg1, PLAYER_UPDATE_MUTED,
                                eventValue));
                        synchronized (mPlayerLock) {
                            int piid = msg.arg1;

                            sEventLogger.log(
                                    new PlayerEvent(piid, PLAYER_UPDATE_MUTED, eventValue));

                            final AudioPlaybackConfiguration apc = mPlayers.get(piid);
                            if (apc == null || !apc.handleMutedEvent(eventValue)) {
                                break;  // do not dispatch
                            }
                            dispatchPlaybackChange(/* iplayerReleased= */false);
                        }
                        break;
                    case MSG_L_CLEAR_PORTS_FOR_PIID:
                        int piid = msg.arg1;