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

Commit c5f09e6e authored by Alex Dadukin's avatar Alex Dadukin Committed by Santiago Seifert
Browse files

Propagate UserHandle from SysUI to the MediaRouterService

Bug: b/279555229
Test: Pending
Flag: ACONFIG com.android.media.flags.enable_built_in_speaker_route_suitability_statuses TRUNKFOOD
Change-Id: I25cc308c0a791ad710499d4626eecfbe03d119fd
parent 63f75075
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2713,7 +2713,7 @@ public final class MediaRouter2 {

            List<RoutingSessionInfo> sessionInfos = getRoutingSessions();
            RoutingSessionInfo targetSession = sessionInfos.get(sessionInfos.size() - 1);
            transfer(targetSession, route, Process.myUserHandle(), mContext.getPackageName());
            transfer(targetSession, route, mClientUser, mContext.getPackageName());
        }

        @Override
+15 −3
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import android.media.MediaRoute2Info;
import android.media.RouteListingPreference;
import android.media.RoutingSessionInfo;
import android.os.Build;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;

@@ -131,6 +132,7 @@ public abstract class InfoMediaManager {
    protected final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
    @NonNull protected final Context mContext;
    @NonNull protected final String mPackageName;
    @NonNull protected final UserHandle mUserHandle;
    private final Collection<MediaDeviceCallback> mCallbacks = new CopyOnWriteArrayList<>();
    private MediaDevice mCurrentConnectedDevice;
    private final LocalBluetoothManager mBluetoothManager;
@@ -140,16 +142,19 @@ public abstract class InfoMediaManager {
    /* package */ InfoMediaManager(
            @NonNull Context context,
            @NonNull String packageName,
            @NonNull UserHandle userHandle,
            @NonNull LocalBluetoothManager localBluetoothManager) {
        mContext = context;
        mBluetoothManager = localBluetoothManager;
        mPackageName = packageName;
        mUserHandle = userHandle;
    }

    /** Creates an instance of InfoMediaManager. */
    public static InfoMediaManager createInstance(
            Context context,
            @Nullable String packageName,
            @Nullable UserHandle userHandle,
            LocalBluetoothManager localBluetoothManager) {

        // The caller is only interested in system routes (headsets, built-in speakers, etc), and is
@@ -159,16 +164,23 @@ public abstract class InfoMediaManager {
            packageName = context.getPackageName();
        }

        if (userHandle == null) {
            userHandle = android.os.Process.myUserHandle();
        }

        if (Flags.useMediaRouter2ForInfoMediaManager()) {
            try {
                return new RouterInfoMediaManager(context, packageName, localBluetoothManager);
                return new RouterInfoMediaManager(
                        context, packageName, userHandle, localBluetoothManager);
            } catch (PackageNotAvailableException ex) {
                // TODO: b/293578081 - Propagate this exception to callers for proper handling.
                Log.w(TAG, "Returning a no-op InfoMediaManager for package " + packageName);
                return new NoOpInfoMediaManager(context, packageName, localBluetoothManager);
                return new NoOpInfoMediaManager(
                        context, packageName, userHandle, localBluetoothManager);
            }
        } else {
            return new ManagerInfoMediaManager(context, packageName, localBluetoothManager);
            return new ManagerInfoMediaManager(
                    context, packageName, userHandle, localBluetoothManager);
        }
    }

+4 −1
Original line number Diff line number Diff line
@@ -138,7 +138,10 @@ public class LocalMediaManager implements BluetoothCallback {
        }

        mInfoMediaManager =
                InfoMediaManager.createInstance(context, packageName, mLocalBluetoothManager);
                // TODO: b/321969740 - Take the userHandle as a parameter and pass it through. The
                // package name is not sufficient to unambiguously identify an app.
                InfoMediaManager.createInstance(
                        context, packageName, /* userHandle */ null, mLocalBluetoothManager);
    }

    /**
+4 −3
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RouteListingPreference;
import android.media.RoutingSessionInfo;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;

@@ -53,8 +54,9 @@ public class ManagerInfoMediaManager extends InfoMediaManager {
    /* package */ ManagerInfoMediaManager(
            Context context,
            @NonNull String packageName,
            @NonNull UserHandle userHandle,
            LocalBluetoothManager localBluetoothManager) {
        super(context, packageName, localBluetoothManager);
        super(context, packageName, userHandle, localBluetoothManager);

        mRouterManager = MediaRouter2Manager.getInstance(context);
    }
@@ -87,8 +89,7 @@ public class ManagerInfoMediaManager extends InfoMediaManager {

    @Override
    protected void transferToRoute(@NonNull MediaRoute2Info route) {
        // TODO: b/279555229 - provide real user handle of a caller.
        mRouterManager.transfer(mPackageName, route, android.os.Process.myUserHandle());
        mRouterManager.transfer(mPackageName, route, mUserHandle);
    }

    @Override
+3 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context;
import android.media.MediaRoute2Info;
import android.media.RouteListingPreference;
import android.media.RoutingSessionInfo;
import android.os.UserHandle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -58,8 +59,9 @@ import java.util.List;
    NoOpInfoMediaManager(
            Context context,
            @NonNull String packageName,
            @NonNull UserHandle userHandle,
            LocalBluetoothManager localBluetoothManager) {
        super(context, packageName, localBluetoothManager);
        super(context, packageName, userHandle, localBluetoothManager);
    }

    @Override
Loading