diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 94062d2..e5f50af 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -35,6 +35,9 @@ android { kotlinOptions { jvmTarget = "11" } + buildFeatures { + viewBinding = true + } } dependencies { diff --git a/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt b/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt index 53c96bf..4dd164b 100644 --- a/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt +++ b/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt @@ -6,18 +6,40 @@ import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.lifecycle.lifecycleScope +import com.yuanxuan.rokid.databinding.ActivityMainBinding +import com.yuanxuan.rokid.dependencies.AppDependencies +import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { + + private lateinit var binding: ActivityMainBinding + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() - setContentView(R.layout.activity_main) + + binding = ActivityMainBinding.inflate(layoutInflater) + + setContentView(binding.root) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } + lifecycleScope.launch { + /** + * 监听电量 + */ + AppDependencies.deviceServiceManager.batteryPercentage.collect { + binding.batteryLevel.text = "${it}%" + } + } + + /** + * 拦截返回键事件,防止返回到桌面 + */ onBackPressedDispatcher.addCallback { } } diff --git a/app/src/main/java/com/yuanxuan/rokid/device/DeviceServiceManager.kt b/app/src/main/java/com/yuanxuan/rokid/device/DeviceServiceManager.kt index 303be00..63c4100 100644 --- a/app/src/main/java/com/yuanxuan/rokid/device/DeviceServiceManager.kt +++ b/app/src/main/java/com/yuanxuan/rokid/device/DeviceServiceManager.kt @@ -5,6 +5,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import android.os.BatteryManager import com.rokid.dcg.sprite.service.IInstructListener import com.rokid.dcg.sprite.service.IInstructService import com.rokid.dcg.sprite.service.ISpriteMediaService @@ -45,6 +46,12 @@ class DeviceServiceManager(val context: Application) { private val _instructState = MutableStateFlow(InstructState.None) val instructState = _instructState.asStateFlow() + /** + * 系统电量 + */ + private val _batteryPercentage = MutableStateFlow(-1) + val batteryPercentage = _batteryPercentage.asStateFlow() + lateinit var sn: String private set @@ -56,13 +63,15 @@ class DeviceServiceManager(val context: Application) { private var wakeTimeoutJob: Job? = null init { - val filter = IntentFilter() - filter.addAction(SysKeyAction.SPRITE_BUTTON_DOWN) - filter.addAction(SysKeyAction.SPRITE_BUTTON_UP) - filter.addAction(SysKeyAction.SPRITE_BUTTON_CLICK) - filter.addAction(SysKeyAction.SPRITE_BUTTON_LONG_PRESS) - filter.addAction(SysKeyAction.SPRITE_BUTTON_VERY_VERY_LONG_PRESS) - filter.addAction(SysKeyAction.TOUCH_BAR_LONG_PRESS) + val filter = IntentFilter().apply { + addAction(SysKeyAction.SPRITE_BUTTON_DOWN) + addAction(SysKeyAction.SPRITE_BUTTON_UP) + addAction(SysKeyAction.SPRITE_BUTTON_CLICK) + addAction(SysKeyAction.SPRITE_BUTTON_LONG_PRESS) + addAction(SysKeyAction.SPRITE_BUTTON_VERY_VERY_LONG_PRESS) + addAction(SysKeyAction.TOUCH_BAR_LONG_PRESS) + addAction(Intent.ACTION_BATTERY_CHANGED) // 监听电量 + } context.registerReceiver(SysKeyReceiver(), filter) scope.launch { @@ -226,6 +235,15 @@ class DeviceServiceManager(val context: Application) { override fun onReceive(context: Context?, intent: Intent?) { val action = intent?.action ?: return when (action) { + Intent.ACTION_BATTERY_CHANGED -> { + val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) + val scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1) + if (level == -1 || scale == -1) + return + val batteryPercentage = (level / scale.toFloat() * 100).toInt() + _batteryPercentage.update { batteryPercentage } + } + SysKeyAction.SPRITE_BUTTON_DOWN -> { Timber.d("按下拍照键 SPRITE_BUTTON_DOWN") } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 86a5d97..8b346b0 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -8,12 +8,32 @@ tools:context=".MainActivity"> + android:textColor="@color/white" + app:layout_constraintBottom_toTopOf="@id/bottom" + app:layout_constraintEnd_toEndOf="parent" /> + + + + + + \ No newline at end of file