Test SatelliteModemdStateCallback

Bug: 351703546
Test: Manually using TestSatelliteApp
Flag: com.android.internal.telephony.flags.carrier_roaming_nb_iot_ntn
Change-Id: I3266af59ba05e8d8cddd7131c0656968284633ec
diff --git a/testapps/TestSatelliteApp/res/layout/activity_TestSatelliteWrapper.xml b/testapps/TestSatelliteApp/res/layout/activity_TestSatelliteWrapper.xml
index a6259c8..39a4bd6 100644
--- a/testapps/TestSatelliteApp/res/layout/activity_TestSatelliteWrapper.xml
+++ b/testapps/TestSatelliteApp/res/layout/activity_TestSatelliteWrapper.xml
@@ -155,6 +155,18 @@
             android:layout_height="wrap_content"
             android:paddingRight="4dp"
             android:text="@string/unregisterForCommunicationAllowedStateChanged"/>
+        <Button
+            android:id="@+id/registerForModemStateChanged"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/registerForModemStateChanged"/>
+        <Button
+            android:id="@+id/unregisterForModemStateChanged"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/unregisterForModemStateChanged"/>
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
diff --git a/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml b/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml
index 86f458e..c51d574 100644
--- a/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml
+++ b/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml
@@ -102,4 +102,7 @@
 
     <string name="registerForCarrierRoamingNtnModeChanged">registerForCarrierRoamingNtnModeChanged</string>
     <string name="unregisterForCarrierRoamingNtnModeChanged">unregisterForCarrierRoamingNtnModeChanged</string>
+
+    <string name="registerForModemStateChanged">registerForModemStateChanged</string>
+    <string name="unregisterForModemStateChanged">unregisterForModemStateChanged</string>
 </resources>
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteWrapper.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteWrapper.java
index bc42f1d..109ebbf 100644
--- a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteWrapper.java
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteWrapper.java
@@ -29,6 +29,7 @@
 import android.telephony.satellite.wrapper.SatelliteCapabilitiesCallbackWrapper;
 import android.telephony.satellite.wrapper.SatelliteCommunicationAllowedStateCallbackWrapper;
 import android.telephony.satellite.wrapper.SatelliteManagerWrapper;
+import android.telephony.satellite.wrapper.SatelliteModemStateCallbackWrapper;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -55,6 +56,7 @@
     private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
     private SatelliteManagerWrapper mSatelliteManagerWrapper;
     private NtnSignalStrengthCallback mNtnSignalStrengthCallback = null;
+    private SatelliteModemStateCallback mModemStateCallback = null;
     private CarrierRoamingNtnModeListener mCarrierRoamingNtnModeListener = null;
     private SatelliteCommunicationAllowedStateCallback mSatelliteCommunicationAllowedStateCallback;
     private SatelliteCapabilitiesCallbackWrapper mSatelliteCapabilitiesCallback;
@@ -111,6 +113,10 @@
                 .setOnClickListener(this::registerForCommunicationAllowedStateChanged);
         findViewById(R.id.unregisterForCommunicationAllowedStateChanged)
                 .setOnClickListener(this::unregisterForCommunicationAllowedStateChanged);
+        findViewById(R.id.registerForModemStateChanged)
+                .setOnClickListener(this::registerForModemStateChanged);
+        findViewById(R.id.unregisterForModemStateChanged)
+                .setOnClickListener(this::unregisterForModemStateChanged);
 
         findViewById(R.id.Back).setOnClickListener(new OnClickListener() {
             @Override
@@ -353,6 +359,38 @@
         }
     }
 
+    private void registerForModemStateChanged(View view) {
+        addLogMessage("registerForModemStateChanged");
+        logd("registerForSatelliteModemStateChanged()");
+        if (mModemStateCallback == null) {
+            logd("create new ModemStateCallback instance.");
+            mModemStateCallback = new SatelliteModemStateCallback();
+        }
+
+        try {
+            mSatelliteManagerWrapper.registerForModemStateChanged(mExecutor, mModemStateCallback);
+        } catch (Exception ex) {
+            String errorMessage = "registerForModemStateChanged: " + ex.getMessage();
+            logd(errorMessage);
+            addLogMessage(errorMessage);
+            mModemStateCallback = null;
+        }
+    }
+
+    private void unregisterForModemStateChanged(View view) {
+        addLogMessage("unregisterForModemStateChanged");
+        logd("unregisterForModemStateChanged()");
+        if (mModemStateCallback != null) {
+            mSatelliteManagerWrapper.unregisterForModemStateChanged(mModemStateCallback);
+            mModemStateCallback = null;
+            addLogMessage("mModemStateCallback was unregistered");
+        } else {
+            addLogMessage("mModemStateCallback is null, ignored.");
+        }
+    }
+
+
+
     public class NtnSignalStrengthCallback implements NtnSignalStrengthCallbackWrapper {
         @Override
         public void onNtnSignalStrengthChanged(
@@ -393,6 +431,22 @@
         }
     }
 
+    private class SatelliteModemStateCallback implements SatelliteModemStateCallbackWrapper {
+        @Override
+        public void onSatelliteModemStateChanged(int state) {
+            String message = "Received onSatelliteModemStateChanged state: " + state;
+            logd(message);
+            addLogMessage(message);
+        }
+
+        @Override
+        public void onEmergencyModeChanged(boolean isEmergency) {
+            String message = "Received onEmergencyModeChanged isEmergency: " + isEmergency;
+            logd(message);
+            addLogMessage(message);
+        }
+    }
+
     private void isNonTerrestrialNetwork(View view) {
         boolean isNonTerrestrialNetwork = mSatelliteManagerWrapper.isNonTerrestrialNetwork(mSubId);
         addLogMessage("isNonTerrestrialNetwork=" + isNonTerrestrialNetwork);