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

Commit d8f84891 authored by Iván Budnik's avatar Iván Budnik
Browse files

Use Consumer for RouteListingPreference callback instead of SAM

This change addresses API review feedback in b/299977890.

Bug: 299977890
Bug: 281067101
Test: atest SystemMediaRouter2Test MediaRouter2Test
Change-Id: Ica6f0ebd9d583739d8e7ca15d733da62cdf6e657
parent d7e06cff
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -23981,7 +23981,7 @@ package android.media {
    method @NonNull public android.media.MediaRouter2.RoutingController getSystemController();
    method public void registerControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.ControllerCallback);
    method public void registerRouteCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.RouteCallback, @NonNull android.media.RouteDiscoveryPreference);
    method @FlaggedApi("com.android.media.flags.enable_rlp_callbacks_in_media_router2") public void registerRouteListingPreferenceCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.RouteListingPreferenceCallback);
    method @FlaggedApi("com.android.media.flags.enable_rlp_callbacks_in_media_router2") 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);
    method public void setOnGetControllerHintsListener(@Nullable android.media.MediaRouter2.OnGetControllerHintsListener);
    method public void setRouteListingPreference(@Nullable android.media.RouteListingPreference);
@@ -23990,7 +23990,7 @@ package android.media {
    method public void transferTo(@NonNull android.media.MediaRoute2Info);
    method public void unregisterControllerCallback(@NonNull android.media.MediaRouter2.ControllerCallback);
    method public void unregisterRouteCallback(@NonNull android.media.MediaRouter2.RouteCallback);
    method @FlaggedApi("com.android.media.flags.enable_rlp_callbacks_in_media_router2") public void unregisterRouteListingPreferenceCallback(@NonNull android.media.MediaRouter2.RouteListingPreferenceCallback);
    method @FlaggedApi("com.android.media.flags.enable_rlp_callbacks_in_media_router2") public void unregisterRouteListingPreferenceUpdatedCallback(@NonNull java.util.function.Consumer<android.media.RouteListingPreference>);
    method public void unregisterTransferCallback(@NonNull android.media.MediaRouter2.TransferCallback);
  }
@@ -24011,11 +24011,6 @@ package android.media {
    method public void onRoutesUpdated(@NonNull java.util.List<android.media.MediaRoute2Info>);
  }
  @FlaggedApi("com.android.media.flags.enable_rlp_callbacks_in_media_router2") public abstract static class MediaRouter2.RouteListingPreferenceCallback {
    ctor @FlaggedApi("com.android.media.flags.enable_rlp_callbacks_in_media_router2") public MediaRouter2.RouteListingPreferenceCallback();
    method @FlaggedApi("com.android.media.flags.enable_rlp_callbacks_in_media_router2") public void onRouteListingPreferenceChanged(@Nullable android.media.RouteListingPreference);
  }
  public class MediaRouter2.RoutingController {
    method public void deselectRoute(@NonNull android.media.MediaRoute2Info);
    method @Nullable public android.os.Bundle getControlHints();
+14 −26
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.stream.Collectors;

/**
@@ -383,9 +384,9 @@ public final class MediaRouter2 {
     * @see #setRouteListingPreference(RouteListingPreference)
     */
    @FlaggedApi(FLAG_ENABLE_RLP_CALLBACKS_IN_MEDIA_ROUTER2)
    public void registerRouteListingPreferenceCallback(
    public void registerRouteListingPreferenceUpdatedCallback(
            @NonNull @CallbackExecutor Executor executor,
            @NonNull RouteListingPreferenceCallback routeListingPreferenceCallback) {
            @NonNull Consumer<RouteListingPreference> routeListingPreferenceCallback) {
        Objects.requireNonNull(executor, "executor must not be null");
        Objects.requireNonNull(routeListingPreferenceCallback, "callback must not be null");

@@ -398,15 +399,20 @@ public final class MediaRouter2 {

    /**
     * Unregisters the given callback to not receive {@link RouteListingPreference} change events.
     *
     * @see #registerRouteListingPreferenceUpdatedCallback(Executor, Consumer)
     */
    @FlaggedApi(FLAG_ENABLE_RLP_CALLBACKS_IN_MEDIA_ROUTER2)
    public void unregisterRouteListingPreferenceCallback(
            @NonNull RouteListingPreferenceCallback callback) {
    public void unregisterRouteListingPreferenceUpdatedCallback(
            @NonNull Consumer<RouteListingPreference> callback) {
        Objects.requireNonNull(callback, "callback must not be null");

        if (!mListingPreferenceCallbackRecords.remove(
                new RouteListingPreferenceCallbackRecord(/* executor */ null, callback))) {
            Log.w(TAG, "unregisterRouteListingPreferenceCallback: Ignoring an unknown callback");
            Log.w(
                    TAG,
                    "unregisterRouteListingPreferenceUpdatedCallback: Ignoring an unknown"
                        + " callback");
        }
    }

@@ -1119,9 +1125,7 @@ public final class MediaRouter2 {
    private void notifyRouteListingPreferenceUpdated(@Nullable RouteListingPreference preference) {
        for (RouteListingPreferenceCallbackRecord record : mListingPreferenceCallbackRecords) {
            record.mExecutor.execute(
                    () ->
                            record.mRouteListingPreferenceCallback.onRouteListingPreferenceChanged(
                                    preference));
                    () -> record.mRouteListingPreferenceCallback.accept(preference));
        }
    }

@@ -1208,22 +1212,6 @@ public final class MediaRouter2 {
        public void onPreferredFeaturesChanged(@NonNull List<String> preferredFeatures) {}
    }

    /** Callback for receiving events related to {@link RouteListingPreference}. */
    @FlaggedApi(FLAG_ENABLE_RLP_CALLBACKS_IN_MEDIA_ROUTER2)
    public abstract static class RouteListingPreferenceCallback {

        @FlaggedApi(FLAG_ENABLE_RLP_CALLBACKS_IN_MEDIA_ROUTER2)
        public RouteListingPreferenceCallback() {}

        /**
         * Called when the {@link RouteListingPreference} changes.
         *
         * @see #getRouteListingPreference
         */
        @FlaggedApi(FLAG_ENABLE_RLP_CALLBACKS_IN_MEDIA_ROUTER2)
        public void onRouteListingPreferenceChanged(@Nullable RouteListingPreference preference) {}
    }

    /** Callback for receiving events on media transfer. */
    public abstract static class TransferCallback {
        /**
@@ -1774,11 +1762,11 @@ public final class MediaRouter2 {

    private static final class RouteListingPreferenceCallbackRecord {
        public final Executor mExecutor;
        public final RouteListingPreferenceCallback mRouteListingPreferenceCallback;
        public final Consumer<RouteListingPreference> mRouteListingPreferenceCallback;

        /* package */ RouteListingPreferenceCallbackRecord(
                @NonNull Executor executor,
                @NonNull RouteListingPreferenceCallback routeListingPreferenceCallback) {
                @NonNull Consumer<RouteListingPreference> routeListingPreferenceCallback) {
            mExecutor = executor;
            mRouteListingPreferenceCallback = routeListingPreferenceCallback;
        }
+9 −13
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import java.util.Collections;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.function.Consumer;
import java.util.stream.Collectors;

/** Implements {@link InfoMediaManager} using {@link MediaRouter2}. */
@@ -54,8 +55,11 @@ public final class RouterInfoMediaManager extends InfoMediaManager {
    private final RouteCallback mRouteCallback = new RouteCallback();
    private final TransferCallback mTransferCallback = new TransferCallback();
    private final ControllerCallback mControllerCallback = new ControllerCallback();
    private final RouteListingPreferenceCallback mRouteListingPreferenceCallback =
            new RouteListingPreferenceCallback();
    private final Consumer<RouteListingPreference> mRouteListingPreferenceCallback =
            (preference) -> {
                notifyRouteListingPreferenceUpdated(preference);
                refreshDevices();
            };

    // TODO: b/192657812 - Create factory method in InfoMediaManager to return
    //      RouterInfoMediaManager or ManagerInfoMediaManager based on flag.
@@ -83,7 +87,8 @@ public final class RouterInfoMediaManager extends InfoMediaManager {
    @Override
    protected void startScanOnRouter() {
        mRouter.registerRouteCallback(mExecutor, mRouteCallback, RouteDiscoveryPreference.EMPTY);
        mRouter.registerRouteListingPreferenceCallback(mExecutor, mRouteListingPreferenceCallback);
        mRouter.registerRouteListingPreferenceUpdatedCallback(
                mExecutor, mRouteListingPreferenceCallback);
        mRouter.registerTransferCallback(mExecutor, mTransferCallback);
        mRouter.registerControllerCallback(mExecutor, mControllerCallback);
        mRouter.startScan();
@@ -94,7 +99,7 @@ public final class RouterInfoMediaManager extends InfoMediaManager {
        mRouter.stopScan();
        mRouter.unregisterControllerCallback(mControllerCallback);
        mRouter.unregisterTransferCallback(mTransferCallback);
        mRouter.unregisterRouteListingPreferenceCallback(mRouteListingPreferenceCallback);
        mRouter.unregisterRouteListingPreferenceUpdatedCallback(mRouteListingPreferenceCallback);
        mRouter.unregisterRouteCallback(mRouteCallback);
    }

@@ -308,13 +313,4 @@ public final class RouterInfoMediaManager extends InfoMediaManager {
            refreshDevices();
        }
    }

    private final class RouteListingPreferenceCallback
            extends MediaRouter2.RouteListingPreferenceCallback {
        @Override
        public void onRouteListingPreferenceChanged(@Nullable RouteListingPreference preference) {
            notifyRouteListingPreferenceUpdated(preference);
            refreshDevices();
        }
    }
}