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

Commit 7eb97fee authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add a new verison of onDiscoveryPreferenceChanged" into main

parents 799e09d8 e5c0bd1f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25346,6 +25346,7 @@ package android.media {
    method @FlaggedApi("com.android.media.flags.enable_mirroring_in_media_router_2") public void onCreateSystemRoutingSession(long, @NonNull String, @NonNull android.media.MediaRoute2ProviderService.SystemRoutingSessionParams);
    method public abstract void onDeselectRoute(long, @NonNull String, @NonNull String);
    method public void onDiscoveryPreferenceChanged(@NonNull android.media.RouteDiscoveryPreference);
    method @FlaggedApi("com.android.media.flags.enable_route_visibility_control_api") @RequiresPermission(value=android.Manifest.permission.MEDIA_CONTENT_CONTROL, conditional=true) public void onDiscoveryPreferenceChanged(@NonNull android.media.RouteDiscoveryPreference, @NonNull java.util.Map<java.lang.String,android.media.RouteDiscoveryPreference>);
    method public abstract void onReleaseSession(long, @NonNull String);
    method public abstract void onSelectRoute(long, @NonNull String, @NonNull String);
    method public abstract void onSetRouteVolume(long, @NonNull String, int);
+3 −1
Original line number Diff line number Diff line
@@ -28,7 +28,9 @@ oneway interface IMediaRoute2ProviderService {
    // Note: When changing this file, match the order of methods below with
    // MediaRoute2ProviderService#MediaRoute2ProviderServiceStub for readability.
    void setCallback(IMediaRoute2ProviderServiceCallback callback);
    void updateDiscoveryPreference(in RouteDiscoveryPreference discoveryPreference);
    void updateDiscoveryPreference(
            in RouteDiscoveryPreference discoveryPreference,
            in Map<String, RouteDiscoveryPreference> perAppPreferences);
    void setRouteVolume(long requestId, String routeId, int volume);

    void requestCreateSession(long requestId, String packageName, String routeId,
+29 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.media;

import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
import static com.android.media.flags.Flags.FLAG_ENABLE_ROUTE_VISIBILITY_CONTROL_API;

import static java.util.Objects.requireNonNull;

@@ -55,6 +56,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Deque;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;

@@ -757,6 +759,29 @@ public abstract class MediaRoute2ProviderService extends Service {
     */
    public void onDiscoveryPreferenceChanged(@NonNull RouteDiscoveryPreference preference) {}

    /**
     * Called when any individual app's {@link RouteDiscoveryPreference discovery preference} has
     * changed, which typically means the composite preference has also changed.
     *
     * <p>This is similar to {@link #onDiscoveryPreferenceChanged(RouteDiscoveryPreference)} but
     * provides more granular per-app preference information if the provider has permission to see
     * it.
     *
     * @param compositePreference A composite object aggregating the route preferences for all apps
     *                            with registered {@link MediaRouter2.RouteCallback callbacks}.
     * @param perAppPreferences   A mapping of app package name to the
     *                            {@link RouteDiscoveryPreference discovery preference} just for
     *                            that app. This map will only be populated if the caller holds the
     *                            {@link Manifest.permission#MEDIA_CONTENT_CONTROL
     *                            MEDIA_CONTENT_CONTROL} permission.
     */
    @FlaggedApi(FLAG_ENABLE_ROUTE_VISIBILITY_CONTROL_API)
    @RequiresPermission(value = Manifest.permission.MEDIA_CONTENT_CONTROL, conditional = true)
    public void onDiscoveryPreferenceChanged(@NonNull RouteDiscoveryPreference compositePreference,
            @NonNull Map<String, RouteDiscoveryPreference> perAppPreferences) {
        onDiscoveryPreferenceChanged(compositePreference);
    }

    /**
     * Updates routes of the provider and notifies the system media router service.
     *
@@ -943,13 +968,15 @@ public abstract class MediaRoute2ProviderService extends Service {
        }

        @Override
        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference,
                @NonNull Map<String, RouteDiscoveryPreference> perAppPreferences) {
            if (!checkCallerIsSystem()) {
                return;
            }
            mHandler.sendMessage(obtainMessage(
                    MediaRoute2ProviderService::onDiscoveryPreferenceChanged,
                    MediaRoute2ProviderService.this, discoveryPreference));
                    MediaRoute2ProviderService.this, discoveryPreference,
                    perAppPreferences));
        }

        @Override
+3 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.internal.annotations.GuardedBy;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

@@ -71,7 +72,8 @@ abstract class MediaRoute2Provider {
    public abstract void releaseSession(long requestId, String sessionId);

    public abstract void updateDiscoveryPreference(
            Set<String> activelyScanningPackages, RouteDiscoveryPreference discoveryPreference);
            Set<String> activelyScanningPackages, RouteDiscoveryPreference discoveryPreference,
            Map<String, RouteDiscoveryPreference> perAppPreferences);

    public abstract void selectRoute(long requestId, String sessionId, String routeId);
    public abstract void deselectRoute(long requestId, String sessionId, String routeId);
+20 −5
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.media;

import static android.Manifest.permission.MEDIA_CONTENT_CONTROL;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.media.MediaRoute2ProviderService.REASON_REJECTED;
import static android.media.MediaRoute2ProviderService.REQUEST_ID_NONE;

@@ -27,6 +29,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.media.IMediaRoute2ProviderService;
import android.media.IMediaRoute2ProviderServiceCallback;
import android.media.MediaRoute2Info;
@@ -66,6 +69,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

    private final Context mContext;
    private PackageManager mPackageManager;
    private final int mUserId;
    private final Handler mHandler;
    private final boolean mIsSelfScanOnlyProvider;
@@ -79,6 +83,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
    private boolean mConnectionReady;

    private RouteDiscoveryPreference mLastDiscoveryPreference = null;
    private Map<String, RouteDiscoveryPreference> mLastPerAppPreferences = null;
    private boolean mLastDiscoveryPreferenceIncludesThisPackage = false;

    @GuardedBy("mLock")
@@ -108,6 +113,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
            int userId) {
        super(componentName, /* isSystemRouteProvider= */ false);
        mContext = Objects.requireNonNull(context, "Context must not be null.");
        mPackageManager = mContext.getPackageManager();
        mRequestIdToSessionCreationRequest = new LongSparseArray<>();
        mSessionOriginalIdToTransferRequest = new HashMap<>();
        mRequestIdToSystemSessionRequest = new LongSparseArray<>();
@@ -161,12 +167,14 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {

    @Override
    public void updateDiscoveryPreference(
            Set<String> activelyScanningPackages, RouteDiscoveryPreference discoveryPreference) {
            Set<String> activelyScanningPackages, RouteDiscoveryPreference discoveryPreference,
            Map<String, RouteDiscoveryPreference> perAppPreferences) {
        mLastDiscoveryPreference = discoveryPreference;
        mLastPerAppPreferences = perAppPreferences;
        mLastDiscoveryPreferenceIncludesThisPackage =
                activelyScanningPackages.contains(mComponentName.getPackageName());
        if (mConnectionReady) {
            mActiveConnection.updateDiscoveryPreference(discoveryPreference);
            mActiveConnection.updateDiscoveryPreference(discoveryPreference, perAppPreferences);
        }
        updateBinding();
    }
@@ -457,7 +465,8 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
                        mLastDiscoveryPreferenceIncludesThisPackage
                                ? Set.of(mComponentName.getPackageName())
                                : Set.of(),
                        mLastDiscoveryPreference);
                        mLastDiscoveryPreference,
                        mLastPerAppPreferences);
            }
        }
    }
@@ -888,9 +897,15 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
            }
        }

        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
        public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference,
                Map<String, RouteDiscoveryPreference> perAppPreferences) {
            if (!Flags.enableRouteVisibilityControlApi() || perAppPreferences == null
                    || mPackageManager.checkPermission(MEDIA_CONTENT_CONTROL,
                    mComponentName.getPackageName()) != PERMISSION_GRANTED) {
                perAppPreferences = Map.of();
            }
            try {
                mService.updateDiscoveryPreference(discoveryPreference);
                mService.updateDiscoveryPreference(discoveryPreference, perAppPreferences);
            } catch (RemoteException ex) {
                Slog.e(TAG, "updateDiscoveryPreference: Failed to deliver request.");
            }
Loading