Merge "Add the condition to hide the MMS messages preference" into main

This commit is contained in:
SongFerng Wang
2024-10-23 03:43:36 +00:00
committed by Android (Google) Code Review
3 changed files with 82 additions and 5 deletions

View File

@@ -224,7 +224,10 @@ class CarrierConfigRepository(private val context: Context) {
} }
private val BooleanKeysWhichNotFollowingsNamingConventions = 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) { private fun checkBooleanKey(key: String) {
check(key.endsWith("_bool") || key in BooleanKeysWhichNotFollowingsNamingConventions) { check(key.endsWith("_bool") || key in BooleanKeysWhichNotFollowingsNamingConventions) {

View File

@@ -17,6 +17,7 @@
package com.android.settings.network.telephony package com.android.settings.network.telephony
import android.content.Context import android.content.Context
import android.telephony.CarrierConfigManager
import android.telephony.SubscriptionManager import android.telephony.SubscriptionManager
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.telephony.data.ApnSetting import android.telephony.data.ApnSetting
@@ -45,7 +46,7 @@ constructor(
private var subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID private var subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID
private var telephonyManager: TelephonyManager = private var telephonyManager: TelephonyManager =
context.getSystemService(TelephonyManager::class.java)!! context.getSystemService(TelephonyManager::class.java)!!
private val carrierConfigRepository = CarrierConfigRepository(context)
private var preferenceScreen: PreferenceScreen? = null private var preferenceScreen: PreferenceScreen? = null
fun init(subId: Int) { fun init(subId: Int) {
@@ -54,7 +55,13 @@ constructor(
} }
override fun getAvailabilityStatus() = override fun getAvailabilityStatus() =
if (getAvailabilityStatus(telephonyManager, subId, getDefaultDataSubId)) AVAILABLE if (getAvailabilityStatus(
telephonyManager,
subId,
getDefaultDataSubId,
carrierConfigRepository
)
) AVAILABLE
else CONDITIONALLY_UNAVAILABLE else CONDITIONALLY_UNAVAILABLE
override fun displayPreference(screen: PreferenceScreen) { override fun displayPreference(screen: PreferenceScreen) {
@@ -92,11 +99,14 @@ constructor(
telephonyManager: TelephonyManager, telephonyManager: TelephonyManager,
subId: Int, subId: Int,
getDefaultDataSubId: () -> Int, getDefaultDataSubId: () -> Int,
carrierConfigRepository: CarrierConfigRepository,
): Boolean { ): Boolean {
return SubscriptionManager.isValidSubscriptionId(subId) && return SubscriptionManager.isValidSubscriptionId(subId) &&
!telephonyManager.isDataEnabled && !telephonyManager.isDataEnabled &&
telephonyManager.isApnMetered(ApnSetting.TYPE_MMS) && 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( private fun isFallbackDataEnabled(
@@ -118,11 +128,16 @@ constructor(
) : MobileNetworkSettingsSearchItem { ) : MobileNetworkSettingsSearchItem {
private var telephonyManager: TelephonyManager = private var telephonyManager: TelephonyManager =
context.getSystemService(TelephonyManager::class.java)!! context.getSystemService(TelephonyManager::class.java)!!
private val carrierConfigRepository = CarrierConfigRepository(context)
@VisibleForTesting @VisibleForTesting
fun isAvailable(subId: Int): Boolean = fun isAvailable(subId: Int): Boolean =
getAvailabilityStatus( getAvailabilityStatus(
telephonyManager.createForSubscriptionId(subId), subId, getDefaultDataSubId) telephonyManager.createForSubscriptionId(subId),
subId,
getDefaultDataSubId,
carrierConfigRepository
)
override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? { override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
if (!isAvailable(subId)) return null if (!isAvailable(subId)) return null

View File

@@ -17,6 +17,7 @@
package com.android.settings.network.telephony package com.android.settings.network.telephony
import android.content.Context import android.content.Context
import android.telephony.CarrierConfigManager
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.telephony.data.ApnSetting import android.telephony.data.ApnSetting
@@ -26,6 +27,7 @@ import com.android.settings.core.BasePreferenceController.AVAILABLE
import com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE import com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE
import com.android.settings.network.telephony.MmsMessagePreferenceController.Companion.MmsMessageSearchItem import com.android.settings.network.telephony.MmsMessagePreferenceController.Companion.MmsMessageSearchItem
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.kotlin.doReturn import org.mockito.kotlin.doReturn
@@ -63,6 +65,21 @@ class MmsMessagePreferenceControllerTest {
getDefaultDataSubId = { defaultDataSubId }, 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 @Test
fun getAvailabilityStatus_invalidSubscription_unavailable() { fun getAvailabilityStatus_invalidSubscription_unavailable() {
controller.init(INVALID_SUBSCRIPTION_ID) controller.init(INVALID_SUBSCRIPTION_ID)
@@ -164,6 +181,27 @@ class MmsMessagePreferenceControllerTest {
assertThat(availabilityStatus).isEqualTo(AVAILABLE) assertThat(availabilityStatus).isEqualTo(AVAILABLE)
} }
@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 @Test
fun searchIsAvailable_notDefaultDataAndDataOnAndAutoDataSwitchOn_unavailable() { fun searchIsAvailable_notDefaultDataAndDataOnAndAutoDataSwitchOn_unavailable() {
mockTelephonyManager1.stub { mockTelephonyManager1.stub {
@@ -200,6 +238,27 @@ class MmsMessagePreferenceControllerTest {
assertThat(isAvailable).isTrue() assertThat(isAvailable).isTrue()
} }
@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 @Test
fun isChecked_whenMmsNotAlwaysAllowed_returnFalse() { fun isChecked_whenMmsNotAlwaysAllowed_returnFalse() {
mockTelephonyManager2.stub { mockTelephonyManager2.stub {