Process RSSI breach event in L2 connect state; protect from
crash that can occur when it comes in Disconnected state.

Bug: 23847831
Change-Id: I693384c61d43ad377c30ef2797937d1dfd48eeb3
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 4fdc4b2..2862822 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -281,10 +281,14 @@
     }
 
     public void processRssiThreshold(byte curRssi) {
+        if (curRssi == Byte.MAX_VALUE || curRssi == Byte.MIN_VALUE) {
+            Log.wtf(TAG, "processRssiThreshold: Invalid rssi " + curRssi);
+            return;
+        }
         for (int i = 0; i < mRssiRanges.length; i++) {
             if (curRssi < mRssiRanges[i]) {
                 // Assume sorted values(ascending order) for rssi,
-                // bounded by high(127) and low(-127) at extremeties
+                // bounded by high(127) and low(-128) at extremeties
                 byte maxRssi = mRssiRanges[i];
                 byte minRssi = mRssiRanges[i-1];
                 Log.d(TAG, "Re-program rssi thresholds" + "maxRssi=" + maxRssi
@@ -7930,10 +7934,6 @@
                 case CMD_PNO_NETWORK_FOUND:
                     processPnoNetworkFound((ScanResult[])message.obj);
                     break;
-                case CMD_RSSI_THRESHOLD_BREACH:
-                    byte curRssi = (byte)message.arg1;
-                    processRssiThreshold(curRssi);
-                    break;
                 default:
                     return NOT_HANDLED;
             }
@@ -8532,6 +8532,17 @@
                         sendNetworkStateChangeBroadcast(mLastBssid);
                     }
                     break;
+                case CMD_START_RSSI_MONITORING_OFFLOAD:
+                    byte currRssi = (byte)message.arg1;
+                    processRssiThreshold(currRssi);
+                    break;
+                case CMD_STOP_RSSI_MONITORING_OFFLOAD:
+                    stopRssiMonitoringOffload();
+                    break;
+                case CMD_RSSI_THRESHOLD_BREACH:
+                    byte curRssi = (byte)message.arg1;
+                    processRssiThreshold(curRssi);
+                    break;
                 default:
                     return NOT_HANDLED;
             }
@@ -9171,13 +9182,6 @@
                         mNetworkAgent.onPacketKeepaliveEvent(slot, result);
                         break;
                     }
-                case CMD_START_RSSI_MONITORING_OFFLOAD:
-                    byte currRssi = (byte)message.arg1;
-                    processRssiThreshold(currRssi);
-                    break;
-                case CMD_STOP_RSSI_MONITORING_OFFLOAD:
-                    stopRssiMonitoringOffload();
-                    break;
                 default:
                     return NOT_HANDLED;
             }