Check APN type is selected before save

Not allow save APN without type.

Fix: 340969975
Test: manual - APN Settings
Test: unit test
Change-Id: I91f8e8137fc234c9c860fd446b7a1e2acfa11fc7
This commit is contained in:
Chaohui Wang
2024-05-24 15:56:06 +08:00
parent 574d64197a
commit 2faad6df6e
5 changed files with 65 additions and 13 deletions

View File

@@ -174,20 +174,13 @@ fun validateAndSaveApnData(
* @return An error message if the apn data is invalid, otherwise return null.
*/
fun validateApnData(apnData: ApnData, context: Context): String? {
var errorMsg: String?
val name = apnData.name
val apn = apnData.apn
errorMsg = if (name == "") {
context.resources.getString(R.string.error_name_empty)
} else if (apn == "") {
context.resources.getString(R.string.error_apn_empty)
} else {
validateMMSC(true, apnData.mmsc, context)
val errorMsg: String? = when {
apnData.name.isEmpty() -> context.resources.getString(R.string.error_name_empty)
apnData.apn.isEmpty() -> context.resources.getString(R.string.error_apn_empty)
apnData.apnType.isEmpty() -> context.resources.getString(R.string.error_apn_type_empty)
else -> validateMMSC(true, apnData.mmsc, context) ?: isItemExist(apnData, context)
}
if (errorMsg == null) {
errorMsg = isItemExist(apnData, context)
}
return errorMsg?.apply { Log.d(TAG, "APN data not valid, reason: $this") }
return errorMsg?.also { Log.d(TAG, "APN data not valid, reason: $it") }
}
/**

View File

@@ -24,6 +24,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import com.android.settings.R
import com.android.settings.network.apn.ApnTypes.isValid
import com.android.settings.network.apn.ApnTypes.toApnType
import com.android.settingslib.spa.widget.editor.SettingsDropdownCheckBox
@@ -47,6 +48,8 @@ fun ApnTypeCheckBox(
label = stringResource(R.string.apn_type),
options = apnTypeOptions,
enabled = apnData.isFieldEnabled(Telephony.Carriers.TYPE),
errorMessage = stringResource(R.string.error_apn_type_empty)
.takeUnless { apnTypeOptions.isValid() },
) {
onTypeChanged(apnTypeOptions.toApnType())
updateMmsSelected()

View File

@@ -101,6 +101,8 @@ object ApnTypes {
}
}
fun List<SettingsDropdownCheckOption>.isValid(): Boolean = any { it.selected.value }
fun List<SettingsDropdownCheckOption>.toApnType(): String {
val (selectAllOptions, regularOptions) = partition { it.isSelectAll }
for (selectAllOption in selectAllOptions) {