53 lines
1.6 KiB
Kotlin
53 lines
1.6 KiB
Kotlin
/*
|
|
* Copyright (c) 2026 QPQ IaaS AG <info@qpq.swiss>. All rights reserved.
|
|
* Project: Gajumaru Core Java Libraries <gajumaru.io>
|
|
*
|
|
* This program is dual-licensed:
|
|
* 1) Under the GNU Affero General Public License as published by the Free
|
|
* Software Foundation, either version 3 of the License, or (at your option)
|
|
* any later version (AGPL-3.0-or-later).
|
|
*
|
|
* 2) Under a commercial/proprietary license available directly from QPQ IaaS AG.
|
|
* If you wish to use this software outside the strict constraints of the
|
|
* AGPLv3 (e.g. within a closed-source or proprietary product), you must
|
|
* purchase a commercial license from QPQ IaaS AG.
|
|
*
|
|
* Authors:
|
|
* - Craig Everett <craigeverett@qpq.swiss>
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later OR LicenseRef-QPQ-Commercial
|
|
*/
|
|
|
|
package swiss.qpq.gajumobile.security
|
|
|
|
import kotlinx.coroutines.flow.MutableStateFlow
|
|
import kotlinx.coroutines.flow.asStateFlow
|
|
|
|
object SecurityManager {
|
|
private val _isLocked = MutableStateFlow(true)
|
|
val isLocked = _isLocked.asStateFlow()
|
|
|
|
private var lastBackgroundTime: Long = 0
|
|
private const val LOCK_TIMEOUT_MS = 2 * 60 * 1000L // 2 minutes
|
|
|
|
fun lock() {
|
|
_isLocked.value = true
|
|
}
|
|
|
|
fun unlock() {
|
|
_isLocked.value = false
|
|
}
|
|
|
|
fun onAppBackgrounded() {
|
|
lastBackgroundTime = System.currentTimeMillis()
|
|
}
|
|
|
|
fun onAppForegrounded() {
|
|
if (lastBackgroundTime != 0L && System.currentTimeMillis() - lastBackgroundTime > LOCK_TIMEOUT_MS) {
|
|
lock()
|
|
}
|
|
// Reset background time after checking
|
|
lastBackgroundTime = 0
|
|
}
|
|
}
|