From b8ce9ba17794e94cb3bbc629e94cbb4a4be17619 Mon Sep 17 00:00:00 2001 From: Nedifinita Date: Fri, 18 Jul 2025 18:51:04 +0800 Subject: [PATCH] feat: modernize bluetooth apis --- app/build.gradle.kts | 4 ++-- .../java/org/noxylva/lbjconsole/BLEClient.kt | 10 ++++---- .../org/noxylva/lbjconsole/MainActivity.kt | 24 +++++++++++++++---- .../ui/components/TrainDetailDialog.kt | 2 +- .../lbjconsole/ui/screens/SettingsScreen.kt | 5 ++-- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 13dab37..6c454a9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -12,8 +12,8 @@ android { applicationId = "org.noxylva.lbjconsole" minSdk = 29 targetSdk = 35 - versionCode = 1 - versionName = "0.0.1" + versionCode = 2 + versionName = "0.0.2" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/org/noxylva/lbjconsole/BLEClient.kt b/app/src/main/java/org/noxylva/lbjconsole/BLEClient.kt index ce1da98..67e624c 100644 --- a/app/src/main/java/org/noxylva/lbjconsole/BLEClient.kt +++ b/app/src/main/java/org/noxylva/lbjconsole/BLEClient.kt @@ -90,12 +90,13 @@ class BLEClient(private val context: Context) : BluetoothGattCallback() { try { scanCallback = callback this.targetDeviceName = targetDeviceName - val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter() ?: run { + val bluetoothManager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager + val bluetoothAdapter = bluetoothManager.adapter ?: run { Log.e(TAG, "Bluetooth adapter unavailable") return } - if (!bluetoothAdapter.isEnabled) { + if (bluetoothAdapter.isEnabled != true) { Log.e(TAG, "Bluetooth adapter disabled") return } @@ -150,13 +151,14 @@ class BLEClient(private val context: Context) : BluetoothGattCallback() { } try { - val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter() ?: run { + val bluetoothManager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager + val bluetoothAdapter = bluetoothManager.adapter ?: run { Log.e(TAG, "Bluetooth adapter unavailable") handler.post { onConnectionStateChange?.invoke(false) } return false } - if (!bluetoothAdapter.isEnabled) { + if (bluetoothAdapter.isEnabled != true) { Log.e(TAG, "Bluetooth adapter is disabled") handler.post { onConnectionStateChange?.invoke(false) } return false diff --git a/app/src/main/java/org/noxylva/lbjconsole/MainActivity.kt b/app/src/main/java/org/noxylva/lbjconsole/MainActivity.kt index c8cd3b8..0809883 100644 --- a/app/src/main/java/org/noxylva/lbjconsole/MainActivity.kt +++ b/app/src/main/java/org/noxylva/lbjconsole/MainActivity.kt @@ -3,6 +3,7 @@ package org.noxylva.lbjconsole import android.Manifest import android.bluetooth.BluetoothAdapter import android.bluetooth.BluetoothDevice +import android.bluetooth.BluetoothManager import android.content.Context import android.content.Intent import java.io.File @@ -77,7 +78,17 @@ class MainActivity : ComponentActivity() { private var targetDeviceName = "LBJReceiver" - private val settingsPrefs by lazy { getSharedPreferences("app_settings", Context.MODE_PRIVATE) } + private val settingsPrefs by lazy { getSharedPreferences("app_settings", Context.MODE_PRIVATE) } + + private fun getAppVersion(): String { + return try { + val packageInfo = packageManager.getPackageInfo(packageName, 0) + packageInfo.versionName ?: "Unknown" + } catch (e: Exception) { + Log.e(TAG, "Failed to get app version", e) + "Unknown" + } + } private val requestPermissions = registerForActivityResult( @@ -279,6 +290,7 @@ class MainActivity : ComponentActivity() { Toast.makeText(this, "设备名称 '${settingsDeviceName}' 已保存,下次连接时生效", Toast.LENGTH_LONG).show() Log.d(TAG, "Applied settings deviceName=${settingsDeviceName}") }, + appVersion = getAppVersion(), locoInfoUtil = locoInfoUtil ) @@ -315,8 +327,9 @@ class MainActivity : ComponentActivity() { Log.d(TAG, "Connecting to device name=${device.name ?: "Unknown"} address=${device.address}") // 检查蓝牙适配器状态 - val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter() - if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled) { + val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager + val bluetoothAdapter = bluetoothManager.adapter + if (bluetoothAdapter == null || bluetoothAdapter.isEnabled != true) { deviceStatus = "蓝牙未启用" Log.e(TAG, "Bluetooth adapter unavailable or disabled") return @@ -422,7 +435,8 @@ class MainActivity : ComponentActivity() { private fun startScan() { - val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter() + val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager + val bluetoothAdapter = bluetoothManager.adapter if (bluetoothAdapter == null) { Log.e(TAG, "Bluetooth adapter unavailable") deviceStatus = "设备不支持蓝牙" @@ -521,6 +535,7 @@ fun MainContent( deviceName: String, onDeviceNameChange: (String) -> Unit, onApplySettings: () -> Unit, + appVersion: String, locoInfoUtil: LocoInfoUtil @@ -627,6 +642,7 @@ fun MainContent( deviceName = deviceName, onDeviceNameChange = onDeviceNameChange, onApplySettings = onApplySettings, + appVersion = appVersion ) 3 -> MapScreen( records = if (allRecords.isNotEmpty()) allRecords else recentRecords, diff --git a/app/src/main/java/org/noxylva/lbjconsole/ui/components/TrainDetailDialog.kt b/app/src/main/java/org/noxylva/lbjconsole/ui/components/TrainDetailDialog.kt index 98805e2..62c0eb5 100644 --- a/app/src/main/java/org/noxylva/lbjconsole/ui/components/TrainDetailDialog.kt +++ b/app/src/main/java/org/noxylva/lbjconsole/ui/components/TrainDetailDialog.kt @@ -82,7 +82,7 @@ fun TrainDetailDialog( DetailItem("机车类型", recordMap["loco_type"] ?: "--") DetailItem("列车类型", recordMap["lbj_class"] ?: "--") - Divider(modifier = Modifier.padding(vertical = 8.dp)) + HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) DetailItem("路线", recordMap["route"] ?: "--") diff --git a/app/src/main/java/org/noxylva/lbjconsole/ui/screens/SettingsScreen.kt b/app/src/main/java/org/noxylva/lbjconsole/ui/screens/SettingsScreen.kt index 1cc5640..5c4bb50 100644 --- a/app/src/main/java/org/noxylva/lbjconsole/ui/screens/SettingsScreen.kt +++ b/app/src/main/java/org/noxylva/lbjconsole/ui/screens/SettingsScreen.kt @@ -14,7 +14,8 @@ import androidx.compose.ui.unit.dp fun SettingsScreen( deviceName: String, onDeviceNameChange: (String) -> Unit, - onApplySettings: () -> Unit + onApplySettings: () -> Unit, + appVersion: String = "Unknown" ) { val uriHandler = LocalUriHandler.current @@ -46,7 +47,7 @@ fun SettingsScreen( Spacer(modifier = Modifier.weight(1f)) Text( - text = "LBJ Console v0.0.1 by undef-i", + text = "LBJ Console v$appVersion by undef-i", style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.clickable {