Merge "Add ApnData class and SettingsOutlinedTextField." into main

This commit is contained in:
Chaohui Wang
2023-09-19 06:24:32 +00:00
committed by Android (Google) Code Review
3 changed files with 206 additions and 5 deletions

View File

@@ -16,16 +16,20 @@
package com.android.settings.network.apn package com.android.settings.network.apn
import android.content.Context
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.navigation.NavType import androidx.navigation.NavType
import androidx.navigation.navArgument import androidx.navigation.navArgument
import com.android.settings.R import com.android.settings.R
import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.widget.editor.SettingsOutlinedTextField
import com.android.settingslib.spa.widget.scaffold.RegularScaffold import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import java.util.Base64 import java.util.Base64
@@ -51,8 +55,8 @@ object ApnEditPageProvider : SettingsPageProvider {
@Composable @Composable
override fun Page(arguments: Bundle?) { override fun Page(arguments: Bundle?) {
val context = LocalContext.current val apnDataInit = ApnData()
ApnPage(context) ApnPage(apnDataInit)
} }
fun getRoute( fun getRoute(
@@ -67,9 +71,78 @@ object ApnEditPageProvider : SettingsPageProvider {
} }
@Composable @Composable
fun ApnPage(context: Context) { fun ApnPage(apnDataInit: ApnData) {
var apnData by remember { mutableStateOf(apnDataInit) }
RegularScaffold( RegularScaffold(
title = stringResource(id = R.string.apn_edit), title = stringResource(id = R.string.apn_edit),
) { ) {
Column() {
SettingsOutlinedTextField(
apnData.name,
stringResource(R.string.apn_name),
enabled = apnData.nameEnabled
) { apnData = apnData.copy(name = it) }
SettingsOutlinedTextField(
apnData.apn,
stringResource(R.string.apn_apn),
enabled = apnData.apnEnabled
) { apnData = apnData.copy(apn = it) }
SettingsOutlinedTextField(
apnData.proxy,
stringResource(R.string.apn_http_proxy),
enabled = apnData.proxyEnabled
) { apnData = apnData.copy(proxy = it) }
SettingsOutlinedTextField(
apnData.port,
stringResource(R.string.apn_http_port),
enabled = apnData.portEnabled
) { apnData = apnData.copy(port = it) }
SettingsOutlinedTextField(
apnData.userName,
stringResource(R.string.apn_user),
enabled = apnData.userNameEnabled
) { apnData = apnData.copy(userName = it) }
// TODO: password
SettingsOutlinedTextField(
apnData.server,
stringResource(R.string.apn_server),
enabled = apnData.serverEnabled
) { apnData = apnData.copy(server = it) }
SettingsOutlinedTextField(
apnData.mmsc,
stringResource(R.string.apn_mmsc),
enabled = apnData.mmscEnabled
) { apnData = apnData.copy(mmsc = it) }
SettingsOutlinedTextField(
apnData.mmsProxy,
stringResource(R.string.apn_mms_proxy),
enabled = apnData.mmsProxyEnabled
) { apnData = apnData.copy(mmsProxy = it) }
SettingsOutlinedTextField(
apnData.mmsPort,
stringResource(R.string.apn_mms_port),
enabled = apnData.mmsPortEnabled
) { apnData = apnData.copy(mmsPort = it) }
SettingsOutlinedTextField(
apnData.mcc,
stringResource(R.string.apn_mcc),
enabled = apnData.mccEnabled
) { apnData = apnData.copy(mcc = it) }
SettingsOutlinedTextField(
apnData.mnc,
stringResource(R.string.apn_mnc),
enabled = apnData.mncEnabled
) { apnData = apnData.copy(mnc = it) }
SettingsOutlinedTextField(
apnData.apnType,
stringResource(R.string.apn_type),
enabled = apnData.apnTypeEnabled
) { apnData = apnData.copy(apn = it) } // TODO: updateApnType
SettingsOutlinedTextField(
apnData.mvnoValue,
stringResource(R.string.mvno_match_data),
enabled = apnData.mvnoValueEnabled
) { apnData = apnData.copy(mvnoValue = it) }
}
} }
} }

View File

@@ -0,0 +1,68 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.network.apn
import android.provider.Telephony
import android.telephony.TelephonyManager
data class ApnData(
val name: String = "",
val apn: String = "",
val proxy: String = "",
val port: String = "",
val userName: String = "",
val passWord: String = "",
val server: String = "",
val mmsc: String = "",
val mmsProxy: String = "",
val mmsPort: String = "",
val mcc: String = "",
val mnc: String = "",
val authType: Int = -1,
val apnType: String = "",
val apnProtocol: String = "",
val apnRoaming: String = "",
val apnEnable: Int = 1,
val bearer: Int = 0,
val mvnoType: String = "",
var mvnoValue: String = "",
val bearerBitmask: Int = 0,
val edited: Int = Telephony.Carriers.USER_EDITED,
val userEditable: Int = 1,
val carrierId: Int = TelephonyManager.UNKNOWN_CARRIER_ID
) {
var nameEnabled = true
var apnEnabled = true
var proxyEnabled = true
var portEnabled = true
var userNameEnabled = true
var passWordEnabled = true
var serverEnabled = true
var mmscEnabled = true
var mmsProxyEnabled = true
var mmsPortEnabled = true
var mccEnabled = true
var mncEnabled = true
var authTypeEnabled = true
var apnTypeEnabled = true
var apnProtocolEnabled = true
var apnRoamingEnabled = true
var apnEnableEnabled = true
var bearerEnabled = true
var mvnoTypeEnabled = true
var mvnoValueEnabled = false
}

View File

@@ -0,0 +1,60 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.network.apn
import android.content.Context
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.R
import com.google.common.truth.Truth
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class ApnEditPageProviderTest {
@get:Rule
val composeTestRule = createComposeRule()
private val context: Context = ApplicationProvider.getApplicationContext()
val apnData = ApnData(name = "apn_name")
@Test
fun apnEditPageProvider_name() {
Truth.assertThat(ApnEditPageProvider.name).isEqualTo("Apn")
}
@Test
fun title_displayed() {
composeTestRule.setContent {
ApnPage(apnData)
}
composeTestRule.onNodeWithText(context.getString(R.string.apn_edit)).assertIsDisplayed()
}
@Test
fun name_displayed() {
composeTestRule.setContent {
ApnPage(apnData)
}
composeTestRule.onNodeWithText("apn_name", true).assertIsDisplayed()
}
}