Add ApnData class and SettingsOutlinedTextField.

Bug: 298906796
Test: Munual
Change-Id: Iba6563fee091302989d2653c0b59b5c18accce4d
This commit is contained in:
Charlotte Lu
2023-09-18 12:18:16 +08:00
parent 71235aa403
commit 4964deb8b5
3 changed files with 206 additions and 5 deletions

View File

@@ -16,16 +16,20 @@
package com.android.settings.network.apn
import android.content.Context
import android.net.Uri
import android.os.Bundle
import androidx.compose.foundation.layout.Column
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.navigation.NavType
import androidx.navigation.navArgument
import com.android.settings.R
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 java.util.Base64
@@ -51,8 +55,8 @@ object ApnEditPageProvider : SettingsPageProvider {
@Composable
override fun Page(arguments: Bundle?) {
val context = LocalContext.current
ApnPage(context)
val apnDataInit = ApnData()
ApnPage(apnDataInit)
}
fun getRoute(
@@ -67,9 +71,78 @@ object ApnEditPageProvider : SettingsPageProvider {
}
@Composable
fun ApnPage(context: Context) {
fun ApnPage(apnDataInit: ApnData) {
var apnData by remember { mutableStateOf(apnDataInit) }
RegularScaffold(
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()
}
}