diff --git a/src/com/android/settings/network/apn/ApnEditPageProvider.kt b/src/com/android/settings/network/apn/ApnEditPageProvider.kt index c62cc781e5e..1cca81a0714 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 @@ 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) } + } } } \ 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 00000000000..78734d02ec6 --- /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 00000000000..bfdb408b0b9 --- /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