add network

This commit is contained in:
yuqian 2026-01-13 11:12:16 +08:00
parent f9a640cc5c
commit e5a7720af1
5 changed files with 166 additions and 60 deletions

View File

@ -86,6 +86,14 @@ object SetNumberOrWordUtils {
return closestRatio
}
fun getHoursString(int: Int):String{
val div = int.div(3600)
return if(div>1){
"$div hours"
}else{
"$div hour"
}
}
}

View File

@ -1,5 +1,6 @@
package com.xyzshell.myphoneinfo.dashboard
import android.Manifest
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
@ -7,12 +8,15 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.annotation.RequiresPermission
import com.xyzshell.andinfo.AndInfo
import com.xyzshell.andinfo.libs.NetworkInfo
import com.xyzshell.myphoneinfo.R
import com.xyzshell.myphoneinfo.custom.PermissionChecker
import com.xyzshell.myphoneinfo.custom.SetNumberOrWordUtils.getHoursString
import com.xyzshell.myphoneinfo.databinding.FragmentNetworkBinding
import com.xyzshell.myphoneinfo.dialog.ShowLoadFragment
import kotlin.toString
class NetworkFragment : Fragment() {
@ -36,12 +40,15 @@ private lateinit var binding:FragmentNetworkBinding
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
networkInfo= AndInfo.instance.network
refreshStatus()
setMobileInfo()
if(PermissionChecker.getMissingPermissions(context = requireContext()).isNotEmpty()){
PermissionChecker.requestSimple(
requireActivity(),
onGranted = {
// 权限已授予,执行操作
refreshStatus()
},
onDenied = {
// 权限被拒绝
@ -49,23 +56,6 @@ private lateinit var binding:FragmentNetworkBinding
}
)
}
networkInfo= AndInfo.instance.network
val currentNetworkType = networkInfo.getCurrentNetworkType()
when (currentNetworkType) {
NetworkInfo.NetworkType.WIFI -> {
status = 1
setWifiDetail()
}
NetworkInfo.NetworkType.MOBILE -> {
status = 2
setMobileInfo()
}
else -> {
status = 0
setNoConnect()
}
}
//wifi
binding.networkLayout.wfText1.textTitle.text=getString(R.string.status)
// binding.networkLayout.wfText2.textTitle.text=getString(R.string.network)
@ -87,6 +77,14 @@ private lateinit var binding:FragmentNetworkBinding
binding.networkLayout.dhText7.textTitle.text=getString(R.string.ip_address)
binding.networkLayout.dhText8.textTitle.text=getString(R.string.ipv6)
//Hardware
binding.networkLayout.hardCheck1.content.text=getString(R.string.standard_all)
binding.networkLayout.hardCheck2.content.text=getString(R.string.wifi_direct_support)
binding.networkLayout.hardCheck3.content.text=getString(R.string.wifi_aware_support)
binding.networkLayout.hardCheck4.content.text=getString(R.string.wifi_passpoint_support)
binding.networkLayout.hardCheck5.content.text=getString(R.string.ghz_band_support)
binding.networkLayout.hardCheck6.content.text=getString(R.string.ghz6_band_support)
//mobel
binding.mdText1.textTitle.text=getString(R.string.dual_sim_dual_standby)
binding.mdText2.textTitle.text=getString(R.string.phone_type)
@ -99,10 +97,6 @@ private lateinit var binding:FragmentNetworkBinding
binding.defText2.textTitle.text=getString(R.string.voice)
binding.defText3.textTitle.text=getString(R.string.short_message)
binding.simText1.textTitle.text=getString(R.string.status)
binding.simText2.textTitle.text=getString(R.string.nation)
binding.simText3.textTitle.text=getString(R.string.roaming)
binding.simText4.textTitle.text=getString(R.string.network_type)
binding.networkLayout.pubShow.setOnClickListener{
val tag = "showLoadFragment"
@ -113,6 +107,23 @@ private lateinit var binding:FragmentNetworkBinding
}
}
private fun refreshStatus() {
val currentNetworkType = networkInfo.getCurrentNetworkType()
when (currentNetworkType) {
NetworkInfo.NetworkType.WIFI -> {
status = 1
setWifiDetail()
}
NetworkInfo.NetworkType.MOBILE -> {
status = 2
setMobileInfo()
}
else -> {
status = 0
setNoConnect()
}
}
}
private fun setNoConnect() {
binding.noConnect.visibility=View.VISIBLE
binding.connectData.visibility=View.GONE
@ -132,22 +143,58 @@ private lateinit var binding:FragmentNetworkBinding
binding.networkLayout.wifiList.visibility=View.VISIBLE
binding.networkLayout.llPubShow.visibility=View.VISIBLE
networkInfo.getMobileDetails()?.let { mobileDetails ->
//mobel
// binding.mdText1.textTitle.text=getString(R.string.dual_sim_dual_standby)
// binding.mdText2.textTitle.text=getString(R.string.phone_type)
// binding.mdText3.textTitle.text=getString(R.string.esim)
//
// binding.conTexts.textTitle.text=getString(R.string.status)
//
// binding.defText1.textTitle.text=getString(R.string.data)
//
// binding.defText2.textTitle.text=getString(R.string.voice)
// binding.defText3.textTitle.text=getString(R.string.short_message)
//
// binding.simText1.textTitle.text=getString(R.string.status)
// binding.simText2.textTitle.text=getString(R.string.nation)
// binding.simText3.textTitle.text=getString(R.string.roaming)
// binding.simText4.textTitle.text=getString(R.string.network_type)
binding.mdText1.textContent.text=mobileDetails.dualSim.toString()
binding.mdText2.textContent.text=mobileDetails.phoneType.toString()
binding.mdText3.textContent.text=mobileDetails.esimSupported.toString()
binding.conTexts.textContent.text=mobileDetails.dataEnabled.toString()
binding.defText1.textContent.text=mobileDetails.dataSim.toString()
binding.defText2.textContent.text=mobileDetails.voiceSim.toString()
binding.defText3.textContent.text=mobileDetails.smsSim.toString()
if(mobileDetails.simInfos.isNotEmpty()){
binding.simInfo1.simText1.textTitle.text=getString(R.string.status)
binding.simInfo1.simText2.textTitle.text=getString(R.string.nation)
binding.simInfo1.simText3.textTitle.text=getString(R.string.roaming)
binding.simInfo1.simText4.textTitle.text=getString(R.string.network_type)
binding.simInfo1.simText1.textContent.text=if(status==2) true.toString() else false.toString()
binding.simInfo1.simText2.textContent.text=mobileDetails.simInfos[0].countryIso.toString()
binding.simInfo1.simText3.textContent.text=mobileDetails.simInfos[0].roaming.toString()
if(mobileDetails.simInfos.size>1){
binding.simInfo2.root.visibility=View.VISIBLE
binding.simInfo2.simText1.textTitle.text=getString(R.string.status)
binding.simInfo2.simText2.textTitle.text=getString(R.string.nation)
binding.simInfo2.simText3.textTitle.text=getString(R.string.roaming)
binding.simInfo2.simText4.textTitle.text=getString(R.string.network_type)
binding.simInfo2.simText1.textContent.text=if(status==2) true.toString() else false.toString()
binding.simInfo2.simText2.textContent.text=mobileDetails.simInfos[1].countryIso.toString()
binding.simInfo2.simText3.textContent.text=mobileDetails.simInfos[1].roaming.toString()
}
}else{
binding.simInfo1.root.visibility=View.GONE
binding.simInfo2.root.visibility=View.GONE
}
}
}
/**
* 设置wifi信息
* */
// binding.networkLayout.wfText2.textTitle.text=getString(R.string.network)
// binding.networkLayout.wfText3.textTitle.text=getString(R.string.bssid)
// binding.networkLayout.wfText4.textTitle.text=getString(R.string.function)
// binding.networkLayout.wfText5.textTitle.text=getString(R.string.connection_speed)
// binding.networkLayout.wfText6.textTitle.text=getString(R.string.signal_strength)
// binding.networkLayout.wfText7.textTitle.text=getString(R.string.frequency)
// binding.networkLayout.wfText8.textTitle.text=getString(R.string.frequency_band)
// binding.networkLayout.wfText9.textTitle.text=getString(R.string.channel)
// binding.networkLayout.wfText10.textTitle.text=getString(R.string.standard)
private fun setWifiDetail() {
binding.noConnect.visibility=View.GONE
binding.conText1.text=getString(R.string.wifi)
@ -156,9 +203,12 @@ private lateinit var binding:FragmentNetworkBinding
binding.networkLayout.llPubShow.visibility=View.VISIBLE
networkInfo.getWifiDetails()?.let { wifiDetails ->
Log.d("TTTTTTTT", (wifiDetails.signalLevelPercent?: "null").toString())
binding.strengthView.setStrength(wifiDetails.signalLevelPercent?: 0)
binding.conText2.text="${wifiDetails.ssid}·${wifiDetails.linkSpeedMbps}"
binding.conTExt3.text="${wifiDetails.signalLevelPercent} ${wifiDetails.rssi}"
wifiDetails.signalLevelPercent?.let { percent->
binding.strengthView.setStrength(calculateSignalLevel(percent = percent))
}
binding.conText2.text="${wifiDetails.ssid}·${wifiDetails.linkSpeedMbps} Mbps"
binding.conTExt3.text="${wifiDetails.signalLevelPercent}% ${wifiDetails.rssi} dBm"
if(wifiDetails.connected){
binding.networkLayout.wfText1.textContent.text=getString(R.string.connectivity_status)
}else{
@ -167,15 +217,42 @@ private lateinit var binding:FragmentNetworkBinding
binding.networkLayout.wfText3.textContent.text=wifiDetails.bssid
binding.networkLayout.wfText4.textContent.text=wifiDetails.capabilities
binding.networkLayout.wfText5.textContent.text=wifiDetails.linkSpeedMbps.toString()
binding.networkLayout.wfText6.textContent.text=wifiDetails.signalLevelPercent.toString()
binding.networkLayout.wfText7.textContent.text=wifiDetails.frequency.toString()
binding.networkLayout.wfText5.textContent.text="${wifiDetails.linkSpeedMbps} Mbps"
binding.networkLayout.wfText6.textContent.text="${wifiDetails.rssi} dBm"
binding.networkLayout.wfText7.textContent.text="${wifiDetails.frequency} MHz"
binding.networkLayout.wfText8.textContent.text=wifiDetails.channel.toString()
binding.networkLayout.wfText10.textContent.text=wifiDetails.standard.toString()
binding.networkLayout.dhText1.textContent.text=wifiDetails.dhcpServer
binding.networkLayout.dhText2.textContent.text=getHoursString(wifiDetails.leaseDuration?: 0)
binding.networkLayout.dhText3.textContent.text=wifiDetails.gateway
binding.networkLayout.dhText4.textContent.text=wifiDetails.subnetMask
binding.networkLayout.dhText5.textContent.text=wifiDetails.dns1
binding.networkLayout.dhText6.textContent.text=wifiDetails.dns2
binding.networkLayout.dhText7.textContent.text=wifiDetails.ip
val toString = wifiDetails.ipv6.toString()
val ipv6 = toString.replace("[", "").replace("]", "")
binding.networkLayout.dhText8.textContent.text=ipv6
binding.networkLayout.hardCheck1.image.isSelected= wifiDetails.supportedStandards?.size==5
binding.networkLayout.hardCheck2.image.isSelected= wifiDetails.wifiDirect == true
binding.networkLayout.hardCheck3.image.isSelected= wifiDetails.wifiAware == true
binding.networkLayout.hardCheck4.image.isSelected= wifiDetails.wifiPasspoint == true
binding.networkLayout.hardCheck5.image.isSelected= wifiDetails.support5G == true
binding.networkLayout.hardCheck6.image.isSelected= wifiDetails.support6G == true
}
}
private fun calculateSignalLevel( percent: Int) : Int {
return when {
percent >= 80 -> 5 // 优秀
percent >= 60 -> 4 // 良好
percent >= 40 -> 3 // 一般
percent >= 20 -> 2 // 差
else -> 1 // 非常差/无信号
}
}
companion object {
@JvmStatic

View File

@ -77,7 +77,7 @@
style="@style/TextBig"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wi-Fi"
android:text=""
android:textStyle="bold"
tools:ignore="RelativeOverlap" />
@ -86,7 +86,7 @@
style="@style/LeftContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="LUX·433 Mbps"
android:text=""
android:textStyle="bold"
tools:ignore="RelativeOverlap" />
@ -95,7 +95,7 @@
style="@style/LeftContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="80% -60dBm"
android:text=""
android:textStyle="bold"
tools:ignore="RelativeOverlap" />
</LinearLayout>
@ -189,26 +189,17 @@
<include
android:id="@+id/defText3"
layout="@layout/common_text_style" />
<com.google.android.material.textview.MaterialTextView
style="@style/TextHeavy20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="@string/sim_card_1"
tools:ignore="RelativeOverlap" />
<include
android:id="@+id/simText1"
layout="@layout/common_text_style" />
android:id="@+id/simInfo1"
layout="@layout/item_set_sim"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<include
android:id="@+id/simText2"
layout="@layout/common_text_style" />
<include
android:id="@+id/simText3"
layout="@layout/common_text_style" />
<include
android:id="@+id/simText4"
layout="@layout/common_text_style" />
android:id="@+id/simInfo2"
layout="@layout/item_set_sim"
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/simTitle"
style="@style/TextHeavy20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="@string/sim_card_1" />
<include
android:id="@+id/simText1"
layout="@layout/common_text_style" />
<include
android:id="@+id/simText2"
layout="@layout/common_text_style" />
<include
android:id="@+id/simText3"
layout="@layout/common_text_style" />
<include
android:id="@+id/simText4"
layout="@layout/common_text_style" />
</LinearLayout>

View File

@ -119,7 +119,7 @@
<string name="show">Show</string>
<string name="ok">OK</string>
<string name="mobile_data">Mobile Data</string>
<string name="dual_sim_dual_standby">Dual SIM dual standby</string>
<string name="dual_sim_dual_standby">Dual SIM</string>
<string name="esim">eSIM</string>
<string name="sim_card_1">SIM 1</string>
<string name="sim_card_2">SIM 2</string>
@ -322,5 +322,10 @@
<string name="connectivity_status">Connected</string>
<string name="not_connected">Not connected</string>
<string name="gps">GPS</string>
<string name="standard_all">802.11 b/a/g/n/ac/ax/be</string>
<string name="wifi_direct_support">Wi-Fi Direct support</string>
<string name="wifi_aware_support">Wi-Fi Aware support</string>
<string name="wifi_passpoint_support">Wi-Fi Passpoint support</string>
<string name="ghz_band_support">5GHz band support</string>
<string name="ghz6_band_support">6GHz band support</string>
</resources>