Fix tile permission

This commit is contained in:
世界
2025-11-04 21:42:42 +08:00
parent a4e3c00f0f
commit 7dbe9f8fb0
2 changed files with 45 additions and 11 deletions

View File

@@ -1,5 +1,7 @@
package io.nekohasekai.sfa.bg
import android.app.KeyguardManager
import android.content.Context
import android.service.quicksettings.Tile
import android.service.quicksettings.TileService
import androidx.annotation.RequiresApi
@@ -32,15 +34,20 @@ class TileService : TileService(), ServiceConnection.Callback {
}
override fun onClick() {
val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
if (keyguardManager.isKeyguardLocked) {
unlockAndRun {
toggleService()
}
} else {
toggleService()
}
}
private fun toggleService() {
when (connection.status) {
Status.Stopped -> {
BoxService.start()
}
Status.Started -> {
BoxService.stop()
}
Status.Stopped -> BoxService.start()
Status.Started -> BoxService.stop()
else -> {}
}
}

View File

@@ -1,6 +1,7 @@
package io.nekohasekai.sfa.ui
import android.app.Activity
import android.app.KeyguardManager
import android.content.Intent
import android.content.pm.ShortcutManager
import android.os.Build
@@ -43,13 +44,39 @@ class ShortcutActivity : Activity(), ServiceConnection.Callback {
)
finish()
} else {
connection.connect()
if (Build.VERSION.SDK_INT >= 25) {
getSystemService<ShortcutManager>()?.reportShortcutUsed("toggle")
val keyguardManager = getSystemService<KeyguardManager>()
if (keyguardManager?.isKeyguardLocked == true) {
if (Build.VERSION.SDK_INT >= 26) {
keyguardManager.requestDismissKeyguard(this, object : KeyguardManager.KeyguardDismissCallback() {
override fun onDismissSucceeded() {
super.onDismissSucceeded()
connectAndToggle()
}
override fun onDismissCancelled() {
super.onDismissCancelled()
finish()
}
override fun onDismissError() {
super.onDismissError()
finish()
}
})
} else {
finish()
}
} else {
connectAndToggle()
}
}
}
private fun connectAndToggle() {
connection.connect()
if (Build.VERSION.SDK_INT >= 25) {
getSystemService<ShortcutManager>()?.reportShortcutUsed("toggle")
}
}
override fun onServiceStatusChanged(status: Status) {
when (status) {
Status.Started -> BoxService.stop()