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

Commit a5ad327f authored by Hongwei Wang's avatar Hongwei Wang
Browse files

Cache the Binder call for PlaybackState

It's rare but possible that the 2nd Binder call returns a different
value than the 1st one, fix the potential NPE by caching the return
value of MediaController#getPlaybackState

Bug: 283583998
Test: N/A
Change-Id: I9e8f456f3817f68dd98f637a1ee4a7d6d109801e
parent b03c480d
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -252,13 +252,16 @@ public class PipMediaController {
    // It can be removed when min_sdk of the app is set to 31 or greater.
    @SuppressLint("NewApi")
    private List<RemoteAction> getMediaActions() {
        if (mMediaController == null || mMediaController.getPlaybackState() == null) {
        // Cache the PlaybackState since it's a Binder call.
        final PlaybackState playbackState;
        if (mMediaController == null
                || (playbackState = mMediaController.getPlaybackState()) == null) {
            return Collections.emptyList();
        }

        ArrayList<RemoteAction> mediaActions = new ArrayList<>();
        boolean isPlaying = mMediaController.getPlaybackState().isActive();
        long actions = mMediaController.getPlaybackState().getActions();
        boolean isPlaying = playbackState.isActive();
        long actions = playbackState.getActions();

        // Prev action
        mPrevAction.setEnabled((actions & PlaybackState.ACTION_SKIP_TO_PREVIOUS) != 0);