package com.beancount.mobile.accessibility import android.os.Build import android.service.quicksettings.Tile import android.service.quicksettings.TileService import android.util.Log import android.content.Intent import android.app.PendingIntent /** * 快速设置磁贴(plan.md「3.11 快速设置磁贴」)。 * * 参考 AutoAccounting 的 OcrTileService: * - 用户下拉快速设置,点击「OCR 记账」磁贴触发一次手动 OCR * - Android 14+ 用 PendingIntent + startActivityAndCollapse * * 触发后调用 BillingAccessibilityService.triggerManualOcr()。 */ class OcrTileService : TileService() { companion object { private const val TAG = "OcrTileService" } override fun onStartListening() { super.onStartListening() qsTile?.let { tile -> tile.state = Tile.STATE_ACTIVE tile.label = "OCR 记账" tile.updateTile() } Log.d(TAG, "磁贴开始监听") } override fun onClick() { super.onClick() Log.i(TAG, "磁贴被点击,触发手动 OCR") triggerManualOcr() } /** 触发手动 OCR(通过 BillingAccessibilityService)。 */ private fun triggerManualOcr() { val service = BillingAccessibilityService.instance if (service != null) { service.triggerManualOcr() return } // 服务未运行,尝试启动(Android 14+ 用 collapse) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { val pi = PendingIntent.getActivity( this, 0, Intent().apply { setClassName(packageName, "com.beancount.mobile.MainActivity") action = "com.beancount.mobile.TRIGGER_OCR" flags = Intent.FLAG_ACTIVITY_NEW_TASK }, PendingIntent.FLAG_IMMUTABLE, ) startActivityAndCollapse(pi) } } }