Merge "Reafactor DataProcessManager Callback Function Logic" into main
diff --git a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
index 99683a8..77f4e1c 100644
--- a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
+++ b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
@@ -224,7 +224,10 @@
         }
 
         private val BooleanKeysWhichNotFollowingsNamingConventions =
-            listOf(CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
+            listOf(
+                CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS,
+                CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            )
 
         private fun checkBooleanKey(key: String) {
             check(key.endsWith("_bool") || key in BooleanKeysWhichNotFollowingsNamingConventions) {
diff --git a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt
index 220218c..a37a12b 100644
--- a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt
+++ b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt
@@ -17,6 +17,7 @@
 package com.android.settings.network.telephony
 
 import android.content.Context
+import android.telephony.CarrierConfigManager
 import android.telephony.SubscriptionManager
 import android.telephony.TelephonyManager
 import android.telephony.data.ApnSetting
@@ -45,7 +46,7 @@
     private var subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID
     private var telephonyManager: TelephonyManager =
         context.getSystemService(TelephonyManager::class.java)!!
-
+    private val carrierConfigRepository = CarrierConfigRepository(context)
     private var preferenceScreen: PreferenceScreen? = null
 
     fun init(subId: Int) {
@@ -54,7 +55,13 @@
     }
 
     override fun getAvailabilityStatus() =
-        if (getAvailabilityStatus(telephonyManager, subId, getDefaultDataSubId)) AVAILABLE
+        if (getAvailabilityStatus(
+                telephonyManager,
+                subId,
+                getDefaultDataSubId,
+                carrierConfigRepository
+            )
+        ) AVAILABLE
         else CONDITIONALLY_UNAVAILABLE
 
     override fun displayPreference(screen: PreferenceScreen) {
@@ -92,11 +99,14 @@
             telephonyManager: TelephonyManager,
             subId: Int,
             getDefaultDataSubId: () -> Int,
+            carrierConfigRepository: CarrierConfigRepository,
         ): Boolean {
             return SubscriptionManager.isValidSubscriptionId(subId) &&
                 !telephonyManager.isDataEnabled &&
                 telephonyManager.isApnMetered(ApnSetting.TYPE_MMS) &&
-                !isFallbackDataEnabled(telephonyManager, subId, getDefaultDataSubId())
+                !isFallbackDataEnabled(telephonyManager, subId, getDefaultDataSubId()) &&
+                carrierConfigRepository.getBoolean(
+                    subId, CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL)
         }
 
         private fun isFallbackDataEnabled(
@@ -118,11 +128,16 @@
         ) : MobileNetworkSettingsSearchItem {
             private var telephonyManager: TelephonyManager =
                 context.getSystemService(TelephonyManager::class.java)!!
+            private val carrierConfigRepository = CarrierConfigRepository(context)
 
             @VisibleForTesting
             fun isAvailable(subId: Int): Boolean =
                 getAvailabilityStatus(
-                    telephonyManager.createForSubscriptionId(subId), subId, getDefaultDataSubId)
+                    telephonyManager.createForSubscriptionId(subId),
+                    subId,
+                    getDefaultDataSubId,
+                    carrierConfigRepository
+                )
 
             override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
                 if (!isAvailable(subId)) return null
diff --git a/tests/Enable16KbTests/Android.bp b/tests/Enable16KbTests/Android.bp
index 7e1d32c..72826bb 100644
--- a/tests/Enable16KbTests/Android.bp
+++ b/tests/Enable16KbTests/Android.bp
@@ -53,7 +53,7 @@
         "compatibility-host-util",
         "compatibility-tradefed",
     ],
-    data: [
+    device_common_data: [
         ":test_16kb_app",
     ],
     test_suites: ["general-tests"],
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt
index 4d53260..75c1913 100644
--- a/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt
@@ -17,6 +17,7 @@
 package com.android.settings.network.telephony
 
 import android.content.Context
+import android.telephony.CarrierConfigManager
 import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
 import android.telephony.TelephonyManager
 import android.telephony.data.ApnSetting
@@ -26,6 +27,7 @@
 import com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE
 import com.android.settings.network.telephony.MmsMessagePreferenceController.Companion.MmsMessageSearchItem
 import com.google.common.truth.Truth.assertThat
+import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.kotlin.doReturn
@@ -63,6 +65,21 @@
         getDefaultDataSubId = { defaultDataSubId },
     )
 
+    @Before
+    fun setUp() {
+        CarrierConfigRepository.resetForTest()
+        CarrierConfigRepository.setBooleanForTest(
+            subId = SUB_1_ID,
+            key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            value = true,
+        )
+        CarrierConfigRepository.setBooleanForTest(
+            subId = SUB_2_ID,
+            key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            value = true,
+        )
+    }
+
     @Test
     fun getAvailabilityStatus_invalidSubscription_unavailable() {
         controller.init(INVALID_SUBSCRIPTION_ID)
@@ -165,6 +182,27 @@
     }
 
     @Test
+    fun getAvailabilityStatus_carrierConfigEnabledMmsFalse_unavailable() {
+        defaultDataSubId = SUB_2_ID
+        mockTelephonyManager2.stub {
+            on { isDataEnabled } doReturn false
+            on {
+                isMobileDataPolicyEnabled(TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH)
+            } doReturn true
+        }
+        CarrierConfigRepository.setBooleanForTest(
+            subId = SUB_2_ID,
+            key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            value = false,
+        )
+        controller.init(SUB_2_ID)
+
+        val availabilityStatus = controller.getAvailabilityStatus()
+
+        assertThat(availabilityStatus).isEqualTo(CONDITIONALLY_UNAVAILABLE)
+    }
+
+    @Test
     fun searchIsAvailable_notDefaultDataAndDataOnAndAutoDataSwitchOn_unavailable() {
         mockTelephonyManager1.stub {
             on { isDataEnabled } doReturn true
@@ -201,6 +239,27 @@
     }
 
     @Test
+    fun searchIsAvailable_carrierConfigEnabledMmsFalse_unavailable() {
+        defaultDataSubId = SUB_2_ID
+        mockTelephonyManager2.stub {
+            on { isDataEnabled } doReturn false
+            on {
+                isMobileDataPolicyEnabled(TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH)
+            } doReturn true
+        }
+        CarrierConfigRepository.setBooleanForTest(
+            subId = SUB_2_ID,
+            key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            value = false,
+        )
+        controller.init(SUB_2_ID)
+
+        val availabilityStatus = controller.getAvailabilityStatus()
+
+        assertThat(availabilityStatus).isEqualTo(CONDITIONALLY_UNAVAILABLE)
+    }
+
+    @Test
     fun isChecked_whenMmsNotAlwaysAllowed_returnFalse() {
         mockTelephonyManager2.stub {
             on {