From b0a6bcea15d93562ebd937e1f8d8171b425370a1 Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Tue, 10 Dec 2024 11:23:05 +0000 Subject: Add factory methods for the system providers This will allow the SystemMR2Provider2 to initialize part of the super class state only after it has initialized its final fields. As part of this change, we also move non-trivial initialization logic out of the constructors. Bug: b/362507305 Test: atest CtsMediaBetterTogetherTestCases CtsMediaHostTestCasts Flag: com.android.media.flags.enable_mirroring_in_media_router_2 Change-Id: I6cb572410397ce4b4b8e27a77b1e5488e660b9cf --- .../com/android/server/media/MediaRouter2ServiceImpl.java | 4 ++-- .../com/android/server/media/SystemMediaRoute2Provider.java | 12 +++++++----- .../com/android/server/media/SystemMediaRoute2Provider2.java | 10 +++++++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index ab68ed3e73c6..bcfcfc2437a2 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -2570,9 +2570,9 @@ class MediaRouter2ServiceImpl { mUserRecord = userRecord; mSystemProvider = Flags.enableMirroringInMediaRouter2() - ? new SystemMediaRoute2Provider2( + ? SystemMediaRoute2Provider2.create( service.mContext, UserHandle.of(userRecord.mUserId), looper) - : new SystemMediaRoute2Provider( + : SystemMediaRoute2Provider.create( service.mContext, UserHandle.of(userRecord.mUserId), looper); mRouteProviders.add(getSystemProvider()); mWatcher = new MediaRoute2ProviderWatcher(service.mContext, this, diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java index 5fb80ba92091..8dfba39dcfd8 100644 --- a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java +++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java @@ -89,8 +89,12 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { @Nullable private volatile SessionCreationOrTransferRequest mPendingTransferRequest; - SystemMediaRoute2Provider(Context context, UserHandle user, Looper looper) { - this(context, COMPONENT_NAME, user, looper); + public static SystemMediaRoute2Provider create( + Context context, UserHandle user, Looper looper) { + var instance = new SystemMediaRoute2Provider(context, COMPONENT_NAME, user, looper); + instance.updateProviderState(); + instance.updateSessionInfosIfNeeded(); + return instance; } protected SystemMediaRoute2Provider( @@ -124,8 +128,6 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { notifySessionInfoUpdated(); } })); - updateProviderState(); - updateSessionInfosIfNeeded(); } public void start() { @@ -362,7 +364,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { } } - private void updateProviderState() { + protected void updateProviderState() { MediaRoute2ProviderInfo.Builder builder = new MediaRoute2ProviderInfo.Builder(); // We must have a device route in the provider info. diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java index 8a14a3866860..85b30ad8cadb 100644 --- a/services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java +++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java @@ -35,7 +35,15 @@ import android.os.UserHandle; SystemMediaRoute2Provider2.class.getPackage().getName(), SystemMediaRoute2Provider2.class.getName()); - SystemMediaRoute2Provider2(Context context, UserHandle user, Looper looper) { + public static SystemMediaRoute2Provider2 create( + Context context, UserHandle user, Looper looper) { + var instance = new SystemMediaRoute2Provider2(context, user, looper); + instance.updateProviderState(); + instance.updateSessionInfosIfNeeded(); + return instance; + } + + private SystemMediaRoute2Provider2(Context context, UserHandle user, Looper looper) { super(context, COMPONENT_NAME, user, looper); } } -- cgit v1.2.3-59-g8ed1b