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

Commit 0d202040 authored by hughchen's avatar hughchen
Browse files

Get route info without pacakage name

Use getAllRoutes() to get all routes if package name is null.

Bug: 142912244
Test: make -j42 RunSettingsLibRoboTests
Change-Id: I8a5e3209756e516909f607c59a0639c18b5276a5
parent ece12a89
Loading
Loading
Loading
Loading
+32 −14
Original line number Diff line number Diff line
@@ -40,15 +40,16 @@ public class InfoMediaManager extends MediaManager {
    final Executor mExecutor = Executors.newSingleThreadExecutor();
    @VisibleForTesting
    MediaRouter2Manager mRouterManager;
    @VisibleForTesting
    String mPackageName;

    private String mPackageName;
    private MediaDevice mCurrentConnectedDevice;

    public InfoMediaManager(Context context, String packageName, Notification notification) {
        super(context, notification);

        mRouterManager = MediaRouter2Manager.getInstance(context);
        if (packageName != null) {
        if (!TextUtils.isEmpty(packageName)) {
            mPackageName = packageName;
        }
    }
@@ -57,6 +58,7 @@ public class InfoMediaManager extends MediaManager {
    public void startScan() {
        mMediaDevices.clear();
        mRouterManager.registerCallback(mExecutor, mMediaRouterCallback);
        refreshDevices();
    }

    @VisibleForTesting
@@ -79,11 +81,26 @@ public class InfoMediaManager extends MediaManager {
        return mCurrentConnectedDevice;
    }

    class RouterManagerCallback extends MediaRouter2Manager.Callback {

    private void refreshDevices() {
        mMediaDevices.clear();
        mCurrentConnectedDevice = null;
        if (TextUtils.isEmpty(mPackageName)) {
            buildAllRoutes();
        } else {
            buildAvailableRoutes();
        }
        dispatchDeviceListAdded();
    }

    private void buildAllRoutes() {
        for (MediaRoute2Info route : mRouterManager.getAllRoutes()) {
            final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route,
                    mPackageName);
            mMediaDevices.add(device);
        }
    }

    private void buildAvailableRoutes() {
        for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) {
            final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route,
                    mPackageName);
@@ -92,9 +109,10 @@ public class InfoMediaManager extends MediaManager {
            }
            mMediaDevices.add(device);
        }
            dispatchDeviceListAdded();
    }

    class RouterManagerCallback extends MediaRouter2Manager.Callback {

        @Override
        public void onRoutesAdded(List<MediaRoute2Info> routes) {
            refreshDevices();
+4 −9
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.settingslib.media;
import android.app.Notification;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;

import androidx.annotation.IntDef;
@@ -162,11 +161,9 @@ public class LocalMediaManager implements BluetoothCallback {
        mMediaDevices.clear();
        mBluetoothMediaManager.registerCallback(mMediaDeviceCallback);
        mBluetoothMediaManager.startScan();
        if (!TextUtils.isEmpty(mPackageName)) {
        mInfoMediaManager.registerCallback(mMediaDeviceCallback);
        mInfoMediaManager.startScan();
    }
    }

    private void addPhoneDeviceIfNecessary() {
        // add phone device to list if there have any Bluetooth device and cast device.
@@ -208,11 +205,9 @@ public class LocalMediaManager implements BluetoothCallback {
    public void stopScan() {
        mBluetoothMediaManager.unregisterCallback(mMediaDeviceCallback);
        mBluetoothMediaManager.stopScan();
        if (!TextUtils.isEmpty(mPackageName)) {
        mInfoMediaManager.unregisterCallback(mMediaDeviceCallback);
        mInfoMediaManager.stopScan();
    }
    }

    /**
     * Find the MediaDevice through id.
+22 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public class InfoMediaManagerTest {
    }

    @Test
    public void onRouteAdded_shouldAddMediaDevice() {
    public void onRouteAdded_getAvailableRoutes_shouldAddMediaDevice() {
        final MediaRoute2Info info = mock(MediaRoute2Info.class);
        when(info.getId()).thenReturn(TEST_ID);
        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
@@ -94,6 +94,27 @@ public class InfoMediaManagerTest {
        assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
    }

    @Test
    public void onRouteAdded_buildAllRoutes_shouldAddMediaDevice() {
        final MediaRoute2Info info = mock(MediaRoute2Info.class);
        when(info.getId()).thenReturn(TEST_ID);
        when(info.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);

        final List<MediaRoute2Info> routes = new ArrayList<>();
        routes.add(info);
        when(mRouterManager.getAllRoutes()).thenReturn(routes);

        final MediaDevice mediaDevice = mInfoMediaManager.findMediaDevice(TEST_ID);
        assertThat(mediaDevice).isNull();

        mInfoMediaManager.mPackageName = "";
        mInfoMediaManager.mMediaRouterCallback.onRoutesAdded(routes);

        final MediaDevice infoDevice = mInfoMediaManager.mMediaDevices.get(0);
        assertThat(infoDevice.getId()).isEqualTo(TEST_ID);
        assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
    }

    @Test
    public void onControlCategoriesChanged_samePackageName_shouldAddMediaDevice() {
        final MediaRoute2Info info = mock(MediaRoute2Info.class);