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

Commit 9e118452 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use media framework api to get bluetooth device list"

parents 9027588e df7b8381
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.util.Log;
import android.util.Pair;

@@ -35,8 +37,9 @@ public class BluetoothMediaDevice extends MediaDevice {

    private CachedBluetoothDevice mCachedDevice;

    BluetoothMediaDevice(Context context, CachedBluetoothDevice device) {
        super(context, MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
    BluetoothMediaDevice(Context context, CachedBluetoothDevice device,
            MediaRouter2Manager routerManager, MediaRoute2Info info, String packageName) {
        super(context, MediaDeviceType.TYPE_BLUETOOTH_DEVICE, routerManager, info, packageName);
        mCachedDevice = device;
        initDeviceRecord();
    }
+1 −1
Original line number Diff line number Diff line
@@ -157,7 +157,7 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
    private void addMediaDevice(CachedBluetoothDevice cachedDevice) {
        MediaDevice mediaDevice = findMediaDevice(MediaDeviceUtils.getId(cachedDevice));
        if (mediaDevice == null) {
            mediaDevice = new BluetoothMediaDevice(mContext, cachedDevice);
            mediaDevice = new BluetoothMediaDevice(mContext, cachedDevice, null, null, null);
            cachedDevice.registerCallback(mDeviceAttributeChangeCallback);
            mLastAddedDevice = mediaDevice;
            mMediaDevices.add(mediaDevice);
+1 −8
Original line number Diff line number Diff line
@@ -33,16 +33,9 @@ public class InfoMediaDevice extends MediaDevice {

    private static final String TAG = "InfoMediaDevice";

    private final MediaRoute2Info mRouteInfo;
    private final MediaRouter2Manager mRouterManager;
    private final String mPackageName;

    InfoMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
            String packageName) {
        super(context, MediaDeviceType.TYPE_CAST_DEVICE);
        mRouterManager = routerManager;
        mRouteInfo = info;
        mPackageName = packageName;
        super(context, MediaDeviceType.TYPE_CAST_DEVICE, routerManager, info, packageName);
        initDeviceRecord();
    }

+23 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import android.app.Notification;
import android.content.Context;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RoutingSessionInfo;
import android.text.TextUtils;

import com.android.internal.annotations.VisibleForTesting;
@@ -111,6 +112,23 @@ public class InfoMediaManager extends MediaManager {
        }
    }

    /**
     * Transfer MediaDevice for media without package name.
     */
    public boolean connectDeviceWithoutPackageName(MediaDevice device) {
        boolean isConnected = false;
        final List<RoutingSessionInfo> infos = mRouterManager.getActiveSessions();
        if (infos.size() > 0) {
            final RoutingSessionInfo info = infos.get(0);
            final MediaRouter2Manager.RoutingController controller =
                    mRouterManager.getControllerForSession(info);

            controller.transferToRoute(device.mRouteInfo);
            isConnected = true;
        }
        return isConnected;
    }

    class RouterManagerCallback extends MediaRouter2Manager.Callback {

        @Override
@@ -124,5 +142,10 @@ public class InfoMediaManager extends MediaManager {
                refreshDevices();
            }
        }

        @Override
        public void onRoutesChanged(List<MediaRoute2Info> routes) {
            refreshDevices();
        }
    }
}
+12 −36
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ 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;
@@ -57,7 +58,6 @@ public class LocalMediaManager implements BluetoothCallback {
    final MediaDeviceCallback mMediaDeviceCallback = new MediaDeviceCallback();

    private Context mContext;
    private BluetoothMediaManager mBluetoothMediaManager;
    private LocalBluetoothManager mLocalBluetoothManager;
    private InfoMediaManager mInfoMediaManager;
    private String mPackageName;
@@ -97,18 +97,17 @@ public class LocalMediaManager implements BluetoothCallback {
            return;
        }

        mBluetoothMediaManager =
                new BluetoothMediaManager(context, mLocalBluetoothManager, notification);
        mInfoMediaManager = new InfoMediaManager(context, packageName, notification);
    }

    @VisibleForTesting
    LocalMediaManager(Context context, LocalBluetoothManager localBluetoothManager,
            BluetoothMediaManager bluetoothMediaManager, InfoMediaManager infoMediaManager) {
            InfoMediaManager infoMediaManager, String packageName) {
        mContext = context;
        mLocalBluetoothManager = localBluetoothManager;
        mBluetoothMediaManager = bluetoothMediaManager;
        mInfoMediaManager = infoMediaManager;
        mPackageName = packageName;

    }

    /**
@@ -135,7 +134,12 @@ public class LocalMediaManager implements BluetoothCallback {
            mCurrentConnectedDevice.disconnect();
        }

        final boolean isConnected = device.connect();
        boolean isConnected = false;
        if (TextUtils.isEmpty(mPackageName)) {
            isConnected = mInfoMediaManager.connectDeviceWithoutPackageName(device);
        } else {
            isConnected = device.connect();
        }
        if (isConnected) {
            mCurrentConnectedDevice = device;
        }
@@ -159,29 +163,10 @@ public class LocalMediaManager implements BluetoothCallback {
     */
    public void startScan() {
        mMediaDevices.clear();
        mBluetoothMediaManager.registerCallback(mMediaDeviceCallback);
        mBluetoothMediaManager.startScan();
        mInfoMediaManager.registerCallback(mMediaDeviceCallback);
        mInfoMediaManager.startScan();
    }

    private void addPhoneDeviceIfNecessary() {
        // add phone device to list if there have any Bluetooth device and cast device.
        if (mMediaDevices.size() > 0 && !mMediaDevices.contains(mPhoneDevice)) {
            if (mPhoneDevice == null) {
                mPhoneDevice = new PhoneMediaDevice(mContext, mLocalBluetoothManager);
            }
            mMediaDevices.add(mPhoneDevice);
        }
    }

    private void removePhoneMediaDeviceIfNecessary() {
        // if PhoneMediaDevice is the last item in the list, remove it.
        if (mMediaDevices.size() == 1 && mMediaDevices.contains(mPhoneDevice)) {
            mMediaDevices.clear();
        }
    }

    void dispatchDeviceListUpdate() {
        synchronized (mCallbacks) {
            Collections.sort(mMediaDevices, COMPARATOR);
@@ -203,8 +188,6 @@ public class LocalMediaManager implements BluetoothCallback {
     * Stop scan MediaDevice
     */
    public void stopScan() {
        mBluetoothMediaManager.unregisterCallback(mMediaDeviceCallback);
        mBluetoothMediaManager.stopScan();
        mInfoMediaManager.unregisterCallback(mMediaDeviceCallback);
        mInfoMediaManager.stopScan();
    }
@@ -288,19 +271,14 @@ public class LocalMediaManager implements BluetoothCallback {
        public void onDeviceAdded(MediaDevice device) {
            if (!mMediaDevices.contains(device)) {
                mMediaDevices.add(device);
                addPhoneDeviceIfNecessary();
                dispatchDeviceListUpdate();
            }
        }

        @Override
        public void onDeviceListAdded(List<MediaDevice> devices) {
            for (MediaDevice device : devices) {
                if (getMediaDeviceById(mMediaDevices, device.getId()) == null) {
                    mMediaDevices.add(device);
                }
            }
            addPhoneDeviceIfNecessary();
            mMediaDevices.clear();
            mMediaDevices.addAll(devices);
            final MediaDevice infoMediaDevice = mInfoMediaManager.getCurrentConnectedDevice();
            mCurrentConnectedDevice = infoMediaDevice != null
                    ? infoMediaDevice : updateCurrentConnectedDevice();
@@ -319,7 +297,6 @@ public class LocalMediaManager implements BluetoothCallback {
        public void onDeviceRemoved(MediaDevice device) {
            if (mMediaDevices.contains(device)) {
                mMediaDevices.remove(device);
                removePhoneMediaDeviceIfNecessary();
                dispatchDeviceListUpdate();
            }
        }
@@ -327,7 +304,6 @@ public class LocalMediaManager implements BluetoothCallback {
        @Override
        public void onDeviceListRemoved(List<MediaDevice> devices) {
            mMediaDevices.removeAll(devices);
            removePhoneMediaDeviceIfNecessary();
            dispatchDeviceListUpdate();
        }

Loading