mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-11 16:34:06 +01:00
The largest file in phone_focus_mode, and the last one blocking deploy.sh:
splitting it grows deploy.sh's two hardcoded lists, so those lists are only
final now. All 55 functions moved verbatim.
Three while-read loops were audited before extraction. Two call pm in their
bodies and moved untouched. The third, iter_whitelist_packages, is fed by a
pipe from printf and reads nothing from stdin -- already safe, and now said
so in ctl_usage.sh's header so the distinction is not lost by a later editor
who has only read the warning in daemon_apps.sh.
136 assertions and 22 mutations, all killed. Three survived the first run
and every one was a defect in MY OWN tests, not in the subject:
- cmd_status carries a THIRD copy of the Haversine, and I had asserted
only that it printed "some number". A wrong Earth radius sailed through.
Now the value is checked against a seeded fix ~4.3 km from home.
- the two whitelist filters were each tested with input the OTHER filter
also rejects, so either could be deleted with nothing failing. Fixed
with a punctuation-free undotted token (only the dot check rejects it)
and a dotted token carrying an illegal character (only the charset check
does), making each independently observable.
That last investigation turned up dead code: the `#*)` case arm is provably
equivalent, because `set -- $line` makes a comment's first token "#", which
the dot check already rejects. Removed rather than covered by a test that
cannot fail.
Coverage is NOT 100% and the real numbers are in the evidence: 41.79% to
92.98% across the eight, up from 5-22%. Unlike the daemon split, most of
what remains is genuinely untested -- the per-enforcer status blocks that
print mount state, APK hashes and offload settings, each needing its own
device fixture. The mutations prove the assertions that exist are load-
bearing; they do not prove those branches work.
jscpd checked in a clean worktree at 1.57%: eight files each carrying a
near-identical start/stop/status trio is exactly what that gate is for, so
the tests drive the trios through tables instead of repeating them.
Two drift hazards recorded, not fixed: ctl_is_curfew_now duplicates
daemon_location.sh's is_curfew_now (pinned by an agreement test across every
boundary minute), and cmd_status's awk is the third Haversine.
Over-cap count 17 -> 16. deploy.sh is the last one here.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
145 lines
5.7 KiB
Bash
Executable File
145 lines
5.7 KiB
Bash
Executable File
#!/system/bin/sh
|
|
# shellcheck shell=ash
|
|
# ctl_usage.sh — focus_ctl.sh's help text and the two commands that report on
|
|
# the whitelist: list-apps and whitelist.
|
|
#
|
|
# A flat sibling, not lib/: deploy.sh pushes phone scripts into one directory.
|
|
# Sourced by focus_ctl.sh, which owns the config.sh globals these read.
|
|
#
|
|
# NOTE on iter_whitelist_packages: its `while read` loop is fed by a pipe from
|
|
# printf, and nothing in the body reads stdin, so the pipe is safe here. That
|
|
# is NOT true of the pm-driven loops elsewhere in this repo -- see the warning
|
|
# in daemon_apps.sh before converting any redirect-driven loop to a pipe.
|
|
|
|
# Emit one valid package name per line from WHITELIST.
|
|
# This strips comments/blank lines from the multi-line quoted string and avoids
|
|
# treating heading text (e.g. "---") as package tokens.
|
|
iter_whitelist_packages() {
|
|
printf '%s\n' "$WHITELIST" | while IFS= read -r line; do
|
|
line="$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
|
|
# Blank lines only. A comment needs no case of its own: `set -- $line`
|
|
# below splits on whitespace, so a comment's first token is always "#",
|
|
# which the dot check then rejects. A dedicated `\#*)` arm here was
|
|
# provably equivalent -- a mutation removing it could not be
|
|
# distinguished by any input -- and equivalent code is a claim of a
|
|
# check that is not actually being made.
|
|
case "$line" in
|
|
"") continue ;;
|
|
esac
|
|
|
|
# Keep first token only; ignore any inline prose if present.
|
|
# Intentional word split to grab the first token. This runs under
|
|
# /system/bin/sh on the phone, where arrays do not exist, so an
|
|
# unquoted expansion is the POSIX way to do it.
|
|
# shellcheck disable=SC2086
|
|
set -- $line
|
|
pkg="$1"
|
|
|
|
# Package names are dot-delimited identifiers.
|
|
case "$pkg" in
|
|
*.*) ;;
|
|
*) continue ;;
|
|
esac
|
|
case "$pkg" in
|
|
*[!A-Za-z0-9._]*) continue ;;
|
|
esac
|
|
|
|
echo "$pkg"
|
|
done
|
|
}
|
|
|
|
usage() {
|
|
echo "Usage: focus_ctl.sh <command>"
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " start - Start the focus mode daemon"
|
|
echo " stop - Stop the daemon and re-enable all apps"
|
|
echo " status - Show current mode, location and disabled apps"
|
|
echo " enable - Force focus mode on (regardless of location)"
|
|
echo " disable - Force focus mode off (regardless of location)"
|
|
echo " log - Show daemon log"
|
|
echo " list-apps - List all non-whitelisted third-party apps"
|
|
echo " whitelist - List currently whitelisted packages"
|
|
echo " restart - Restart the daemon"
|
|
echo " hosts-status - Show hosts enforcer state (mount + hash)"
|
|
echo " hosts-start - Start the hosts enforcer daemon"
|
|
echo " hosts-stop - Stop the hosts enforcer daemon"
|
|
echo " hosts-log - Show hosts enforcer log"
|
|
echo " dns-status - Show DNS enforcer state (Private DNS + iptables)"
|
|
echo " dns-start - Start the DNS enforcer daemon"
|
|
echo " dns-stop - Stop the DNS enforcer daemon (removes iptables chain)"
|
|
echo " dns-log - Show DNS enforcer log"
|
|
echo " launcher-status - Show launcher enforcer state"
|
|
echo " launcher-start - Start the launcher enforcer daemon"
|
|
echo " launcher-stop - Stop the launcher enforcer daemon"
|
|
echo " launcher-log - Show launcher enforcer log"
|
|
echo " launcher-snapshot - Back up currently-installed launcher APK"
|
|
echo " workout-status - Show StrongLifts workout-detection state"
|
|
echo " workout-start - Start the workout detector daemon"
|
|
echo " workout-stop - Stop the workout detector daemon (sets flag=0)"
|
|
echo " workout-log - Show workout detector log"
|
|
echo " recheck - Nudge the daemon to perform a fresh location check now"
|
|
echo " curfew-status - Show night-curfew + enforcer state"
|
|
echo " curfew-start - Start the curfew enforcer (grayscale/DND/net)"
|
|
echo " curfew-stop - Stop it and restore daytime display/DND"
|
|
echo " curfew-log - Show curfew enforcer log"
|
|
echo " curfew-test-on - Force curfew ACTIVE now (daytime validation)"
|
|
echo " curfew-test-off - Clear the test force"
|
|
echo " curfew-demo-on - Start a demo: full curfew now, easy one-tap off"
|
|
echo " curfew-demo-off - Stop the demo"
|
|
echo " curfew-off - Escape hatch: suspend curfew now (2am opt-out)"
|
|
echo " curfew-on - Re-arm curfew (clear the override)"
|
|
echo " tether-status - Show hotspot/tethering-block state"
|
|
echo " tether-start - Start the tether enforcer (FORWARD block + offload off)"
|
|
echo " tether-stop - Stop it and restore tethering (teardown FORWARD chain)"
|
|
echo " tether-log - Show tether enforcer log"
|
|
echo " tether-test-on - Force the tether block ACTIVE now (daytime validation)"
|
|
echo " tether-test-off - Clear the tether force"
|
|
echo " notif-status - Show companion status-notification details"
|
|
echo ""
|
|
}
|
|
|
|
cmd_list_apps() {
|
|
echo "=== Third-party apps NOT in whitelist ==="
|
|
for pkg in $(pm list packages -3 2>/dev/null | sed 's/^package://'); do
|
|
whitelisted=0
|
|
for w in $(iter_whitelist_packages); do
|
|
w="$(echo "$w" | tr -d '[:space:]')"
|
|
[ -z "$w" ] && continue
|
|
[ "$pkg" = "$w" ] && {
|
|
whitelisted=1
|
|
break
|
|
}
|
|
done
|
|
if [ "$whitelisted" -eq 0 ]; then
|
|
# Check if currently disabled by focus mode
|
|
if grep -qF "$pkg" "$DISABLED_APPS_FILE" 2>/dev/null; then
|
|
echo " [BLOCKED] $pkg"
|
|
else
|
|
echo " [active] $pkg"
|
|
fi
|
|
fi
|
|
done
|
|
echo ""
|
|
echo "=== Whitelisted apps ==="
|
|
for w in $(iter_whitelist_packages); do
|
|
w="$(echo "$w" | tr -d '[:space:]')"
|
|
[ -z "$w" ] && continue
|
|
echo " [allowed] $w"
|
|
done
|
|
}
|
|
|
|
cmd_whitelist() {
|
|
echo "=== Whitelisted packages ==="
|
|
for w in $(iter_whitelist_packages); do
|
|
w="$(echo "$w" | tr -d '[:space:]')"
|
|
[ -z "$w" ] && continue
|
|
# Check if installed
|
|
if pm list packages "$w" 2>/dev/null | grep -qF "$w"; then
|
|
echo " [installed] $w"
|
|
else
|
|
echo " [not found] $w"
|
|
fi
|
|
done
|
|
}
|