diff --git a/src/com/android/settings/network/apn/ApnEditPageProvider.kt b/src/com/android/settings/network/apn/ApnEditPageProvider.kt index 753de22990f..0e23a0ef679 100644 --- a/src/com/android/settings/network/apn/ApnEditPageProvider.kt +++ b/src/com/android/settings/network/apn/ApnEditPageProvider.kt @@ -99,7 +99,13 @@ fun ApnPage(apnDataInit: ApnData, apnDataCur: MutableState, uriInit: Ur title = stringResource(id = R.string.apn_edit), actions = { IconButton(onClick = { - validateAndSaveApnData(apnDataInit, apnData, context, uriInit) + validateAndSaveApnData( + apnDataInit, + apnData, + context, + uriInit, + networkTypeSelectedOptionsState + ) }) { Icon(imageVector = Icons.Outlined.Done, contentDescription = "Save APN") } } ) { @@ -154,7 +160,6 @@ fun ApnPage(apnDataInit: ApnData, apnDataCur: MutableState, uriInit: Ur label = stringResource(R.string.apn_mms_port), enabled = apnData.mmsPortEnabled ) { apnData = apnData.copy(mmsPort = it) } - // Warning: apnProtocol, apnRoaming, mvnoType string2Int SettingsExposedDropdownMenuBox( label = stringResource(R.string.apn_auth_type), options = authTypeOptions, diff --git a/src/com/android/settings/network/apn/ApnNetworkTypes.kt b/src/com/android/settings/network/apn/ApnNetworkTypes.kt index 560449a70f8..0ccd33a8210 100644 --- a/src/com/android/settings/network/apn/ApnNetworkTypes.kt +++ b/src/com/android/settings/network/apn/ApnNetworkTypes.kt @@ -50,10 +50,22 @@ object ApnNetworkTypes { fun getNetworkTypeSelectedOptionsState(networkType: Long): SnapshotStateList { val networkTypeSelectedOptionsState = mutableStateListOf() Types.forEachIndexed { index, type -> - if (networkType and TelephonyManager.getBitMaskForNetworkType(type) == 1L) { + if (networkType and TelephonyManager.getBitMaskForNetworkType(type) != 0L) { networkTypeSelectedOptionsState.add(index) } } return networkTypeSelectedOptionsState } + + /** + * Gets the network type according to the selected Network type Selected Options. + * @param networkTypeSelectedOptionsState the selected Network type Selected Options. + */ + fun getNetworkType(networkTypeSelectedOptionsState: SnapshotStateList): Long { + var networkType = 0L + networkTypeSelectedOptionsState.forEach { option -> + networkType = networkType or TelephonyManager.getBitMaskForNetworkType(Types[option]) + } + return networkType + } } diff --git a/src/com/android/settings/network/apn/ApnStatus.kt b/src/com/android/settings/network/apn/ApnStatus.kt index 991529a49c0..3ccd71e1488 100644 --- a/src/com/android/settings/network/apn/ApnStatus.kt +++ b/src/com/android/settings/network/apn/ApnStatus.kt @@ -25,8 +25,10 @@ import android.telephony.CarrierConfigManager import android.telephony.TelephonyManager import android.text.TextUtils import android.util.Log +import androidx.compose.runtime.snapshots.SnapshotStateList import com.android.internal.util.ArrayUtils import com.android.settings.R +import com.android.settings.network.apn.ApnNetworkTypes.getNetworkType import java.util.Locale data class ApnData( @@ -211,9 +213,6 @@ fun getApnDataInit(arguments: Bundle, context: Context, uriInit: Uri, subId: Int /** * Validates the apn data and save it to the database if it's valid. - * - * - * * A dialog with error message will be displayed if the APN data is invalid. * * @return true if there is no error @@ -222,7 +221,8 @@ fun validateAndSaveApnData( apnDataInit: ApnData, apnData: ApnData, context: Context, - uriInit: Uri + uriInit: Uri, + networkTypeSelectedOptionsState: SnapshotStateList ): Boolean { // Nothing to do if it's a read only APN if (apnData.customizedConfig.readOnlyApn) { @@ -233,9 +233,15 @@ fun validateAndSaveApnData( //TODO: showError(this) return false } - if (apnData.newApn || (apnData != apnDataInit)) { - Log.d(TAG, "validateAndSaveApnData: apnData ${apnData.name}") - updateApnDataToDatabase(apnData.newApn, apnData.getContentValues(context), context, uriInit) + val newApnData = apnData.copy(networkType = getNetworkType(networkTypeSelectedOptionsState)) + if (newApnData.newApn || (newApnData != apnDataInit)) { + Log.d(TAG, "[validateAndSaveApnData] newApnData.networkType: ${newApnData.networkType}") + updateApnDataToDatabase( + newApnData.newApn, + newApnData.getContentValues(context), + context, + uriInit + ) } return true }