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

Commit b0a6bcea authored by Santiago Seifert's avatar Santiago Seifert
Browse files

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
parent 8ed415bc
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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,
+7 −5
Original line number Diff line number Diff line
@@ -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.
+9 −1
Original line number Diff line number Diff line
@@ -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);
    }
}