From bd396d85b6fb4ab8ad25c403ba06789a55edb020 Mon Sep 17 00:00:00 2001 From: Jaewan Kim Date: Wed, 14 Feb 2018 15:11:43 +0900 Subject: [PATCH] MediaSession2: Remove initialization in library session impl constructor This fixes crash when framework tries to connect to the library session impl when the session's super constructor is finished but mCallback isn't set yet. Bug: 73327626 Test: Run all MediaComponents test once Change-Id: I42776925fc45b907072c39bc6dbc0dc86a896e0f --- .../com/android/media/MediaLibraryService2Impl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/MediaComponents/src/com/android/media/MediaLibraryService2Impl.java b/packages/MediaComponents/src/com/android/media/MediaLibraryService2Impl.java index b9dffcf101..52db74e609 100644 --- a/packages/MediaComponents/src/com/android/media/MediaLibraryService2Impl.java +++ b/packages/MediaComponents/src/com/android/media/MediaLibraryService2Impl.java @@ -66,15 +66,17 @@ public class MediaLibraryService2Impl extends MediaSessionService2Impl implement public static class MediaLibrarySessionImpl extends MediaSession2Impl implements MediaLibrarySessionProvider { - private final MediaLibrarySessionCallback mCallback; - public MediaLibrarySessionImpl(Context context, MediaPlayerInterface player, String id, VolumeProvider2 volumeProvider, int ratingType, PendingIntent sessionActivity, Executor callbackExecutor, MediaLibrarySessionCallback callback) { super(context, player, id, volumeProvider, ratingType, sessionActivity, callbackExecutor, callback); - mCallback = callback; + // Don't put any extra initialization here. Here's the reason. + // System service will recognize this session inside of the super constructor and would + // connect to this session assuming that initialization is finished. However, if any + // initialization logic is here, calls from the server would fail. + // see: MediaSession2Stub#connect() } @Override @@ -89,8 +91,7 @@ public class MediaLibraryService2Impl extends MediaSessionService2Impl implement @Override MediaLibrarySessionCallback getCallback() { - // Equivalent to the (MediaLibrarySessionCallback) super.getCallback(). - return mCallback; + return (MediaLibrarySessionCallback) super.getCallback(); } @Override