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

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

Extract special method implementations in MediaRouter2

This is the first refactoring step to separate the implementation of
privileged and regular MediaRouter2 instances. This is a non-functional
change.

Test: atest CtsMediaBetterTogetherTestCases
Bug: 192657812
Change-Id: Ieb85e631a01730294f52ea1ee991f00cba74ce50
parent 2a5d05f1
Loading
Loading
Loading
Loading
+191 −138
Original line number Diff line number Diff line
@@ -256,6 +256,10 @@ public final class MediaRouter2 {
    @SystemApi
    @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL)
    public void startScan() {
        startScanImpl();
    }

    private void startScanImpl() {
        if (isSystemRouter()) {
            if (!mIsScanning.getAndSet(true)) {
                sManager.registerScanRequest();
@@ -284,6 +288,10 @@ public final class MediaRouter2 {
    @SystemApi
    @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL)
    public void stopScan() {
        stopScanImpl();
    }

    private void stopScanImpl() {
        if (isSystemRouter()) {
            if (mIsScanning.getAndSet(false)) {
                sManager.unregisterScanRequest();
@@ -396,10 +404,11 @@ public final class MediaRouter2 {
        // is happening but it's okay because either this or the other registration should be done.
        mRouteCallbackRecords.addIfAbsent(record);

        if (isSystemRouter()) {
            return;
        registerRouteCallbackImpl();
    }

    private void registerRouteCallbackImpl() {
        if (!isSystemRouter()) {
            synchronized (mLock) {
                if (mStub == null) {
                    MediaRouter2Stub stub = new MediaRouter2Stub();
@@ -412,13 +421,15 @@ public final class MediaRouter2 {
                }
                if (mStub != null && updateDiscoveryPreferenceIfNeededLocked()) {
                    try {
                    mMediaRouterService.setDiscoveryRequestWithRouter2(mStub, mDiscoveryPreference);
                        mMediaRouterService.setDiscoveryRequestWithRouter2(
                                mStub, mDiscoveryPreference);
                    } catch (RemoteException ex) {
                        ex.rethrowFromSystemServer();
                    }
                }
            }
        }
    }

    /**
     * Unregisters the given callback. The callback will no longer receive events. If the callback
@@ -435,17 +446,19 @@ public final class MediaRouter2 {
            return;
        }

        if (isSystemRouter()) {
            return;
        unregisterRouteCallbackImpl();
    }

    private void unregisterRouteCallbackImpl() {
        if (!isSystemRouter()) {
            synchronized (mLock) {
                if (mStub == null) {
                    return;
                }
                if (updateDiscoveryPreferenceIfNeededLocked()) {
                    try {
                    mMediaRouterService.setDiscoveryRequestWithRouter2(mStub, mDiscoveryPreference);
                        mMediaRouterService.setDiscoveryRequestWithRouter2(
                                mStub, mDiscoveryPreference);
                    } catch (RemoteException ex) {
                        Log.e(TAG, "unregisterRouteCallback: Unable to set discovery request.", ex);
                    }
@@ -460,6 +473,7 @@ public final class MediaRouter2 {
                }
            }
        }
    }

    /**
     * Shows the system output switcher dialog.
@@ -559,11 +573,16 @@ public final class MediaRouter2 {
    @SystemApi
    @NonNull
    public List<MediaRoute2Info> getAllRoutes() {
        return getAllRoutesImpl();
    }

    private List<MediaRoute2Info> getAllRoutesImpl() {
        if (isSystemRouter()) {
            return sManager.getAllRoutes();
        }
        } else {
            return Collections.emptyList();
        }
    }

    /**
     * Gets the unmodifiable list of {@link MediaRoute2Info routes} currently known to the media
@@ -659,11 +678,14 @@ public final class MediaRouter2 {
     *     {@code null} for unset.
     */
    public void setOnGetControllerHintsListener(@Nullable OnGetControllerHintsListener listener) {
        if (isSystemRouter()) {
            return;
        setOnGetControllerHintsListenerImpl(listener);
    }

    private void setOnGetControllerHintsListenerImpl(OnGetControllerHintsListener listener) {
        if (!isSystemRouter()) {
            mOnGetControllerHintsListener = listener;
        }
    }

    /**
     * Transfers the current media to the given route. If it's necessary a new
@@ -675,11 +697,11 @@ public final class MediaRouter2 {
     * @see TransferCallback#onTransferFailure
     */
    public void transferTo(@NonNull MediaRoute2Info route) {
        if (isSystemRouter()) {
            sManager.transfer(mClientPackageName, route);
            return;
        transferToImpl(route);
    }

    private void transferToImpl(MediaRoute2Info route) {
        if (!isSystemRouter()) {
            Log.v(TAG, "Transferring to route: " + route);

            boolean routeFound;
@@ -693,12 +715,18 @@ public final class MediaRouter2 {
            }

            RoutingController controller = getCurrentController();
        if (controller.getRoutingSessionInfo().getTransferableRoutes().contains(route.getId())) {
            if (controller
                    .getRoutingSessionInfo()
                    .getTransferableRoutes()
                    .contains(route.getId())) {
                controller.transferToRoute(route);
                return;
            }

            requestCreateController(controller, route, MANAGER_REQUEST_ID_NONE);
        } else {
            sManager.transfer(mClientPackageName, route);
        }
    }

    /**
@@ -706,13 +734,17 @@ public final class MediaRouter2 {
     * controls the media routing, this method is a no-op.
     */
    public void stop() {
        if (isSystemRouter()) {
        stopImpl();
    }

    private void stopImpl() {
        if (!isSystemRouter()) {
            getCurrentController().release();
        } else {
            List<RoutingSessionInfo> sessionInfos = sManager.getRoutingSessions(mClientPackageName);
            RoutingSessionInfo sessionToRelease = sessionInfos.get(sessionInfos.size() - 1);
            sManager.releaseSession(sessionToRelease);
            return;
        }
        getCurrentController().release();
    }

    /**
@@ -727,9 +759,12 @@ public final class MediaRouter2 {
    @SystemApi
    @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL)
    public void transfer(@NonNull RoutingController controller, @NonNull MediaRoute2Info route) {
        transferImpl(controller, route);
    }

    private void transferImpl(RoutingController controller, MediaRoute2Info route) {
        if (isSystemRouter()) {
            sManager.transfer(controller.getRoutingSessionInfo(), route);
            return;
        }
    }

@@ -821,9 +856,18 @@ public final class MediaRouter2 {
     */
    @NonNull
    public List<RoutingController> getControllers() {
        return getControllersImpl();
    }

    private List<RoutingController> getControllersImpl() {
        List<RoutingController> result = new ArrayList<>();

        if (isSystemRouter()) {
        if (!isSystemRouter()) {
            result.add(0, mSystemController);
            synchronized (mLock) {
                result.addAll(mNonSystemRoutingControllers.values());
            }
        } else {
            // Unlike non-system MediaRouter2, controller instances cannot be kept,
            // since the transfer events initiated from other apps will not come through manager.
            List<RoutingSessionInfo> sessions = sManager.getRoutingSessions(mClientPackageName);
@@ -838,12 +882,6 @@ public final class MediaRouter2 {
                }
                result.add(controller);
            }
            return result;
        }

        result.add(0, mSystemController);
        synchronized (mLock) {
            result.addAll(mNonSystemRoutingControllers.values());
        }
        return result;
    }
@@ -863,9 +901,12 @@ public final class MediaRouter2 {
    public void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
        Objects.requireNonNull(route, "route must not be null");

        setRouteVolumeImpl(route, volume);
    }

    private void setRouteVolumeImpl(MediaRoute2Info route, int volume) {
        if (isSystemRouter()) {
            sManager.setRouteVolume(route, volume);
            return;
        }
        // If this API needs to be public, use IMediaRouterService#setRouteVolumeWithRouter2()
    }
@@ -1641,11 +1682,11 @@ public final class MediaRouter2 {
                return;
            }

            if (isSystemRouter()) {
                sManager.selectRoute(getRoutingSessionInfo(), route);
                return;
            selectRouteImpl(route);
        }

        private void selectRouteImpl(MediaRoute2Info route) {
            if (!isSystemRouter()) {
                MediaRouter2Stub stub;
                synchronized (mLock) {
                    stub = mStub;
@@ -1657,6 +1698,9 @@ public final class MediaRouter2 {
                        Log.e(TAG, "Unable to select route for session.", ex);
                    }
                }
            } else {
                sManager.selectRoute(getRoutingSessionInfo(), route);
            }
        }

        /**
@@ -1695,11 +1739,11 @@ public final class MediaRouter2 {
                return;
            }

            if (isSystemRouter()) {
                sManager.deselectRoute(getRoutingSessionInfo(), route);
                return;
            deselectRouteImpl(route);
        }

        private void deselectRouteImpl(MediaRoute2Info route) {
            if (!isSystemRouter()) {
                MediaRouter2Stub stub;
                synchronized (mLock) {
                    stub = mStub;
@@ -1711,6 +1755,9 @@ public final class MediaRouter2 {
                        Log.e(TAG, "Unable to deselect route from session.", ex);
                    }
                }
            } else {
                sManager.deselectRoute(getRoutingSessionInfo(), route);
            }
        }

        /**
@@ -1770,11 +1817,11 @@ public final class MediaRouter2 {
                return;
            }

            if (isSystemRouter()) {
                sManager.setSessionVolume(getRoutingSessionInfo(), volume);
                return;
            setVolumeImpl(volume);
        }

        private void setVolumeImpl(int volume) {
            if (!isSystemRouter()) {
                MediaRouter2Stub stub;
                synchronized (mLock) {
                    stub = mStub;
@@ -1786,6 +1833,9 @@ public final class MediaRouter2 {
                        Log.e(TAG, "setVolume: Failed to deliver request.", ex);
                    }
                }
            } else {
                sManager.setSessionVolume(getRoutingSessionInfo(), volume);
            }
        }

        /**
@@ -1840,11 +1890,11 @@ public final class MediaRouter2 {
                mState = CONTROLLER_STATE_RELEASED;
            }

            if (isSystemRouter()) {
                sManager.releaseSession(getRoutingSessionInfo());
                return;
            releaseInternalImpl(shouldReleaseSession, shouldNotifyStop);
        }

        private void releaseInternalImpl(boolean shouldReleaseSession, boolean shouldNotifyStop) {
            if (!isSystemRouter()) {
                synchronized (mLock) {
                    mNonSystemRoutingControllers.remove(getId(), this);

@@ -1875,6 +1925,9 @@ public final class MediaRouter2 {
                        mStub = null;
                    }
                }
            } else {
                sManager.releaseSession(getRoutingSessionInfo());
            }
        }

        @Override