Merge "MediaRouter: Create BluetoothRouteProvider for each user" into rvc-qpr-dev am: 907ba21f9f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12390943

Change-Id: I254be23daa9526303898e6a72249df050e585c06
This commit is contained in:
Kyunglyul Hyun
2020-08-18 00:47:04 +00:00
committed by Automerger Merge Worker
3 changed files with 22 additions and 16 deletions

View File

@@ -34,6 +34,7 @@ import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.AudioSystem;
import android.media.MediaRoute2Info;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import android.util.Slog;
@@ -55,7 +56,6 @@ class BluetoothRouteProvider {
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private static final String HEARING_AID_ROUTE_ID_PREFIX = "HEARING_AID_";
private static BluetoothRouteProvider sInstance;
@SuppressWarnings("WeakerAccess") /* synthetic access */
// Maps hardware address to BluetoothRouteInfo
@@ -79,19 +79,21 @@ class BluetoothRouteProvider {
private final BroadcastReceiver mBroadcastReceiver = new BluetoothBroadcastReceiver();
private final BluetoothProfileListener mProfileListener = new BluetoothProfileListener();
static synchronized BluetoothRouteProvider getInstance(@NonNull Context context,
/**
* Create an instance of {@link BluetoothRouteProvider}.
* It may return {@code null} if Bluetooth is not supported on this hardware platform.
*/
@Nullable
static BluetoothRouteProvider createInstance(@NonNull Context context,
@NonNull BluetoothRoutesUpdatedListener listener) {
Objects.requireNonNull(context);
Objects.requireNonNull(listener);
if (sInstance == null) {
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
if (btAdapter == null) {
return null;
}
sInstance = new BluetoothRouteProvider(context, btAdapter, listener);
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
if (btAdapter == null) {
return null;
}
return sInstance;
return new BluetoothRouteProvider(context, btAdapter, listener);
}
private BluetoothRouteProvider(Context context, BluetoothAdapter btAdapter,
@@ -103,7 +105,7 @@ class BluetoothRouteProvider {
buildBluetoothRoutes();
}
public void start() {
public void start(UserHandle user) {
mBluetoothAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.A2DP);
mBluetoothAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.HEARING_AID);
@@ -118,7 +120,8 @@ class BluetoothRouteProvider {
addEventReceiver(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED,
deviceStateChangedReceiver);
mContext.registerReceiver(mBroadcastReceiver, mIntentFilter, null, null);
mContext.registerReceiverAsUser(mBroadcastReceiver, user,
mIntentFilter, null, null);
}
/**

View File

@@ -1176,7 +1176,8 @@ class MediaRouter2ServiceImpl {
super(Looper.getMainLooper(), null, true);
mServiceRef = new WeakReference<>(service);
mUserRecord = userRecord;
mSystemProvider = new SystemMediaRoute2Provider(service.mContext);
mSystemProvider = new SystemMediaRoute2Provider(service.mContext,
UserHandle.of(userRecord.mUserId));
mRouteProviders.add(mSystemProvider);
mWatcher = new MediaRoute2ProviderWatcher(service.mContext, this,
this, mUserRecord.mUserId);

View File

@@ -45,6 +45,7 @@ import android.os.Handler;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import android.util.Slog;
@@ -99,7 +100,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
}
};
SystemMediaRoute2Provider(Context context) {
SystemMediaRoute2Provider(Context context, UserHandle user) {
super(sComponentName);
mIsSystemRouteProvider = true;
@@ -117,7 +118,7 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
updateDeviceRoute(newAudioRoutes);
// .getInstance returns null if there is no bt adapter available
mBtRouteProvider = BluetoothRouteProvider.getInstance(context, (routes) -> {
mBtRouteProvider = BluetoothRouteProvider.createInstance(context, (routes) -> {
publishProviderState();
boolean sessionInfoChanged;
@@ -130,11 +131,12 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
IntentFilter intentFilter = new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION);
intentFilter.addAction(AudioManager.STREAM_DEVICES_CHANGED_ACTION);
mContext.registerReceiver(new AudioManagerBroadcastReceiver(), intentFilter);
mContext.registerReceiverAsUser(new AudioManagerBroadcastReceiver(), user,
intentFilter, null, null);
if (mBtRouteProvider != null) {
mHandler.post(() -> {
mBtRouteProvider.start();
mBtRouteProvider.start(user);
notifyProviderState();
});
}