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

Commit ccb9587a authored by Kyunglyul Hyun's avatar Kyunglyul Hyun
Browse files

Make MediaRouter2Manager connect to the system ASAP

With this CL, some methods such as getAllRoutes, getActiveSessions
can be used without registering a callback.

Bug: 155042836
Test: atest mediaroutertest
Change-Id: Iba38d73a95c1d184bc89ff91d128b00109029d0a
parent 47059f76
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);