[coastguard skipped] Merge sparse cherrypicks from sparse-13272751-L40800030010704228 into 25Q1-release.

COASTGUARD_SKIP: Ib02fd0b3dfd354e53ff7e6d6d352d3e91933b3ea
COASTGUARD_SKIP: I609defbb1df83dc9510ee59dd857fd5e69ce43fb

Change-Id: I9c2a8610114ae98eeed702053ac1cdf7591ecf17
diff --git a/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java b/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java
index a40275f..d1d8726 100644
--- a/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java
+++ b/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java
@@ -82,8 +82,6 @@
     private static final int CMD_SEND_SMS = 8;
     private static final int EVENT_SEND_SMS_DONE = 9;
     private static final int EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT = 10;
-    private static final int CMD_SEND_MT_SMS_POLLING_MESSAGE = 11;
-
     private static final Long TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE = TimeUnit.SECONDS.toMillis(10);
     @NonNull private static DatagramDispatcher sInstance;
     @NonNull private final Context mContext;
@@ -428,16 +426,10 @@
             case EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT: {
                 synchronized (mLock) {
                     mIsMtSmsPollingThrottled = false;
+                    if (allowMtSmsPolling()) {
+                        sendMtSmsPollingMessage();
+                    }
                 }
-                if (allowMtSmsPolling()) {
-                    sendMessage(obtainMessage(CMD_SEND_MT_SMS_POLLING_MESSAGE));
-                }
-                break;
-            }
-
-            case CMD_SEND_MT_SMS_POLLING_MESSAGE: {
-                plogd("CMD_SEND_MT_SMS_POLLING_MESSAGE");
-                handleCmdSendMtSmsPollingMessage();
                 break;
             }
 
@@ -529,9 +521,9 @@
             mIsAligned = isAligned;
             plogd("setDeviceAlignedWithSatellite: " + mIsAligned);
             if (isAligned && mIsDemoMode) handleEventSatelliteAligned();
-        }
-        if (allowMtSmsPolling()) {
-            sendMessage(obtainMessage(CMD_SEND_MT_SMS_POLLING_MESSAGE));
+            if (allowMtSmsPolling()) {
+                sendMtSmsPollingMessage();
+            }
         }
     }
 
@@ -853,9 +845,10 @@
                     mShouldPollMtSms = shouldPollMtSms();
                 }
             }
-        }
-        if (allowMtSmsPolling()) {
-            sendMessage(obtainMessage(CMD_SEND_MT_SMS_POLLING_MESSAGE));
+
+            if (allowMtSmsPolling()) {
+                sendMtSmsPollingMessage();
+            }
         }
     }
 
@@ -1332,26 +1325,23 @@
                 && satelliteController.shouldSendSmsToDatagramDispatcher(satellitePhone);
     }
 
-    private void handleCmdSendMtSmsPollingMessage() {
-        synchronized (mLock) {
-            if (!mShouldPollMtSms) {
-                plogd("sendMtSmsPollingMessage: mShouldPollMtSms=" + mShouldPollMtSms);
+    @GuardedBy("mLock")
+    private void sendMtSmsPollingMessage() {
+        if (!mShouldPollMtSms) {
+            return;
+        }
+
+        plogd("sendMtSmsPollingMessage");
+        if (!allowCheckMessageInNotConnected()) {
+            mShouldPollMtSms = false;
+        }
+
+        for (Entry<Long, PendingRequest> entry : mPendingSmsMap.entrySet()) {
+            PendingRequest pendingRequest = entry.getValue();
+            if (pendingRequest.isMtSmsPolling) {
+                plogd("sendMtSmsPollingMessage: mPendingSmsMap already has the polling message.");
                 return;
             }
-
-            plogd("sendMtSmsPollingMessage");
-            if (!allowCheckMessageInNotConnected()) {
-                mShouldPollMtSms = false;
-            }
-
-            for (Entry<Long, PendingRequest> entry : mPendingSmsMap.entrySet()) {
-                PendingRequest pendingRequest = entry.getValue();
-                if (pendingRequest.isMtSmsPolling) {
-                    plogd("sendMtSmsPollingMessage: mPendingSmsMap already "
-                            + "has the polling message.");
-                    return;
-                }
-            }
         }
 
         Phone satellitePhone = SatelliteController.getInstance().getSatellitePhone();
@@ -1384,20 +1374,17 @@
         removeMessages(EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT);
     }
 
+    @GuardedBy("mLock")
     private boolean allowMtSmsPolling() {
         if (!mFeatureFlags.carrierRoamingNbIotNtn()) return false;
 
         if (mIsMtSmsPollingThrottled) return false;
 
-        boolean isModemStateConnectedOrTransferring;
-        synchronized (mLock) {
-            if (!mIsAligned) return false;
+        if (!mIsAligned) return false;
 
-            isModemStateConnectedOrTransferring =
-                    mModemState == SATELLITE_MODEM_STATE_CONNECTED
-                            || mModemState == SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING;
-        }
-
+        boolean isModemStateConnectedOrTransferring =
+                mModemState == SATELLITE_MODEM_STATE_CONNECTED
+                        || mModemState == SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING;
         if (!isModemStateConnectedOrTransferring && !allowCheckMessageInNotConnected()) {
             plogd("EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT:"
                     + " allow_check_message_in_not_connected is disabled");
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index 0f922c2..d455863 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -614,6 +614,7 @@
     private List<SatelliteSubscriberProvisionStatus> mLastEvaluatedSubscriberProvisionStatus =
             new ArrayList<>();
     // The ID of the satellite subscription that has highest priority and is provisioned.
+    @GuardedBy("mSatelliteTokenProvisionedLock")
     @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
     protected int mSelectedSatelliteSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     // The last ICC ID that framework configured to modem.
@@ -7331,7 +7332,6 @@
      */
     public void requestSatelliteSubscriberProvisionStatus(@NonNull ResultReceiver result) {
         if (!mFeatureFlags.carrierRoamingNbIotNtn()) {
-            logd("requestSatelliteSubscriberProvisionStatus: carrierRoamingNbIotNtn is disabled");
             result.send(SATELLITE_RESULT_REQUEST_NOT_SUPPORTED, null);
             return;
         }
@@ -7397,8 +7397,10 @@
     }
 
     public int getSelectedSatelliteSubId() {
-        plogd("getSelectedSatelliteSubId: subId=" + mSelectedSatelliteSubId);
-        return mSelectedSatelliteSubId;
+        synchronized (mSatelliteTokenProvisionedLock) {
+            plogd("getSelectedSatelliteSubId: subId=" + mSelectedSatelliteSubId);
+            return mSelectedSatelliteSubId;
+        }
     }
 
     /**
@@ -7760,13 +7762,15 @@
 
     /** Return the carrier ID of the binding satellite subscription. */
     public int getSatelliteCarrierId() {
-        SubscriptionInfo subInfo = mSubscriptionManagerService.getSubscriptionInfo(
-            mSelectedSatelliteSubId);
-        if (subInfo == null) {
-            logd("getSatelliteCarrierId: returns UNKNOWN_CARRIER_ID");
-            return UNKNOWN_CARRIER_ID;
+        synchronized (mSatelliteTokenProvisionedLock) {
+            SubscriptionInfo subInfo = mSubscriptionManagerService.getSubscriptionInfo(
+                    mSelectedSatelliteSubId);
+            if (subInfo == null) {
+                logd("getSatelliteCarrierId: returns UNKNOWN_CARRIER_ID");
+                return UNKNOWN_CARRIER_ID;
+            }
+            return subInfo.getCarrierId();
         }
-        return subInfo.getCarrierId();
     }
 
     /**
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java
index b6828df..b4de672 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java
@@ -1157,7 +1157,6 @@
         mDatagramDispatcherUT.handleMessage(
                 mDatagramDispatcherUT.obtainMessage(10 /*EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT*/,
                         new AsyncResult(null, null, null)));
-        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
    }
@@ -1206,7 +1205,6 @@
                 R.bool.config_satellite_allow_check_message_in_not_connected, true);
 
         mDatagramDispatcherUT.setDeviceAlignedWithSatellite(true);
-        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
@@ -1233,7 +1231,6 @@
 
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
-        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
@@ -1246,7 +1243,6 @@
 
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
-        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
@@ -1259,7 +1255,6 @@
 
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
-        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }
@@ -1290,7 +1285,6 @@
 
         mDatagramDispatcherUT.onSatelliteModemStateChanged(
                 SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
-        processAllMessages();
 
         verify(mMockSmsDispatchersController, times(1)).sendMtSmsPollingMessage();
     }