Adds EthernetInterface class and its unit tests. This class encapsulates all operations performed on an EthernetInterface. EthernetManager and ConnectivityManager are its dependencies to execute operations. Flag: com.android.settings.connectivity.ethernet_settings Test: atest SettingsRoboTests:com.android.settings.network.EthernetInterfaceTest Change-Id: I640a607c8d9705a10dc4c4c609e036a1afa6b5f7
76 lines
2.6 KiB
Kotlin
76 lines
2.6 KiB
Kotlin
/*
|
|
* Copyright (C) 2025 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.ethernet
|
|
|
|
import android.content.Context
|
|
import android.net.ConnectivityManager
|
|
import android.net.EthernetManager
|
|
import android.net.EthernetManager.STATE_ABSENT
|
|
import android.net.EthernetNetworkManagementException
|
|
import android.net.EthernetNetworkUpdateRequest
|
|
import android.net.IpConfiguration
|
|
import android.os.OutcomeReceiver
|
|
import android.util.Log
|
|
import androidx.core.content.ContextCompat
|
|
import java.util.concurrent.Executor
|
|
|
|
class EthernetInterface(private val context: Context, private val id: String) :
|
|
EthernetManager.InterfaceStateListener {
|
|
private val ethernetManager =
|
|
context.getSystemService(EthernetManager::class.java)
|
|
private val connectivityManager =
|
|
context.getSystemService(ConnectivityManager::class.java)
|
|
private val executor = ContextCompat.getMainExecutor(context)
|
|
|
|
private val TAG = "EthernetInterface"
|
|
|
|
private var interfaceState = STATE_ABSENT
|
|
private var ipConfiguration = IpConfiguration()
|
|
|
|
fun getInterfaceState() = interfaceState
|
|
|
|
fun getConfiguration(): IpConfiguration {
|
|
return ipConfiguration
|
|
}
|
|
|
|
fun setConfiguration(ipConfiguration: IpConfiguration) {
|
|
val request =
|
|
EthernetNetworkUpdateRequest.Builder().setIpConfiguration(ipConfiguration).build()
|
|
ethernetManager.updateConfiguration(
|
|
id,
|
|
request,
|
|
executor,
|
|
object : OutcomeReceiver<String, EthernetNetworkManagementException> {
|
|
override fun onError(e: EthernetNetworkManagementException) {
|
|
Log.e(TAG, "Failed to updateConfiguration: ", e)
|
|
}
|
|
|
|
override fun onResult(id: String) {
|
|
Log.d(TAG, "Successfully updated configuration: " + id)
|
|
}
|
|
},
|
|
)
|
|
}
|
|
|
|
override fun onInterfaceStateChanged(id: String, state: Int, role: Int, cfg: IpConfiguration?) {
|
|
if (id == this.id) {
|
|
ipConfiguration = cfg ?: IpConfiguration()
|
|
interfaceState = state
|
|
}
|
|
}
|
|
}
|