update getStaticPhoneCapability to use HAL instead of default value

Bug: 123359867
Test: build
Change-Id: Iec4461f2c98afdbc876b196efb5f8132bcbef0c9
Merged-In: Iec4461f2c98afdbc876b196efb5f8132bcbef0c9
(cherry picked from commit af57040b8f15c89de2166205caca4266e280cf04)
diff --git a/src/java/com/android/internal/telephony/PhoneConfigurationManager.java b/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
index 616e9fe..a191c47 100644
--- a/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
+++ b/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
@@ -46,11 +46,11 @@
     private static final int EVENT_SWITCH_DSDS_CONFIG_DONE = 100;
     private static final int EVENT_GET_MODEM_STATUS = 101;
     private static final int EVENT_GET_MODEM_STATUS_DONE = 102;
+    private static final int EVENT_GET_PHONE_CAPABILITY_DONE = 103;
 
     private static PhoneConfigurationManager sInstance = null;
     private final Context mContext;
     private PhoneCapability mStaticCapability;
-    private PhoneCapability mCurrentCapability;
     private final RadioConfig mRadioConfig;
     private final MainThreadHandler mHandler;
     private final Phone[] mPhones;
@@ -79,8 +79,8 @@
         mContext = context;
         // TODO: send commands to modem once interface is ready.
         TelephonyManager telephonyManager = new TelephonyManager(context);
-        mStaticCapability = PhoneConfigurationModels.DSDS_CAPABILITY;
-        mCurrentCapability = mStaticCapability;
+        //initialize with default, it'll get updated when RADIO is ON/AVAILABLE
+        mStaticCapability = getDefaultCapability();
         mRadioConfig = RadioConfig.getInstance(mContext);
         mHandler = new MainThreadHandler();
         mPhoneStatusMap = new HashMap<>();
@@ -99,6 +99,14 @@
         }
     }
 
+    private PhoneCapability getDefaultCapability() {
+        if (getPhoneCount() > 1) {
+            return PhoneConfigurationModels.DSDS_CAPABILITY;
+        } else {
+            return PhoneConfigurationModels.SSSS_CAPABILITY;
+        }
+    }
+
     /**
      * Static method to get instance.
      */
@@ -131,6 +139,7 @@
                     } else {
                         updatePhoneStatus(phone);
                     }
+                    getStaticPhoneCapability();
                     break;
                 case EVENT_SWITCH_DSDS_CONFIG_DONE:
                     ar = (AsyncResult) msg.obj;
@@ -152,6 +161,14 @@
                         log(msg.what + " failure. Not updating modem status." + ar.exception);
                     }
                     break;
+                case EVENT_GET_PHONE_CAPABILITY_DONE:
+                    ar = (AsyncResult) msg.obj;
+                    if (ar != null && ar.exception == null) {
+                        mStaticCapability = (PhoneCapability) ar.result;
+                        notifyCapabilityChanged();
+                    } else {
+                        log(msg.what + " failure. Not getting phone capability." + ar.exception);
+                    }
             }
         }
     }
@@ -196,7 +213,7 @@
     }
 
     /**
-     * method to call RIL getM
+     * method to call RIL getModemStatus
      */
     private void updatePhoneStatus(Phone phone) {
         Message callback = Message.obtain(
@@ -224,7 +241,13 @@
     /**
      * get static overall phone capabilities for all phones.
      */
-    public PhoneCapability getStaticPhoneCapability() {
+    public synchronized PhoneCapability getStaticPhoneCapability() {
+        if (getDefaultCapability().equals(mStaticCapability)) {
+            log("getStaticPhoneCapability: sending the request for getting PhoneCapability");
+            Message callback = Message.obtain(
+                    mHandler, EVENT_GET_PHONE_CAPABILITY_DONE);
+            mRadioConfig.getPhoneCapability(callback);
+        }
         return mStaticCapability;
     }
 
@@ -232,17 +255,17 @@
      * get configuration related status of each phone.
      */
     public PhoneCapability getCurrentPhoneCapability() {
-        return mCurrentCapability;
+        return getStaticPhoneCapability();
     }
 
     public int getNumberOfModemsWithSimultaneousDataConnections() {
-        return mCurrentCapability.maxActiveData;
+        return mStaticCapability.maxActiveData;
     }
 
     private void notifyCapabilityChanged() {
         PhoneNotifier notifier = new DefaultPhoneNotifier();
 
-        notifier.notifyPhoneCapabilityChanged(mCurrentCapability);
+        notifier.notifyPhoneCapabilityChanged(mStaticCapability);
     }
 
     /**
diff --git a/src/java/com/android/internal/telephony/RadioConfig.java b/src/java/com/android/internal/telephony/RadioConfig.java
index ab9afec..680d052 100644
--- a/src/java/com/android/internal/telephony/RadioConfig.java
+++ b/src/java/com/android/internal/telephony/RadioConfig.java
@@ -324,7 +324,7 @@
      * Wrapper function for IRadioConfig.getPhoneCapability().
      */
     public void getPhoneCapability(Message result) {
-        IRadioConfig radioConfigProxy = getRadioConfigProxy(result);
+        IRadioConfig radioConfigProxy = getRadioConfigProxy(null);
         if (radioConfigProxy == null || mRadioConfigVersion.less(RADIO_CONFIG_HAL_VERSION_1_1)) {
             if (result != null) {
                 AsyncResult.forMessage(result, null,