Merge "Chage featureFlag to carrierRoamingNbIotNtn" into main
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index 621eb93..b9e6490 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -657,6 +657,11 @@
     private final Object mNtnSmsSupportedByMessagesAppLock = new Object();
     @GuardedBy("mNtnSmsSupportedByMessagesAppLock")
     private Boolean mNtnSmsSupportedByMessagesApp = null;
+
+    private final Object mSatelliteModemStateLock = new Object();
+    @GuardedBy("mSatelliteModemStateLock")
+    @SatelliteManager.SatelliteModemState
+    private int mSatelliteModemState = SatelliteManager.SATELLITE_MODEM_STATE_UNKNOWN;
     private BroadcastReceiver
             mDefaultSmsSubscriptionChangedBroadcastReceiver = new BroadcastReceiver() {
                 @Override
@@ -4772,6 +4777,11 @@
     private void handleEventSatelliteModemStateChanged(
             @SatelliteManager.SatelliteModemState int state) {
         plogd("handleEventSatelliteModemStateChanged: state=" + state);
+
+        synchronized (mSatelliteModemStateLock) {
+            mSatelliteModemState = state;
+        }
+
         if (state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE
                 || state == SatelliteManager.SATELLITE_MODEM_STATE_OFF) {
             if (!isWaitingForDisableSatelliteModemResponse()) {
@@ -8094,7 +8104,7 @@
                 NTN_SIGNAL_STRENGTH_NONE);
 
         if (isInCarrierRoamingNbIotNtn(phone)) {
-            if (mSatelliteSessionController.isInConnectedState()) {
+            if (isInConnectedState()) {
                 synchronized (mNtnSignalsStrengthLock) {
                     carrierRoamingNtnSignalStrength = mNtnSignalStrength;
                 }
@@ -8114,6 +8124,20 @@
         return carrierRoamingNtnSignalStrength;
     }
 
+    private boolean isInConnectedState() {
+        synchronized (mSatelliteModemStateLock) {
+            switch (mSatelliteModemState) {
+                case SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED:
+                case SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING:
+                    plogd("isInConnectedState: return true");
+                    return true;
+                default:
+                    plogd("isInConnectedState: return false");
+                    return false;
+            }
+        }
+    }
+
     protected void updateLastNotifiedCarrierRoamingNtnSignalStrengthAndNotify(
             @Nullable Phone phone) {
         if (!mFeatureFlags.carrierRoamingNbIotNtn()) return;
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java b/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
index 1e467e8..7aaf936 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
@@ -555,31 +555,43 @@
         convertedSpecifier.mMccMnc = systemSelectionSpecifier.getMccMnc();
         convertedSpecifier.mBands = systemSelectionSpecifier.getBands().toArray();
         convertedSpecifier.mEarfcs = systemSelectionSpecifier.getEarfcns().toArray();
+
         SatelliteInfo[] satelliteInfos = systemSelectionSpecifier.getSatelliteInfos();
         android.telephony.satellite.stub.SatelliteInfo[] halSatelliteInfos =
                 new android.telephony.satellite.stub.SatelliteInfo[satelliteInfos.length];
         for (int i = 0; i < satelliteInfos.length; i++) {
+            halSatelliteInfos[i] = new android.telephony.satellite.stub.SatelliteInfo();
+
+            halSatelliteInfos[i].id = new android.telephony.satellite.stub.UUID();
             halSatelliteInfos[i].id.mostSigBits =
                     satelliteInfos[i].getSatelliteId().getMostSignificantBits();
             halSatelliteInfos[i].id.leastSigBits =
                     satelliteInfos[i].getSatelliteId().getLeastSignificantBits();
+
+            halSatelliteInfos[i].position =
+                    new android.telephony.satellite.stub.SatellitePosition();
             halSatelliteInfos[i].position.longitudeDegree =
                     satelliteInfos[i].getSatellitePosition().getLongitudeDegrees();
             halSatelliteInfos[i].position.altitudeKm =
                     satelliteInfos[i].getSatellitePosition().getAltitudeKm();
+
             halSatelliteInfos[i].bands = satelliteInfos[i].getBands().stream().mapToInt(
                     Integer::intValue).toArray();
+
             List<EarfcnRange> earfcnRangeList = satelliteInfos[i].getEarfcnRanges();
             halSatelliteInfos[i].earfcnRanges =
                     new android.telephony.satellite.stub.EarfcnRange[earfcnRangeList.size()];
             for (int j = 0; j < earfcnRangeList.size(); j++) {
+                halSatelliteInfos[i].earfcnRanges[j] =
+                        new android.telephony.satellite.stub.EarfcnRange();
                 halSatelliteInfos[i].earfcnRanges[j].startEarfcn = earfcnRangeList.get(
                         j).getStartEarfcn();
                 halSatelliteInfos[i].earfcnRanges[j].endEarfcn = earfcnRangeList.get(
-                        j).getStartEarfcn();
+                        j).getEndEarfcn();
             }
         }
         convertedSpecifier.satelliteInfos = halSatelliteInfos;
+
         convertedSpecifier.tagIds = systemSelectionSpecifier.getTagIds().toArray();
         return convertedSpecifier;
     }
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java b/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java
index d1d03a0..b2861d3 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java
@@ -68,7 +68,6 @@
 import android.util.Log;
 
 import com.android.internal.R;
-import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.DeviceStateMonitor;
 import com.android.internal.telephony.ExponentialBackoff;
@@ -586,17 +585,6 @@
     }
 
     /**
-     * Get whether state machine is in connected state.
-     *
-     * @return {@code true} if state machine is in connected state and {@code false} otherwise.
-     */
-    public boolean isInConnectedState() {
-        if (DBG) plogd("isInConnectedState: getCurrentState=" + getCurrentState());
-        return getCurrentState() == mConnectedState;
-    }
-
-
-    /**
      * Release all resource.
      */
     @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)