Loading packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java +0 −15 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ 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; import com.android.settingslib.R; Loading Loading @@ -68,20 +67,6 @@ public class BluetoothMediaDevice extends MediaDevice { return MediaDeviceUtils.getId(mCachedDevice); } @Override public boolean connect() { //TODO(b/117129183): add callback to notify LocalMediaManager connection state. final boolean isConnected = mCachedDevice.setActive(); setConnectedRecord(); Log.d(TAG, "connect() device : " + getName() + ", is selected : " + isConnected); return isConnected; } @Override public void disconnect() { //TODO(b/117129183): disconnected last select device } /** * Get current CachedBluetoothDevice */ Loading packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java +0 −13 Original line number Diff line number Diff line Loading @@ -62,13 +62,6 @@ public class InfoMediaDevice extends MediaDevice { return MediaDeviceUtils.getId(mRouteInfo); } @Override public boolean connect() { setConnectedRecord(); mRouterManager.selectRoute(mPackageName, mRouteInfo); return true; } @Override public void requestSetVolume(int volume) { mRouterManager.requestSetVolume(mRouteInfo, volume); Loading Loading @@ -109,12 +102,6 @@ public class InfoMediaDevice extends MediaDevice { return mContext.getResources().getString(R.string.unknown); } @Override public void disconnect() { //TODO(b/144535188): disconnected last select device } @Override public boolean isConnected() { return true; } Loading packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +55 −10 Original line number Diff line number Diff line Loading @@ -15,14 +15,23 @@ */ package com.android.settingslib.media; import static android.media.MediaRoute2Info.DEVICE_TYPE_BLUETOOTH; import static android.media.MediaRoute2Info.DEVICE_TYPE_REMOTE_TV; import static android.media.MediaRoute2Info.DEVICE_TYPE_UNKNOWN; import android.app.Notification; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.media.MediaRoute2Info; import android.media.MediaRouter2Manager; import android.media.RoutingSessionInfo; import android.text.TextUtils; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.LocalBluetoothManager; import java.util.List; import java.util.concurrent.Executor; Loading @@ -45,11 +54,14 @@ public class InfoMediaManager extends MediaManager { String mPackageName; private MediaDevice mCurrentConnectedDevice; private LocalBluetoothManager mBluetoothManager; public InfoMediaManager(Context context, String packageName, Notification notification) { public InfoMediaManager(Context context, String packageName, Notification notification, LocalBluetoothManager localBluetoothManager) { super(context, notification); mRouterManager = MediaRouter2Manager.getInstance(context); mBluetoothManager = localBluetoothManager; if (!TextUtils.isEmpty(packageName)) { mPackageName = packageName; } Loading Loading @@ -95,20 +107,53 @@ public class InfoMediaManager extends MediaManager { private void buildAllRoutes() { for (MediaRoute2Info route : mRouterManager.getAllRoutes()) { final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route, mPackageName); mMediaDevices.add(device); addMediaDevice(route); } } private void buildAvailableRoutes() { for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) { final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route, mPackageName); if (TextUtils.equals(route.getClientPackageName(), mPackageName)) { mCurrentConnectedDevice = device; addMediaDevice(route); } } mMediaDevices.add(device); private void addMediaDevice(MediaRoute2Info route) { final int deviceType = route.getDeviceType(); MediaDevice mediaDevice = null; switch (deviceType) { case DEVICE_TYPE_UNKNOWN: //TODO(b/148765806): use correct device type once api is ready. final String defaultRoute = "DEFAULT_ROUTE"; if (TextUtils.equals(defaultRoute, route.getOriginalId())) { mediaDevice = new PhoneMediaDevice(mContext, mRouterManager, route, mPackageName); } else { mediaDevice = new InfoMediaDevice(mContext, mRouterManager, route, mPackageName); if (!TextUtils.isEmpty(mPackageName) && TextUtils.equals(route.getClientPackageName(), mPackageName)) { mCurrentConnectedDevice = mediaDevice; } } break; case DEVICE_TYPE_REMOTE_TV: break; case DEVICE_TYPE_BLUETOOTH: final BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(route.getOriginalId()); final CachedBluetoothDevice cachedDevice = mBluetoothManager.getCachedDeviceManager().findDevice(device); mediaDevice = new BluetoothMediaDevice(mContext, cachedDevice, mRouterManager, route, mPackageName); break; default: Log.w(TAG, "addMediaDevice() unknown device type : " + deviceType); break; } if (mediaDevice != null) { mMediaDevices.add(mediaDevice); } } Loading packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +6 −11 Original line number Diff line number Diff line Loading @@ -97,7 +97,8 @@ public class LocalMediaManager implements BluetoothCallback { return; } mInfoMediaManager = new InfoMediaManager(context, packageName, notification); mInfoMediaManager = new InfoMediaManager(context, packageName, notification, mLocalBluetoothManager); } @VisibleForTesting Loading Loading @@ -251,14 +252,17 @@ public class LocalMediaManager implements BluetoothCallback { } private MediaDevice updateCurrentConnectedDevice() { MediaDevice phoneMediaDevice = null; for (MediaDevice device : mMediaDevices) { if (device instanceof BluetoothMediaDevice) { if (isConnected(((BluetoothMediaDevice) device).getCachedDevice())) { return device; } } else if (device instanceof PhoneMediaDevice) { phoneMediaDevice = device; } } return mMediaDevices.contains(mPhoneDevice) ? mPhoneDevice : null; return mMediaDevices.contains(phoneMediaDevice) ? phoneMediaDevice : null; } private boolean isConnected(CachedBluetoothDevice device) { Loading @@ -282,17 +286,9 @@ public class LocalMediaManager implements BluetoothCallback { final MediaDevice infoMediaDevice = mInfoMediaManager.getCurrentConnectedDevice(); mCurrentConnectedDevice = infoMediaDevice != null ? infoMediaDevice : updateCurrentConnectedDevice(); updatePhoneMediaDeviceSummary(); dispatchDeviceListUpdate(); } private void updatePhoneMediaDeviceSummary() { if (mPhoneDevice != null) { ((PhoneMediaDevice) mPhoneDevice) .updateSummary(mCurrentConnectedDevice == mPhoneDevice); } } @Override public void onDeviceRemoved(MediaDevice device) { if (mMediaDevices.contains(device)) { Loading @@ -316,7 +312,6 @@ public class LocalMediaManager implements BluetoothCallback { return; } mCurrentConnectedDevice = connectDevice; updatePhoneMediaDeviceSummary(); dispatchDeviceAttributesChanged(); } Loading packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +22 −13 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.text.TextUtils; import androidx.annotation.IntDef; import com.android.internal.annotations.VisibleForTesting; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading @@ -42,10 +44,12 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { int TYPE_BLUETOOTH_DEVICE = 3; } @VisibleForTesting int mType; private int mConnectedRecord; protected final Context mContext; protected final int mType; protected final MediaRoute2Info mRouteInfo; protected final MediaRouter2Manager mRouterManager; protected final String mPackageName; Loading Loading @@ -92,24 +96,12 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { */ public abstract String getId(); /** * Transfer MediaDevice for media * * @return result of transfer media */ public abstract boolean connect(); void setConnectedRecord() { mConnectedRecord++; ConnectionRecordManager.getInstance().setConnectionRecord(mContext, getId(), mConnectedRecord); } /** * Stop transfer MediaDevice */ public abstract void disconnect(); /** * According the MediaDevice type to check whether we are connected to this MediaDevice. * Loading Loading @@ -170,6 +162,23 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { return mType; } /** * Transfer MediaDevice for media * * @return result of transfer media */ public boolean connect() { setConnectedRecord(); mRouterManager.selectRoute(mPackageName, mRouteInfo); return true; } /** * Stop transfer MediaDevice */ public void disconnect() { } /** * Rules: * 1. If there is one of the connected devices identified as a carkit, this carkit will Loading Loading
packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java +0 −15 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ 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; import com.android.settingslib.R; Loading Loading @@ -68,20 +67,6 @@ public class BluetoothMediaDevice extends MediaDevice { return MediaDeviceUtils.getId(mCachedDevice); } @Override public boolean connect() { //TODO(b/117129183): add callback to notify LocalMediaManager connection state. final boolean isConnected = mCachedDevice.setActive(); setConnectedRecord(); Log.d(TAG, "connect() device : " + getName() + ", is selected : " + isConnected); return isConnected; } @Override public void disconnect() { //TODO(b/117129183): disconnected last select device } /** * Get current CachedBluetoothDevice */ Loading
packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java +0 −13 Original line number Diff line number Diff line Loading @@ -62,13 +62,6 @@ public class InfoMediaDevice extends MediaDevice { return MediaDeviceUtils.getId(mRouteInfo); } @Override public boolean connect() { setConnectedRecord(); mRouterManager.selectRoute(mPackageName, mRouteInfo); return true; } @Override public void requestSetVolume(int volume) { mRouterManager.requestSetVolume(mRouteInfo, volume); Loading Loading @@ -109,12 +102,6 @@ public class InfoMediaDevice extends MediaDevice { return mContext.getResources().getString(R.string.unknown); } @Override public void disconnect() { //TODO(b/144535188): disconnected last select device } @Override public boolean isConnected() { return true; } Loading
packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +55 −10 Original line number Diff line number Diff line Loading @@ -15,14 +15,23 @@ */ package com.android.settingslib.media; import static android.media.MediaRoute2Info.DEVICE_TYPE_BLUETOOTH; import static android.media.MediaRoute2Info.DEVICE_TYPE_REMOTE_TV; import static android.media.MediaRoute2Info.DEVICE_TYPE_UNKNOWN; import android.app.Notification; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.media.MediaRoute2Info; import android.media.MediaRouter2Manager; import android.media.RoutingSessionInfo; import android.text.TextUtils; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.LocalBluetoothManager; import java.util.List; import java.util.concurrent.Executor; Loading @@ -45,11 +54,14 @@ public class InfoMediaManager extends MediaManager { String mPackageName; private MediaDevice mCurrentConnectedDevice; private LocalBluetoothManager mBluetoothManager; public InfoMediaManager(Context context, String packageName, Notification notification) { public InfoMediaManager(Context context, String packageName, Notification notification, LocalBluetoothManager localBluetoothManager) { super(context, notification); mRouterManager = MediaRouter2Manager.getInstance(context); mBluetoothManager = localBluetoothManager; if (!TextUtils.isEmpty(packageName)) { mPackageName = packageName; } Loading Loading @@ -95,20 +107,53 @@ public class InfoMediaManager extends MediaManager { private void buildAllRoutes() { for (MediaRoute2Info route : mRouterManager.getAllRoutes()) { final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route, mPackageName); mMediaDevices.add(device); addMediaDevice(route); } } private void buildAvailableRoutes() { for (MediaRoute2Info route : mRouterManager.getAvailableRoutes(mPackageName)) { final MediaDevice device = new InfoMediaDevice(mContext, mRouterManager, route, mPackageName); if (TextUtils.equals(route.getClientPackageName(), mPackageName)) { mCurrentConnectedDevice = device; addMediaDevice(route); } } mMediaDevices.add(device); private void addMediaDevice(MediaRoute2Info route) { final int deviceType = route.getDeviceType(); MediaDevice mediaDevice = null; switch (deviceType) { case DEVICE_TYPE_UNKNOWN: //TODO(b/148765806): use correct device type once api is ready. final String defaultRoute = "DEFAULT_ROUTE"; if (TextUtils.equals(defaultRoute, route.getOriginalId())) { mediaDevice = new PhoneMediaDevice(mContext, mRouterManager, route, mPackageName); } else { mediaDevice = new InfoMediaDevice(mContext, mRouterManager, route, mPackageName); if (!TextUtils.isEmpty(mPackageName) && TextUtils.equals(route.getClientPackageName(), mPackageName)) { mCurrentConnectedDevice = mediaDevice; } } break; case DEVICE_TYPE_REMOTE_TV: break; case DEVICE_TYPE_BLUETOOTH: final BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(route.getOriginalId()); final CachedBluetoothDevice cachedDevice = mBluetoothManager.getCachedDeviceManager().findDevice(device); mediaDevice = new BluetoothMediaDevice(mContext, cachedDevice, mRouterManager, route, mPackageName); break; default: Log.w(TAG, "addMediaDevice() unknown device type : " + deviceType); break; } if (mediaDevice != null) { mMediaDevices.add(mediaDevice); } } Loading
packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +6 −11 Original line number Diff line number Diff line Loading @@ -97,7 +97,8 @@ public class LocalMediaManager implements BluetoothCallback { return; } mInfoMediaManager = new InfoMediaManager(context, packageName, notification); mInfoMediaManager = new InfoMediaManager(context, packageName, notification, mLocalBluetoothManager); } @VisibleForTesting Loading Loading @@ -251,14 +252,17 @@ public class LocalMediaManager implements BluetoothCallback { } private MediaDevice updateCurrentConnectedDevice() { MediaDevice phoneMediaDevice = null; for (MediaDevice device : mMediaDevices) { if (device instanceof BluetoothMediaDevice) { if (isConnected(((BluetoothMediaDevice) device).getCachedDevice())) { return device; } } else if (device instanceof PhoneMediaDevice) { phoneMediaDevice = device; } } return mMediaDevices.contains(mPhoneDevice) ? mPhoneDevice : null; return mMediaDevices.contains(phoneMediaDevice) ? phoneMediaDevice : null; } private boolean isConnected(CachedBluetoothDevice device) { Loading @@ -282,17 +286,9 @@ public class LocalMediaManager implements BluetoothCallback { final MediaDevice infoMediaDevice = mInfoMediaManager.getCurrentConnectedDevice(); mCurrentConnectedDevice = infoMediaDevice != null ? infoMediaDevice : updateCurrentConnectedDevice(); updatePhoneMediaDeviceSummary(); dispatchDeviceListUpdate(); } private void updatePhoneMediaDeviceSummary() { if (mPhoneDevice != null) { ((PhoneMediaDevice) mPhoneDevice) .updateSummary(mCurrentConnectedDevice == mPhoneDevice); } } @Override public void onDeviceRemoved(MediaDevice device) { if (mMediaDevices.contains(device)) { Loading @@ -316,7 +312,6 @@ public class LocalMediaManager implements BluetoothCallback { return; } mCurrentConnectedDevice = connectDevice; updatePhoneMediaDeviceSummary(); dispatchDeviceAttributesChanged(); } Loading
packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +22 −13 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.text.TextUtils; import androidx.annotation.IntDef; import com.android.internal.annotations.VisibleForTesting; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading @@ -42,10 +44,12 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { int TYPE_BLUETOOTH_DEVICE = 3; } @VisibleForTesting int mType; private int mConnectedRecord; protected final Context mContext; protected final int mType; protected final MediaRoute2Info mRouteInfo; protected final MediaRouter2Manager mRouterManager; protected final String mPackageName; Loading Loading @@ -92,24 +96,12 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { */ public abstract String getId(); /** * Transfer MediaDevice for media * * @return result of transfer media */ public abstract boolean connect(); void setConnectedRecord() { mConnectedRecord++; ConnectionRecordManager.getInstance().setConnectionRecord(mContext, getId(), mConnectedRecord); } /** * Stop transfer MediaDevice */ public abstract void disconnect(); /** * According the MediaDevice type to check whether we are connected to this MediaDevice. * Loading Loading @@ -170,6 +162,23 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { return mType; } /** * Transfer MediaDevice for media * * @return result of transfer media */ public boolean connect() { setConnectedRecord(); mRouterManager.selectRoute(mPackageName, mRouteInfo); return true; } /** * Stop transfer MediaDevice */ public void disconnect() { } /** * Rules: * 1. If there is one of the connected devices identified as a carkit, this carkit will Loading