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

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

Split callback registration and route scanning in InfoMediaManager

This is prework for allowing clients to receive routing updates from the
platform without having to scan for routes. For example,
MediaDeviceManager populates the device chip information in the UMO,
which needs to know the current connected device, but has no use for
scanning.

The root limitation we are trying to address is that
InfoMediaManager couples callback registration to route scanning, so it
forces all clients interested in receiving routing state updates to also
scan needlessly.

This is a non-functional change.

Test: atest com.android.settingslib.media
Bug: 332515672
Change-Id: I2d238cc8761c5429458ae33dc0fd034c6cf11e9e
parent 4e98b884
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -174,6 +174,7 @@ public abstract class InfoMediaManager {


    public void startScan() {
    public void startScan() {
        mMediaDevices.clear();
        mMediaDevices.clear();
        registerRouter();
        startScanOnRouter();
        startScanOnRouter();
        updateRouteListingPreference();
        updateRouteListingPreference();
        refreshDevices();
        refreshDevices();
@@ -188,10 +189,19 @@ public abstract class InfoMediaManager {
        }
        }
    }
    }


    public abstract void stopScan();
    public final void stopScan() {
        stopScanOnRouter();
        unregisterRouter();
    }

    protected abstract void stopScanOnRouter();


    protected abstract void startScanOnRouter();
    protected abstract void startScanOnRouter();


    protected abstract void registerRouter();

    protected abstract void unregisterRouter();

    protected abstract void transferToRoute(@NonNull MediaRoute2Info route);
    protected abstract void transferToRoute(@NonNull MediaRoute2Info route);


    protected abstract void selectRoute(
    protected abstract void selectRoute(
+11 −3
Original line number Original line Diff line number Diff line
@@ -62,21 +62,29 @@ public class ManagerInfoMediaManager extends InfoMediaManager {
    @Override
    @Override
    protected void startScanOnRouter() {
    protected void startScanOnRouter() {
        if (!mIsScanning) {
        if (!mIsScanning) {
            mRouterManager.registerCallback(mExecutor, mMediaRouterCallback);
            mRouterManager.registerScanRequest();
            mRouterManager.registerScanRequest();
            mIsScanning = true;
            mIsScanning = true;
        }
        }
    }
    }


    @Override
    @Override
    public void stopScan() {
    protected void registerRouter() {
        mRouterManager.registerCallback(mExecutor, mMediaRouterCallback);
    }

    @Override
    protected void stopScanOnRouter() {
        if (mIsScanning) {
        if (mIsScanning) {
            mRouterManager.unregisterCallback(mMediaRouterCallback);
            mRouterManager.unregisterScanRequest();
            mRouterManager.unregisterScanRequest();
            mIsScanning = false;
            mIsScanning = false;
        }
        }
    }
    }


    @Override
    protected void unregisterRouter() {
        mRouterManager.unregisterCallback(mMediaRouterCallback);
    }

    @Override
    @Override
    protected void transferToRoute(@NonNull MediaRoute2Info route) {
    protected void transferToRoute(@NonNull MediaRoute2Info route) {
        // TODO: b/279555229 - provide real user handle of a caller.
        // TODO: b/279555229 - provide real user handle of a caller.
+12 −2
Original line number Original line Diff line number Diff line
@@ -63,12 +63,22 @@ import java.util.List;
    }
    }


    @Override
    @Override
    public void stopScan() {
    protected void startScanOnRouter() {
        // Do nothing.
        // Do nothing.
    }
    }


    @Override
    @Override
    protected void startScanOnRouter() {
    protected void registerRouter() {
        // Do nothing.
    }

    @Override
    protected void stopScanOnRouter() {
        // Do nothing.
    }

    @Override
    protected void unregisterRouter() {
        // Do nothing.
        // Do nothing.
    }
    }


+14 −6
Original line number Original line Diff line number Diff line
@@ -97,11 +97,6 @@ public final class RouterInfoMediaManager extends InfoMediaManager {


    @Override
    @Override
    protected void startScanOnRouter() {
    protected void startScanOnRouter() {
        mRouter.registerRouteCallback(mExecutor, mRouteCallback, RouteDiscoveryPreference.EMPTY);
        mRouter.registerRouteListingPreferenceUpdatedCallback(
                mExecutor, mRouteListingPreferenceCallback);
        mRouter.registerTransferCallback(mExecutor, mTransferCallback);
        mRouter.registerControllerCallback(mExecutor, mControllerCallback);
        if (Flags.enableScreenOffScanning()) {
        if (Flags.enableScreenOffScanning()) {
            MediaRouter2.ScanRequest request = new MediaRouter2.ScanRequest.Builder().build();
            MediaRouter2.ScanRequest request = new MediaRouter2.ScanRequest.Builder().build();
            mScanToken.compareAndSet(null, mRouter.requestScan(request));
            mScanToken.compareAndSet(null, mRouter.requestScan(request));
@@ -111,7 +106,16 @@ public final class RouterInfoMediaManager extends InfoMediaManager {
    }
    }


    @Override
    @Override
    public void stopScan() {
    protected void registerRouter() {
        mRouter.registerRouteCallback(mExecutor, mRouteCallback, RouteDiscoveryPreference.EMPTY);
        mRouter.registerRouteListingPreferenceUpdatedCallback(
                mExecutor, mRouteListingPreferenceCallback);
        mRouter.registerTransferCallback(mExecutor, mTransferCallback);
        mRouter.registerControllerCallback(mExecutor, mControllerCallback);
    }

    @Override
    protected void stopScanOnRouter() {
        if (Flags.enableScreenOffScanning()) {
        if (Flags.enableScreenOffScanning()) {
            MediaRouter2.ScanToken token = mScanToken.getAndSet(null);
            MediaRouter2.ScanToken token = mScanToken.getAndSet(null);
            if (token != null) {
            if (token != null) {
@@ -120,6 +124,10 @@ public final class RouterInfoMediaManager extends InfoMediaManager {
        } else {
        } else {
            mRouter.stopScan();
            mRouter.stopScan();
        }
        }
    }

    @Override
    protected void unregisterRouter() {
        mRouter.unregisterControllerCallback(mControllerCallback);
        mRouter.unregisterControllerCallback(mControllerCallback);
        mRouter.unregisterTransferCallback(mTransferCallback);
        mRouter.unregisterTransferCallback(mTransferCallback);
        mRouter.unregisterRouteListingPreferenceUpdatedCallback(mRouteListingPreferenceCallback);
        mRouter.unregisterRouteListingPreferenceUpdatedCallback(mRouteListingPreferenceCallback);