From a5ad327f45c741738ecec9cf17c9c71c0ce4bbf5 Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Mon, 22 May 2023 14:29:27 -0700 Subject: 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 --- .../Shell/src/com/android/wm/shell/pip/PipMediaController.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java index 65a12d629c5a..2590cab9ff2e 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java @@ -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 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 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); -- cgit v1.2.3-59-g8ed1b