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

Commit 4ab15dad authored by Derek Jedral's avatar Derek Jedral Committed by Android (Google) Code Review
Browse files

Merge "Add API to clear device suggestions and rename suggestion methods" into main

parents 868ee5f2 c7ddfc8e
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -25297,6 +25297,7 @@ package android.media {
  public final class MediaRouter2 {
    method @FlaggedApi("com.android.media.flags.enable_screen_off_scanning") public void cancelScanRequest(@NonNull android.media.MediaRouter2.ScanToken);
    method @FlaggedApi("com.android.media.flags.enable_suggested_device_api") public void clearDeviceSuggestions();
    method @Nullable public android.media.MediaRouter2.RoutingController getController(@NonNull String);
    method @NonNull public java.util.List<android.media.MediaRouter2.RoutingController> getControllers();
    method @FlaggedApi("com.android.media.flags.enable_suggested_device_api") @NonNull public java.util.Map<java.lang.String,java.util.List<android.media.SuggestedDeviceInfo>> getDeviceSuggestions();
@@ -25306,7 +25307,7 @@ package android.media {
    method @NonNull public java.util.List<android.media.MediaRoute2Info> getRoutes();
    method @NonNull public android.media.MediaRouter2.RoutingController getSystemController();
    method public void registerControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.ControllerCallback);
    method @FlaggedApi("com.android.media.flags.enable_suggested_device_api") public void registerDeviceSuggestionsCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.DeviceSuggestionsCallback);
    method @FlaggedApi("com.android.media.flags.enable_suggested_device_api") public void registerDeviceSuggestionsUpdatesCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.DeviceSuggestionsUpdatesCallback);
    method public void registerRouteCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.RouteCallback, @NonNull android.media.RouteDiscoveryPreference);
    method public void registerRouteListingPreferenceUpdatedCallback(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.media.RouteListingPreference>);
    method public void registerTransferCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.TransferCallback);
@@ -25319,7 +25320,7 @@ package android.media {
    method public void stop();
    method public void transferTo(@NonNull android.media.MediaRoute2Info);
    method public void unregisterControllerCallback(@NonNull android.media.MediaRouter2.ControllerCallback);
    method @FlaggedApi("com.android.media.flags.enable_suggested_device_api") public void unregisterDeviceSuggestionsCallback(@NonNull android.media.MediaRouter2.DeviceSuggestionsCallback);
    method @FlaggedApi("com.android.media.flags.enable_suggested_device_api") public void unregisterDeviceSuggestionsUpdatesCallback(@NonNull android.media.MediaRouter2.DeviceSuggestionsUpdatesCallback);
    method public void unregisterRouteCallback(@NonNull android.media.MediaRouter2.RouteCallback);
    method public void unregisterRouteListingPreferenceUpdatedCallback(@NonNull java.util.function.Consumer<android.media.RouteListingPreference>);
    method public void unregisterTransferCallback(@NonNull android.media.MediaRouter2.TransferCallback);
@@ -25330,9 +25331,10 @@ package android.media {
    method public void onControllerUpdated(@NonNull android.media.MediaRouter2.RoutingController);
  }
  @FlaggedApi("com.android.media.flags.enable_suggested_device_api") public static interface MediaRouter2.DeviceSuggestionsCallback {
    method public void onSuggestionRequested();
    method public void onSuggestionUpdated(@NonNull String, @NonNull java.util.List<android.media.SuggestedDeviceInfo>);
  @FlaggedApi("com.android.media.flags.enable_suggested_device_api") public static interface MediaRouter2.DeviceSuggestionsUpdatesCallback {
    method public void onSuggestionsCleared(@NonNull String);
    method public void onSuggestionsRequested();
    method public void onSuggestionsUpdated(@NonNull String, @NonNull java.util.List<android.media.SuggestedDeviceInfo>);
  }
  public static interface MediaRouter2.OnGetControllerHintsListener {
+68 −33
Original line number Diff line number Diff line
@@ -159,8 +159,8 @@ public final class MediaRouter2 {
            new CopyOnWriteArrayList<>();
    private final CopyOnWriteArrayList<ControllerCallbackRecord> mControllerCallbackRecords =
            new CopyOnWriteArrayList<>();
    private final CopyOnWriteArrayList<DeviceSuggestionsCallbackRecord>
            mDeviceSuggestionsCallbackRecords = new CopyOnWriteArrayList<>();
    private final CopyOnWriteArrayList<DeviceSuggestionsUpdatesCallbackRecord>
            mDeviceSuggestionsUpdatesCallbackRecords = new CopyOnWriteArrayList<>();

    private final CopyOnWriteArrayList<ControllerCreationRequest> mControllerCreationRequests =
            new CopyOnWriteArrayList<>();
@@ -771,17 +771,18 @@ public final class MediaRouter2 {
     * <p>Calls using a previously registered callback will overwrite the previous executor.
     */
    @FlaggedApi(FLAG_ENABLE_SUGGESTED_DEVICE_API)
    public void registerDeviceSuggestionsCallback(
    public void registerDeviceSuggestionsUpdatesCallback(
            @NonNull @CallbackExecutor Executor executor,
            @NonNull DeviceSuggestionsCallback deviceSuggestionsCallback) {
            @NonNull DeviceSuggestionsUpdatesCallback deviceSuggestionsUpdatesCallback) {
        Objects.requireNonNull(executor, "executor must not be null");
        Objects.requireNonNull(deviceSuggestionsCallback, "callback must not be null");
        Objects.requireNonNull(deviceSuggestionsUpdatesCallback, "callback must not be null");

        DeviceSuggestionsCallbackRecord record =
                new DeviceSuggestionsCallbackRecord(executor, deviceSuggestionsCallback);
        DeviceSuggestionsUpdatesCallbackRecord record =
                new DeviceSuggestionsUpdatesCallbackRecord(
                        executor, deviceSuggestionsUpdatesCallback);

        mDeviceSuggestionsCallbackRecords.remove(record);
        mDeviceSuggestionsCallbackRecords.add(record);
        mDeviceSuggestionsUpdatesCallbackRecords.remove(record);
        mDeviceSuggestionsUpdatesCallbackRecords.add(record);
    }

    /**
@@ -805,15 +806,19 @@ public final class MediaRouter2 {
    /**
     * Unregisters the given callback to not receive {@link SuggestedDeviceInfo} change events.
     *
     * @see #registerDeviceSuggestionsCallback(Executor, DeviceSuggestionsCallback)
     * @see #registerDeviceSuggestionsUpdatesCallback(Executor, DeviceSuggestionsUpdatesCallback)
     */
    @FlaggedApi(FLAG_ENABLE_SUGGESTED_DEVICE_API)
    public void unregisterDeviceSuggestionsCallback(@NonNull DeviceSuggestionsCallback callback) {
    public void unregisterDeviceSuggestionsUpdatesCallback(
            @NonNull DeviceSuggestionsUpdatesCallback callback) {
        Objects.requireNonNull(callback, "callback must not be null");

        if (!mDeviceSuggestionsCallbackRecords.remove(
                new DeviceSuggestionsCallbackRecord(/* executor */ null, callback))) {
            Log.w(TAG, "unregisterDeviceSuggestionsCallback: Ignoring an unknown" + " callback");
        if (!mDeviceSuggestionsUpdatesCallbackRecords.remove(
                new DeviceSuggestionsUpdatesCallbackRecord(/* executor */ null, callback))) {
            Log.w(
                    TAG,
                    "unregisterDeviceSuggestionsUpdatesCallback: Ignoring an unknown"
                            + " callback");
        }
    }

@@ -888,6 +893,20 @@ public final class MediaRouter2 {
        mImpl.setDeviceSuggestions(suggestedDeviceInfo);
    }

    /**
     * Clears the {@link SuggestedDeviceInfo device suggestions} provided by this router.
     *
     * <p>Use this method to tell the system that this router is not currently providing any
     * suggestions.
     *
     * <p>If the router explicitly wants to recommend that no suggestion is appropriate, use {@link
     * setDeviceSuggestions} with an empty list
     */
    @FlaggedApi(FLAG_ENABLE_SUGGESTED_DEVICE_API)
    public void clearDeviceSuggestions() {
        mImpl.setDeviceSuggestions(null);
    }

    /**
     * Gets the current suggested devices.
     *
@@ -1610,18 +1629,26 @@ public final class MediaRouter2 {
    private void notifyDeviceSuggestionsUpdated(
            @NonNull String suggestingPackageName,
            @Nullable List<SuggestedDeviceInfo> deviceSuggestions) {
        for (DeviceSuggestionsCallbackRecord record : mDeviceSuggestionsCallbackRecords) {
        for (DeviceSuggestionsUpdatesCallbackRecord record :
                mDeviceSuggestionsUpdatesCallbackRecords) {
            record.mExecutor.execute(
                    () ->
                            record.mDeviceSuggestionsCallback.onSuggestionUpdated(
                                    suggestingPackageName, deviceSuggestions));
                    () -> {
                        if (deviceSuggestions != null) {
                            record.mDeviceSuggestionsUpdatesCallback.onSuggestionsUpdated(
                                    suggestingPackageName, deviceSuggestions);
                        } else {
                            record.mDeviceSuggestionsUpdatesCallback.onSuggestionsCleared(
                                    suggestingPackageName);
                        }
                    });
        }
    }

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

@@ -1677,7 +1704,7 @@ public final class MediaRouter2 {

    /** Callback for receiving events about device suggestions */
    @FlaggedApi(FLAG_ENABLE_SUGGESTED_DEVICE_API)
    public interface DeviceSuggestionsCallback {
    public interface DeviceSuggestionsUpdatesCallback {

        /**
         * Called when suggestions are updated.
@@ -1685,12 +1712,19 @@ public final class MediaRouter2 {
         * @param suggestingPackageName the package that provided the suggestions.
         * @param suggestedDeviceInfo the suggestions provided by the package.
         */
        void onSuggestionUpdated(
        void onSuggestionsUpdated(
                @NonNull String suggestingPackageName,
                @NonNull List<SuggestedDeviceInfo> suggestedDeviceInfo);

        /**
         * Called when suggestions are cleared.
         *
         * @param suggestingPackageName the package that cleared their provided suggestions.
         */
        void onSuggestionsCleared(@NonNull String suggestingPackageName);

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

    /** Callback for receiving events about media route discovery. */
@@ -2458,15 +2492,15 @@ public final class MediaRouter2 {
        }
    }

    private static final class DeviceSuggestionsCallbackRecord {
    private static final class DeviceSuggestionsUpdatesCallbackRecord {
        public final Executor mExecutor;
        public final DeviceSuggestionsCallback mDeviceSuggestionsCallback;
        public final DeviceSuggestionsUpdatesCallback mDeviceSuggestionsUpdatesCallback;

        /* package */ DeviceSuggestionsCallbackRecord(
        /* package */ DeviceSuggestionsUpdatesCallbackRecord(
                @NonNull Executor executor,
                @NonNull DeviceSuggestionsCallback deviceSuggestionsCallback) {
                @NonNull DeviceSuggestionsUpdatesCallback deviceSuggestionsUpdatesCallback) {
            mExecutor = executor;
            mDeviceSuggestionsCallback = deviceSuggestionsCallback;
            mDeviceSuggestionsUpdatesCallback = deviceSuggestionsUpdatesCallback;
        }

        @Override
@@ -2474,16 +2508,17 @@ public final class MediaRouter2 {
            if (this == obj) {
                return true;
            }
            if (!(obj instanceof DeviceSuggestionsCallbackRecord)) {
            if (!(obj instanceof DeviceSuggestionsUpdatesCallbackRecord)) {
                return false;
            }
            return mDeviceSuggestionsCallback
                    == ((DeviceSuggestionsCallbackRecord) obj).mDeviceSuggestionsCallback;
            return mDeviceSuggestionsUpdatesCallback
                    == ((DeviceSuggestionsUpdatesCallbackRecord) obj)
                            .mDeviceSuggestionsUpdatesCallback;
        }

        @Override
        public int hashCode() {
            return mDeviceSuggestionsCallback.hashCode();
            return mDeviceSuggestionsUpdatesCallback.hashCode();
        }
    }

@@ -2608,7 +2643,7 @@ public final class MediaRouter2 {

        @Override
        public void notifyDeviceSuggestionsUpdated(
                String suggestingPackageName, List<SuggestedDeviceInfo> suggestions) {
                String suggestingPackageName, @Nullable List<SuggestedDeviceInfo> suggestions) {
            mHandler.sendMessage(
                    obtainMessage(
                            MediaRouter2::notifyDeviceSuggestionsUpdated,
+14 −7
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2;
import android.media.MediaRouter2.DeviceSuggestionsCallback;
import android.media.MediaRouter2.DeviceSuggestionsUpdatesCallback;
import android.media.MediaRouter2.RoutingController;
import android.media.MediaRouter2Manager;
import android.media.RouteDiscoveryPreference;
@@ -72,17 +72,23 @@ public final class RouterInfoMediaManager extends InfoMediaManager {
                notifyRouteListingPreferenceUpdated(preference);
                refreshDevices();
            };
    private final DeviceSuggestionsCallback mDeviceSuggestionsCallback =
            new DeviceSuggestionsCallback() {

    private final DeviceSuggestionsUpdatesCallback mDeviceSuggestionsUpdatesCallback =
            new DeviceSuggestionsUpdatesCallback() {
                @Override
                public void onSuggestionUpdated(
                public void onSuggestionsUpdated(
                        String suggestingPackageName,
                        List<SuggestedDeviceInfo> suggestedDeviceInfo) {
                    updateDeviceSuggestion(suggestingPackageName, suggestedDeviceInfo);
                }

                @Override
                public void onSuggestionRequested() {} // no-op
                public void onSuggestionsCleared(String suggestingPackageName) {
                    updateDeviceSuggestion(suggestingPackageName, null);
                }

                @Override
                public void onSuggestionsRequested() {} // no-op
            };

    @GuardedBy("this")
@@ -154,7 +160,8 @@ public final class RouterInfoMediaManager extends InfoMediaManager {
        mRouter.registerRouteCallback(mExecutor, mRouteCallback, RouteDiscoveryPreference.EMPTY);
        mRouter.registerRouteListingPreferenceUpdatedCallback(
                mExecutor, mRouteListingPreferenceCallback);
        mRouter.registerDeviceSuggestionsCallback(mExecutor, mDeviceSuggestionsCallback);
        mRouter.registerDeviceSuggestionsUpdatesCallback(
                mExecutor, mDeviceSuggestionsUpdatesCallback);
        if (Flags.enableSuggestedDeviceApi()) {
            for (Map.Entry<String, List<SuggestedDeviceInfo>> entry :
                    mRouter.getDeviceSuggestions().entrySet()) {
@@ -184,7 +191,7 @@ public final class RouterInfoMediaManager extends InfoMediaManager {
        mRouter.unregisterControllerCallback(mControllerCallback);
        mRouter.unregisterTransferCallback(mTransferCallback);
        mRouter.unregisterRouteListingPreferenceUpdatedCallback(mRouteListingPreferenceCallback);
        mRouter.unregisterDeviceSuggestionsCallback(mDeviceSuggestionsCallback);
        mRouter.unregisterDeviceSuggestionsUpdatesCallback(mDeviceSuggestionsUpdatesCallback);
        mRouter.unregisterRouteCallback(mRouteCallback);
    }

+51 −49

File changed.

Preview size limit exceeded, changes collapsed.