Loading packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java +5 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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(); } } Loading packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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); Loading packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java +1 −8 Original line number Original line Diff line number Diff line Loading @@ -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(); } } Loading packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +23 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -124,5 +142,10 @@ public class InfoMediaManager extends MediaManager { refreshDevices(); refreshDevices(); } } } } @Override public void onRoutesChanged(List<MediaRoute2Info> routes) { refreshDevices(); } } } } } packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +12 −36 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; } } /** /** Loading @@ -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; } } Loading @@ -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); Loading @@ -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(); } } Loading Loading @@ -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(); Loading @@ -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(); } } } } Loading @@ -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 Loading
packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java +5 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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(); } } Loading
packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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); Loading
packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java +1 −8 Original line number Original line Diff line number Diff line Loading @@ -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(); } } Loading
packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +23 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -124,5 +142,10 @@ public class InfoMediaManager extends MediaManager { refreshDevices(); refreshDevices(); } } } } @Override public void onRoutesChanged(List<MediaRoute2Info> routes) { refreshDevices(); } } } } }
packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +12 −36 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; } } /** /** Loading @@ -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; } } Loading @@ -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); Loading @@ -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(); } } Loading Loading @@ -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(); Loading @@ -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(); } } } } Loading @@ -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