/* * Copyright (c) 2026 QPQ IaaS AG . All rights reserved. * Project: Gajumaru Core Java Libraries * * 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 * * 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 } }