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 Original line Diff line number Diff line
@@ -19,6 +19,8 @@ import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.util.Log;
import android.util.Log;
import android.util.Pair;
import android.util.Pair;


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


    private CachedBluetoothDevice mCachedDevice;
    private CachedBluetoothDevice mCachedDevice;


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


    private static final String TAG = "InfoMediaDevice";
    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,
    InfoMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
            String packageName) {
            String packageName) {
        super(context, MediaDeviceType.TYPE_CAST_DEVICE);
        super(context, MediaDeviceType.TYPE_CAST_DEVICE, routerManager, info, packageName);
        mRouterManager = routerManager;
        mRouteInfo = info;
        mPackageName = packageName;
        initDeviceRecord();
        initDeviceRecord();
    }
    }


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


import com.android.internal.annotations.VisibleForTesting;
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 {
    class RouterManagerCallback extends MediaRouter2Manager.Callback {


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

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


import androidx.annotation.IntDef;
import androidx.annotation.IntDef;
@@ -57,7 +58,6 @@ public class LocalMediaManager implements BluetoothCallback {
    final MediaDeviceCallback mMediaDeviceCallback = new MediaDeviceCallback();
    final MediaDeviceCallback mMediaDeviceCallback = new MediaDeviceCallback();


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


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


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

    }
    }


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


        final boolean isConnected = device.connect();
        boolean isConnected = false;
        if (TextUtils.isEmpty(mPackageName)) {
            isConnected = mInfoMediaManager.connectDeviceWithoutPackageName(device);
        } else {
            isConnected = device.connect();
        }
        if (isConnected) {
        if (isConnected) {
            mCurrentConnectedDevice = device;
            mCurrentConnectedDevice = device;
        }
        }
@@ -159,29 +163,10 @@ public class LocalMediaManager implements BluetoothCallback {
     */
     */
    public void startScan() {
    public void startScan() {
        mMediaDevices.clear();
        mMediaDevices.clear();
        mBluetoothMediaManager.registerCallback(mMediaDeviceCallback);
        mBluetoothMediaManager.startScan();
        mInfoMediaManager.registerCallback(mMediaDeviceCallback);
        mInfoMediaManager.registerCallback(mMediaDeviceCallback);
        mInfoMediaManager.startScan();
        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() {
    void dispatchDeviceListUpdate() {
        synchronized (mCallbacks) {
        synchronized (mCallbacks) {
            Collections.sort(mMediaDevices, COMPARATOR);
            Collections.sort(mMediaDevices, COMPARATOR);
@@ -203,8 +188,6 @@ public class LocalMediaManager implements BluetoothCallback {
     * Stop scan MediaDevice
     * Stop scan MediaDevice
     */
     */
    public void stopScan() {
    public void stopScan() {
        mBluetoothMediaManager.unregisterCallback(mMediaDeviceCallback);
        mBluetoothMediaManager.stopScan();
        mInfoMediaManager.unregisterCallback(mMediaDeviceCallback);
        mInfoMediaManager.unregisterCallback(mMediaDeviceCallback);
        mInfoMediaManager.stopScan();
        mInfoMediaManager.stopScan();
    }
    }
@@ -288,19 +271,14 @@ public class LocalMediaManager implements BluetoothCallback {
        public void onDeviceAdded(MediaDevice device) {
        public void onDeviceAdded(MediaDevice device) {
            if (!mMediaDevices.contains(device)) {
            if (!mMediaDevices.contains(device)) {
                mMediaDevices.add(device);
                mMediaDevices.add(device);
                addPhoneDeviceIfNecessary();
                dispatchDeviceListUpdate();
                dispatchDeviceListUpdate();
            }
            }
        }
        }


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


Loading