Loading services/core/java/com/android/server/media/MediaRoute2Provider.java +30 −3 Original line number Diff line number Diff line Loading @@ -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<>(); Loading Loading @@ -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) { Loading @@ -135,7 +162,7 @@ abstract class MediaRoute2Provider { void setAndNotifyProviderState(MediaRoute2ProviderInfo providerInfo) { setProviderState(providerInfo); notifyProviderState(); notifyProviderStateChanged(); } public boolean hasComponentName(String packageName, String className) { Loading services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java +7 −7 Original line number Diff line number Diff line Loading @@ -528,7 +528,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider { mSessionInfos.add(newSession); } mCallback.onSessionCreated(this, requestId, newSession); notifySessionCreated(requestId, newSession); } @GuardedBy("mLock") Loading Loading @@ -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(), Loading @@ -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) { Loading @@ -728,7 +728,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider { return; } mCallback.onRequestFailed(this, requestId, reason); notifyRequestFailed(requestId, reason); } private void disconnect() { Loading @@ -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()) { Loading services/core/java/com/android/server/media/SystemMediaRoute2Provider.java +11 −12 Original line number Diff line number Diff line Loading @@ -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(); } Loading @@ -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; } Loading @@ -172,7 +172,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { Flags.enableMirroringInMediaRouter2() ? mSystemSessionInfo : mSessionInfos.get(0); mCallback.onSessionCreated(this, requestId, currentSessionInfo); notifySessionCreated(requestId, currentSessionInfo); return; } } Loading @@ -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); } Loading Loading @@ -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( Loading @@ -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); } } Loading @@ -640,11 +639,11 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { void publishProviderState() { updateProviderState(); notifyProviderState(); notifyProviderStateChanged(); } void notifyGlobalSessionInfoUpdated() { if (mCallback == null) { if (!haveCallback()) { return; } Loading @@ -656,7 +655,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { sessionInfo = mSessionInfos.get(0); } mCallback.onSessionUpdated( notifySessionUpdated( this, sessionInfo, /* packageNamesWithRoutingSessionOverrides= */ Set.of(), Loading services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java +4 −4 Original line number Diff line number Diff line Loading @@ -417,7 +417,7 @@ import java.util.stream.Stream; updateProviderInfo(); } updateSessionInfo(); notifyProviderState(); notifyProviderStateChanged(); notifyGlobalSessionInfoUpdated(); } Loading Loading @@ -511,7 +511,7 @@ import java.util.stream.Stream; @Override /* package */ void notifyGlobalSessionInfoUpdated() { if (mCallback == null) { if (!haveCallback()) { return; } Loading @@ -525,7 +525,7 @@ import java.util.stream.Stream; sessionInfo = mSessionInfos.getFirst(); } mCallback.onSessionUpdated( notifySessionUpdated( this, sessionInfo, packageNamesWithRoutingSessionOverrides, Loading Loading @@ -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(), Loading Loading
services/core/java/com/android/server/media/MediaRoute2Provider.java +30 −3 Original line number Diff line number Diff line Loading @@ -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<>(); Loading Loading @@ -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) { Loading @@ -135,7 +162,7 @@ abstract class MediaRoute2Provider { void setAndNotifyProviderState(MediaRoute2ProviderInfo providerInfo) { setProviderState(providerInfo); notifyProviderState(); notifyProviderStateChanged(); } public boolean hasComponentName(String packageName, String className) { Loading
services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java +7 −7 Original line number Diff line number Diff line Loading @@ -528,7 +528,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider { mSessionInfos.add(newSession); } mCallback.onSessionCreated(this, requestId, newSession); notifySessionCreated(requestId, newSession); } @GuardedBy("mLock") Loading Loading @@ -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(), Loading @@ -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) { Loading @@ -728,7 +728,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider { return; } mCallback.onRequestFailed(this, requestId, reason); notifyRequestFailed(requestId, reason); } private void disconnect() { Loading @@ -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()) { Loading
services/core/java/com/android/server/media/SystemMediaRoute2Provider.java +11 −12 Original line number Diff line number Diff line Loading @@ -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(); } Loading @@ -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; } Loading @@ -172,7 +172,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { Flags.enableMirroringInMediaRouter2() ? mSystemSessionInfo : mSessionInfos.get(0); mCallback.onSessionCreated(this, requestId, currentSessionInfo); notifySessionCreated(requestId, currentSessionInfo); return; } } Loading @@ -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); } Loading Loading @@ -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( Loading @@ -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); } } Loading @@ -640,11 +639,11 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { void publishProviderState() { updateProviderState(); notifyProviderState(); notifyProviderStateChanged(); } void notifyGlobalSessionInfoUpdated() { if (mCallback == null) { if (!haveCallback()) { return; } Loading @@ -656,7 +655,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { sessionInfo = mSessionInfos.get(0); } mCallback.onSessionUpdated( notifySessionUpdated( this, sessionInfo, /* packageNamesWithRoutingSessionOverrides= */ Set.of(), Loading
services/core/java/com/android/server/media/SystemMediaRoute2Provider2.java +4 −4 Original line number Diff line number Diff line Loading @@ -417,7 +417,7 @@ import java.util.stream.Stream; updateProviderInfo(); } updateSessionInfo(); notifyProviderState(); notifyProviderStateChanged(); notifyGlobalSessionInfoUpdated(); } Loading Loading @@ -511,7 +511,7 @@ import java.util.stream.Stream; @Override /* package */ void notifyGlobalSessionInfoUpdated() { if (mCallback == null) { if (!haveCallback()) { return; } Loading @@ -525,7 +525,7 @@ import java.util.stream.Stream; sessionInfo = mSessionInfos.getFirst(); } mCallback.onSessionUpdated( notifySessionUpdated( this, sessionInfo, packageNamesWithRoutingSessionOverrides, Loading Loading @@ -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(), Loading