Add ApnData class and SettingsOutlinedTextField.
Bug: 298906796
Test: Munual
Change-Id: Iba6563fee091302989d2653c0b59b5c18accce4d
diff --git a/src/com/android/settings/network/apn/ApnEditPageProvider.kt b/src/com/android/settings/network/apn/ApnEditPageProvider.kt
index c62cc78..1cca81a 100644
--- a/src/com/android/settings/network/apn/ApnEditPageProvider.kt
+++ b/src/com/android/settings/network/apn/ApnEditPageProvider.kt
@@ -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 @@
@Composable
override fun Page(arguments: Bundle?) {
- val context = LocalContext.current
- ApnPage(context)
+ val apnDataInit = ApnData()
+ ApnPage(apnDataInit)
}
fun getRoute(
@@ -67,9 +71,78 @@
}
@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) }
+ }
}
}
\ No newline at end of file
diff --git a/src/com/android/settings/network/apn/ApnStatus.kt b/src/com/android/settings/network/apn/ApnStatus.kt
new file mode 100644
index 0000000..78734d0
--- /dev/null
+++ b/src/com/android/settings/network/apn/ApnStatus.kt
@@ -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
+}
\ No newline at end of file
diff --git a/tests/spa_unit/src/com/android/settings/network/apn/ApnEditPageProviderTest.kt b/tests/spa_unit/src/com/android/settings/network/apn/ApnEditPageProviderTest.kt
new file mode 100644
index 0000000..bfdb408
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/network/apn/ApnEditPageProviderTest.kt
@@ -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()
+ }
+}
\ No newline at end of file