新增device,operation,identifier
This commit is contained in:
parent
88ff91c8c7
commit
9d8b9d5bd7
@ -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)
|
||||||
@ -326,38 +329,47 @@ class HardWareFragment : Fragment() {
|
|||||||
@SuppressLint("SuspiciousIndentation")
|
@SuppressLint("SuspiciousIndentation")
|
||||||
private fun setBlueToothInfo() {
|
private fun setBlueToothInfo() {
|
||||||
val bluetoothInfo = AndInfo.instance.bluetooth//蓝牙信息
|
val bluetoothInfo = AndInfo.instance.bluetooth//蓝牙信息
|
||||||
if (!bluetoothInfo.isEnabled) return
|
if (!bluetoothInfo.isEnabled) return
|
||||||
binding.bluetoothLayout.showLayout.setOnClickListener {
|
binding.bluetoothLayout.showLayout.setOnClickListener {
|
||||||
requestBluetoothPermissions()
|
requestBluetoothPermissions()
|
||||||
}
|
}
|
||||||
//蓝牙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 {
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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" />
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user