Merge "SysUI: Move BT receivers to bg" into mnc-dev

This commit is contained in:
Jason Monk
2015-05-19 17:56:31 +00:00
committed by Android (Google) Code Review
2 changed files with 57 additions and 26 deletions

View File

@@ -51,11 +51,13 @@ public final class BluetoothEventManager {
private final Collection<BluetoothCallback> mCallbacks = private final Collection<BluetoothCallback> mCallbacks =
new ArrayList<BluetoothCallback>(); new ArrayList<BluetoothCallback>();
private android.os.Handler mReceiverHandler;
interface Handler { interface Handler {
void onReceive(Context context, Intent intent, BluetoothDevice device); void onReceive(Context context, Intent intent, BluetoothDevice device);
} }
void addHandler(String action, Handler handler) { private void addHandler(String action, Handler handler) {
mHandlerMap.put(action, handler); mHandlerMap.put(action, handler);
mAdapterIntentFilter.addAction(action); mAdapterIntentFilter.addAction(action);
} }
@@ -103,11 +105,18 @@ public final class BluetoothEventManager {
// Dock event broadcasts // Dock event broadcasts
addHandler(Intent.ACTION_DOCK_EVENT, new DockEventHandler()); addHandler(Intent.ACTION_DOCK_EVENT, new DockEventHandler());
mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter); mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter, null, mReceiverHandler);
} }
void registerProfileIntentReceiver() { void registerProfileIntentReceiver() {
mContext.registerReceiver(mBroadcastReceiver, mProfileIntentFilter); mContext.registerReceiver(mBroadcastReceiver, mProfileIntentFilter, null, mReceiverHandler);
}
public void setReceiverHandler(android.os.Handler handler) {
mContext.unregisterReceiver(mBroadcastReceiver);
mReceiverHandler = handler;
mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter, null, mReceiverHandler);
registerProfileIntentReceiver();
} }
/** Register to start receiving callbacks for Bluetooth events. */ /** Register to start receiving callbacks for Bluetooth events. */

View File

@@ -18,7 +18,9 @@ package com.android.systemui.statusbar.policy;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.content.Context; import android.content.Context;
import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.os.Message;
import android.util.Log; import android.util.Log;
import com.android.settingslib.bluetooth.BluetoothCallback; import com.android.settingslib.bluetooth.BluetoothCallback;
@@ -42,9 +44,12 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa
private boolean mConnecting; private boolean mConnecting;
private CachedBluetoothDevice mLastDevice; private CachedBluetoothDevice mLastDevice;
private final H mHandler = new H();
public BluetoothControllerImpl(Context context, Looper bgLooper) { public BluetoothControllerImpl(Context context, Looper bgLooper) {
mLocalBluetoothManager = LocalBluetoothManager.getInstance(context, null); mLocalBluetoothManager = LocalBluetoothManager.getInstance(context, null);
if (mLocalBluetoothManager != null) { if (mLocalBluetoothManager != null) {
mLocalBluetoothManager.getEventManager().setReceiverHandler(new Handler(bgLooper));
mLocalBluetoothManager.getEventManager().registerCallback(this); mLocalBluetoothManager.getEventManager().registerCallback(this);
onBluetoothStateChanged( onBluetoothStateChanged(
mLocalBluetoothManager.getBluetoothAdapter().getBluetoothState()); mLocalBluetoothManager.getBluetoothAdapter().getBluetoothState());
@@ -71,7 +76,7 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa
public void addStateChangedCallback(Callback cb) { public void addStateChangedCallback(Callback cb) {
mCallbacks.add(cb); mCallbacks.add(cb);
fireStateChange(cb); mHandler.sendEmptyMessage(H.MSG_STATE_CHANGED);
} }
@Override @Override
@@ -132,22 +137,6 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa
: null; : null;
} }
private void firePairedDevicesChanged() {
for (Callback cb : mCallbacks) {
cb.onBluetoothDevicesChanged();
}
}
private void fireStateChange() {
for (Callback cb : mCallbacks) {
fireStateChange(cb);
}
}
private void fireStateChange(Callback cb) {
cb.onBluetoothStateChange(mEnabled, mConnecting);
}
private void updateConnected() { private void updateConnected() {
if (mLastDevice != null && mLastDevice.isConnected()) { if (mLastDevice != null && mLastDevice.isConnected()) {
// Our current device is still valid. // Our current device is still valid.
@@ -163,7 +152,7 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa
@Override @Override
public void onBluetoothStateChanged(int bluetoothState) { public void onBluetoothStateChanged(int bluetoothState) {
mEnabled = bluetoothState == BluetoothAdapter.STATE_ON; mEnabled = bluetoothState == BluetoothAdapter.STATE_ON;
fireStateChange(); mHandler.sendEmptyMessage(H.MSG_STATE_CHANGED);
} }
@Override @Override
@@ -175,25 +164,25 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa
public void onDeviceAdded(CachedBluetoothDevice cachedDevice) { public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
cachedDevice.registerCallback(this); cachedDevice.registerCallback(this);
updateConnected(); updateConnected();
firePairedDevicesChanged(); mHandler.sendEmptyMessage(H.MSG_PAIRED_DEVICES_CHANGED);
} }
@Override @Override
public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) { public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {
updateConnected(); updateConnected();
firePairedDevicesChanged(); mHandler.sendEmptyMessage(H.MSG_PAIRED_DEVICES_CHANGED);
} }
@Override @Override
public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) { public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
updateConnected(); updateConnected();
firePairedDevicesChanged(); mHandler.sendEmptyMessage(H.MSG_PAIRED_DEVICES_CHANGED);
} }
@Override @Override
public void onDeviceAttributesChanged() { public void onDeviceAttributesChanged() {
updateConnected(); updateConnected();
firePairedDevicesChanged(); mHandler.sendEmptyMessage(H.MSG_PAIRED_DEVICES_CHANGED);
} }
@Override @Override
@@ -201,6 +190,39 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa
mConnecting = state == BluetoothAdapter.STATE_CONNECTING; mConnecting = state == BluetoothAdapter.STATE_CONNECTING;
mLastDevice = cachedDevice; mLastDevice = cachedDevice;
updateConnected(); updateConnected();
fireStateChange(); mHandler.sendEmptyMessage(H.MSG_STATE_CHANGED);
}
private final class H extends Handler {
private static final int MSG_PAIRED_DEVICES_CHANGED = 1;
private static final int MSG_STATE_CHANGED = 2;
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_PAIRED_DEVICES_CHANGED:
firePairedDevicesChanged();
break;
case MSG_STATE_CHANGED:
fireStateChange();
break;
}
}
private void firePairedDevicesChanged() {
for (BluetoothController.Callback cb : mCallbacks) {
cb.onBluetoothDevicesChanged();
}
}
private void fireStateChange() {
for (BluetoothController.Callback cb : mCallbacks) {
fireStateChange(cb);
}
}
private void fireStateChange(BluetoothController.Callback cb) {
cb.onBluetoothStateChange(mEnabled, mConnecting);
}
} }
} }