prevent force stop

This commit is contained in:
minish 2025-09-22 01:13:51 -04:00
parent 81fad83f1e
commit 0b96b5bb52
Signed by: min
SSH Key Fingerprint: SHA256:mf+pUTmK92Y57BuCjlkBdd82LqztTfDCQIUp0fCKABc
3 changed files with 34 additions and 9 deletions

View File

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">

View File

@ -7,12 +7,15 @@ import android.os.Handler
import android.provider.Settings import android.provider.Settings
import android.util.Log import android.util.Log
import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityEvent
import androidx.collection.emptyLongSet
import java.util.Calendar import java.util.Calendar
class DigicaService : AccessibilityService() { class DigicaService : AccessibilityService() {
private lateinit var appLabel: String private lateinit var appLabel: String
private lateinit var serviceLabel: String private lateinit var serviceLabel: String
private var wasLastViewingAppInfo = false
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
@ -29,15 +32,31 @@ class DigicaService : AccessibilityService() {
if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
val pkgName = event.packageName.toString() val pkgName = event.packageName.toString()
val className = event.className;
// Is force stop dialog possibly open?
val possiblyForceStop = pkgName == "com.android.settings"
&& className == "androidx.compose.ui.window.DialogWrapper"
// Check if we are on App info page in settings
if (pkgName == "com.android.settings") {
if (className == "com.android.settings.spa.SpaActivity"
&& event.text.getOrNull(0) == "App info"
) wasLastViewingAppInfo = true;
// If we did not switch to what is maybe the force stop dialog,
// reset the flag
else if (!possiblyForceStop)
wasLastViewingAppInfo = false;
}
// Is user trying to uninstall this app? // Is user trying to uninstall this app?
val attemptingUninstall = pkgName == "com.google.android.packageinstaller" val attemptingUninstall = pkgName == "com.google.android.packageinstaller"
&& event.className == "android.app.AlertDialog" && className == "android.app.AlertDialog"
&& event.text.getOrNull(0) == appLabel && event.text.getOrNull(0) == appLabel
// Is user trying to disable the service? // Is user trying to disable the service?
val attemptingDisableService = pkgName == "com.android.settings" val attemptingDisableService = pkgName == "com.android.settings"
&& event.className == "android.app.AlertDialog" && className == "android.app.AlertDialog"
&& event.text.size == 3 && event.text.size == 3
&& event.text[0].contains(serviceLabel) && event.text[0].contains(serviceLabel)
@ -46,6 +65,9 @@ class DigicaService : AccessibilityService() {
|| pkgName == "com.aliucord" || pkgName == "com.aliucord"
|| pkgName == "app.revanced.android.youtube" || pkgName == "app.revanced.android.youtube"
// Is user trying to force stop?
val attemptingForceStop = possiblyForceStop && wasLastViewingAppInfo;
// Get time // Get time
val cal = Calendar.getInstance() val cal = Calendar.getInstance()
val day = cal.get(Calendar.DAY_OF_WEEK) val day = cal.get(Calendar.DAY_OF_WEEK)
@ -65,12 +87,16 @@ class DigicaService : AccessibilityService() {
// Is date set automatically? // Is date set automatically?
val autoDate = val autoDate =
Settings.Global.getInt(contentResolver, Settings.Global.AUTO_TIME) == 1 Settings.Global.getInt(contentResolver, Settings.Global.AUTO_TIME) == 1
&& Settings.Global.getInt(contentResolver, Settings.Global.AUTO_TIME_ZONE) == 1 && Settings.Global.getInt(
contentResolver,
Settings.Global.AUTO_TIME_ZONE
) == 1
if ( if (
(isLate || !autoDate) && (isLate || !autoDate) &&
(attemptingUninstall (attemptingUninstall
|| attemptingDisableService || attemptingDisableService
|| attemptingForceStop
|| usingApp) || usingApp)
) { ) {
// Stop them from doing that // Stop them from doing that

View File

@ -1,9 +1,9 @@
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description" android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask" android:accessibilityEventTypes="typeWindowStateChanged"
android:accessibilityFlags="flagDefault" android:accessibilityFlags="flagDefault"
android:accessibilityFeedbackType="feedbackGeneric" android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="0" android:notificationTimeout="0"
android:canRetrieveWindowContent="true" android:canRetrieveWindowContent="false"
android:settingsActivity="rip.min.digica.MainActivity" android:settingsActivity="rip.min.digica.MainActivity"
/> />