mirror of
https://github.com/gkd-kit/gkd.git
synced 2024-11-16 03:32:38 +08:00
feat: captureVolumeChange (#718)
Some checks failed
Build-Apk / build (push) Has been cancelled
Some checks failed
Build-Apk / build (push) Has been cancelled
This commit is contained in:
parent
85ba7e67ee
commit
751898532f
|
@ -1,6 +1,10 @@
|
||||||
package li.songe.gkd.service
|
package li.songe.gkd.service
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.content.IntentFilter
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.PixelFormat
|
import android.graphics.PixelFormat
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
@ -12,6 +16,7 @@ import android.view.WindowManager
|
||||||
import android.view.accessibility.AccessibilityEvent
|
import android.view.accessibility.AccessibilityEvent
|
||||||
import android.view.accessibility.AccessibilityNodeInfo
|
import android.view.accessibility.AccessibilityNodeInfo
|
||||||
import com.blankj.utilcode.util.LogUtils
|
import com.blankj.utilcode.util.LogUtils
|
||||||
|
import com.blankj.utilcode.util.ScreenUtils
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.asCoroutineDispatcher
|
import kotlinx.coroutines.asCoroutineDispatcher
|
||||||
|
@ -427,6 +432,50 @@ class GkdAbService : CompositionAbService({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val volumeChangedAction = "android.media.VOLUME_CHANGED_ACTION"
|
||||||
|
fun createVolumeReceiver() = object : BroadcastReceiver() {
|
||||||
|
var lastTriggerTime = -1L
|
||||||
|
override fun onReceive(context: Context?, intent: Intent?) {
|
||||||
|
if (intent?.action == volumeChangedAction) {
|
||||||
|
val t = System.currentTimeMillis()
|
||||||
|
if (t - lastTriggerTime > 3000 && !ScreenUtils.isScreenLock()) {
|
||||||
|
lastTriggerTime = t
|
||||||
|
scope.launchTry(Dispatchers.IO) {
|
||||||
|
SnapshotExt.captureSnapshot()
|
||||||
|
toast("快照成功")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var captureVolumeReceiver: BroadcastReceiver? = null
|
||||||
|
scope.launch {
|
||||||
|
storeFlow.map(scope) { s -> s.captureVolumeChange }.collect {
|
||||||
|
if (captureVolumeReceiver != null) {
|
||||||
|
context.unregisterReceiver(captureVolumeReceiver)
|
||||||
|
}
|
||||||
|
captureVolumeReceiver = if (it) {
|
||||||
|
createVolumeReceiver().apply {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||||
|
context.registerReceiver(
|
||||||
|
this, IntentFilter(volumeChangedAction), Context.RECEIVER_EXPORTED
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
context.registerReceiver(this, IntentFilter(volumeChangedAction))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onDestroy {
|
||||||
|
if (captureVolumeReceiver != null) {
|
||||||
|
context.unregisterReceiver(captureVolumeReceiver)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onAccessibilityEvent { e ->
|
onAccessibilityEvent { e ->
|
||||||
if (!storeFlow.value.captureScreenshot) return@onAccessibilityEvent
|
if (!storeFlow.value.captureScreenshot) return@onAccessibilityEvent
|
||||||
val appId = e.packageName ?: return@onAccessibilityEvent
|
val appId = e.packageName ?: return@onAccessibilityEvent
|
||||||
|
|
|
@ -471,6 +471,16 @@ fun AdvancedPage() {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
TextSwitch(
|
||||||
|
title = "音量快照",
|
||||||
|
subtitle = "音量变化时保存快照",
|
||||||
|
checked = store.captureVolumeChange
|
||||||
|
) {
|
||||||
|
storeFlow.value = store.copy(
|
||||||
|
captureVolumeChange = it
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
TextSwitch(
|
TextSwitch(
|
||||||
title = "截屏快照",
|
title = "截屏快照",
|
||||||
subtitle = "触发截屏时保存快照",
|
subtitle = "触发截屏时保存快照",
|
||||||
|
|
|
@ -47,6 +47,7 @@ data class Store(
|
||||||
val captureScreenshot: Boolean = false,
|
val captureScreenshot: Boolean = false,
|
||||||
val httpServerPort: Int = 8888,
|
val httpServerPort: Int = 8888,
|
||||||
val updateSubsInterval: Long = UpdateTimeOption.Everyday.value,
|
val updateSubsInterval: Long = UpdateTimeOption.Everyday.value,
|
||||||
|
val captureVolumeChange: Boolean = false,
|
||||||
val autoCheckAppUpdate: Boolean = BuildConfig.ENABLED_UPDATE,
|
val autoCheckAppUpdate: Boolean = BuildConfig.ENABLED_UPDATE,
|
||||||
val toastWhenClick: Boolean = true,
|
val toastWhenClick: Boolean = true,
|
||||||
val clickToast: String = "GKD",
|
val clickToast: String = "GKD",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user