diff --git a/app/src/main/java/io/nekohasekai/sfa/bg/TileService.kt b/app/src/main/java/io/nekohasekai/sfa/bg/TileService.kt index 8ea482f..30fa930 100644 --- a/app/src/main/java/io/nekohasekai/sfa/bg/TileService.kt +++ b/app/src/main/java/io/nekohasekai/sfa/bg/TileService.kt @@ -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 -> {} } } diff --git a/app/src/main/java/io/nekohasekai/sfa/ui/ShortcutActivity.kt b/app/src/main/java/io/nekohasekai/sfa/ui/ShortcutActivity.kt index 307af12..a91e0b6 100644 --- a/app/src/main/java/io/nekohasekai/sfa/ui/ShortcutActivity.kt +++ b/app/src/main/java/io/nekohasekai/sfa/ui/ShortcutActivity.kt @@ -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()?.reportShortcutUsed("toggle") + val keyguardManager = getSystemService() + 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()?.reportShortcutUsed("toggle") + } + } + override fun onServiceStatusChanged(status: Status) { when (status) { Status.Started -> BoxService.stop()