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

Commit 2e7b1e08 authored by Antony Sargent's avatar Antony Sargent Committed by Android (Google) Code Review
Browse files

Merge "Consolidate MediaRoute2Provider Callback dispatching" into main

parents 43d7d10a 1130f0c1
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(),