Merge "Add ethernet interface details settings subpage" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
81bb2588f5
27
res/xml/ethernet_interface_details.xml
Normal file
27
res/xml/ethernet_interface_details.xml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2020 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<PreferenceScreen
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:settings="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<com.android.settingslib.widget.LayoutPreference
|
||||||
|
android:key="connection_header"
|
||||||
|
android:layout="@layout/settings_entity_header"
|
||||||
|
android:selectable="false"
|
||||||
|
android:order="-10000"/>
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
@@ -71,6 +71,7 @@ import com.android.settings.datausage.DataUsagePreference;
|
|||||||
import com.android.settings.datausage.DataUsageUtils;
|
import com.android.settings.datausage.DataUsageUtils;
|
||||||
import com.android.settings.location.WifiScanningFragment;
|
import com.android.settings.location.WifiScanningFragment;
|
||||||
import com.android.settings.network.ethernet.EthernetInterface;
|
import com.android.settings.network.ethernet.EthernetInterface;
|
||||||
|
import com.android.settings.network.ethernet.EthernetInterfaceDetailsFragment;
|
||||||
import com.android.settings.network.ethernet.EthernetSwitchPreferenceController;
|
import com.android.settings.network.ethernet.EthernetSwitchPreferenceController;
|
||||||
import com.android.settings.network.ethernet.EthernetTracker;
|
import com.android.settings.network.ethernet.EthernetTracker;
|
||||||
import com.android.settings.network.ethernet.EthernetTrackerImpl;
|
import com.android.settings.network.ethernet.EthernetTrackerImpl;
|
||||||
@@ -1116,7 +1117,6 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
|
|||||||
if (interfaces.size() > 0) {
|
if (interfaces.size() > 0) {
|
||||||
for (EthernetInterface ethernetInterface : interfaces) {
|
for (EthernetInterface ethernetInterface : interfaces) {
|
||||||
Preference pref = new Preference(getPrefContext());
|
Preference pref = new Preference(getPrefContext());
|
||||||
pref.setSelectable(false);
|
|
||||||
pref.setOrder(index++);
|
pref.setOrder(index++);
|
||||||
pref.setKey(ethernetInterface.getId());
|
pref.setKey(ethernetInterface.getId());
|
||||||
pref.setTitle(getContext().getString(R.string.ethernet_interface_title, index));
|
pref.setTitle(getContext().getString(R.string.ethernet_interface_title, index));
|
||||||
@@ -1124,6 +1124,10 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
|
|||||||
(ethernetInterface.getInterfaceState() == EthernetManager.STATE_LINK_UP)
|
(ethernetInterface.getInterfaceState() == EthernetManager.STATE_LINK_UP)
|
||||||
? getContext().getString(R.string.network_connected) :
|
? getContext().getString(R.string.network_connected) :
|
||||||
getContext().getString(R.string.network_disconnected));
|
getContext().getString(R.string.network_disconnected));
|
||||||
|
pref.setOnPreferenceClickListener(preference -> {
|
||||||
|
launchEthernetInterfaceDetailsFragment(preference);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
mEthernetPreferenceCategory.addPreference(pref);
|
mEthernetPreferenceCategory.addPreference(pref);
|
||||||
}
|
}
|
||||||
mEthernetPreferenceCategory.setVisible(true);
|
mEthernetPreferenceCategory.setVisible(true);
|
||||||
@@ -1173,6 +1177,20 @@ public class NetworkProviderSettings extends RestrictedDashboardFragment
|
|||||||
.launch();
|
.launch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
void launchEthernetInterfaceDetailsFragment(Preference pref) {
|
||||||
|
final Context context = requireContext();
|
||||||
|
|
||||||
|
final Bundle bundle = new Bundle();
|
||||||
|
bundle.putString("EthernetInterfaceKey", pref.getKey());
|
||||||
|
|
||||||
|
new SubSettingLauncher(context)
|
||||||
|
.setDestination(EthernetInterfaceDetailsFragment.class.getName())
|
||||||
|
.setArguments(bundle)
|
||||||
|
.setSourceMetricsCategory(getMetricsCategory())
|
||||||
|
.launch();
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
LongPressWifiEntryPreference createLongPressWifiEntryPreference(WifiEntry wifiEntry) {
|
LongPressWifiEntryPreference createLongPressWifiEntryPreference(WifiEntry wifiEntry) {
|
||||||
return new LongPressWifiEntryPreference(getPrefContext(), wifiEntry, this);
|
return new LongPressWifiEntryPreference(getPrefContext(), wifiEntry, this);
|
||||||
|
@@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* 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.EthernetManager
|
||||||
|
import android.widget.ImageView
|
||||||
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
import androidx.preference.PreferenceScreen
|
||||||
|
import com.android.settings.R
|
||||||
|
import com.android.settings.widget.EntityHeaderController
|
||||||
|
import com.android.settingslib.core.AbstractPreferenceController
|
||||||
|
import com.android.settingslib.widget.LayoutPreference
|
||||||
|
|
||||||
|
class EthernetInterfaceDetailsController(
|
||||||
|
context: Context,
|
||||||
|
private val fragment: PreferenceFragmentCompat,
|
||||||
|
private val preferenceId: String,
|
||||||
|
) : AbstractPreferenceController(context) {
|
||||||
|
private val KEY_HEADER = "ethernet_details"
|
||||||
|
|
||||||
|
private val ethernetManager = context.getSystemService(EthernetManager::class.java)
|
||||||
|
private val ethernetInterface =
|
||||||
|
EthernetTrackerImpl.getInstance(context).getInterface(preferenceId)
|
||||||
|
|
||||||
|
override fun isAvailable(): Boolean {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getPreferenceKey(): String? {
|
||||||
|
return KEY_HEADER
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun displayPreference(screen: PreferenceScreen) {
|
||||||
|
val headerPref: LayoutPreference? = screen.findPreference(KEY_HEADER)
|
||||||
|
|
||||||
|
val mEntityHeaderController =
|
||||||
|
EntityHeaderController.newInstance(
|
||||||
|
fragment.getActivity(),
|
||||||
|
fragment,
|
||||||
|
headerPref?.findViewById(R.id.entity_header),
|
||||||
|
)
|
||||||
|
|
||||||
|
val iconView: ImageView? = headerPref?.findViewById(R.id.entity_header_icon)
|
||||||
|
|
||||||
|
iconView?.setScaleType(ImageView.ScaleType.CENTER_INSIDE)
|
||||||
|
|
||||||
|
mEntityHeaderController
|
||||||
|
.setLabel("Ethernet")
|
||||||
|
.setSummary(
|
||||||
|
if (ethernetInterface?.getInterfaceState() == EthernetManager.STATE_LINK_UP) {
|
||||||
|
mContext.getString(R.string.network_connected)
|
||||||
|
} else {
|
||||||
|
mContext.getString(R.string.network_disconnected)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.setSecondSummary("")
|
||||||
|
.setIcon(mContext.getDrawable(R.drawable.ic_settings_ethernet))
|
||||||
|
.done(true /* rebind */)
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* 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.app.settings.SettingsEnums
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.annotation.VisibleForTesting
|
||||||
|
import com.android.settings.R
|
||||||
|
import com.android.settings.dashboard.DashboardFragment
|
||||||
|
import com.android.settingslib.core.AbstractPreferenceController
|
||||||
|
|
||||||
|
class EthernetInterfaceDetailsFragment : DashboardFragment() {
|
||||||
|
private val TAG = "EthernetInterfaceDetailsFragment"
|
||||||
|
private val ETHERNET_INTERFACE_KEY = "EthernetInterfaceKey"
|
||||||
|
private var preferenceId: String? = null
|
||||||
|
|
||||||
|
override fun onCreate(bundle: Bundle?) {
|
||||||
|
super.onCreate(bundle)
|
||||||
|
preferenceId = bundle?.getString(ETHERNET_INTERFACE_KEY)
|
||||||
|
}
|
||||||
|
|
||||||
|
override public fun getPreferenceScreenResId(): Int {
|
||||||
|
return R.xml.ethernet_interface_details
|
||||||
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
override fun getMetricsCategory(): Int {
|
||||||
|
return SettingsEnums.ETHERNET_SETTINGS
|
||||||
|
}
|
||||||
|
|
||||||
|
override public fun getLogTag(): String {
|
||||||
|
return TAG
|
||||||
|
}
|
||||||
|
|
||||||
|
override public fun createPreferenceControllers(
|
||||||
|
context: Context
|
||||||
|
): List<AbstractPreferenceController> {
|
||||||
|
return listOf(EthernetInterfaceDetailsController(context, this, preferenceId ?: ""))
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* 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.content.ContextWrapper
|
||||||
|
import androidx.test.core.app.ApplicationProvider
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Assert.assertTrue
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4::class)
|
||||||
|
class EthernetInterfaceDetailsControllerTest {
|
||||||
|
private val ethernetInterfaceDetailsFragment = EthernetInterfaceDetailsFragment()
|
||||||
|
|
||||||
|
private val context: Context =
|
||||||
|
object : ContextWrapper(ApplicationProvider.getApplicationContext()) {}
|
||||||
|
|
||||||
|
private val ethernetInterfaceDetailsController =
|
||||||
|
EthernetInterfaceDetailsController(context, ethernetInterfaceDetailsFragment, "eth0")
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun isAvailable_ShouldReturnTrue() {
|
||||||
|
assertTrue(ethernetInterfaceDetailsController.isAvailable())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun getPreferencKey_shouldReturnExpectedKey() {
|
||||||
|
assertEquals(ethernetInterfaceDetailsController.getPreferenceKey(), "ethernet_details")
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* 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.app.settings.SettingsEnums
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.ContextWrapper
|
||||||
|
import androidx.test.core.app.ApplicationProvider
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import com.android.settings.R
|
||||||
|
import com.android.settingslib.core.AbstractPreferenceController
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Assert.assertTrue
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4::class)
|
||||||
|
class EthernetInterfaceDetailsFragmentTest {
|
||||||
|
private val ethernetInterfaceDetailsFragment = EthernetInterfaceDetailsFragment()
|
||||||
|
|
||||||
|
private val context: Context =
|
||||||
|
object : ContextWrapper(ApplicationProvider.getApplicationContext()) {}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun getMetricsCategory_shouldReturnEthernetSettings() {
|
||||||
|
assertEquals(
|
||||||
|
ethernetInterfaceDetailsFragment.getMetricsCategory(),
|
||||||
|
SettingsEnums.ETHERNET_SETTINGS,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun getPreferenceScreenId_shouldReturnExpectedResource() {
|
||||||
|
assertEquals(
|
||||||
|
ethernetInterfaceDetailsFragment.getPreferenceScreenResId(),
|
||||||
|
R.xml.ethernet_interface_details,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun getLogTag_shouldReturnClassName() {
|
||||||
|
assertEquals(
|
||||||
|
ethernetInterfaceDetailsFragment.getLogTag(),
|
||||||
|
"EthernetInterfaceDetailsFragment",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun createPreferenceController_shouldReturnDetailController() {
|
||||||
|
val preferenceController =
|
||||||
|
ethernetInterfaceDetailsFragment.createPreferenceControllers(context)
|
||||||
|
assertEquals(1, preferenceController.size)
|
||||||
|
assertTrue(preferenceController[0] is AbstractPreferenceController)
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user