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

Commit c45d9e47 authored by Derek Jedral's avatar Derek Jedral
Browse files

Add onDeviceSuggestionUiVisible API

This API will be called whenever SysUI displays a component for device
suggestions. The API to notify other routers that the UI is visible will
not be public. However, proxy routers can listen to the callback in
order to update their provided suggestions if they choose to do so.

Flag: com.android.media.flags.enable_suggested_device_api
Bug: 404359713
Test: n/a, API is currently for internal testing
Change-Id: I936aa35fd54624d61c0104fbaac60b63b6313c5f
parent 64763fb1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -40,4 +40,5 @@ oneway interface IMediaRouter2 {
        in MediaRoute2Info route);
    void notifyDeviceSuggestionsUpdated(String suggestingPackageName,
        in List<SuggestedDeviceInfo> suggestions);
    void notifyDeviceSuggestionRequested();
}
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ oneway interface IMediaRouter2Manager {
            in @nullable RouteListingPreference routeListingPreference);
    void notifyDeviceSuggestionsUpdated(String packageName, String suggestingPackageName,
            in @nullable List<SuggestedDeviceInfo> suggestedDeviceInfo);
    void notifyDeviceSuggestionRequested();
    void notifyRoutesUpdated(in List<MediaRoute2Info> routes);
    void notifyRequestFailed(int requestId, int reason);
    void invalidateInstance();
+1 −0
Original line number Diff line number Diff line
@@ -107,4 +107,5 @@ interface IMediaRouterService {
            in @nullable List<SuggestedDeviceInfo> suggestedDeviceInfo);
    @nullable Map<String, List<SuggestedDeviceInfo>> getDeviceSuggestionsWithManager(
            IMediaRouter2Manager manager);
    void onDeviceSuggestionRequestedWithManager(IMediaRouter2Manager manager);
}
+57 −0
Original line number Diff line number Diff line
@@ -904,6 +904,17 @@ public final class MediaRouter2 {
        return mImpl.getDeviceSuggestions();
    }

    /**
     * Notifies other suggestion providers that a suggestion has been requested. Calling this method
     * on local routers is a no-op.
     *
     * @hide
     */
    @FlaggedApi(FLAG_ENABLE_SUGGESTED_DEVICE_API)
    public void notifyDeviceSuggestionRequested() {
        mImpl.notifyDeviceSuggestionRequested();
    }

    /**
     * Returns the current {@link RouteListingPreference} of the target router.
     *
@@ -1602,6 +1613,13 @@ public final class MediaRouter2 {
        }
    }

    private void notifyCallbacksDeviceSuggestionRequested() {
        for (DeviceSuggestionsCallbackRecord record : mDeviceSuggestionsCallbackRecords) {
            record.mExecutor.execute(
                    () -> record.mDeviceSuggestionsCallback.onSuggestionRequested());
        }
    }

    private void notifyTransfer(RoutingController oldController, RoutingController newController) {
        for (TransferCallbackRecord record : mTransferCallbackRecords) {
            record.mExecutor.execute(
@@ -1669,6 +1687,9 @@ public final class MediaRouter2 {
        void onSuggestionUpdated(
                @NonNull String suggestingPackageName,
                @Nullable List<SuggestedDeviceInfo> suggestedDeviceInfo);

        /** Called when a router requests a suggestion from suggestion providers. */
        void onSuggestionRequested();
    }

    /** Callback for receiving events about media route discovery. */
@@ -2588,6 +2609,14 @@ public final class MediaRouter2 {
                            suggestions));
        }

        @Override
        public void notifyDeviceSuggestionRequested() {
            mHandler.sendMessage(
                    obtainMessage(
                            MediaRouter2::notifyCallbacksDeviceSuggestionRequested,
                            MediaRouter2.this));
        }

        @Override
        public void requestCreateSessionByManager(
                long managerRequestId, RoutingSessionInfo oldSession, MediaRoute2Info route) {
@@ -2635,6 +2664,8 @@ public final class MediaRouter2 {
        @Nullable
        Map<String, List<SuggestedDeviceInfo>> getDeviceSuggestions();

        void notifyDeviceSuggestionRequested();

        boolean showSystemOutputSwitcher();

        List<MediaRoute2Info> getAllRoutes();
@@ -2857,6 +2888,15 @@ public final class MediaRouter2 {
            }
        }

        @Override
        public void notifyDeviceSuggestionRequested() {
            try {
                mMediaRouterService.onDeviceSuggestionRequestedWithManager(mClient);
            } catch (RemoteException ex) {
                throw ex.rethrowFromSystemServer();
            }
        }

        @Override
        public boolean showSystemOutputSwitcher() {
            try {
@@ -3484,6 +3524,10 @@ public final class MediaRouter2 {
            notifyDeviceSuggestionsUpdated(suggestingPackageName, suggestedDeviceInfo);
        }

        private void notifyDeviceSuggestionRequestedHandler() {
            notifyCallbacksDeviceSuggestionRequested();
        }

        private void onRequestFailedOnHandler(int requestId, int reason) {
            MediaRouter2Manager.TransferRequest matchingRequest = null;
            for (MediaRouter2Manager.TransferRequest request : mTransferRequests) {
@@ -3591,6 +3635,14 @@ public final class MediaRouter2 {
                                deviceSuggestions));
            }

            @Override
            public void notifyDeviceSuggestionRequested() {
                mHandler.sendMessage(
                        obtainMessage(
                                ProxyMediaRouter2Impl::notifyDeviceSuggestionRequestedHandler,
                                ProxyMediaRouter2Impl.this));
            }

            @Override
            public void notifyRoutesUpdated(List<MediaRoute2Info> routes) {
                mHandler.sendMessage(
@@ -3778,6 +3830,11 @@ public final class MediaRouter2 {
            }
        }

        @Override
        public void notifyDeviceSuggestionRequested() {
            // no-op, local routers can not call this method.
        }

        @Override
        public boolean showSystemOutputSwitcher() {
            synchronized (mLock) {
+5 −0
Original line number Diff line number Diff line
@@ -1145,6 +1145,11 @@ public final class MediaRouter2Manager {
            // MediaRouter2Manager doesn't support device suggestions
        }

        @Override
        public void notifyDeviceSuggestionRequested() {
            // MediaRouter2Manager doesn't support device suggestions
        }

        @Override
        public void notifyRoutesUpdated(List<MediaRoute2Info> routes) {
            mHandler.sendMessage(
Loading