diff options
author | fredc <fredc@broadcom.com> | 2012-05-09 16:54:51 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-07-16 22:05:45 -0700 |
commit | 4852c5686229f1014e9851f4e9a3a19547581b45 (patch) | |
tree | 18d00f7c894a3b522df04daa2ea6e2b13d808545 | |
parent | 74ae04c73312403e89db0f8e9bd9601d403b4783 (diff) | |
download | android_packages_apps_Bluetooth-4852c5686229f1014e9851f4e9a3a19547581b45.tar.gz android_packages_apps_Bluetooth-4852c5686229f1014e9851f4e9a3a19547581b45.tar.bz2 android_packages_apps_Bluetooth-4852c5686229f1014e9851f4e9a3a19547581b45.zip |
Moved BluetoothAdapter.ACTION_STATE_CHANGED broadcast from AdapterService to BluetoothManagerService
Change-Id: Ic9911359c1d9e04a5d803807ea7cf4ad39616960
4 files changed, 60 insertions, 23 deletions
diff --git a/src/com/android/bluetooth/btservice/AdapterService.java b/src/com/android/bluetooth/btservice/AdapterService.java index 7ddf5f96b..8b81e2781 100755 --- a/src/com/android/bluetooth/btservice/AdapterService.java +++ b/src/com/android/bluetooth/btservice/AdapterService.java @@ -14,6 +14,7 @@ import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.bluetooth.IBluetooth; +import android.bluetooth.IBluetoothCallback; import android.bluetooth.IBluetoothManager; import android.bluetooth.IBluetoothManagerCallback; import android.content.BroadcastReceiver; @@ -28,6 +29,7 @@ import android.os.IBinder; import android.os.Message; import android.os.ParcelFileDescriptor; import android.os.ParcelUuid; +import android.os.RemoteCallbackList; import android.os.RemoteException; import android.provider.Settings; import android.util.Log; @@ -127,6 +129,7 @@ public class AdapterService extends Service { private boolean mNativeAvailable; private boolean mCleaningUp; private HashMap<String,Integer> mProfileServicesState = new HashMap<String,Integer>(); + private RemoteCallbackList<IBluetoothCallback> mCallbacks;//Only BluetoothManagerService should be registered private int mCurrentRequestId; public AdapterService() { @@ -241,7 +244,7 @@ public class AdapterService extends Service { initNative(); mNativeAvailable=true; mAdapterStateMachine.start(); - + mCallbacks = new RemoteCallbackList<IBluetoothCallback>(); //Load the name and address getAdapterPropertyNative(AbstractionLayer.BT_PROPERTY_BDADDR); getAdapterPropertyNative(AbstractionLayer.BT_PROPERTY_BDNAME); @@ -370,6 +373,21 @@ public class AdapterService extends Service { stopSelfResult(requestId); } + void updateAdapterState(int prevState, int newState){ + if (mCallbacks !=null) { + int n=mCallbacks.beginBroadcast(); + Log.d(TAG,"Broadcasting updateAdapterState() to " + n + " receivers."); + for (int i=0; i <n;i++) { + try { + mCallbacks.getBroadcastItem(i).onBluetoothStateChange(prevState,newState); + } catch (RemoteException e) { + Log.e(TAG, "Unable to call onBluetoothStateChange() on callback #" + i, e); + } + } + mCallbacks.finishBroadcast(); + } + } + void cleanup () { if (DBG)debugLog("cleanup()"); if (mCleaningUp) { @@ -418,13 +436,17 @@ public class AdapterService extends Service { mProfileServicesState= null; } - //FIXME: Set static instance here??? clearAdapterService(); if (mBinder != null) { mBinder.cleanup(); mBinder = null; } + + if (mCallbacks !=null) { + mCallbacks.kill(); + } + if (DBG)debugLog("cleanup() done"); } @@ -736,6 +758,18 @@ public class AdapterService extends Service { if (service == null) return null; return service.createSocketChannel(type, serviceName, uuid, port, flag); } + + public void registerCallback(IBluetoothCallback cb) { + AdapterService service = getService(); + if (service == null) return ; + service.registerCallback(cb); + } + + public void unregisterCallback(IBluetoothCallback cb) { + AdapterService service = getService(); + if (service == null) return ; + service.unregisterCallback(cb); + } }; @@ -1012,6 +1046,14 @@ public class AdapterService extends Service { return ParcelFileDescriptor.adoptFd(fd); } + void registerCallback(IBluetoothCallback cb) { + mCallbacks.register(cb); + } + + void unregisterCallback(IBluetoothCallback cb) { + mCallbacks.unregister(cb); + } + private static int convertScanModeToHal(int mode) { switch (mode) { case BluetoothAdapter.SCAN_MODE_NONE: diff --git a/src/com/android/bluetooth/btservice/AdapterState.java b/src/com/android/bluetooth/btservice/AdapterState.java index 9c6fc97bb..1e338e7b7 100755 --- a/src/com/android/bluetooth/btservice/AdapterState.java +++ b/src/com/android/bluetooth/btservice/AdapterState.java @@ -103,7 +103,7 @@ final class AdapterState extends StateMachine { switch(msg.what) { case USER_TURN_ON: if (DBG) Log.d(TAG,"CURRENT_STATE=OFF, MESSAGE = USER_TURN_ON, requestId= " + msg.arg1); - sendIntent(BluetoothAdapter.STATE_TURNING_ON); + notifyAdapterStateChange(BluetoothAdapter.STATE_TURNING_ON); mPendingCommandState.setTurningOn(true); transitionTo(mPendingCommandState); sendMessageDelayed(START_TIMEOUT, START_TIMEOUT_DELAY); @@ -133,7 +133,7 @@ final class AdapterState extends StateMachine { switch(msg.what) { case USER_TURN_OFF: if (DBG) Log.d(TAG,"CURRENT_STATE=ON, MESSAGE = USER_TURN_OFF, requestId= " + msg.arg1); - sendIntent(BluetoothAdapter.STATE_TURNING_OFF); + notifyAdapterStateChange(BluetoothAdapter.STATE_TURNING_OFF); mPendingCommandState.setTurningOff(true); mPendingCommandState.setOffRequestId(msg.arg1); transitionTo(mPendingCommandState); @@ -226,7 +226,7 @@ final class AdapterState extends StateMachine { boolean ret = mAdapterService.enableNative(); if (!ret) { Log.e(TAG, "Error while turning Bluetooth On"); - sendIntent(BluetoothAdapter.STATE_OFF); + notifyAdapterStateChange(BluetoothAdapter.STATE_OFF); transitionTo(mOffState); } else { sendMessageDelayed(ENABLE_TIMEOUT, ENABLE_TIMEOUT_DELAY); @@ -240,7 +240,7 @@ final class AdapterState extends StateMachine { mAdapterProperties.onBluetoothReady(); mPendingCommandState.setTurningOn(false); transitionTo(mOnState); - sendIntent(BluetoothAdapter.STATE_ON); + notifyAdapterStateChange(BluetoothAdapter.STATE_ON); break; case BEGIN_DISABLE: { @@ -255,7 +255,7 @@ final class AdapterState extends StateMachine { //FIXME: what about post enable services mPendingCommandState.setTurningOff(false); mPendingCommandState.setOffRequestId(-1); - sendIntent(BluetoothAdapter.STATE_ON); + notifyAdapterStateChange(BluetoothAdapter.STATE_ON); } } break; @@ -275,7 +275,7 @@ final class AdapterState extends StateMachine { int requestId= getOffRequestId(); setOffRequestId(-1); transitionTo(mOffState); - sendIntent(BluetoothAdapter.STATE_OFF); + notifyAdapterStateChange(BluetoothAdapter.STATE_OFF); mAdapterService.startShutdown(requestId); break; case START_TIMEOUT: @@ -283,14 +283,14 @@ final class AdapterState extends StateMachine { errorLog("Error enabling Bluetooth"); mPendingCommandState.setTurningOn(false); transitionTo(mOffState); - sendIntent(BluetoothAdapter.STATE_OFF); + notifyAdapterStateChange(BluetoothAdapter.STATE_OFF); break; case ENABLE_TIMEOUT: if (DBG) Log.d(TAG,"CURRENT_STATE=PENDING, MESSAGE = ENABLE_TIMEOUT, isTurningOn=" + isTurningOn + ", isTurningOff=" + isTurningOff); errorLog("Error enabling Bluetooth"); mPendingCommandState.setTurningOn(false); transitionTo(mOffState); - sendIntent(BluetoothAdapter.STATE_OFF); + notifyAdapterStateChange(BluetoothAdapter.STATE_OFF); break; case STOP_TIMEOUT: if (DBG) Log.d(TAG,"CURRENT_STATE=PENDING, MESSAGE = STOP_TIMEOUT, isTurningOn=" + isTurningOn + ", isTurningOff=" + isTurningOff); @@ -313,16 +313,11 @@ final class AdapterState extends StateMachine { } - private void sendIntent(int newState) { + private void notifyAdapterStateChange(int newState) { int oldState = mAdapterProperties.getState(); - Intent intent = new Intent(BluetoothAdapter.ACTION_STATE_CHANGED); - intent.putExtra(BluetoothAdapter.EXTRA_PREVIOUS_STATE, oldState); - intent.putExtra(BluetoothAdapter.EXTRA_STATE, newState); - intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); mAdapterProperties.setState(newState); - - mAdapterService.sendBroadcast(intent, AdapterService.BLUETOOTH_PERM); - infoLog("Bluetooth State Change Intent: " + oldState + " -> " + newState); + infoLog("Bluetooth adapter state changed: " + oldState + "-> " + newState); + mAdapterService.updateAdapterState(oldState, newState); } void stateChangeCallback(int status) { diff --git a/src/com/android/bluetooth/opp/BluetoothOppRfcommListener.java b/src/com/android/bluetooth/opp/BluetoothOppRfcommListener.java index 1c6292fd0..b5506f07f 100755 --- a/src/com/android/bluetooth/opp/BluetoothOppRfcommListener.java +++ b/src/com/android/bluetooth/opp/BluetoothOppRfcommListener.java @@ -156,7 +156,7 @@ public class BluetoothOppRfcommListener { mInterrupted = true; } else { - clientSocket = mBtServerSocket.accept(); + clientSocket = sSocket.accept(); if (V) Log.v(TAG, "Accepted connection from " + clientSocket.getRemoteDevice()); BluetoothOppRfcommTransport transport = new BluetoothOppRfcommTransport( diff --git a/src/com/android/bluetooth/opp/BluetoothOppService.java b/src/com/android/bluetooth/opp/BluetoothOppService.java index 1dc087049..750487bd9 100755 --- a/src/com/android/bluetooth/opp/BluetoothOppService.java +++ b/src/com/android/bluetooth/opp/BluetoothOppService.java @@ -85,7 +85,7 @@ public class BluetoothOppService extends Service { } } - private static final String TAG = "BtOpp Service"; + private static final String TAG = "BtOppService"; /** Observer to get notified when the content observer's data changes */ private BluetoothShareContentObserver mObserver; @@ -146,7 +146,7 @@ public class BluetoothOppService extends Service { @Override public void onCreate() { super.onCreate(); - if (V) Log.v(TAG, "Service onCreate"); + if (V) Log.v(TAG, "onCreate"); mAdapter = BluetoothAdapter.getDefaultAdapter(); mSocketListener = new BluetoothOppRfcommListener(mAdapter); mShares = Lists.newArrayList(); @@ -181,7 +181,7 @@ public class BluetoothOppService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { - if (V) Log.v(TAG, "Service onStartCommand"); + if (V) Log.v(TAG, "onStartCommand"); //int retCode = super.onStartCommand(intent, flags, startId); //if (retCode == START_STICKY) { if (mAdapter == null) { @@ -328,7 +328,7 @@ public class BluetoothOppService extends Service { @Override public void onDestroy() { - if (V) Log.v(TAG, "Service onDestroy"); + if (V) Log.v(TAG, "onDestroy"); super.onDestroy(); getContentResolver().unregisterContentObserver(mObserver); unregisterReceiver(mBluetoothReceiver); |