Merge "Get network type from options." into main

This commit is contained in:
Charlotte Lu
2023-10-26 05:50:54 +00:00
committed by Android (Google) Code Review
3 changed files with 33 additions and 10 deletions

View File

@@ -99,7 +99,13 @@ fun ApnPage(apnDataInit: ApnData, apnDataCur: MutableState<ApnData>, 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<ApnData>, 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,

View File

@@ -50,10 +50,22 @@ object ApnNetworkTypes {
fun getNetworkTypeSelectedOptionsState(networkType: Long): SnapshotStateList<Int> {
val networkTypeSelectedOptionsState = mutableStateListOf<Int>()
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<Int>): Long {
var networkType = 0L
networkTypeSelectedOptionsState.forEach { option ->
networkType = networkType or TelephonyManager.getBitMaskForNetworkType(Types[option])
}
return networkType
}
}

View File

@@ -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<Int>
): 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
}