From 242d03cea0b502729681ecdda6a92e4b0b81e5f7 Mon Sep 17 00:00:00 2001 From: Claude Sonnet 5 Date: Thu, 6 Aug 2026 20:59:03 +0600 Subject: [PATCH] Add in-app help and troubleshooting panel Collapsible panel on the settings screen covering what came up debugging this against a real target app: the KernelSU "Umount modules" / DenyList conflict that silently blocks Zygisk injection, checking a separate Zygisk implementation's own DenyList, needing a force-stop + relaunch (not a full reboot) after config changes, and using LSPosed's verbose logging to confirm injection actually happened. Co-Authored-By: Claude Sonnet 5 --- .../space/bdeshi/veil/SettingsActivity.kt | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/app/src/main/java/space/bdeshi/veil/SettingsActivity.kt b/app/src/main/java/space/bdeshi/veil/SettingsActivity.kt index 5e1de35..8e2236e 100644 --- a/app/src/main/java/space/bdeshi/veil/SettingsActivity.kt +++ b/app/src/main/java/space/bdeshi/veil/SettingsActivity.kt @@ -16,13 +16,39 @@ import android.widget.ScrollView import android.widget.TextView import java.io.File +private val HELP_TIPS: List> = listOf( + "Target app still won't launch?" to + "Check KernelSU Manager → the target app's profile → make sure \"Umount modules\" " + + "is OFF for it. When that's on, Zygisk (and therefore LSPosed) skips loading into that " + + "app's process entirely — no Veil setting can work around that, since the module " + + "never gets injected in the first place.", + "Using a separate Zygisk implementation?" to + "Standalone Zygisk modules (e.g. Zygisk Next / ReZygisk) can carry their own independent " + + "DenyList on top of KernelSU's. If an app is still being skipped after fixing the above, " + + "check there too.", + "Changed a setting but nothing happened?" to + "Force-stop and reopen the target app. Veil reads its config once when that app's " + + "process starts, so changes here (or to LSPosed scope) only take effect on the next " + + "cold start — a full device reboot usually isn't necessary.", + "How to confirm it's actually working" to + "Turn on verbose logging in LSPosed Manager, then check its Logs tab after relaunching " + + "the target app. No log lines from Veil there usually means it never got injected " + + "(see the DenyList tip above), not a bug in this module.", + "Forgot what an unconfigured app does?" to + "Any app not in the list above gets every feature applied by default — check here " + + "first if something's being hidden that you didn't expect.", +) + class SettingsActivity : Activity() { private lateinit var prefs: SharedPreferences private lateinit var appListContainer: LinearLayout private lateinit var hiddenPackagesContainer: LinearLayout + private lateinit var helpContainer: LinearLayout + private lateinit var helpToggle: Button private lateinit var packageInput: EditText private lateinit var hiddenPackageInput: EditText + private var helpVisible = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -39,6 +65,35 @@ class SettingsActivity : Activity() { textSize = 20f setTypeface(typeface, Typeface.BOLD) }) + + helpToggle = Button(this).apply { + text = "Help & troubleshooting ▾" + setOnClickListener { + helpVisible = !helpVisible + helpContainer.visibility = if (helpVisible) View.VISIBLE else View.GONE + text = if (helpVisible) "Help & troubleshooting ▴" else "Help & troubleshooting ▾" + } + } + root.addView(helpToggle) + + helpContainer = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + setPadding(0, dp(8), 0, dp(8)) + visibility = View.GONE + for ((title, body) in HELP_TIPS) { + addView(TextView(this@SettingsActivity).apply { + text = title + setTypeface(typeface, Typeface.BOLD) + setPadding(0, dp(8), 0, dp(2)) + }) + addView(TextView(this@SettingsActivity).apply { + text = body + textSize = 13f + }) + } + } + root.addView(helpContainer) + root.addView(TextView(this).apply { text = "Add the package name of an app you've scoped this module to in LSPosed, " + "then choose which checks to hide from it. Apps you haven't added here get " +