Merge "Telephony.Carriers.MVNO_TYPE is Deprecated." into main

This commit is contained in:
Treehugger Robot
2023-10-10 03:28:29 +00:00
committed by Android (Google) Code Review
7 changed files with 66 additions and 117 deletions

View File

@@ -47,8 +47,6 @@ import java.util.Base64
const val URI_TYPE = "uriType" const val URI_TYPE = "uriType"
const val URI = "uri" const val URI = "uri"
const val SUB_ID = "subId" const val SUB_ID = "subId"
const val MVNO_TYPE = "mvnoType"
const val MVNO_MATCH_DATA = "mvnoMatchData"
const val EDIT_URL = "editUrl" const val EDIT_URL = "editUrl"
const val INSERT_URL = "insertUrl" const val INSERT_URL = "insertUrl"
@@ -61,8 +59,6 @@ object ApnEditPageProvider : SettingsPageProvider {
navArgument(URI_TYPE) { type = NavType.StringType }, navArgument(URI_TYPE) { type = NavType.StringType },
navArgument(URI) { type = NavType.StringType }, navArgument(URI) { type = NavType.StringType },
navArgument(SUB_ID) { type = NavType.IntType }, navArgument(SUB_ID) { type = NavType.IntType },
navArgument(MVNO_TYPE) { type = NavType.StringType },
navArgument(MVNO_MATCH_DATA) { type = NavType.StringType },
) )
@Composable @Composable
@@ -80,12 +76,10 @@ object ApnEditPageProvider : SettingsPageProvider {
fun getRoute( fun getRoute(
uriType: String, uriType: String,
uri: Uri, uri: Uri,
subId: Int, subId: Int
mMvnoType: String,
mMvnoMatchData: String
): String = "${name}/$uriType/${ ): String = "${name}/$uriType/${
Base64.getUrlEncoder().encodeToString(uri.toString().toByteArray()) Base64.getUrlEncoder().encodeToString(uri.toString().toByteArray())
}/$subId/$mMvnoType/$mMvnoMatchData" }/$subId"
} }
@Composable @Composable
@@ -94,7 +88,6 @@ fun ApnPage(apnDataCur: MutableState<ApnData>) {
val context = LocalContext.current val context = LocalContext.current
val authTypeOptions = stringArrayResource(R.array.apn_auth_entries).toList() val authTypeOptions = stringArrayResource(R.array.apn_auth_entries).toList()
val apnProtocolOptions = stringArrayResource(R.array.apn_protocol_entries).toList() val apnProtocolOptions = stringArrayResource(R.array.apn_protocol_entries).toList()
val mvnoTypeOptions = stringArrayResource(R.array.mvno_type_entries).toList()
val networkTypeSelectedOptionsState = remember { val networkTypeSelectedOptionsState = remember {
getNetworkTypeSelectedOptionsState(apnData.networkType) getNetworkTypeSelectedOptionsState(apnData.networkType)
} }
@@ -152,16 +145,6 @@ fun ApnPage(apnDataCur: MutableState<ApnData>) {
label = stringResource(R.string.apn_mms_port), label = stringResource(R.string.apn_mms_port),
enabled = apnData.mmsPortEnabled enabled = apnData.mmsPortEnabled
) { apnData = apnData.copy(mmsPort = it) } ) { apnData = apnData.copy(mmsPort = it) }
SettingsOutlinedTextField(
value = apnData.mcc,
label = stringResource(R.string.apn_mcc),
enabled = apnData.mccEnabled
) { apnData = apnData.copy(mcc = it) }
SettingsOutlinedTextField(
value = apnData.mnc,
label = stringResource(R.string.apn_mnc),
enabled = apnData.mncEnabled
) { apnData = apnData.copy(mnc = it) }
// Warning: apnProtocol, apnRoaming, mvnoType string2Int // Warning: apnProtocol, apnRoaming, mvnoType string2Int
SettingsExposedDropdownMenuBox( SettingsExposedDropdownMenuBox(
label = stringResource(R.string.apn_auth_type), label = stringResource(R.string.apn_auth_type),
@@ -205,19 +188,6 @@ fun ApnPage(apnDataCur: MutableState<ApnData>) {
emptyVal = stringResource(R.string.network_type_unspecified), emptyVal = stringResource(R.string.network_type_unspecified),
enabled = apnData.networkTypeEnabled enabled = apnData.networkTypeEnabled
) {} ) {}
SettingsExposedDropdownMenuBox(
label = stringResource(R.string.mvno_type),
options = mvnoTypeOptions,
selectedOptionIndex = apnData.mvnoType,
enabled = apnData.mvnoTypeEnabled
) {
apnData = apnData.copy(mvnoType = it)
} // TODO: mvnoDescription
SettingsOutlinedTextField(
value = apnData.mvnoValue,
label = stringResource(R.string.mvno_match_data),
enabled = apnData.mvnoValueEnabled
) { apnData = apnData.copy(mvnoValue = it) }
} }
} }
} }

View File

@@ -157,7 +157,7 @@ public class ApnPreference extends Preference
final Uri url = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, pos); final Uri url = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, pos);
if (Flags.newApnPageEnabled()) { if (Flags.newApnPageEnabled()) {
String route = ApnEditPageProvider.INSTANCE.getRoute(EDIT_URL, url, mSubId, "_", "_"); String route = ApnEditPageProvider.INSTANCE.getRoute(EDIT_URL, url, mSubId);
SpaActivity.startSpaActivity(context, route); SpaActivity.startSpaActivity(context, route);
} else { } else {
final Intent editIntent = new Intent(Intent.ACTION_EDIT, url); final Intent editIntent = new Intent(Intent.ACTION_EDIT, url);

View File

@@ -31,21 +31,17 @@ const val USER_INDEX = 5
const val SERVER_INDEX = 6 const val SERVER_INDEX = 6
const val PASSWORD_INDEX = 7 const val PASSWORD_INDEX = 7
const val MMSC_INDEX = 8 const val MMSC_INDEX = 8
const val MCC_INDEX = 9 const val MMSPROXY_INDEX = 9
const val MNC_INDEX = 10 const val MMSPORT_INDEX = 10
const val MMSPROXY_INDEX = 12 const val AUTH_TYPE_INDEX = 11
const val MMSPORT_INDEX = 13 const val TYPE_INDEX = 12
const val AUTH_TYPE_INDEX = 14 const val PROTOCOL_INDEX = 13
const val TYPE_INDEX = 15 const val CARRIER_ENABLED_INDEX = 14
const val PROTOCOL_INDEX = 16 const val NETWORK_TYPE_INDEX = 15
const val CARRIER_ENABLED_INDEX = 17 const val ROAMING_PROTOCOL_INDEX = 16
const val NETWORK_TYPE_INDEX = 18 const val EDITED_INDEX = 17
const val ROAMING_PROTOCOL_INDEX = 19 const val USER_EDITABLE_INDEX = 18
const val MVNO_TYPE_INDEX = 20 const val CARRIER_ID_INDEX = 19
const val MVNO_MATCH_DATA_INDEX = 21
const val EDITED_INDEX = 22
const val USER_EDITABLE_INDEX = 23
const val CARRIER_ID_INDEX = 24
val sProjection = arrayOf( val sProjection = arrayOf(
Telephony.Carriers._ID, // 0 Telephony.Carriers._ID, // 0
@@ -57,22 +53,17 @@ val sProjection = arrayOf(
Telephony.Carriers.SERVER, // 6 Telephony.Carriers.SERVER, // 6
Telephony.Carriers.PASSWORD, // 7 Telephony.Carriers.PASSWORD, // 7
Telephony.Carriers.MMSC, // 8 Telephony.Carriers.MMSC, // 8
Telephony.Carriers.MCC, // 9 Telephony.Carriers.MMSPROXY, // 9
Telephony.Carriers.MNC, // 10 Telephony.Carriers.MMSPORT, // 10
Telephony.Carriers.NUMERIC, // 11 Telephony.Carriers.AUTH_TYPE, // 11
Telephony.Carriers.MMSPROXY, // 12 Telephony.Carriers.TYPE, // 12
Telephony.Carriers.MMSPORT, // 13 Telephony.Carriers.PROTOCOL, // 13
Telephony.Carriers.AUTH_TYPE, // 14 Telephony.Carriers.CARRIER_ENABLED, // 14
Telephony.Carriers.TYPE, // 15 Telephony.Carriers.NETWORK_TYPE_BITMASK, // 15
Telephony.Carriers.PROTOCOL, // 16 Telephony.Carriers.ROAMING_PROTOCOL, // 16
Telephony.Carriers.CARRIER_ENABLED, // 17 Telephony.Carriers.EDITED_STATUS, // 17
Telephony.Carriers.NETWORK_TYPE_BITMASK, // 18 Telephony.Carriers.USER_EDITABLE, // 18
Telephony.Carriers.ROAMING_PROTOCOL, // 19 Telephony.Carriers.CARRIER_ID // 19
Telephony.Carriers.MVNO_TYPE, // 20
Telephony.Carriers.MVNO_MATCH_DATA, // 21
Telephony.Carriers.EDITED_STATUS, // 22
Telephony.Carriers.USER_EDITABLE, // 23
Telephony.Carriers.CARRIER_ID // 24
) )
const val TAG = "ApnRepository" const val TAG = "ApnRepository"
@@ -87,7 +78,6 @@ fun getApnDataFromUri(uri: Uri, context: Context): ApnData {
var apnData = ApnData() var apnData = ApnData()
val contentResolver = context.contentResolver val contentResolver = context.contentResolver
val apnProtocolOptions = context.resources.getStringArray(R.array.apn_protocol_entries).toList() val apnProtocolOptions = context.resources.getStringArray(R.array.apn_protocol_entries).toList()
val mvnoTypeOptions = context.resources.getStringArray(R.array.mvno_type_entries).toList()
contentResolver.query( contentResolver.query(
uri, uri,
@@ -105,8 +95,6 @@ fun getApnDataFromUri(uri: Uri, context: Context): ApnData {
val server = cursor.getString(SERVER_INDEX) val server = cursor.getString(SERVER_INDEX)
val passWord = cursor.getString(PASSWORD_INDEX) val passWord = cursor.getString(PASSWORD_INDEX)
val mmsc = cursor.getString(MMSC_INDEX) val mmsc = cursor.getString(MMSC_INDEX)
val mcc = cursor.getString(MCC_INDEX)
val mnc = cursor.getString(MNC_INDEX)
val mmsProxy = cursor.getString(MMSPROXY_INDEX) val mmsProxy = cursor.getString(MMSPROXY_INDEX)
val mmsPort = cursor.getString(MMSPORT_INDEX) val mmsPort = cursor.getString(MMSPORT_INDEX)
val authType = cursor.getInt(AUTH_TYPE_INDEX) val authType = cursor.getInt(AUTH_TYPE_INDEX)
@@ -116,8 +104,6 @@ fun getApnDataFromUri(uri: Uri, context: Context): ApnData {
convertProtocol2Options(cursor.getString(ROAMING_PROTOCOL_INDEX), context) convertProtocol2Options(cursor.getString(ROAMING_PROTOCOL_INDEX), context)
val apnEnable = cursor.getInt(CARRIER_ENABLED_INDEX) == 1 val apnEnable = cursor.getInt(CARRIER_ENABLED_INDEX) == 1
val networkType = cursor.getLong(NETWORK_TYPE_INDEX) val networkType = cursor.getLong(NETWORK_TYPE_INDEX)
val mvnoType = cursor.getString(MVNO_TYPE_INDEX)
val mvnoValue = cursor.getString(MVNO_MATCH_DATA_INDEX)
val edited = cursor.getInt(EDITED_INDEX) val edited = cursor.getInt(EDITED_INDEX)
val userEditable = cursor.getInt(USER_EDITABLE_INDEX) val userEditable = cursor.getInt(USER_EDITABLE_INDEX)
@@ -134,16 +120,12 @@ fun getApnDataFromUri(uri: Uri, context: Context): ApnData {
mmsc = mmsc, mmsc = mmsc,
mmsProxy = mmsProxy, mmsProxy = mmsProxy,
mmsPort = mmsPort, mmsPort = mmsPort,
mcc = mcc,
mnc = mnc,
authType = authType, authType = authType,
apnType = apnType, apnType = apnType,
apnProtocol = apnProtocolOptions.indexOf(apnProtocol), apnProtocol = apnProtocolOptions.indexOf(apnProtocol),
apnRoaming = apnProtocolOptions.indexOf(apnRoaming), apnRoaming = apnProtocolOptions.indexOf(apnRoaming),
apnEnable = apnEnable, apnEnable = apnEnable,
networkType = networkType, networkType = networkType,
mvnoType = mvnoTypeOptions.indexOf(mvnoType),
mvnoValue = mvnoValue,
edited = edited, edited = edited,
userEditable = userEditable, userEditable = userEditable,
carrierId = carrierId carrierId = carrierId

View File

@@ -38,16 +38,12 @@ data class ApnData(
val mmsc: String = "", val mmsc: String = "",
val mmsProxy: String = "", val mmsProxy: String = "",
val mmsPort: String = "", val mmsPort: String = "",
val mcc: String = "",
val mnc: String = "",
val authType: Int = -1, val authType: Int = -1,
val apnType: String = "", val apnType: String = "",
val apnProtocol: Int = -1, val apnProtocol: Int = -1,
val apnRoaming: Int = -1, val apnRoaming: Int = -1,
val apnEnable: Boolean = true, val apnEnable: Boolean = true,
val networkType: Long = 0, val networkType: Long = 0,
val mvnoType: Int = -1,
var mvnoValue: String = "",
val edited: Int = Telephony.Carriers.USER_EDITED, val edited: Int = Telephony.Carriers.USER_EDITED,
val userEditable: Int = 1, val userEditable: Int = 1,
val carrierId: Int = TelephonyManager.UNKNOWN_CARRIER_ID, val carrierId: Int = TelephonyManager.UNKNOWN_CARRIER_ID,
@@ -61,17 +57,15 @@ data class ApnData(
val mmscEnabled: Boolean = true, val mmscEnabled: Boolean = true,
val mmsProxyEnabled: Boolean = true, val mmsProxyEnabled: Boolean = true,
val mmsPortEnabled: Boolean = true, val mmsPortEnabled: Boolean = true,
val mccEnabled: Boolean = true,
val mncEnabled: Boolean = true,
val authTypeEnabled: Boolean = true, val authTypeEnabled: Boolean = true,
val apnTypeEnabled: Boolean = true, val apnTypeEnabled: Boolean = true,
val apnProtocolEnabled: Boolean = true, val apnProtocolEnabled: Boolean = true,
val apnRoamingEnabled: Boolean = true, val apnRoamingEnabled: Boolean = true,
val apnEnableEnabled: Boolean = true, val apnEnableEnabled: Boolean = true,
val networkTypeEnabled: Boolean = true, val networkTypeEnabled: Boolean = true,
val mvnoTypeEnabled: Boolean = true,
val mvnoValueEnabled: Boolean = false,
val newApn: Boolean = false, val newApn: Boolean = false,
val subId: Int = -1,
val customizedConfig: CustomizedConfig = CustomizedConfig()
) )
data class CustomizedConfig( data class CustomizedConfig(
@@ -96,13 +90,6 @@ data class CustomizedConfig(
fun getApnDataInit(arguments: Bundle, context: Context, uriInit: Uri, subId: Int): ApnData { fun getApnDataInit(arguments: Bundle, context: Context, uriInit: Uri, subId: Int): ApnData {
val uriType = arguments.getString(URI_TYPE)!! val uriType = arguments.getString(URI_TYPE)!!
val mvnoType = arguments.getString(MVNO_TYPE)
val mvnoValue = arguments.getString(MVNO_MATCH_DATA)
val mvnoTypeOptions = context.resources.getStringArray(R.array.mvno_type_entries).toList()
val configManager =
context.getSystemService(Context.CARRIER_CONFIG_SERVICE) as CarrierConfigManager
getCarrierCustomizedConfig(configManager, subId)
if (!uriInit.isPathPrefixMatch(Telephony.Carriers.CONTENT_URI)) { if (!uriInit.isPathPrefixMatch(Telephony.Carriers.CONTENT_URI)) {
Log.e(TAG, "Insert request not for carrier table. Uri: $uriInit") Log.e(TAG, "Insert request not for carrier table. Uri: $uriInit")
@@ -111,19 +98,20 @@ fun getApnDataInit(arguments: Bundle, context: Context, uriInit: Uri, subId: Int
var apnDataInit = when (uriType) { var apnDataInit = when (uriType) {
EDIT_URL -> getApnDataFromUri(uriInit, context) EDIT_URL -> getApnDataFromUri(uriInit, context)
INSERT_URL -> ApnData( INSERT_URL -> ApnData()
mvnoType = mvnoTypeOptions.indexOf(mvnoType!!),
mvnoValue = mvnoValue!!
)
else -> ApnData() //TODO: finish else -> ApnData() //TODO: finish
} }
apnDataInit = apnDataInit.copy(subId = subId)
val configManager =
context.getSystemService(Context.CARRIER_CONFIG_SERVICE) as CarrierConfigManager
apnDataInit =
apnDataInit.copy(customizedConfig = getCarrierCustomizedConfig(apnDataInit, configManager))
if (uriType == INSERT_URL) { if (uriType == INSERT_URL) {
apnDataInit = apnDataInit.copy(newApn = true) apnDataInit = apnDataInit.copy(newApn = true)
} }
// TODO: mvnoDescription
apnDataInit = apnDataInit.copy( apnDataInit = apnDataInit.copy(
apnEnableEnabled = apnEnableEnabled =
context.resources.getBoolean(R.bool.config_allow_edit_carrier_enabled) context.resources.getBoolean(R.bool.config_allow_edit_carrier_enabled)
@@ -138,9 +126,12 @@ fun getApnDataInit(arguments: Bundle, context: Context, uriInit: Uri, subId: Int
* *
* @return Initialized CustomizedConfig information. * @return Initialized CustomizedConfig information.
*/ */
fun getCarrierCustomizedConfig(configManager: CarrierConfigManager, subId: Int): CustomizedConfig { fun getCarrierCustomizedConfig(
apnInit: ApnData,
configManager: CarrierConfigManager
): CustomizedConfig {
val b = configManager.getConfigForSubId( val b = configManager.getConfigForSubId(
subId, apnInit.subId,
CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY, CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY,
CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY, CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY,
CarrierConfigManager.KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY, CarrierConfigManager.KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY,

View File

@@ -51,7 +51,6 @@ class ApnEditPageProviderTest {
private val apnName = "apn_name" private val apnName = "apn_name"
private val mmsc = "mmsc" private val mmsc = "mmsc"
private val mmsProxy = "mms_proxy" private val mmsProxy = "mms_proxy"
private val mnc = "mnc"
private val apnType = "apn_type" private val apnType = "apn_type"
private val apnRoaming = "IPv4" private val apnRoaming = "IPv4"
private val apnEnable = context.resources.getString(R.string.carrier_enabled) private val apnEnable = context.resources.getString(R.string.carrier_enabled)
@@ -64,7 +63,6 @@ class ApnEditPageProviderTest {
name = apnName, name = apnName,
mmsc = mmsc, mmsc = mmsc,
mmsProxy = mmsProxy, mmsProxy = mmsProxy,
mnc = mnc,
apnType = apnType, apnType = apnType,
apnRoaming = apnProtocolOptions.indexOf(apnRoaming), apnRoaming = apnProtocolOptions.indexOf(apnRoaming),
apnEnable = true apnEnable = true
@@ -120,18 +118,6 @@ class ApnEditPageProviderTest {
composeTestRule.onNodeWithText(mmsProxy, true).assertIsDisplayed() composeTestRule.onNodeWithText(mmsProxy, true).assertIsDisplayed()
} }
@Test
fun mnc_displayed() {
composeTestRule.setContent {
ApnPage(remember {
apnData
})
}
composeTestRule.onRoot().onChild().onChildAt(0)
.performScrollToNode(hasText(mnc, true))
composeTestRule.onNodeWithText(mnc, true).assertIsDisplayed()
}
@Test @Test
fun apn_type_displayed() { fun apn_type_displayed() {
composeTestRule.setContent { composeTestRule.setContent {

View File

@@ -41,10 +41,26 @@ class ApnRepositoryTest {
val cursor = MatrixCursor(sProjection) val cursor = MatrixCursor(sProjection)
cursor.addRow( cursor.addRow(
arrayOf<Any?>( arrayOf<Any?>(
0, "name", "apn", "proxy", "port", 0,
"userName", "server", "passWord", "mmsc", "mcc", "mnc", "numeric", "name",
"mmsProxy", "mmsPort", 0, "apnType", "apnProtocol", 0, "apn",
0, "apnRoaming", "mvnoType", "mvnoValue", 0, 1, 0 "proxy",
"port",
"userName",
"server",
"passWord",
"mmsc",
"mmsProxy",
"mmsPort",
0,
"apnType",
"apnProtocol",
0,
0,
"apnRoaming",
0,
1,
0
) )
) )
val context = Mockito.spy(context) val context = Mockito.spy(context)

View File

@@ -26,13 +26,17 @@ import org.mockito.kotlin.mock
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
class ApnStatusTest { class ApnStatusTest {
private val subId = 1 private val apnData = mock<ApnData> {
on {
it.subId
} doReturn 1
}
private val configManager = mock<CarrierConfigManager> { private val configManager = mock<CarrierConfigManager> {
val p = PersistableBundle() val p = PersistableBundle()
p.putBoolean(CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL, true) p.putBoolean(CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL, true)
on { on {
getConfigForSubId( getConfigForSubId(
subId, apnData.subId,
CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY, CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY,
CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY, CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY,
CarrierConfigManager.KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY, CarrierConfigManager.KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY,
@@ -45,6 +49,6 @@ class ApnStatusTest {
@Test @Test
fun getCarrierCustomizedConfig_test() { fun getCarrierCustomizedConfig_test() {
assert(getCarrierCustomizedConfig(configManager, subId).isAddApnAllowed) assert(getCarrierCustomizedConfig(apnData, configManager).isAddApnAllowed)
} }
} }