新增device,operation,identifier

This commit is contained in:
yuqian 2026-01-07 12:00:14 +08:00
parent 88ff91c8c7
commit 9d8b9d5bd7
4 changed files with 208 additions and 173 deletions

View File

@ -44,7 +44,11 @@ class HardWareFragment : Fragment() {
refreshBluetoothInfo() refreshBluetoothInfo()
} else { } else {
// 显示权限被拒绝的UI // 显示权限被拒绝的UI
Toast.makeText(requireContext(), getString(R.string.permissions_required), Toast.LENGTH_SHORT).show() Toast.makeText(
requireContext(),
getString(R.string.permissions_required),
Toast.LENGTH_SHORT
).show()
} }
} }
@ -81,8 +85,6 @@ class HardWareFragment : Fragment() {
} }
private fun initText() { private fun initText() {
val device = AndInfo.instance.device//设备信息
setProcessorInfo() setProcessorInfo()
setGpuInfo() setGpuInfo()
setDisplayInfo() setDisplayInfo()
@ -106,22 +108,22 @@ class HardWareFragment : Fragment() {
* */ * */
private fun setInputInfo() { private fun setInputInfo() {
val inputInfo = AndInfo.instance.input val inputInfo = AndInfo.instance.input
binding.otherCheck1.content.text=getString(R.string.usb_host_support) binding.otherCheck1.content.text = getString(R.string.usb_host_support)
binding.otherCheck1.image.isSelected=inputInfo.hasUsbHostSupport() binding.otherCheck1.image.isSelected = inputInfo.hasUsbHostSupport()
binding.otherCheck2.content.text=getString(R.string.usb_accessory_support) binding.otherCheck2.content.text = getString(R.string.usb_accessory_support)
binding.otherCheck2.image.isSelected=inputInfo.hasUsbAccessorySupport() binding.otherCheck2.image.isSelected = inputInfo.hasUsbAccessorySupport()
binding.otherCheck3.content.text=getString(R.string.fingerprint) binding.otherCheck3.content.text = getString(R.string.fingerprint)
binding.otherCheck3.image.isSelected=inputInfo.hasFingerprintSensor() binding.otherCheck3.image.isSelected = inputInfo.hasFingerprintSensor()
binding.otherCheck4.content.text=getString(R.string.infrared_transmitter) binding.otherCheck4.content.text = getString(R.string.infrared_transmitter)
binding.otherCheck4.image.isSelected=inputInfo.hasInfraredSensor() binding.otherCheck4.image.isSelected = inputInfo.hasInfraredSensor()
binding.otherCheck5.content.text=getString(R.string.uwb_support) binding.otherCheck5.content.text = getString(R.string.uwb_support)
binding.otherCheck5.image.isSelected=inputInfo.hasUwbSupport() binding.otherCheck5.image.isSelected = inputInfo.hasUwbSupport()
binding.otherCheck6.content.text=getString(R.string.nfc_support) binding.otherCheck6.content.text = getString(R.string.nfc_support)
binding.otherCheck6.image.isSelected=inputInfo.hasNfcSupport() binding.otherCheck6.image.isSelected = inputInfo.hasNfcSupport()
binding.otherCheck7.content.text=getString(R.string.secure_nfc_support) binding.otherCheck7.content.text = getString(R.string.secure_nfc_support)
binding.otherCheck7.image.isSelected=inputInfo.hasSecureNfcSupport() binding.otherCheck7.image.isSelected = inputInfo.hasSecureNfcSupport()
binding.otherCheck8.content.text=getString(R.string.gps) binding.otherCheck8.content.text = getString(R.string.gps)
binding.otherCheck8.image.isSelected=inputInfo.hasGpsSupport() binding.otherCheck8.image.isSelected = inputInfo.hasGpsSupport()
binding.othertext.setOnClickListener { binding.othertext.setOnClickListener {
dialogInput = dialogInput ?: DialogInput() dialogInput = dialogInput ?: DialogInput()
dialogInput?.show(childFragmentManager, "Input") dialogInput?.show(childFragmentManager, "Input")
@ -134,38 +136,34 @@ class HardWareFragment : Fragment() {
* */ * */
private fun setMemoryInfo() { private fun setMemoryInfo() {
val storageInfo = AndInfo.instance.storage//存储信息 val storageInfo = AndInfo.instance.storage//存储信息
val used = // 获取详细的存储分解
Formatter.formatFileSize(AndInfo.instance.context, storageInfo.internalStorageUsedSpace) val breakdown = storageInfo.getInternalStorageBreakdown()
val free = Formatter.formatFileSize( //内部存储器
AndInfo.instance.context, val interused = storageInfo.formatBytes(breakdown.usedSpace)
storageInfo.internalStorageAvailableSpace val interfree = storageInfo.formatBytes(breakdown.freeSpace)
) val intertotal = storageInfo.formatBytes(breakdown.totalSpace)
val total = Formatter.formatFileSize(
AndInfo.instance.context,
storageInfo.internalStorageTotalSpace
)
val outused = Formatter.formatFileSize(
AndInfo.instance.context,
storageInfo.externalStorageUsedSpace ?: 0
)
val outfree = Formatter.formatFileSize(
AndInfo.instance.context,
storageInfo.externalStorageAvailableSpace ?: 0
)
val outtotal = Formatter.formatFileSize(
AndInfo.instance.context,
storageInfo.externalStorageTotalSpace ?: 0
)
//总存储信息
val outused =Formatter.formatFileSize(AndInfo.instance.context, storageInfo.internalStorageUsedSpace)
val outfree = Formatter.formatFileSize(AndInfo.instance.context, storageInfo.internalStorageAvailableSpace)
val outtotal = Formatter.formatFileSize(AndInfo.instance.context, storageInfo.internalStorageTotalSpace)
//内存todo
binding.memoryLayout.memText1.textTitle.text = getString(R.string.ram_size) binding.memoryLayout.memText1.textTitle.text = getString(R.string.ram_size)
binding.memoryLayout.memText1.textContent.text = total // binding.memoryLayout.memText1.textContent.text = total
binding.memoryLayout.ram1.text = used + " used" // binding.memoryLayout.ram1.text = used + " used"
binding.memoryLayout.ram2.text = free + " free" // binding.memoryLayout.ram2.text = free + " free"
binding.memoryLayout.seekbar.progress = // binding.memoryLayout.seekbar.progress =
(used.substringBefore(" ").toDouble() / total.substringBefore(" ").toDouble() * 100).toInt() // (used.substringBefore(" ").toDouble() / total.substringBefore(" ")
// .toDouble() * 100).toInt()
//appsAndData
val appsAndData = storageInfo.getFormattedAppsAndDataSize()
val system = storageInfo.getFormattedSystemSize()
val other= storageInfo.getFormattedFreeSpace()+storageInfo.getFormattedCacheSize()
//zarm
//storage
binding.memoryLayout.memText3.textTitle.text = getString(R.string.zram) binding.memoryLayout.memText3.textTitle.text = getString(R.string.zram)
binding.memoryLayout.memText3.textContent.text = Formatter.formatFileSize( binding.memoryLayout.memText3.textContent.text = Formatter.formatFileSize(
AndInfo.instance.context, AndInfo.instance.context,
@ -174,31 +172,35 @@ class HardWareFragment : Fragment() {
binding.memoryLayout.ram3.text = outused + " used" binding.memoryLayout.ram3.text = outused + " used"
binding.memoryLayout.ram4.text = outfree + " free" binding.memoryLayout.ram4.text = outfree + " free"
binding.memoryLayout.seekbar2.progress = binding.memoryLayout.seekbar2.progress =
(outused.substringBefore(" ").toDouble() / outtotal.substringBefore(" ").toDouble() * 100).toInt() (outused.substringBefore(" ").toDouble() / outtotal.substringBefore(" ")
.toDouble() * 100).toInt()
//fileSystem //storage
binding.memoryLayout.storText1.textTitle.text = getString(R.string.filesystem)
binding.memoryLayout.storText1.textContent.text = total binding.memoryLayout.storText1.textTitle.text = getString(R.string.size)
binding.memoryLayout.stor1.text = used + " used" binding.memoryLayout.storText1.textContent.text = outtotal
binding.memoryLayout.stor2.text = free + " free" binding.memoryLayout.stor1.text = outused + " used"
binding.memoryLayout.radius1.text = used binding.memoryLayout.stor2.text = outtotal + " total"
binding.memoryLayout.radius2.text = used binding.memoryLayout.radius1.text = appsAndData
binding.memoryLayout.radius3.text = free binding.memoryLayout.radius2.text = system
binding.memoryLayout.radius3.text = other
binding.memoryLayout.seekbar3.progress = binding.memoryLayout.seekbar3.progress =
(used.substringBefore(" ").toDouble() / total.substringBefore(" ").toDouble() * 100).toInt() (outused.substringBefore(" ").toDouble() / outtotal.substringBefore(" ")
.toDouble() * 100).toInt()
//internalStorage //internalStorage
binding.memoryLayout.interText1.textTitle.text = getString(R.string.filesystem) binding.memoryLayout.interText1.textTitle.text = getString(R.string.filesystem)
binding.memoryLayout.interText1.textContent.text = binding.memoryLayout.interText1.textContent.text =
storageInfo.internalStorageEncryptionType.toString() storageInfo.internalStorageEncryptionType.toString()
binding.memoryLayout.interText2.textTitle.text = getString(R.string.block_size) binding.memoryLayout.interText2.textTitle.text = getString(R.string.block_size)
binding.memoryLayout.interText2.textContent.text = total binding.memoryLayout.interText2.textContent.text = intertotal
binding.memoryLayout.interText3.textTitle.text = "/data" binding.memoryLayout.interText3.textTitle.text = "/data"
binding.memoryLayout.interText3.textContent.text = total binding.memoryLayout.interText3.textContent.text = intertotal
binding.memoryLayout.stor3.text = used + " used" binding.memoryLayout.stor3.text = interused + " used"
binding.memoryLayout.stor4.text = free + " free" binding.memoryLayout.stor4.text = interfree + " free"
binding.memoryLayout.seekbar2.progress = binding.memoryLayout.seekbar2.progress =
(used.substringBefore(" ").toDouble() / total.substringBefore(" ").toDouble() * 100).toInt() (interused.substringBefore(" ").toDouble() / intertotal.substringBefore(" ")
.toDouble() * 100).toInt()
} }
/** /**
@ -222,12 +224,13 @@ class HardWareFragment : Fragment() {
defaultDisplayInfo?.densityDpi.toString() + "(xxhdpi)\n" + defaultDisplayInfo?.xdpi?.roundToInt() + "dpx" + defaultDisplayInfo?.ydpi?.roundToInt() + "dp" defaultDisplayInfo?.densityDpi.toString() + "(xxhdpi)\n" + defaultDisplayInfo?.xdpi?.roundToInt() + "dpx" + defaultDisplayInfo?.ydpi?.roundToInt() + "dp"
binding.disText3.textContent.text = dpiStr binding.disText3.textContent.text = dpiStr
binding.disText4.textTitle.text = getString(R.string.screen_size_e) binding.disText4.textTitle.text = getString(R.string.screen_size_e)
val screenSize = "${String.format("%.2f", display.getScreenSize()?.diagonalInches)}/ ${String.format("%.1f", display.getScreenSize()?.diagonalMm)} mm"
binding.disText4.textContent.text = screenSize
binding.disText5.textTitle.text = getString(R.string.aspect_ratio) binding.disText5.textTitle.text = getString(R.string.aspect_ratio)
binding.disText5.textContent.text = convertToApproximateAspectRatio( binding.disText5.textContent.text = convertToApproximateAspectRatio(
width = width.toInt(), width = width.toInt(),
height = height.toInt() height = height.toInt()
).toString() )
binding.disText6.textTitle.text = getString(R.string.refresh_rate) binding.disText6.textTitle.text = getString(R.string.refresh_rate)
binding.disText6.textContent.text = defaultDisplayInfo?.refreshRate.toString() + "HZ" binding.disText6.textContent.text = defaultDisplayInfo?.refreshRate.toString() + "HZ"
binding.disText7.textTitle.text = getString(R.string.wide_color_gamut) binding.disText7.textTitle.text = getString(R.string.wide_color_gamut)
@ -261,11 +264,11 @@ class HardWareFragment : Fragment() {
binding.gpuText3.textTitle.text = getString(R.string.max_frequency) binding.gpuText3.textTitle.text = getString(R.string.max_frequency)
binding.gpuText3.textContent.text = "${gpu.getMaxFrequency()} MHz" binding.gpuText3.textContent.text = "${gpu.getMaxFrequency()} MHz"
binding.gpuText4.textTitle.text = getString(R.string.architecture) binding.gpuText4.textTitle.text = getString(R.string.architecture)
binding.gpuText4.textContent.text=gpu.getArchitecture() binding.gpuText4.textContent.text = gpu.getArchitecture()
binding.gpuText5.textTitle.text = getString(R.string.cores) binding.gpuText5.textTitle.text = getString(R.string.cores)
binding.gpuText5.textContent.text = gpu.getOpenGLExtensionCount().toString() binding.gpuText5.textContent.text = gpu.getOpenGLExtensionCount().toString()
binding.gpuText6.textTitle.text = getString(R.string.total_l2) binding.gpuText6.textTitle.text = getString(R.string.total_l2)
binding.gpuText6.textContent.text="${gpu.getCacheSize()} KB" binding.gpuText6.textContent.text = "${gpu.getCacheSize()} KB"
binding.gpuText7.textTitle.text = getString(R.string.bus_width) binding.gpuText7.textTitle.text = getString(R.string.bus_width)
binding.gpuText7.textContent.text = "${gpu.getBandwidth()} GB/s" binding.gpuText7.textContent.text = "${gpu.getBandwidth()} GB/s"
binding.gpuText8.textTitle.text = getString(R.string.vulkan_support) binding.gpuText8.textTitle.text = getString(R.string.vulkan_support)
@ -332,32 +335,41 @@ class HardWareFragment : Fragment() {
} }
//蓝牙features支持 //蓝牙features支持
bluetoothInfo.getBluetoothFeatures().let { features -> bluetoothInfo.getBluetoothFeatures().let { features ->
binding.bluetoothLayout.blueCheck1.content.text=getString(R.string.bluetooth_le) binding.bluetoothLayout.blueCheck1.content.text = getString(R.string.bluetooth_le)
binding.bluetoothLayout.blueCheck1.image.isSelected=features.bluetoothLe binding.bluetoothLayout.blueCheck1.image.isSelected = features.bluetoothLe
binding.bluetoothLayout.blueCheck2.content.text=getString(R.string.multiple_advertisement) binding.bluetoothLayout.blueCheck2.content.text =
binding.bluetoothLayout.blueCheck2.image.isSelected=features.multipleAdvertisement getString(R.string.multiple_advertisement)
binding.bluetoothLayout.blueCheck3.content.text=getString(R.string.offloaded_filtering) binding.bluetoothLayout.blueCheck2.image.isSelected = features.multipleAdvertisement
binding.bluetoothLayout.blueCheck3.image.isSelected=features.offloadedFiltering binding.bluetoothLayout.blueCheck3.content.text =
binding.bluetoothLayout.blueCheck4.content.text=getString(R.string.offloaded_scan_batching) getString(R.string.offloaded_filtering)
binding.bluetoothLayout.blueCheck4.image.isSelected=features.offloadedScanBatching binding.bluetoothLayout.blueCheck3.image.isSelected = features.offloadedFiltering
binding.bluetoothLayout.blueCheck01.content.text=getString(R.string.le_periodic_advertising) binding.bluetoothLayout.blueCheck4.content.text =
binding.bluetoothLayout.blueCheck01.image.isSelected=features.lePeriodicAdvertising getString(R.string.offloaded_scan_batching)
binding.bluetoothLayout.blueCheck02.content.text=getString(R.string.le_extended_advertising) binding.bluetoothLayout.blueCheck4.image.isSelected = features.offloadedScanBatching
binding.bluetoothLayout.blueCheck02.image.isSelected=features.leExtendedAdvertising binding.bluetoothLayout.blueCheck01.content.text =
binding.bluetoothLayout.blueCheck03.content.text=getString(R.string.le_2m_phy_high_speed) getString(R.string.le_periodic_advertising)
binding.bluetoothLayout.blueCheck03.image.isSelected=features.leCodedPhy binding.bluetoothLayout.blueCheck01.image.isSelected = features.lePeriodicAdvertising
binding.bluetoothLayout.blueCheck04.content.text=getString(R.string.le_2m_phy_low_power) binding.bluetoothLayout.blueCheck02.content.text =
binding.bluetoothLayout.blueCheck04.image.isSelected=features.le2MbPhy getString(R.string.le_extended_advertising)
binding.bluetoothLayout.blueCheck05.content.text=getString(R.string.le_audio_support) binding.bluetoothLayout.blueCheck02.image.isSelected = features.leExtendedAdvertising
binding.bluetoothLayout.blueCheck05.image.isSelected=features.leAudioSupport binding.bluetoothLayout.blueCheck03.content.text =
getString(R.string.le_2m_phy_high_speed)
binding.bluetoothLayout.blueCheck03.image.isSelected = features.leCodedPhy
binding.bluetoothLayout.blueCheck04.content.text =
getString(R.string.le_2m_phy_low_power)
binding.bluetoothLayout.blueCheck04.image.isSelected = features.le2MbPhy
binding.bluetoothLayout.blueCheck05.content.text = getString(R.string.le_audio_support)
binding.bluetoothLayout.blueCheck05.image.isSelected = features.leAudioSupport
} }
} }
// 请求蓝牙权限的方法 // 请求蓝牙权限的方法
private fun requestBluetoothPermissions() { private fun requestBluetoothPermissions() {
val permissions = AndInfo.instance.bluetooth.requiredPermissions val permissions = AndInfo.instance.bluetooth.requiredPermissions
requestPermissionLauncher.launch(permissions) requestPermissionLauncher.launch(permissions)
} }
// 检查权限的方法 // 检查权限的方法
private fun checkBluetoothPermissions(): Boolean { private fun checkBluetoothPermissions(): Boolean {
val bluetoothInfo = AndInfo.instance.bluetooth val bluetoothInfo = AndInfo.instance.bluetooth
@ -366,6 +378,7 @@ class HardWareFragment : Fragment() {
PackageManager.PERMISSION_GRANTED PackageManager.PERMISSION_GRANTED
} }
} }
/** /**
* 检查并显示蓝牙信息 * 检查并显示蓝牙信息
*/ */
@ -412,6 +425,7 @@ class HardWareFragment : Fragment() {
openBluetoothSettings() openBluetoothSettings()
} }
} }
/** /**
* 显示已配对设备弹窗 * 显示已配对设备弹窗
*/ */
@ -420,6 +434,7 @@ class HardWareFragment : Fragment() {
println("showBluetoothDialog" + AndInfo.instance.bluetooth.bondedDevices.size) println("showBluetoothDialog" + AndInfo.instance.bluetooth.bondedDevices.size)
dialogBlueTooth?.show(childFragmentManager, "BlueTooth1") dialogBlueTooth?.show(childFragmentManager, "BlueTooth1")
} }
/** /**
* 显示扫描到附近设备弹窗 * 显示扫描到附近设备弹窗
*/ */
@ -441,8 +456,6 @@ class HardWareFragment : Fragment() {
} }
/** /**
* 刷新蓝牙信息 * 刷新蓝牙信息
*/ */
@ -471,6 +484,7 @@ class HardWareFragment : Fragment() {
} }
} }
} }
/** /**
* 权限检查结果回调 * 权限检查结果回调
*/ */
@ -484,11 +498,17 @@ class HardWareFragment : Fragment() {
// 权限已授予刷新UI // 权限已授予刷新UI
checkAndDisplayBluetoothInfo() checkAndDisplayBluetoothInfo()
} else { } else {
Toast.makeText(requireContext(), "Bluetooth permission is required.", Toast.LENGTH_SHORT).show() Toast.makeText(
requireContext(),
"Bluetooth permission is required.",
Toast.LENGTH_SHORT
).show()
} }
} }
companion object { companion object {
private const val REQUEST_ENABLE_BT = 1001 private const val REQUEST_ENABLE_BT = 1001
@JvmStatic @JvmStatic
fun newInstance() = fun newInstance() =
HardWareFragment().apply { HardWareFragment().apply {

View File

@ -26,57 +26,9 @@ private lateinit var binding: FragmentSystemShowBinding
} }
private fun initView() { private fun initView() {
binding.phoneName.text=AndInfo.instance.device.brand setDeviceInfo()
binding.text0.textTitle.text=getString(R.string.model) setOperatingSystem()
binding.text0.textContent.text=AndInfo.instance.device.model setIdentifier()
binding.text1.textTitle.text=getString(R.string.product)
binding.text1.textContent.text=AndInfo.instance.device.productName
binding.text2.textTitle.text=getString(R.string.device)
binding.text2.textContent.text=AndInfo.instance.device.device
binding.text3.textTitle.text=getString(R.string.board)
binding.text3.textContent.text=AndInfo.instance.device.boardName
binding.text4.textTitle.text=getString(R.string.manufacturer)
binding.text4.textContent.text=AndInfo.instance.device.manufacturer
binding.text5.textTitle.text=getString(R.string.baseband)
binding.text6.textTitle.text=getString(R.string.google_play_services_version)
//操作系统
val buildInfo = AndInfo.instance.build
binding.textOp1.textTitle.text=getString(R.string.android_version)
binding.textOp1.textContent.text=buildInfo.versionRelease
binding.textOp2.textTitle.text=getString(R.string.api)
binding.textOp2.textContent.text=buildInfo.versionSdkInt.toString()
binding.textOp3.textTitle.text=getString(R.string.emui)
binding.textOp4.textTitle.text=getString(R.string.security_patch)
binding.textOp4.textContent.text=buildInfo.securityPatch
binding.textOp5.textTitle.text=getString(R.string.version)
binding.textOp5.textContent.text=buildInfo.display
binding.textOp6.textTitle.text=getString(R.string.baseband)
binding.textOp7.textTitle.text=getString(R.string.fingerprint)
binding.textOp7.textContent.text=buildInfo.fingerprint
binding.textOp8.textTitle.text=getString(R.string.build_time)
binding.textOp8.textContent.text=buildInfo.buildDate.toString()
binding.textOp9.textTitle.text=getString(R.string.initial_release)
binding.textOp10.textTitle.text=getString(R.string.architecture)
binding.textOp11.textTitle.text=getString(R.string.instruction_sets)
binding.textOp12.textTitle.text=getString(R.string.treble)
binding.textOp13.textTitle.text=getString(R.string.root_access)
binding.textOp14.textTitle.text=getString(R.string.google_play_services)
binding.textOp15.textTitle.text=getString(R.string.toybox)
binding.textOp16.textTitle.text=getString(R.string.java_VM)
binding.textOp16.textContent.text=AndInfo.instance.build.jvmName + " " + AndInfo.instance.build.jvmVersion
binding.textOp17.textTitle.text=getString(R.string.ssl_version)
binding.textOp18.textTitle.text=getString(R.string.language)
binding.textOp19.textTitle.text=getString(R.string.usb_debugging)
//内核
binding.textOp20.textTitle.text=getString(R.string.kernel)
binding.textOp20.textContent.text=AndInfo.instance.build.kernelCompleteVersion
binding.textclear1.textTitle.text=getString(R.string.vendor) binding.textclear1.textTitle.text=getString(R.string.vendor)
binding.textclear2.textTitle.text=getString(R.string.version) binding.textclear2.textTitle.text=getString(R.string.version)
@ -88,7 +40,85 @@ private lateinit var binding: FragmentSystemShowBinding
binding.textwide4.textTitle.text=getString(R.string.device_id) binding.textwide4.textTitle.text=getString(R.string.device_id)
binding.textwide5.textTitle.text=getString(R.string.security_level) binding.textwide5.textTitle.text=getString(R.string.security_level)
binding.textwide6.textTitle.text=getString(R.string.highest_hdcp_level) binding.textwide6.textTitle.text=getString(R.string.highest_hdcp_level)
}
/**
* Identifier
* */
private fun setIdentifier() {
val buildInfo = AndInfo.instance.build
binding.idDev1.text=buildInfo.googlePlayServicesVersionCode.toString()
binding.idDev2.text=buildInfo.deviceUniqueId
//google play services
binding.textgoogle.textTitle.text=getString(R.string.google_play_services_version)
binding.textgoogle.textContent.text=buildInfo.googlePlayServicesVersion
}
/**
* 操作系统
* */
private fun setOperatingSystem() {
val buildInfo = AndInfo.instance.build
binding.textOp1.textTitle.text=getString(R.string.android_version)
binding.textOp1.textContent.text=buildInfo.versionRelease
binding.textOp2.textTitle.text=getString(R.string.api)
binding.textOp2.textContent.text=buildInfo.versionSdkInt.toString()
// binding.textOp3.textTitle.text=getString(R.string.emui)
binding.textOp4.textTitle.text=getString(R.string.security_patch)
binding.textOp4.textContent.text=buildInfo.securityPatch
binding.textOp5.textTitle.text=getString(R.string.version)
binding.textOp5.textContent.text=buildInfo.display
binding.textOp6.textTitle.text=getString(R.string.baseband)
binding.textOp6.textContent.text=buildInfo.brand
binding.textOp7.textTitle.text=getString(R.string.fingerprint)
binding.textOp7.textContent.text=buildInfo.fingerprint
binding.textOp8.textTitle.text=getString(R.string.build_time)
binding.textOp8.textContent.text=buildInfo.buildDate.toString()
binding.textOp9.textTitle.text=getString(R.string.initial_release)
// todo
binding.textOp10.textTitle.text=getString(R.string.architecture)
binding.textOp10.textContent.text=buildInfo.kernelArchitecture
binding.textOp11.textTitle.text=getString(R.string.instruction_sets)
// todo
binding.textOp12.textTitle.text=getString(R.string.treble)
binding.textOp12.textContent.text=if (buildInfo.isTrebleEnabled) "Supported" else "Not supported"
binding.textOp13.textTitle.text=getString(R.string.root_access)
binding.textOp13.textContent.text=if (AndInfo.instance.build.isRooted) "Yes" else "No"
binding.textOp14.textTitle.text=getString(R.string.google_play_services)
binding.textOp14.textContent.text=buildInfo.googlePlayServicesVersion
binding.textOp15.textTitle.text=getString(R.string.toybox)
binding.textOp15.textContent.text=buildInfo.toyboxVersion
binding.textOp16.textTitle.text=getString(R.string.java_VM)
binding.textOp16.textContent.text=AndInfo.instance.build.jvmName + " " + AndInfo.instance.build.jvmVersion
binding.textOp17.textTitle.text=getString(R.string.ssl_version)
binding.textOp17.textContent.text=AndInfo.instance.build.openSslVersion + " " + AndInfo.instance.build.boringSslVersion
binding.textOp18.textTitle.text=getString(R.string.language)
binding.textOp18.textContent.text=AndInfo.instance.build.systemLanguage
binding.textOp19.textTitle.text=getString(R.string.usb_debugging)
binding.textOp19.textContent.text=if (buildInfo.isUsbDebuggingEnabled) "Enabled" else "Disabled"
//内核
binding.textOp20.textTitle.text=getString(R.string.kernel)
binding.textOp20.textContent.text=AndInfo.instance.build.kernelCompleteVersion
}
/**
* 设置设备信息
* */
private fun setDeviceInfo() {
val deviceInfo = AndInfo.instance.device
binding.phoneName.text=deviceInfo.brand
binding.text0.textTitle.text=getString(R.string.model)
binding.text0.textContent.text=deviceInfo.model
binding.text1.textTitle.text=getString(R.string.product)
binding.text1.textContent.text=deviceInfo.productName
binding.text2.textTitle.text=getString(R.string.device)
binding.text2.textContent.text=deviceInfo.device
binding.text3.textTitle.text=getString(R.string.board)
binding.text3.textContent.text=deviceInfo.boardName
binding.text4.textTitle.text=getString(R.string.manufacturer)
binding.text4.textContent.text=deviceInfo.manufacturer
// binding.text5.textTitle.text=getString(R.string.baseband)
} }
companion object { companion object {

View File

@ -59,6 +59,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:textSize="16sp" android:textSize="16sp"
android:layout_marginStart="20dp"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
</LinearLayout> </LinearLayout>
@ -77,9 +78,9 @@
<include <include
android:id="@+id/text4" android:id="@+id/text4"
layout="@layout/common_text_style" /> layout="@layout/common_text_style" />
<include <!-- <include-->
android:id="@+id/text5" <!-- android:id="@+id/text5"-->
layout="@layout/common_text_style" /> <!-- layout="@layout/common_text_style" />-->
</LinearLayout> </LinearLayout>
@ -146,9 +147,9 @@
<include <include
android:id="@+id/textOp2" android:id="@+id/textOp2"
layout="@layout/common_text_style" /> layout="@layout/common_text_style" />
<include <!-- <include-->
android:id="@+id/textOp3" <!-- android:id="@+id/textOp3"-->
layout="@layout/common_text_style" /> <!-- layout="@layout/common_text_style" />-->
<include <include
android:id="@+id/textOp4" android:id="@+id/textOp4"
layout="@layout/common_text_style" /> layout="@layout/common_text_style" />
@ -236,20 +237,16 @@
android:id="@+id/idDev1" android:id="@+id/idDev1"
style="@style/LeftContent" style="@style/LeftContent"
android:layout_marginStart="20dp" android:layout_marginStart="20dp"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/apps" android:text="@string/apps"
android:textColor="@color/right_color" android:textColor="@color/right_color"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
<View
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="1dp"/>
<ImageView <ImageView
android:layout_width="11dp" android:layout_width="11dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/copy" android:src="@mipmap/copy"
android:layout_gravity="center_vertical"
/> />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
@ -268,24 +265,20 @@
android:id="@+id/idDev2" android:id="@+id/idDev2"
style="@style/LeftContent" style="@style/LeftContent"
android:layout_marginStart="20dp" android:layout_marginStart="20dp"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/apps" android:text="@string/apps"
android:textColor="@color/right_color" android:textColor="@color/right_color"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
<View
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="1dp"/>
<ImageView <ImageView
android:layout_width="11dp" android:layout_width="11dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@mipmap/copy" android:src="@mipmap/copy"
android:layout_gravity="center_vertical"
/> />
</LinearLayout> </LinearLayout>
<include <include
android:id="@+id/text6" android:id="@+id/textgoogle"
layout="@layout/common_text_style" /> layout="@layout/common_text_style" />
</LinearLayout> </LinearLayout>

View File

@ -62,7 +62,6 @@
style="@style/LeftContent" style="@style/LeftContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="2.22 GB used"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
<View <View
@ -75,7 +74,6 @@
style="@style/LeftContent" style="@style/LeftContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="3.75 GB free"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
@ -87,7 +85,7 @@
android:maxHeight="10dp" android:maxHeight="10dp"
android:minHeight="10dp" android:minHeight="10dp"
android:padding="0dp" android:padding="0dp"
android:progress="50" android:progress="0"
android:progressDrawable="@drawable/progress_bg" android:progressDrawable="@drawable/progress_bg"
android:thumb="@drawable/progress_oval" android:thumb="@drawable/progress_oval"
android:thumbOffset="0dp" /> android:thumbOffset="0dp" />
@ -116,7 +114,6 @@
style="@style/LeftContent" style="@style/LeftContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="2.22 GB used"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
<View <View
@ -129,7 +126,6 @@
style="@style/LeftContent" style="@style/LeftContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="3.75 GB free"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
@ -141,7 +137,7 @@
android:maxHeight="10dp" android:maxHeight="10dp"
android:minHeight="10dp" android:minHeight="10dp"
android:padding="0dp" android:padding="0dp"
android:progress="50" android:progress="0"
android:progressDrawable="@drawable/progress_bg" android:progressDrawable="@drawable/progress_bg"
android:thumb="@drawable/progress_oval" android:thumb="@drawable/progress_oval"
android:thumbOffset="0dp" /> android:thumbOffset="0dp" />
@ -204,7 +200,6 @@
style="@style/LeftContent" style="@style/LeftContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="2.22 GB used"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
<View <View
@ -217,7 +212,6 @@
style="@style/LeftContent" style="@style/LeftContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="3.75 GB free"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
</LinearLayout> </LinearLayout>
@ -231,7 +225,7 @@
android:maxHeight="10dp" android:maxHeight="10dp"
android:minHeight="10dp" android:minHeight="10dp"
android:padding="0dp" android:padding="0dp"
android:progress="50" android:progress="0"
android:progressDrawable="@drawable/progress_bg" android:progressDrawable="@drawable/progress_bg"
android:thumb="@drawable/progress_oval" android:thumb="@drawable/progress_oval"
android:thumbOffset="0dp" /> android:thumbOffset="0dp" />
@ -397,7 +391,6 @@
style="@style/LeftContent" style="@style/LeftContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="2.22 GB used"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
<View <View
@ -410,7 +403,6 @@
style="@style/LeftContent" style="@style/LeftContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="3.75 GB free"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
</LinearLayout> </LinearLayout>
@ -421,7 +413,7 @@
android:maxHeight="10dp" android:maxHeight="10dp"
android:minHeight="10dp" android:minHeight="10dp"
android:padding="0dp" android:padding="0dp"
android:progress="50" android:progress="0"
android:progressDrawable="@drawable/progress_bg" android:progressDrawable="@drawable/progress_bg"
android:thumb="@drawable/progress_oval" android:thumb="@drawable/progress_oval"
android:thumbOffset="0dp" /> android:thumbOffset="0dp" />