diff --git a/res/values/strings.xml b/res/values/strings.xml
index 71a7b30e451..6a7827502c5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3267,6 +3267,8 @@
MNC field must be 2 or 3 digits.
Carrier does not allow adding APNs of type %s.
+
+ MMSC field must be valid.
Restoring default APN settings.
diff --git a/src/com/android/settings/network/apn/ApnEditPageProvider.kt b/src/com/android/settings/network/apn/ApnEditPageProvider.kt
index 5026958cba1..bb19c597d90 100644
--- a/src/com/android/settings/network/apn/ApnEditPageProvider.kt
+++ b/src/com/android/settings/network/apn/ApnEditPageProvider.kt
@@ -150,6 +150,7 @@ fun ApnPage(apnDataInit: ApnData, apnDataCur: MutableState, uriInit: Ur
SettingsOutlinedTextField(
value = apnData.mmsc,
label = stringResource(R.string.apn_mmsc),
+ errorMessage = validateMMSC(apnData.mmsc, context),
enabled = apnData.mmscEnabled
) { apnData = apnData.copy(mmsc = it) }
SettingsOutlinedTextField(
diff --git a/src/com/android/settings/network/apn/ApnStatus.kt b/src/com/android/settings/network/apn/ApnStatus.kt
index d81a8e3e956..668ea9b112d 100644
--- a/src/com/android/settings/network/apn/ApnStatus.kt
+++ b/src/com/android/settings/network/apn/ApnStatus.kt
@@ -239,7 +239,12 @@ fun validateAndSaveApnData(
if (apnData.customizedConfig.readOnlyApn) {
return true
}
- val errorMsg = validateApnData(apnData, context)
+ var errorMsg = validateApnData(apnData, context)
+ if (errorMsg != null) {
+ //TODO: showError(this)
+ return false
+ }
+ errorMsg = validateMMSC(apnData.mmsc, context)
if (errorMsg != null) {
//TODO: showError(this)
return false
@@ -529,4 +534,9 @@ private fun getEditableApnType(apnData: ApnData): String {
fun deleteApn(uri: Uri, context: Context) {
val contentResolver = context.contentResolver
contentResolver.delete(uri, null, null)
+}
+
+fun validateMMSC(mmsc: String, context: Context): String? {
+ return if (mmsc.matches(Regex("^https?:\\/\\/.+"))) null
+ else context.resources.getString(R.string.error_mmsc_valid)
}
\ No newline at end of file