From 28fd0ec63ffdad442b42073ba19453becfcd5b82 Mon Sep 17 00:00:00 2001 From: yuqian Date: Wed, 7 Jan 2026 18:11:48 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9Edrm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/SystemShowFragment.kt | 20 +++++++++++++++++-- .../main/res/layout/fragment_system_show.xml | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/SystemShowFragment.kt b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/SystemShowFragment.kt index 7494b46..e591b7c 100644 --- a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/SystemShowFragment.kt +++ b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/SystemShowFragment.kt @@ -6,6 +6,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.xyzshell.andinfo.AndInfo +import com.xyzshell.andinfo.libs.DRMInfo import com.xyzshell.myphoneinfo.R import com.xyzshell.myphoneinfo.databinding.FragmentSystemShowBinding @@ -29,17 +30,32 @@ private lateinit var binding: FragmentSystemShowBinding setDeviceInfo() setOperatingSystem() setIdentifier() + setDrm() + } + private fun setDrm() { + val clearkeyDrmDetail = AndInfo.instance.drm.getDrmDetail(DRMInfo.CLEARKEY_UUID) + val widevineDrmDetail = AndInfo.instance.drm.getDrmDetail(DRMInfo.WIDEVINE_UUID) binding.textclear1.textTitle.text=getString(R.string.vendor) binding.textclear2.textTitle.text=getString(R.string.version) - - + clearkeyDrmDetail.let { + binding.textclear1.textContent.text=it?.vendor + binding.textclear2.textContent.text=it?.version + } binding.textwide1.textTitle.text=getString(R.string.vendor) binding.textwide2.textTitle.text=getString(R.string.version) binding.textwide3.textTitle.text=getString(R.string.algorithm) binding.textwide4.textTitle.text=getString(R.string.device_id) binding.textwide5.textTitle.text=getString(R.string.security_level) binding.textwide6.textTitle.text=getString(R.string.highest_hdcp_level) + widevineDrmDetail.let { + binding.textwide1.textContent.text=it?.vendor + binding.textwide2.textContent.text=it?.version + binding.textwide3.textContent.text=it?.algorithms?.joinToString() + binding.textwide4.textContent.text=it?.deviceUniqueId + binding.textwide5.textContent.text=it?.securityLevel + binding.textwide6.textContent.text=it?.connectedHdcpLevel.toString() + } } /** diff --git a/myphoneinfo/src/main/res/layout/fragment_system_show.xml b/myphoneinfo/src/main/res/layout/fragment_system_show.xml index 06c03dd..27c9198 100644 --- a/myphoneinfo/src/main/res/layout/fragment_system_show.xml +++ b/myphoneinfo/src/main/res/layout/fragment_system_show.xml @@ -18,7 +18,7 @@ android:layout_height="wrap_content" android:orientation="vertical" android:paddingHorizontal="@dimen/dashboard_fragment_padding_horizontal" - android:paddingVertical="@dimen/dashboard_fragment_padding_vertical"> + > Date: Fri, 9 Jan 2026 09:59:47 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9net?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../myphoneinfo/custom/PermissionChecker.kt | 92 +++++++++++++ .../myphoneinfo/custom/SignalStrengthView.kt | 4 +- .../myphoneinfo/dashboard/NetworkFragment.kt | 122 +++++++++++++++--- .../src/main/res/layout/fragment_network.xml | 15 ++- .../src/main/res/layout/network_layout.xml | 6 - myphoneinfo/src/main/res/values/strings.xml | 6 +- 6 files changed, 210 insertions(+), 35 deletions(-) create mode 100644 myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/PermissionChecker.kt diff --git a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/PermissionChecker.kt b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/PermissionChecker.kt new file mode 100644 index 0000000..1cc6080 --- /dev/null +++ b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/PermissionChecker.kt @@ -0,0 +1,92 @@ +package com.xyzshell.myphoneinfo.custom + +import android.Manifest +import android.app.Activity +import android.content.Context +import android.content.pm.PackageManager +import android.os.Build +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat + +object PermissionChecker { + /** + * 检查单个权限 + */ + fun hasPermission(context: Context, permission: String): Boolean { + return ContextCompat.checkSelfPermission( + context, + permission + ) == PackageManager.PERMISSION_GRANTED + } + + /** + * 检查Wi-Fi权限 + */ + fun hasWifiPermission(context: Context): Boolean { + val permissions = mutableListOf(Manifest.permission.ACCESS_WIFI_STATE) + + // Android 10+ 需要位置权限 + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) { + permissions.add(Manifest.permission.ACCESS_FINE_LOCATION) + } + + return permissions.all { hasPermission(context, it) } + } + + /** + * 检查电话权限 + */ + fun hasPhonePermission(context: Context): Boolean { + return hasPermission(context, Manifest.permission.READ_PHONE_STATE) + } + + /** + * 检查所有权限 + */ + fun hasWifiAndPhonePermissions(context: Context): Boolean { + return hasWifiPermission(context) && hasPhonePermission(context) + } + /** + * 获取缺少的权限列表 + */ + fun getMissingPermissions(context: Context): List { + val permissions = mutableListOf() + + // 检查 Wi-Fi 相关权限 + if (!hasPermission(context, Manifest.permission.ACCESS_WIFI_STATE)) { + permissions.add(Manifest.permission.ACCESS_WIFI_STATE) + } + + // Android 10+ 需要位置权限 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && + !hasPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)) { + permissions.add(Manifest.permission.ACCESS_FINE_LOCATION) + } + + // 检查电话权限 + if (!hasPermission(context, Manifest.permission.READ_PHONE_STATE)) { + permissions.add(Manifest.permission.READ_PHONE_STATE) + } + + return permissions + } + fun requestSimple( + activity: Activity, + onGranted: () -> Unit = {}, + onDenied: () -> Unit = {} + ) { + val missingPermissions = getMissingPermissions(activity) + + if (missingPermissions.isEmpty()) { + onGranted() + return + } + + ActivityCompat.requestPermissions( + activity, + missingPermissions.toTypedArray(), + 1000 + ) + } + + } \ No newline at end of file diff --git a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/SignalStrengthView.kt b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/SignalStrengthView.kt index 4ec9d72..8fa9e04 100644 --- a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/SignalStrengthView.kt +++ b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/SignalStrengthView.kt @@ -19,8 +19,8 @@ class SignalStrengthView @JvmOverloads constructor( style = Paint.Style.FILL } - private val inactiveColor = "#eeeeee".toColorInt() - private val activeColor = "#1E8C29".toColorInt() + private val inactiveColor = "#B7D7D3".toColorInt() + private val activeColor = "#3B948A".toColorInt() private var strengthLevel: Int = 0 private val maxBars = 5 diff --git a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/NetworkFragment.kt b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/NetworkFragment.kt index 00d38b5..af2ac31 100644 --- a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/NetworkFragment.kt +++ b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/NetworkFragment.kt @@ -1,17 +1,23 @@ package com.xyzshell.myphoneinfo.dashboard import android.os.Bundle +import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast +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.databinding.FragmentNetworkBinding import com.xyzshell.myphoneinfo.dialog.ShowLoadFragment class NetworkFragment : Fragment() { - private var status=1//0:未连接,1:已连接 + private var status=0//0:未连接,1:wifi 2:数据流量 + private lateinit var networkInfo: NetworkInfo private lateinit var binding:FragmentNetworkBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -30,16 +36,45 @@ private lateinit var binding:FragmentNetworkBinding override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - //connection + if(!PermissionChecker.hasWifiAndPhonePermissions(context = requireContext())){ + PermissionChecker.requestSimple( + requireActivity(), + onGranted = { + // 权限已授予,执行操作 + + }, + onDenied = { + // 权限被拒绝 + Toast.makeText(context, getString(R.string.permissions_required), Toast.LENGTH_SHORT).show() + } + ) + } + 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) +// 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.wfText8.textTitle.text=getString(R.string.channel) binding.networkLayout.wfText10.textTitle.text=getString(R.string.standard) //dhcp @@ -69,20 +104,6 @@ private lateinit var binding:FragmentNetworkBinding binding.simText3.textTitle.text=getString(R.string.roaming) binding.simText4.textTitle.text=getString(R.string.network_type) - - if(status==0){ - binding.noConnect.visibility=View.VISIBLE - binding.connectData.visibility=View.GONE - binding.networkLayout.wfText1.textContent.text="Disconnected" - binding.networkLayout.wifiList.visibility=View.GONE - binding.networkLayout.llPubShow.visibility=View.GONE - }else{ - binding.noConnect.visibility=View.GONE - binding.connectData.visibility=View.VISIBLE - binding.networkLayout.wfText1.textContent.text="Connected" - binding.networkLayout.wifiList.visibility=View.VISIBLE - binding.networkLayout.llPubShow.visibility=View.VISIBLE - } binding.networkLayout.pubShow.setOnClickListener{ val tag = "showLoadFragment" if (requireActivity().supportFragmentManager.findFragmentByTag(tag) == null) { @@ -92,6 +113,69 @@ private lateinit var binding:FragmentNetworkBinding } } + private fun setNoConnect() { + binding.noConnect.visibility=View.VISIBLE + binding.connectData.visibility=View.GONE + binding.networkLayout.wfText1.textContent.text="Disconnected" + binding.networkLayout.wifiList.visibility=View.GONE + binding.networkLayout.llPubShow.visibility=View.GONE + } + + /** + * 设置流量信息 + * */ + private fun setMobileInfo() { + binding.noConnect.visibility=View.GONE + binding.conText1.text=getString(R.string.mobile) + binding.connectData.visibility=View.VISIBLE + binding.networkLayout.wfText1.textContent.text="Connected" + binding.networkLayout.wifiList.visibility=View.VISIBLE + binding.networkLayout.llPubShow.visibility=View.VISIBLE + networkInfo.getMobileDetails()?.let { mobileDetails -> + + } + } + + /** + * 设置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) + binding.connectData.visibility=View.VISIBLE + binding.networkLayout.wifiList.visibility=View.VISIBLE + 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}" + if(wifiDetails.connected){ + binding.networkLayout.wfText1.textContent.text=getString(R.string.connectivity_status) + }else{ + binding.networkLayout.wfText1.textContent.text=getString(R.string.not_connected) + } + + 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.wfText8.textContent.text=wifiDetails.channel.toString() + binding.networkLayout.wfText10.textContent.text=wifiDetails.standard.toString() + + } + } + companion object { @JvmStatic diff --git a/myphoneinfo/src/main/res/layout/fragment_network.xml b/myphoneinfo/src/main/res/layout/fragment_network.xml index d74d1f0..d413f4b 100644 --- a/myphoneinfo/src/main/res/layout/fragment_network.xml +++ b/myphoneinfo/src/main/res/layout/fragment_network.xml @@ -56,9 +56,11 @@ android:orientation="horizontal" android:paddingVertical="30dp"> - @@ -67,8 +69,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:layout_marginStart="50dp" - android:visibility="gone"> + android:layout_marginStart="30dp" + android:visibility="visible"> diff --git a/myphoneinfo/src/main/res/layout/network_layout.xml b/myphoneinfo/src/main/res/layout/network_layout.xml index 0a684f3..9f5441a 100644 --- a/myphoneinfo/src/main/res/layout/network_layout.xml +++ b/myphoneinfo/src/main/res/layout/network_layout.xml @@ -61,9 +61,6 @@ android:text="@string/network" tools:ignore="RelativeOverlap" /> - @@ -82,9 +79,6 @@ - diff --git a/myphoneinfo/src/main/res/values/strings.xml b/myphoneinfo/src/main/res/values/strings.xml index 7996e99..012a405 100644 --- a/myphoneinfo/src/main/res/values/strings.xml +++ b/myphoneinfo/src/main/res/values/strings.xml @@ -104,9 +104,9 @@ DHCP BSSID Function - Connection Speed + Link speed Frequency - Frequency Band + Channel Channel Standard DHCP Server @@ -319,6 +319,8 @@ UWB support NFC support Secure NFC support + Connected + Not connected GPS \ No newline at end of file From 1871d1c453f82ddce868c8a3d3179b98d151138a Mon Sep 17 00:00:00 2001 From: yuqian Date: Fri, 9 Jan 2026 11:39:29 +0800 Subject: [PATCH 3/3] check wifi permission --- .../xyzshell/myphoneinfo/custom/PermissionChecker.kt | 11 +++++++---- .../xyzshell/myphoneinfo/dashboard/NetworkFragment.kt | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/PermissionChecker.kt b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/PermissionChecker.kt index 1cc6080..63ada71 100644 --- a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/PermissionChecker.kt +++ b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/custom/PermissionChecker.kt @@ -5,6 +5,7 @@ import android.app.Activity import android.content.Context import android.content.pm.PackageManager import android.os.Build +import android.util.Log import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat @@ -43,9 +44,11 @@ object PermissionChecker { /** * 检查所有权限 */ - fun hasWifiAndPhonePermissions(context: Context): Boolean { - return hasWifiPermission(context) && hasPhonePermission(context) - } +// fun hasWifiAndPhonePermissions(context: Context): Boolean { +// return hasWifiPermission(context) && hasPhonePermission(context) +// } + + /** * 获取缺少的权限列表 */ @@ -67,7 +70,7 @@ object PermissionChecker { if (!hasPermission(context, Manifest.permission.READ_PHONE_STATE)) { permissions.add(Manifest.permission.READ_PHONE_STATE) } - + Log.d("PermissionChecker", "missingPermissions: $permissions") return permissions } fun requestSimple( diff --git a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/NetworkFragment.kt b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/NetworkFragment.kt index af2ac31..45ae415 100644 --- a/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/NetworkFragment.kt +++ b/myphoneinfo/src/main/java/com/xyzshell/myphoneinfo/dashboard/NetworkFragment.kt @@ -36,7 +36,7 @@ private lateinit var binding:FragmentNetworkBinding override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - if(!PermissionChecker.hasWifiAndPhonePermissions(context = requireContext())){ + if(PermissionChecker.getMissingPermissions(context = requireContext()).isNotEmpty()){ PermissionChecker.requestSimple( requireActivity(), onGranted = {