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

Commit 877387ed authored by chelseahao's avatar chelseahao
Browse files

Add `onMediaButtonEvent` to handle button clicks.

Test: atest
Bug: b/384381891
Flag: com.android.settingslib.flags.enable_le_audio_sharing
Change-Id: If8e974a6d021e23a7f06d4476eb94153945c50fc
parent b8958a73
Loading
Loading
Loading
Loading
+58 −30
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.media.session.PlaybackState;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.KeyEvent;

import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
@@ -432,6 +433,25 @@ public class AudioStreamMediaService extends Service {
    }

    private class MediaSessionCallback extends MediaSession.Callback {
        @Override
        public boolean onMediaButtonEvent(@NonNull Intent mediaButtonIntent) {
            KeyEvent keyEvent = mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
            if (keyEvent != null) {
                Log.d(TAG, "onMediaButtonEvent(): triggered by MediaSessionCallback");
                switch (keyEvent.getKeyCode()) {
                    case KeyEvent.KEYCODE_MEDIA_PLAY:
                        handleOnPlay();
                        break;
                    case KeyEvent.KEYCODE_MEDIA_PAUSE:
                        handleOnPause();
                        break;
                    default: // fall out
                }
            }
            return super.onMediaButtonEvent(mediaButtonIntent);
        }

        @Override
        public void onSeekTo(long pos) {
            Log.d(TAG, "onSeekTo: " + pos);
            synchronized (mLocalSessionLock) {
@@ -443,18 +463,27 @@ public class AudioStreamMediaService extends Service {

        @Override
        public void onPause() {
            if (mDevices == null || mDevices.isEmpty()) {
                Log.w(TAG, "active device or device has source is null!");
                return;
            }
            Log.d(
                    TAG,
                    "onPause() setting volume for device : " + mDevices.get(0) + " volume: " + 0);
            setDeviceVolume(mDevices.get(0), /* volume= */ 0);
            handleOnPause();
        }

        @Override
        public void onPlay() {
            handleOnPlay();
        }

        @Override
        public void onCustomAction(@NonNull String action, Bundle extras) {
            Log.d(TAG, "onCustomAction: " + action);
            if (action.equals(LEAVE_BROADCAST_ACTION) && mAudioStreamsHelper != null) {
                mAudioStreamsHelper.removeSource(mBroadcastId);
                mMetricsFeatureProvider.action(
                        getApplicationContext(),
                        SettingsEnums.ACTION_AUDIO_STREAM_NOTIFICATION_LEAVE_BUTTON_CLICK);
            }
        }
    }

    private void handleOnPlay() {
        if (mDevices == null || mDevices.isEmpty()) {
            Log.w(TAG, "active device or device has source is null!");
            return;
@@ -462,21 +491,21 @@ public class AudioStreamMediaService extends Service {
        Log.d(
                TAG,
                "onPlay() setting volume for device : "
                            + mDevices.get(0)
                        + mDevices.getFirst()
                        + " volume: "
                        + mLatestPositiveVolume.get());
            setDeviceVolume(mDevices.get(0), mLatestPositiveVolume.get());
        setDeviceVolume(mDevices.getFirst(), mLatestPositiveVolume.get());
    }

        @Override
        public void onCustomAction(@NonNull String action, Bundle extras) {
            Log.d(TAG, "onCustomAction: " + action);
            if (action.equals(LEAVE_BROADCAST_ACTION) && mAudioStreamsHelper != null) {
                mAudioStreamsHelper.removeSource(mBroadcastId);
                mMetricsFeatureProvider.action(
                        getApplicationContext(),
                        SettingsEnums.ACTION_AUDIO_STREAM_NOTIFICATION_LEAVE_BUTTON_CLICK);
    private void handleOnPause() {
        if (mDevices == null || mDevices.isEmpty()) {
            Log.w(TAG, "active device or device has source is null!");
            return;
        }
        Log.d(
                TAG,
                "onPause() setting volume for device : " + mDevices.getFirst() + " volume: " + 0);
        setDeviceVolume(mDevices.getFirst(), /* volume= */ 0);
    }

    private void setDeviceVolume(BluetoothDevice device, int volume) {
@@ -492,4 +521,3 @@ public class AudioStreamMediaService extends Service {
                        });
    }
}
}