Skip to content

Commit 8b87ee9

Browse files
committed
Fix anti uninstall universally (#155)
1 parent 7fdfed9 commit 8b87ee9

3 files changed

Lines changed: 12 additions & 22 deletions

File tree

app/src/main/java/dev/pranav/applock/features/applist/ui/MainViewModel.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
7575
_isLoading.value = true
7676
try {
7777
val apps = withContext(Dispatchers.IO) {
78-
appSearchManager.loadApps(true) // Always load system apps
78+
appSearchManager.loadApps(true)
7979
}
8080
_allApps.value = apps
8181
} catch (e: Exception) {
@@ -91,10 +91,6 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
9191
_lockedApps.value = appLockRepository.getLockedApps()
9292
}
9393

94-
fun onSearchQueryChanged(query: String) {
95-
_searchQuery.value = query
96-
}
97-
9894
fun lockApps(packageNames: List<String>) {
9995
appLockRepository.addMultipleLockedApps(packageNames.toSet())
10096
_lockedApps.value = appLockRepository.getLockedApps()
@@ -104,8 +100,4 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
104100
appLockRepository.removeLockedApp(packageName)
105101
_lockedApps.value = appLockRepository.getLockedApps()
106102
}
107-
108-
fun isAppLocked(packageName: String): Boolean {
109-
return _lockedApps.value.contains(packageName)
110-
}
111103
}

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ class AppLockAccessibilityService : AccessibilityService() {
153153
}
154154

155155
try {
156-
processPackageLocking(packageName, event)
156+
processPackageLocking(packageName)
157157
} catch (e: Exception) {
158158
logError("Error processing package locking for $packageName", e)
159159
}
@@ -189,6 +189,7 @@ class AppLockAccessibilityService : AccessibilityService() {
189189
}
190190
}
191191

192+
@SuppressLint("InlinedApi")
192193
private fun isRecentlyOpened(event: AccessibilityEvent): Boolean {
193194
return (event.packageName == getSystemDefaultLauncherPackageName() &&
194195
event.contentChangeTypes == AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_APPEARED) ||
@@ -201,6 +202,7 @@ class AppLockAccessibilityService : AccessibilityService() {
201202
event.text.toString().lowercase().contains("home screen")
202203
}
203204

205+
@SuppressLint("InlinedApi")
204206
private fun isHomeScreenTransition(event: AccessibilityEvent): Boolean {
205207
return event.contentChangeTypes == AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_DISAPPEARED &&
206208
event.packageName == getSystemDefaultLauncherPackageName()
@@ -246,13 +248,7 @@ class AppLockAccessibilityService : AccessibilityService() {
246248
return true
247249
}
248250

249-
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-
251+
private fun processPackageLocking(packageName: String) {
256252
val currentForegroundPackage = packageName
257253
val triggeringPackage = lastForegroundPackage
258254
lastForegroundPackage = currentForegroundPackage
@@ -412,6 +408,7 @@ class AppLockAccessibilityService : AccessibilityService() {
412408
return isAccessibilitySettings || isSubSettings || isAlertDialog
413409
}
414410

411+
@SuppressLint("InlinedApi")
415412
private fun blockDeactivationAttempt() {
416413
try {
417414
performGlobalAction(GLOBAL_ACTION_BACK)
@@ -423,13 +420,16 @@ class AppLockAccessibilityService : AccessibilityService() {
423420
}
424421

425422
private fun isDeviceAdminPage(event: AccessibilityEvent): Boolean {
426-
val hasDeviceAdminDescription = event.contentDescription?.contains("Device admin app") == true &&
423+
val hasDeviceAdminDescription = event.contentDescription?.toString()?.lowercase()
424+
?.contains("Device admin app") == true &&
427425
event.className == "android.widget.FrameLayout"
428-
val isAdminConfigClass = event.className in ADMIN_CONFIG_CLASSES
426+
val isAdminConfigClass =
427+
event.className!!.endsWith("DeviceAdminAdd") || event.className in ADMIN_CONFIG_CLASSES
429428

430429
return hasDeviceAdminDescription || isAdminConfigClass
431430
}
432431

432+
@SuppressLint("InlinedApi")
433433
private fun blockDeviceAdminDeactivation() {
434434
try {
435435
val dpm: DevicePolicyManager? = getSystemService()
@@ -572,7 +572,7 @@ class AppLockAccessibilityService : AccessibilityService() {
572572

573573
try {
574574
unregisterReceiver(screenStateReceiver)
575-
} catch (e: IllegalArgumentException) {
575+
} catch (_: IllegalArgumentException) {
576576
// Ignore if not registered
577577
Log.w(TAG, "Receiver not registered or already unregistered")
578578
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ object AppLockConstants {
3333
)
3434

3535
val ADMIN_CONFIG_CLASSES = setOf(
36-
"com.android.settings.deviceadmin.DeviceAdminAdd",
37-
"com.android.settings.applications.specialaccess.deviceadmin.DeviceAdminAdd",
3836
"com.android.settings.deviceadmin.DeviceAdminSettings"
3937
)
4038
// com.android.settings.spa.SpaActivity

0 commit comments

Comments
 (0)