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

Commit 15cd47ed authored by Kyunglyul Hyun's avatar Kyunglyul Hyun Committed by Android (Google) Code Review
Browse files

Merge "Make MediaRouter2Manager connect to the system ASAP" into rvc-dev

parents 4b510ab9 ccb9587a
Loading
Loading
Loading
Loading
+30 −63
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ public final class MediaRouter2Manager {
                .getSystemService(Context.MEDIA_SESSION_SERVICE);
        mPackageName = mContext.getPackageName();
        mHandler = new Handler(context.getMainLooper());
        mHandler.post(this::getOrCreateClient);
    }

    /**
@@ -118,18 +119,6 @@ public final class MediaRouter2Manager {
            Log.w(TAG, "Ignoring to add the same callback twice.");
            return;
        }

        synchronized (sLock) {
            if (mClient == null) {
                Client client = new Client();
                try {
                    mMediaRouterService.registerManager(client, mPackageName);
                    mClient = client;
                } catch (RemoteException ex) {
                    Log.e(TAG, "Unable to register media router manager.", ex);
                }
            }
        }
    }

    /**
@@ -144,21 +133,6 @@ public final class MediaRouter2Manager {
            Log.w(TAG, "unregisterCallback: Ignore unknown callback. " + callback);
            return;
        }

        synchronized (sLock) {
            if (mCallbackRecords.size() == 0) {
                if (mClient != null) {
                    try {
                        mMediaRouterService.unregisterManager(mClient);
                    } catch (RemoteException ex) {
                        Log.e(TAG, "Unable to unregister media router manager", ex);
                    }
                    mClient = null;
                }
                mRoutes.clear();
                mPreferredFeaturesMap.clear();
            }
        }
    }

    /**
@@ -314,10 +288,7 @@ public final class MediaRouter2Manager {
     */
    @NonNull
    public List<RoutingSessionInfo> getActiveSessions() {
        Client client;
        synchronized (sLock) {
            client = mClient;
        }
        Client client = getOrCreateClient();
        if (client != null) {
            try {
                return mMediaRouterService.getActiveSessions(client);
@@ -380,10 +351,7 @@ public final class MediaRouter2Manager {
            return;
        }

        Client client;
        synchronized (sLock) {
            client = mClient;
        }
        Client client = getOrCreateClient();
        if (client != null) {
            try {
                int requestId = mNextRequestId.getAndIncrement();
@@ -419,10 +387,7 @@ public final class MediaRouter2Manager {
            return;
        }

        Client client;
        synchronized (sLock) {
            client = mClient;
        }
        Client client = getOrCreateClient();
        if (client != null) {
            try {
                int requestId = mNextRequestId.getAndIncrement();
@@ -451,10 +416,7 @@ public final class MediaRouter2Manager {
            return;
        }

        Client client;
        synchronized (sLock) {
            client = mClient;
        }
        Client client = getOrCreateClient();
        if (client != null) {
            try {
                int requestId = mNextRequestId.getAndIncrement();
@@ -710,15 +672,12 @@ public final class MediaRouter2Manager {
            return;
        }

        Client client;
        synchronized (sLock) {
            client = mClient;
        }
        Client client = getOrCreateClient();
        if (client != null) {
            try {
                int requestId = mNextRequestId.getAndIncrement();
                mMediaRouterService.selectRouteWithManager(
                        mClient, requestId, sessionInfo.getId(), route);
                        client, requestId, sessionInfo.getId(), route);
            } catch (RemoteException ex) {
                Log.e(TAG, "selectRoute: Failed to send a request.", ex);
            }
@@ -755,15 +714,12 @@ public final class MediaRouter2Manager {
            return;
        }

        Client client;
        synchronized (sLock) {
            client = mClient;
        }
        Client client = getOrCreateClient();
        if (client != null) {
            try {
                int requestId = mNextRequestId.getAndIncrement();
                mMediaRouterService.deselectRouteWithManager(
                        mClient, requestId, sessionInfo.getId(), route);
                        client, requestId, sessionInfo.getId(), route);
            } catch (RemoteException ex) {
                Log.e(TAG, "deselectRoute: Failed to send a request.", ex);
            }
@@ -794,14 +750,11 @@ public final class MediaRouter2Manager {
        int requestId = mNextRequestId.getAndIncrement();
        mTransferRequests.add(new TransferRequest(requestId, sessionInfo, route));

        Client client;
        synchronized (sLock) {
            client = mClient;
        }
        Client client = getOrCreateClient();
        if (client != null) {
            try {
                mMediaRouterService.transferToRouteWithManager(
                        mClient, requestId, sessionInfo.getId(), route);
                        client, requestId, sessionInfo.getId(), route);
            } catch (RemoteException ex) {
                Log.e(TAG, "transferToRoute: Failed to send a request.", ex);
            }
@@ -821,15 +774,12 @@ public final class MediaRouter2Manager {
    public void releaseSession(@NonNull RoutingSessionInfo sessionInfo) {
        Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");

        Client client;
        synchronized (sLock) {
            client = mClient;
        }
        Client client = getOrCreateClient();
        if (client != null) {
            try {
                int requestId = mNextRequestId.getAndIncrement();
                mMediaRouterService.releaseSessionWithManager(
                        mClient, requestId, sessionInfo.getId());
                        client, requestId, sessionInfo.getId());
            } catch (RemoteException ex) {
                Log.e(TAG, "releaseSession: Failed to send a request", ex);
            }
@@ -857,6 +807,23 @@ public final class MediaRouter2Manager {
                sessionInfo.getOwnerPackageName());
    }

    private Client getOrCreateClient() {
        synchronized (sLock) {
            if (mClient != null) {
                return mClient;
            }
            Client client = new Client();
            try {
                mMediaRouterService.registerManager(client, mPackageName);
                mClient = client;
                return client;
            } catch (RemoteException ex) {
                Log.e(TAG, "Unable to register media router manager.", ex);
            }
        }
        return null;
    }

    /**
     * Interface for receiving events about media routing changes.
     */
+5 −0
Original line number Diff line number Diff line
@@ -603,6 +603,11 @@ public class MediaRouter2ManagerTest {
        assertTrue(onSessionCreatedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
    }

    @Test
    public void testGetActiveSessions_returnsNonEmptyList() {
        assertFalse(mManager.getActiveSessions().isEmpty());
    }

    Map<String, MediaRoute2Info> waitAndGetRoutesWithManager(List<String> routeFeatures)
            throws Exception {
        CountDownLatch addedLatch = new CountDownLatch(1);