Skip to content

Commit f22eb8a

Browse files
committed
improve logging and fix configuration change issue
1 parent e68cebd commit f22eb8a

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

app/src/main/java/dev/pranav/applock/services/AppLockAccessibilityService.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ class AppLockAccessibilityService : AccessibilityService() {
169169
recentsOpen = true
170170
}
171171

172-
isHomeScreenTransition(event) -> {
173-
Log.d(TAG, "Transitioning to home screen")
172+
isHomeScreenTransition(event) && recentsOpen -> {
173+
Log.d(TAG, "Transitioning to home screen from recents")
174174
recentsOpen = false
175175
clearTemporarilyUnlockedAppIfNeeded()
176176
}
@@ -247,6 +247,12 @@ class AppLockAccessibilityService : AccessibilityService() {
247247
}
248248

249249
private fun processPackageLocking(packageName: String, event: AccessibilityEvent) {
250+
// Check for grace period first
251+
if (AppLockManager.checkAndRestoreRecentlyLeftApp(packageName)) {
252+
// If restored, we don't need to do anything else, it's efficiently unlocked
253+
// But we continue to letting the logic flow, checkAndLockApp will handle "temporarilyUnlocked" check
254+
}
255+
250256
val currentForegroundPackage = packageName
251257
val triggeringPackage = lastForegroundPackage
252258
lastForegroundPackage = currentForegroundPackage
@@ -264,8 +270,9 @@ class AppLockAccessibilityService : AccessibilityService() {
264270
) {
265271
Log.d(
266272
TAG,
267-
"Switched from unlocked app $unlockedApp to $currentForegroundPackage. clearing temporary unlock."
273+
"Switched from unlocked app $unlockedApp to $currentForegroundPackage. Setting grace period tracking."
268274
)
275+
AppLockManager.setRecentlyLeftApp(unlockedApp)
269276
AppLockManager.clearTemporarilyUnlockedApp()
270277
}
271278

app/src/main/java/dev/pranav/applock/services/AppLockManager.kt

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ object AppLockConstants {
2525
"com.android.intentresolver",
2626
"com.google.android.permissioncontroller",
2727
"android.uid.system:1000",
28-
"com.google.android.googlequicksearchbox"
28+
"com.google.android.googlequicksearchbox",
29+
"android",
30+
"com.google.android.gms",
31+
"com.google.android.webview"
2932
)
3033

3134
val ADMIN_CONFIG_CLASSES = setOf(
@@ -66,6 +69,36 @@ object AppLockManager {
6669
val isLockScreenShown = AtomicBoolean(false)
6770
var currentBiometricState: Any? = null
6871

72+
// Grace period tracking
73+
private var recentlyLeftApp: String = ""
74+
private var recentlyLeftTime: Long = 0L
75+
private const val GRACE_PERIOD_MS = 300L
76+
77+
fun setRecentlyLeftApp(packageName: String) {
78+
recentlyLeftApp = packageName
79+
recentlyLeftTime = System.currentTimeMillis()
80+
Log.d(TAG, "Left app $packageName at $recentlyLeftTime")
81+
}
82+
83+
fun checkAndRestoreRecentlyLeftApp(packageName: String): Boolean {
84+
// If we are returning to the same app we just left within the grace period
85+
if (packageName == recentlyLeftApp && packageName.isNotEmpty()) {
86+
val elapsed = System.currentTimeMillis() - recentlyLeftTime
87+
if (elapsed <= GRACE_PERIOD_MS) {
88+
Log.d(TAG, "Restoring unlock state for $packageName (elapsed: ${elapsed}ms)")
89+
temporarilyUnlockedApp = packageName
90+
// Clear the tracking so it doesn't trigger again inappropriately
91+
recentlyLeftApp = ""
92+
recentlyLeftTime = 0L
93+
return true
94+
} else {
95+
Log.d(TAG, "Grace period expired for $packageName (elapsed: ${elapsed}ms)")
96+
recentlyLeftApp = "" // Expired
97+
}
98+
}
99+
return false
100+
}
101+
69102
private val serviceRestartAttempts = ConcurrentHashMap<String, Int>()
70103
private val lastRestartTime = ConcurrentHashMap<String, Long>()
71104

0 commit comments

Comments
 (0)