diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c85184f..81f0f61 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,6 +57,7 @@ android:name=".features.lockscreen.ui.PasswordOverlayActivity" android:excludeFromRecents="true" android:exported="false" + android:configChanges="orientation|screenSize|screenLayout|keyboardHidden" android:theme="@android:style/Theme.Material.NoActionBar.TranslucentDecor" /> 0) + if (AppLockManager.isAppTemporarilyUnlocked(packageName)) { + return + } } - + AppLockManager.clearTemporarilyUnlockedApp() - val unlockDurationMinutes = appLockRepository.getUnlockTimeDuration() val unlockTimestamp = AppLockManager.appUnlockTimes[packageName] ?: 0L Log.d( diff --git a/app/src/main/java/dev/pranav/applock/services/ExperimentalAppLockService.kt b/app/src/main/java/dev/pranav/applock/services/ExperimentalAppLockService.kt index 4a6be14..8ea664e 100644 --- a/app/src/main/java/dev/pranav/applock/services/ExperimentalAppLockService.kt +++ b/app/src/main/java/dev/pranav/applock/services/ExperimentalAppLockService.kt @@ -82,27 +82,31 @@ class ExperimentalAppLockService : Service() { timer?.cancel() timer = Timer() timer?.schedule(timerTask { - if (!appLockRepository.isProtectEnabled() || applicationContext.isDeviceLocked()) { - if (applicationContext.isDeviceLocked()) { - AppLockManager.appUnlockTimes.clear() + try { + if (!appLockRepository.isProtectEnabled() || applicationContext.isDeviceLocked()) { + if (applicationContext.isDeviceLocked()) { + AppLockManager.appUnlockTimes.clear() + } + return@timerTask } - return@timerTask - } - val foregroundApp = getCurrentForegroundAppPackage() ?: return@timerTask - val currentPackage = foregroundApp.first - val triggeringPackage = previousForegroundPackage - previousForegroundPackage = currentPackage + val foregroundApp = getCurrentForegroundAppPackage() ?: return@timerTask + val currentPackage = foregroundApp.first + val triggeringPackage = previousForegroundPackage + previousForegroundPackage = currentPackage - if (isExclusionApp(currentPackage)) return@timerTask + if (isExclusionApp(currentPackage)) return@timerTask - if (triggeringPackage in appLockRepository.getTriggerExcludedApps()) { - return@timerTask - } + if (triggeringPackage in appLockRepository.getTriggerExcludedApps()) { + return@timerTask + } - if (currentPackage == triggeringPackage) return@timerTask + if (currentPackage == triggeringPackage) return@timerTask - checkAndLockApp(currentPackage, triggeringPackage, System.currentTimeMillis()) + checkAndLockApp(currentPackage, triggeringPackage, System.currentTimeMillis()) + } catch (e: Exception) { + Log.e(TAG, "Error in monitoring timer task", e) + } }, 0, 250) } @@ -149,6 +153,12 @@ class ExperimentalAppLockService : Service() { if (packageName !in lockedApps) return val unlockDurationMinutes = appLockRepository.getUnlockTimeDuration() + + // If duration is 0 (lock immediately), clear any unlock state + if (unlockDurationMinutes == 0) { + AppLockManager.appUnlockTimes.remove(packageName) + } + val unlockTimestamp = AppLockManager.appUnlockTimes[packageName] ?: 0L Log.d( diff --git a/app/src/main/java/dev/pranav/applock/services/ShizukuAppLockService.kt b/app/src/main/java/dev/pranav/applock/services/ShizukuAppLockService.kt index 5553805..1c301fb 100644 --- a/app/src/main/java/dev/pranav/applock/services/ShizukuAppLockService.kt +++ b/app/src/main/java/dev/pranav/applock/services/ShizukuAppLockService.kt @@ -161,24 +161,28 @@ class ShizukuAppLockService : Service() { private fun setupShizukuActivityManager() { shizukuActivityManager = ShizukuActivityManager(this, appLockRepository) { packageName, _, timeMillis -> - val triggeringPackage = previousForegroundPackage - previousForegroundPackage = packageName - - if (AppLockManager.isLockScreenShown.get() || packageName == this.packageName) { - return@ShizukuActivityManager - } - - val triggerExclusions = appLockRepository.getTriggerExcludedApps() - if (triggeringPackage in triggerExclusions) { - Log.d( - TAG, - "Trigger app $triggeringPackage is excluded, skipping lock for $packageName" - ) - return@ShizukuActivityManager + try { + val triggeringPackage = previousForegroundPackage + previousForegroundPackage = packageName + + if (AppLockManager.isLockScreenShown.get() || packageName == this.packageName) { + return@ShizukuActivityManager + } + + val triggerExclusions = appLockRepository.getTriggerExcludedApps() + if (triggeringPackage in triggerExclusions) { + Log.d( + TAG, + "Trigger app $triggeringPackage is excluded, skipping lock for $packageName" + ) + return@ShizukuActivityManager + } + + Log.d(TAG, "Current package=$packageName, trigger=$triggeringPackage") + checkAndLockApp(packageName, triggeringPackage, timeMillis) + } catch (e: Exception) { + Log.e(TAG, "Error in ShizukuActivityManager callback", e) } - - Log.d(TAG, "Current package=$packageName, trigger=$triggeringPackage") - checkAndLockApp(packageName, triggeringPackage, timeMillis) } } @@ -188,6 +192,12 @@ class ShizukuAppLockService : Service() { if (packageName !in lockedApps) return val unlockDurationMinutes = appLockRepository.getUnlockTimeDuration() + + // If duration is 0 (lock immediately), clear any unlock state + if (unlockDurationMinutes == 0) { + AppLockManager.appUnlockTimes.remove(packageName) + } + val unlockTimestamp = AppLockManager.appUnlockTimes[packageName] ?: 0L Log.d(