OSDN Git Service

Notify headset of signal strength change
authorRavi Nagarajan <nravi@broadcom.com>
Tue, 14 Aug 2012 14:18:25 +0000 (07:18 -0700)
committerMatthew Xie <mattx@google.com>
Tue, 14 Aug 2012 18:36:32 +0000 (11:36 -0700)
Battery and service state changes were relayed to the stack, but not
signal strength. This has been resolved.
bug 6983415

Change-Id: Ie6fbb108805348e39c9119d028afb834556ae6b0

src/com/android/bluetooth/hfp/HeadsetPhoneState.java [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 9559c77..44e6262
@@ -119,11 +119,7 @@ class HeadsetPhoneState {
     void setBatteryCharge(int batteryLevel) {
         if (mBatteryCharge != batteryLevel) {
             mBatteryCharge = batteryLevel;
-            HeadsetStateMachine sm = mStateMachine;
-            if (sm != null) {
-                sm.sendMessage(HeadsetStateMachine.DEVICE_STATE_CHANGED,
-                new HeadsetDeviceState(mService, mRoam, mSignal, mBatteryCharge));
-            }
+            sendDeviceStateChanged();
         }
     }
 
@@ -151,6 +147,18 @@ class HeadsetPhoneState {
         return (mNumActive >= 1);
     }
 
+    void sendDeviceStateChanged()
+    {
+        Log.d(TAG, "sendDeviceStateChanged. mService="+ mService +
+                   " mSignal="+mSignal +" mRoam="+mRoam +
+                   " mBatteryCharge=" + mBatteryCharge);
+        HeadsetStateMachine sm = mStateMachine;
+        if (sm != null) {
+            sm.sendMessage(HeadsetStateMachine.DEVICE_STATE_CHANGED,
+                new HeadsetDeviceState(mService, mRoam, mSignal, mBatteryCharge));
+        }
+    }
+
     private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
         @Override
         public void onServiceStateChanged(ServiceState serviceState) {
@@ -158,20 +166,21 @@ class HeadsetPhoneState {
             mService = (serviceState.getState() == ServiceState.STATE_IN_SERVICE) ?
                 HeadsetHalConstants.NETWORK_STATE_AVAILABLE :
                 HeadsetHalConstants.NETWORK_STATE_NOT_AVAILABLE;
-            HeadsetStateMachine sm = mStateMachine;
-            if (sm != null) {
-                sm.sendMessage(HeadsetStateMachine.DEVICE_STATE_CHANGED,
-                new HeadsetDeviceState(mService, mRoam, mSignal, mBatteryCharge));
-            }
+            sendDeviceStateChanged();
         }
 
         @Override
         public void onSignalStrengthsChanged(SignalStrength signalStrength) {
+            int prevSignal = mSignal;
             if (signalStrength.isGsm()) {
                 mSignal = gsmAsuToSignal(signalStrength);
             } else {
                 mSignal = cdmaDbmEcioToSignal(signalStrength);
             }
+            // network signal strength is scaled to BT 1-5 levels.
+            // This results in a lot of duplicate messages, hence this check
+            if (prevSignal != mSignal)
+                sendDeviceStateChanged();
         }
 
         /* convert [0,31] ASU signal strength to the [0,5] expected by