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

Commit 1130f0c1 authored by Antony Sargent's avatar Antony Sargent
Browse files

Consolidate MediaRoute2Provider Callback dispatching

For route visibility, we want to be able to be able to examine routes
and sessions anytime a route provider's state or sessions change,
regardless of the type of provider. This CL will allow that by
mechanically consolidating the dispatching of the methods to the
registered MediaRoute2Provider Callback into the parent class.

Bug: 388071860
Test: N/A (no behavior change)
Flag: EXEMPT PURE_REFACTOR

Change-Id: Ibe46046ae7f1dc26ca4468d3e970aa843ecaf8f5
parent d804bbc2
Loading
Loading
Loading
Loading
+30 −3
Original line number Diff line number Diff line
@@ -43,9 +43,9 @@ abstract class MediaRoute2Provider {
    final String mUniqueId;
    final Object mLock = new Object();

    Callback mCallback;
    public final boolean mIsSystemRouteProvider;
    private volatile MediaRoute2ProviderInfo mProviderInfo;
    private Callback mCallback;

    @GuardedBy("mLock")
    final List<RoutingSessionInfo> mSessionInfos = new ArrayList<>();
@@ -120,12 +120,39 @@ abstract class MediaRoute2Provider {
        }
    }

    void notifyProviderState() {
    protected boolean haveCallback() {
        return mCallback != null;
    }

    protected void notifyProviderStateChanged() {
        if (mCallback != null) {
            mCallback.onProviderStateChanged(this);
        }
    }

    protected void notifySessionCreated(long requestId, @Nullable RoutingSessionInfo sessionInfo) {
        if (mCallback != null) {
            mCallback.onSessionCreated(this, requestId, sessionInfo);
        }
    }

    protected void notifySessionUpdated(
            @NonNull MediaRoute2Provider provider,
            @NonNull RoutingSessionInfo sessionInfo,
            Set<String> packageNamesWithRoutingSessionOverrides,
            boolean shouldShowVolumeSystemUi) {
        if (mCallback != null) {
            mCallback.onSessionUpdated(this, sessionInfo,
                    packageNamesWithRoutingSessionOverrides, shouldShowVolumeSystemUi);
        }
    }

    protected void notifySessionReleased(@NonNull RoutingSessionInfo sessionInfo) {
        if (mCallback != null) {
            mCallback.onSessionReleased(this, sessionInfo);
        }
    }

    /** Calls {@link Callback#onRequestFailed} with the given id and reason. */
    protected void notifyRequestFailed(long requestId, @Reason int reason) {
        if (mCallback != null) {
@@ -135,7 +162,7 @@ abstract class MediaRoute2Provider {

    void setAndNotifyProviderState(MediaRoute2ProviderInfo providerInfo) {
        setProviderState(providerInfo);
        notifyProviderState();
        notifyProviderStateChanged();
    }

    public boolean hasComponentName(String packageName, String className) {
+7 −7
Original line number Diff line number Diff line
@@ -528,7 +528,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
            mSessionInfos.add(newSession);
        }

        mCallback.onSessionCreated(this, requestId, newSession);
        notifySessionCreated(requestId, newSession);
    }

    @GuardedBy("mLock")
@@ -683,18 +683,18 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
            return;
        }

        mCallback.onSessionReleased(this, releasedSession);
        notifySessionReleased(releasedSession);
    }

    private void dispatchSessionCreated(long requestId, RoutingSessionInfo session) {
        mHandler.sendMessage(
                obtainMessage(mCallback::onSessionCreated, this, requestId, session));
                obtainMessage(this::notifySessionCreated, requestId, session));
    }

    private void dispatchSessionUpdated(RoutingSessionInfo session) {
        mHandler.sendMessage(
                obtainMessage(
                        mCallback::onSessionUpdated,
                        this::notifySessionUpdated,
                        this,
                        session,
                        /* packageNamesWithRoutingSessionOverrides= */ Set.of(),
@@ -703,7 +703,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {

    private void dispatchSessionReleased(RoutingSessionInfo session) {
        mHandler.sendMessage(
                obtainMessage(mCallback::onSessionReleased, this, session));
                obtainMessage(this::notifySessionReleased, session));
    }

    private RoutingSessionInfo assignProviderIdForSession(RoutingSessionInfo sessionInfo) {
@@ -728,7 +728,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
            return;
        }

        mCallback.onRequestFailed(this, requestId, reason);
        notifyRequestFailed(requestId, reason);
    }

    private void disconnect() {
@@ -739,7 +739,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
            setAndNotifyProviderState(null);
            synchronized (mLock) {
                for (RoutingSessionInfo sessionInfo : mSessionInfos) {
                    mCallback.onSessionReleased(this, sessionInfo);
                    notifySessionReleased(sessionInfo);
                }
                if (Flags.enableMirroringInMediaRouter2()) {
                    for (var callback : mSystemSessionCallbacks.values()) {
+11 −12
Original line number Diff line number Diff line
@@ -138,14 +138,14 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
        mHandler.post(
                () -> {
                    mDeviceRouteController.stop();
                    notifyProviderState();
                    notifyProviderStateChanged();
                });
    }

    @Override
    public void setCallback(Callback callback) {
        super.setCallback(callback);
        notifyProviderState();
        notifyProviderStateChanged();
        notifyGlobalSessionInfoUpdated();
    }

@@ -161,7 +161,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
        // Assume a router without MODIFY_AUDIO_ROUTING permission can't request with
        // a route ID different from the default route ID. The service should've filtered.
        if (TextUtils.equals(routeOriginalId, MediaRoute2Info.ROUTE_ID_DEFAULT)) {
            mCallback.onSessionCreated(this, requestId, mDefaultSessionInfo);
            notifySessionCreated(requestId, mDefaultSessionInfo);
            return;
        }

@@ -172,7 +172,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
                            Flags.enableMirroringInMediaRouter2()
                                    ? mSystemSessionInfo
                                    : mSessionInfos.get(0);
                    mCallback.onSessionCreated(this, requestId, currentSessionInfo);
                    notifySessionCreated(requestId, currentSessionInfo);
                    return;
                }
            }
@@ -181,8 +181,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
        synchronized (mRequestLock) {
            // Handle the previous request as a failure if exists.
            if (mPendingSessionCreationOrTransferRequest != null) {
                mCallback.onRequestFailed(
                        /* provider= */ this,
                notifyRequestFailed(
                        mPendingSessionCreationOrTransferRequest.mRequestId,
                        MediaRoute2ProviderService.REASON_UNKNOWN_ERROR);
            }
@@ -605,7 +604,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
                                + mPendingSessionCreationOrTransferRequest.mTargetOriginalRouteId);
            }
            mPendingSessionCreationOrTransferRequest = null;
            mCallback.onSessionCreated(this, pendingRequestId, newSessionInfo);
            notifySessionCreated(pendingRequestId, newSessionInfo);
        } else {
            if (DEBUG) {
                Slog.w(
@@ -614,8 +613,8 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
                                + mPendingSessionCreationOrTransferRequest.mTargetOriginalRouteId);
            }
            mPendingSessionCreationOrTransferRequest = null;
            mCallback.onRequestFailed(
                    this, pendingRequestId, MediaRoute2ProviderService.REASON_UNKNOWN_ERROR);
            notifyRequestFailed(
                    pendingRequestId, MediaRoute2ProviderService.REASON_UNKNOWN_ERROR);
        }
    }

@@ -640,11 +639,11 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {

    void publishProviderState() {
        updateProviderState();
        notifyProviderState();
        notifyProviderStateChanged();
    }

    void notifyGlobalSessionInfoUpdated() {
        if (mCallback == null) {
        if (!haveCallback()) {
            return;
        }

@@ -656,7 +655,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
            sessionInfo = mSessionInfos.get(0);
        }

        mCallback.onSessionUpdated(
        notifySessionUpdated(
                this,
                sessionInfo,
                /* packageNamesWithRoutingSessionOverrides= */ Set.of(),
+4 −4
Original line number Diff line number Diff line
@@ -417,7 +417,7 @@ import java.util.stream.Stream;
            updateProviderInfo();
        }
        updateSessionInfo();
        notifyProviderState();
        notifyProviderStateChanged();
        notifyGlobalSessionInfoUpdated();
    }

@@ -511,7 +511,7 @@ import java.util.stream.Stream;

    @Override
    /* package */ void notifyGlobalSessionInfoUpdated() {
        if (mCallback == null) {
        if (!haveCallback()) {
            return;
        }

@@ -525,7 +525,7 @@ import java.util.stream.Stream;
            sessionInfo = mSessionInfos.getFirst();
        }

        mCallback.onSessionUpdated(
        notifySessionUpdated(
                this,
                sessionInfo,
                packageNamesWithRoutingSessionOverrides,
@@ -635,7 +635,7 @@ import java.util.stream.Stream;
        providerInfo.getRoutes().stream()
                .map(MediaRoute2Info::getOriginalId)
                .forEach(builder::addTransferableRoute);
        mCallback.onSessionUpdated(
        notifySessionUpdated(
                /* provider= */ this,
                builder.build(),
                /* packageNamesWithRoutingSessionOverrides= */ Set.of(),