diff --git a/src/com/android/settings/network/SatelliteRepository.kt b/src/com/android/settings/network/SatelliteRepository.kt
index c70484a..994f8ec 100644
--- a/src/com/android/settings/network/SatelliteRepository.kt
+++ b/src/com/android/settings/network/SatelliteRepository.kt
@@ -23,6 +23,7 @@
 import android.util.Log
 import androidx.annotation.VisibleForTesting
 import androidx.concurrent.futures.CallbackToFutureAdapter
+import com.android.internal.telephony.flags.Flags
 import com.google.common.util.concurrent.Futures.immediateFuture
 import com.google.common.util.concurrent.ListenableFuture
 import java.util.concurrent.Executor
@@ -40,7 +41,7 @@
 /**
  * A repository class for interacting with the SatelliteManager API.
  */
-class SatelliteRepository(
+open class SatelliteRepository(
     private val context: Context,
 ) {
 
@@ -196,6 +197,28 @@
         }
     }
 
+    /**
+     *  @return A list with application package names which support Satellite service.
+     *  e.g. "com.android.settings"
+     */
+    open fun getSatelliteDataOptimizedApps(): List<String> {
+        if (!Flags.satellite25q4Apis()) {
+            return emptyList()
+        }
+        val satelliteManager: SatelliteManager? =
+            context.getSystemService(SatelliteManager::class.java)
+        if (satelliteManager == null) {
+            Log.d(TAG, "SatelliteManager is null")
+            return emptyList()
+        }
+        try {
+            return satelliteManager.getSatelliteDataOptimizedApps();
+        } catch (e: IllegalStateException) {
+            Log.w(TAG, "IllegalStateException $e")
+        }
+        return emptyList()
+    }
+
     companion object {
         private const val TAG: String = "SatelliteRepository"
 
diff --git a/tests/robotests/src/com/android/settings/network/SatelliteRepositoryTest.kt b/tests/robotests/src/com/android/settings/network/SatelliteRepositoryTest.kt
index 619d290..0f845df 100644
--- a/tests/robotests/src/com/android/settings/network/SatelliteRepositoryTest.kt
+++ b/tests/robotests/src/com/android/settings/network/SatelliteRepositoryTest.kt
@@ -18,10 +18,12 @@
 
 import android.content.Context
 import android.os.OutcomeReceiver
+import android.platform.test.annotations.EnableFlags
 import android.telephony.satellite.SatelliteManager
 import android.telephony.satellite.SatelliteManager.SatelliteException
 import android.telephony.satellite.SatelliteModemStateCallback
 import androidx.test.core.app.ApplicationProvider
+import com.android.internal.telephony.flags.Flags
 import com.google.common.truth.Truth.assertThat
 import com.google.common.util.concurrent.ListenableFuture
 import kotlinx.coroutines.flow.first
@@ -38,10 +40,10 @@
 import org.mockito.Spy
 import org.mockito.junit.MockitoJUnit
 import org.mockito.junit.MockitoRule
+import org.mockito.kotlin.whenever
 import org.robolectric.RobolectricTestRunner
 import java.util.concurrent.Executor
 
-
 @RunWith(RobolectricTestRunner::class)
 class SatelliteRepositoryTest {
 
@@ -267,4 +269,35 @@
 
         assertThat(flow.first()).isFalse()
     }
-}
\ No newline at end of file
+
+    @Test
+    @EnableFlags(Flags.FLAG_SATELLITE_25Q4_APIS)
+    fun getSatelliteDataOptimizedApps_returnPackageNameList() = runBlocking {
+        whenever(
+            mockSatelliteManager.getSatelliteDataOptimizedApps()
+        ).thenReturn(
+            listOf(
+                "com.android.settings",
+                "com.android.apps.messaging",
+                "com.android.dialer",
+                "com.android.systemui"
+            )
+        )
+
+        val result = repository.getSatelliteDataOptimizedApps()
+
+        assertThat(result.size == 4).isTrue()
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_SATELLITE_25Q4_APIS)
+    fun getSatelliteDataOptimizedApps_noTelephony_returnEmptyList() = runBlocking {
+        whenever(
+            mockSatelliteManager.getSatelliteDataOptimizedApps()
+        ).thenThrow(IllegalStateException("Telephony is null"))
+
+        val result = repository.getSatelliteDataOptimizedApps()
+
+        assertThat(result.isEmpty()).isTrue()
+    }
+}
