Add FW support for CellInfo RIL commands.

Add being able to setCellInfoListRate.

Bug: 8235566
Change-Id: I7ad7dabc4b6c38bfba4461b08e6e30d0eb9efea1
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index 0940e44..df93626 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -116,6 +116,7 @@
     private TextView dnsCheckState;
     private EditText smsc;
     private Button radioPowerButton;
+    private Button cellInfoListRateButton;
     private Button dnsCheckToggleButton;
     private Button pingTestButton;
     private Button updateSmscButton;
@@ -167,9 +168,8 @@
 
         @Override
         public void onCellInfoChanged(List<CellInfo> arrayCi) {
-            Log.d(TAG, "[RadioInfo] onCellInfoChanged: arrayCi=" + arrayCi);
-            mCellInfoValue = arrayCi;
-            updateCellInfoTv();
+            log("onCellInfoChanged: arrayCi=" + arrayCi);
+            updateCellInfoTv(arrayCi);
         }
     };
 
@@ -195,7 +195,7 @@
                     if (ar.exception == null) {
                         int type = ((int[])ar.result)[0];
                         if (type >= mPreferredNetworkLabels.length) {
-                            Log.e(TAG, "[RadioInfo] EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
+                            log("EVENT_QUERY_PREFERRED_TYPE_DONE: unknown " +
                                     "type=" + type);
                             type = mPreferredNetworkLabels.length - 1;
                         }
@@ -289,6 +289,9 @@
         radioPowerButton = (Button) findViewById(R.id.radio_power);
         radioPowerButton.setOnClickListener(mPowerButtonHandler);
 
+        cellInfoListRateButton = (Button) findViewById(R.id.cell_info_list_rate);
+        cellInfoListRateButton.setOnClickListener(mCellInfoListRateHandler);
+
         imsRegRequiredButton = (Button) findViewById(R.id.ims_reg_required);
         imsRegRequiredButton.setOnClickListener(mImsRegRequiredHandler);
 
@@ -330,7 +333,7 @@
 
         // Get current cell info
         mCellInfoValue = mTelephonyManager.getAllCellInfo();
-        Log.d(TAG, "[RadioInfo] onCreate: mCellInfoValue=" + mCellInfoValue);
+        log("onCreate: mCellInfoValue=" + mCellInfoValue);
     }
 
     @Override
@@ -347,13 +350,14 @@
         updateDataStats();
         updateDataStats2();
         updatePowerState();
+        updateCellInfoListRate();
         updateImsRegRequiredState();
         updateSmsOverImsState();
         updateLteRamDumpState();
         updateProperties();
         updateDnsCheckState();
 
-        Log.i(TAG, "[RadioInfo] onResume: register phone & data intents");
+        log("onResume: register phone & data intents");
 
         mPhoneStateReceiver.registerIntent();
         mTelephonyManager.listen(mPhoneStateListener,
@@ -369,7 +373,7 @@
     public void onPause() {
         super.onPause();
 
-        Log.i(TAG, "[RadioInfo] onPause: unregister phone & data intents");
+        log("onPause: unregister phone & data intents");
 
         mPhoneStateReceiver.unregisterIntent();
         mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
@@ -427,6 +431,11 @@
         radioPowerButton.setText(buttonText);
     }
 
+    private void updateCellInfoListRate() {
+        cellInfoListRateButton.setText("CellInfoListRate " + mCellInfoListRateHandler.getRate());
+        updateCellInfoTv(mTelephonyManager.getAllCellInfo());
+    }
+
     private void updateDnsCheckState() {
         dnsCheckState.setText(phone.isDnsCheckDisabled() ?
                 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
@@ -514,7 +523,8 @@
         mNeighboringCids.setText(sb.toString());
     }
 
-    private final void updateCellInfoTv() {
+    private final void updateCellInfoTv(List<CellInfo> arrayCi) {
+        mCellInfoValue = arrayCi;
         StringBuilder value = new StringBuilder();
         if (mCellInfoValue != null) {
             int index = 0;
@@ -918,12 +928,32 @@
         }
     };
 
+    class CellInfoListRateHandler implements OnClickListener {
+        int rates[] = {Integer.MAX_VALUE, 0, 1000};
+        int index = 0;
+
+        public int getRate() {
+            return rates[index];
+        }
+
+        @Override
+        public void onClick(View v) {
+            index += 1;
+            if (index >= rates.length) {
+                index = 0;
+            }
+            phone.setCellInfoListRate(rates[index]);
+            updateCellInfoListRate();
+        }
+    }
+    CellInfoListRateHandler mCellInfoListRateHandler = new CellInfoListRateHandler();
+
     private Button imsRegRequiredButton;
     static final String PROPERTY_IMS_REG_REQUIRED = "persist.radio.imsregrequired";
     OnClickListener mImsRegRequiredHandler = new OnClickListener() {
         @Override
         public void onClick(View v) {
-            Log.d(TAG, String.format("toggle %s: currently %s",
+            log(String.format("toggle %s: currently %s",
                 PROPERTY_IMS_REG_REQUIRED, (isImsRegRequired() ? "on":"off")));
             boolean newValue = !isImsRegRequired();
             SystemProperties.set(PROPERTY_IMS_REG_REQUIRED,
@@ -937,7 +967,7 @@
     }
 
     private void updateImsRegRequiredState() {
-        Log.d(TAG, "updateImsRegRequiredState isImsRegRequired()=" + isImsRegRequired());
+        log("updateImsRegRequiredState isImsRegRequired()=" + isImsRegRequired());
         String buttonText = isImsRegRequired() ?
                             getString(R.string.ims_reg_required_off) :
                             getString(R.string.ims_reg_required_on);
@@ -949,7 +979,7 @@
     OnClickListener mSmsOverImsHandler = new OnClickListener() {
         @Override
         public void onClick(View v) {
-            Log.d(TAG, String.format("toggle %s: currently %s",
+            log(String.format("toggle %s: currently %s",
                     PROPERTY_SMS_OVER_IMS, (isSmsOverImsEnabled() ? "on":"off")));
             boolean newValue = !isSmsOverImsEnabled();
             SystemProperties.set(PROPERTY_SMS_OVER_IMS, newValue ? "1":"0");
@@ -962,7 +992,7 @@
     }
 
     private void updateSmsOverImsState() {
-        Log.d(TAG, "updateSmsOverImsState isSmsOverImsEnabled()=" + isSmsOverImsEnabled());
+        log("updateSmsOverImsState isSmsOverImsEnabled()=" + isSmsOverImsEnabled());
         String buttonText = isSmsOverImsEnabled() ?
                             getString(R.string.sms_over_ims_off) :
                             getString(R.string.sms_over_ims_on);
@@ -974,7 +1004,7 @@
     OnClickListener mLteRamDumpHandler = new OnClickListener() {
         @Override
         public void onClick(View v) {
-            Log.d(TAG, String.format("toggle %s: currently %s",
+            log(String.format("toggle %s: currently %s",
                     PROPERTY_LTE_RAM_DUMP, (isSmsOverImsEnabled() ? "on":"off")));
             boolean newValue = !isLteRamDumpEnabled();
             SystemProperties.set(PROPERTY_LTE_RAM_DUMP, newValue ? "1":"0");
@@ -987,7 +1017,7 @@
     }
 
     private void updateLteRamDumpState() {
-        Log.d(TAG, "updateLteRamDumpState isLteRamDumpEnabled()=" + isLteRamDumpEnabled());
+        log("updateLteRamDumpState isLteRamDumpEnabled()=" + isLteRamDumpEnabled());
         String buttonText = isLteRamDumpEnabled() ?
                             getString(R.string.lte_ram_dump_off) :
                             getString(R.string.lte_ram_dump_on);
@@ -1007,7 +1037,7 @@
             try {
                 startActivity(intent);
             } catch (android.content.ActivityNotFoundException ex) {
-                Log.d(TAG, "OEM-specific Info/Settings Activity Not Found : " + ex);
+                log("OEM-specific Info/Settings Activity Not Found : " + ex);
                 // If the activity does not exist, there are no OEM
                 // settings, and so we can just do nothing...
             }
@@ -1061,4 +1091,8 @@
             "LTE/GSM/CDMA auto (PRL)",
             "LTE only",
             "Unknown"};
+
+    private void log(String s) {
+        Log.d(TAG, "[RadioInfo] " + s);
+    }
 }