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

View File

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