List Cleaner 1.6.12
列表清理 / List Cleaner 1.6.12
版本码 / Version code: 37
中文
- 新增统一的系统应用 / 用户应用筛选:规则、排序和组件页都使用节省空间的“应用:全部 / 用户应用 / 系统应用”紧凑下拉,可与现有“查看”筛选组合使用。
- 应用类型在扫描时一次性识别并随候选数据保存,列表过滤不会反复查询 PackageManager;预装系统应用即使后续更新,仍按系统应用处理。
- 应用类型筛选只控制当前显示范围和全选/反选等批量操作目标,不参与现有排序,不改变已选/半选/未选状态,也不改变批量操作锁或 Root 组件状态。
- 组件页可分别查看和批量管理用户应用、系统应用;原有核心系统组件保护规则保持不变,受保护项目仍只展示、不可修改。
- 批量操作锁改为手势操作:应用或子项向右滑加锁、向左滑解锁;未锁定时不显示锁图标,锁定后才显示状态图标。整体锁保护整个应用,部分锁只保护对应子项;锁只跳过全选/反选等批量操作,仍可手动修改,不参与排序,也不改变已选/半选/未选或 Root 状态。“全部 → 已锁定”会汇总各分类中的锁定项目。
- 修复“全部”页对分类型锁的保护:在 PDF、图片等打开方式分类型中锁定的应用或子项,现在也会在“全部 → 已锁定”中汇总显示,并在“全部”执行全选/反选时继续跳过,不能再从聚合页绕过分类锁。
- 组件发现改为通用 Android 标准层优先:Widget 优先读取 AppWidgetManager Provider 注册表并以 Manifest 扫描补充;快捷方式创建入口合并 LauncherApps 配置 Activity 与旧 ACTION_CREATE_SHORTCUT;同一组件多来源自动去重。
- 新增组件发现来源诊断,可记录 PACKAGE_MANAGER、APP_WIDGET_MANAGER、LAUNCHER_APPS 等来源;安装、更新或卸载应用后会自动使候选缓存失效。
- 新增组件发现运行时能力握手与自动降级:若 APK 已更新但 system_server 仍运行旧 Hook,不强行调用新 Widget 注册表;未确认新协议时自动使用旧安全扫描。LauncherApps、AppWidgetManager 与 discovery Hook 遇到异常时均 fail-open,保留原始/旧扫描结果而不是让应用崩溃。
- 优化扫描与批量操作性能:锁状态改为内存缓存;应用名、应用状态和已配置候选元数据减少重复 PackageManager 查询;批量组件操作完成后按分类一次重新发现并批量回读状态。
- 修复 Telegram 发布时的版本说明竞态:现在按 Release 对应源码提交校验 RELEASE_NOTES,不再因为 main 已前进到更新说明而误判失败。
- 保留 Root 真禁用、LSPosed 发现过滤以及开机/解锁/应用更新后的自动校正机制。
本版本包含 v1.6.11 之后的全部改动;正式 Release 继续使用固定签名证书、R8 优化、zipalign、SHA-256 与 APK 身份/版本校验。
English
- Added unified user/system app filtering across Rules, Ordering, and Components with a space-saving “Apps: All / User apps / System apps” dropdown that can be combined with the existing View filter.
- App type is classified once during scanning and carried with candidate data, avoiding repeated PackageManager lookups while filtering. Updated preinstalled system apps remain classified as system apps.
- App-type filtering only controls the current view and the target set for Select All/Invert-style bulk actions. It never participates in ordering and does not change selected/partial/unselected state, bulk-operation locks, or Root component state.
- Components can now be viewed and batch-managed separately for user and system apps. Existing protection for core system components is unchanged; protected entries remain display-only.
- Bulk-operation locks now use gestures: swipe right on an app or child entry to lock and swipe left to unlock. Unlocked rows show no lock icon; a status icon appears only after locking. Full locks protect the whole app and partial locks protect selected children. Locks only skip Select All/Invert-style bulk actions, remain manually editable, never participate in ordering, and do not change selected/partial/unselected or Root state. Locked under All aggregates category locks.
- Fixed aggregate protection for typed Open-with locks: entries locked under PDF, Image, and other Open-with presets now appear in Locked under All and remain excluded from Select All/Invert on the All view, so category locks cannot be bypassed from the aggregate page.
- Component discovery now prefers generalized Android subsystem registries: widgets use AppWidgetManager providers with manifest fallback, while shortcut creation entries merge LauncherApps configuration activities with legacy ACTION_CREATE_SHORTCUT entries. Multiple discovery sources are deduplicated.
- Diagnostics now record component discovery sources such as PACKAGE_MANAGER, APP_WIDGET_MANAGER, and LAUNCHER_APPS. Installing, updating, or removing apps invalidates candidate caches automatically.
- Added a runtime component-discovery capability handshake and safe fallback. If the APK is newer while system_server still runs an older hook, List Cleaner avoids forcing the new widget-registry path and falls back to the older safe scan until the new protocol is confirmed. LauncherApps, AppWidgetManager, and discovery-hook failures are fail-open so the original/legacy result is preserved instead of crashing the app.
- Reduced repeated work during scanning and bulk actions: lock state is cached in memory, app labels/state/configured-candidate metadata reuse package lookups, and post-batch component refresh performs one discovery pass per affected category.
- Telegram publishing now validates release notes against the release commit instead of the moving main branch, avoiding false failures when newer documentation commits land before the channel post runs.
- Real Root disable, LSPosed discovery filtering, and automatic reconciliation after boot/unlock/app updates remain in place.
This release includes all changes after v1.6.11. Production releases continue to use the pinned signing certificate, R8 optimization, zipalign, SHA-256, and APK identity/version verification.
版本码:37
签名证书 SHA-256:674ebcf768b46b0277ca190149df4496ea9e41a3a0d3693239f9a7f4ad1039db
源码提交:3aebf75172b3a2a246e3162ce0d886a50af046f3
完整变更 / Full changelog
范围 / Range: v1.6.11...v1.6.12
- Decouple catalog scanning from Xposed runtime readiness (
29006df) - Clarify catalog availability while runtime update is pending (
813ab41) - 明确运行时待更新时本地列表仍可使用 (
326958f) - Add directional bulk lock setters (
35af488) - Expose directional bulk lock actions (
3862659) - Aggregate rule locks in the All view (
dc19f29) - Replace lock buttons with swipe gestures (
299ed3a) - Expose per-rule inherited lock state (
c18944b) - Use swipe locks and aggregate locks in Rules All view (
eb38e98) - Aggregate component locks in the All view (
433bc9f) - Use swipe gestures for priority locks (
31f0f3e) - Use swipe locks and aggregate locks in Components All view (
524b4e4) - Keep full-scope lock state while filtering Rules (
64bce10) - Explain swipe locking and aggregated Locked view (
2bd3617) - 说明滑动锁定与全部页汇总已锁定 (
5431ea2) - Explain swipe locking in ordering help (
d25c04a) - 说明排序页滑动锁定 (
79e4ed5) - Explain swipe locking in component help (
a335783) - 说明组件页滑动锁定和全部汇总 (
8664ca9) - Fix component lock helper import (
3f4c2a1) - Update lock gesture documentation (
c4f0264) - Update English lock gesture documentation (
acd3e02) - Update LSPosed Chinese lock gesture docs (
ff53735) - Update LSPosed English lock gesture docs (
9048de3) - Keep swipe lock gesture block explicit (
484a65e) - Migrate legacy All-page locks during swipe (
b54eaad) - Expose stored lock scopes for aggregate views (
0071a1f) - Aggregate typed rule locks in All view (
5e4988b) - Keep aggregate locks scoped to exact categories (
36012c2) - Avoid cross-type lock overmatching (
1b8b44c) - Use Android subsystem registries for component discovery (
6e6be06) - Cache bulk lock state in memory (
993fd44) - Invalidate candidate cache on package changes (
e7578c2) - Observe package removals for catalog refresh (
53bc56f) - Cache app labels during resolver discovery (
c412a5b) - Report component discovery sources in diagnostics (
a3e398e) - Batch package metadata for configured candidates (
86ef1c7) - Avoid hardcoded self package in component protection (
76eb675) - Batch post-mutation component refresh (
6c0ec00) - Document registry-based component discovery (
2357cd3) - Document registry-based component discovery in English (
a8376f7) - Describe generalized component discovery (
47849e7) - Describe generalized component discovery in English (
001a81e) - Explain generalized component discovery (
a6089e1) - 说明通用组件发现方式 (
cbbe340) - Skip redundant reconcile job on package removal (
369cb1f) - Fail open on widget discovery reflection errors (
4064804) - Track component discovery runtime capability (
143e50b) - Advertise safe component discovery protocol (
9869755) - Gate widget registry behind runtime capability (
1497ac1) - Report component discovery protocol (
79c3fe5) - Fail open on LauncherApps discovery errors (
af954af) - Expand component discovery and lock documentation (
ad43c06) - Expand component discovery and lock documentation in English (
8480456) - Document discovery fallback and lock semantics for LSPosed (
c147541) - Document discovery fallback and lock semantics for LSPosed in English (
8ead848) - Clarify bulk lock behavior in rule help (
c4cb7c2) - 补充规则页锁定机制说明 (
a55dd88) - Clarify swipe lock behavior in ordering help (
25b4996) - 补充排序页锁定机制说明 (
cd27d44) - Explain component discovery fallback in Root help (
5b4808e) - 补充组件发现降级说明 (
2c23053) - Expand component lock help (
233b46d) - 补充组件页锁定说明 (
5f4a95f) - Update LSPosed summary with swipe locks and safe discovery (
56e5f3b) - Update LSPosed English summary with swipe locks and safe discovery (
6a5bd1f) - Document unreleased discovery and swipe lock changes (
c31b181) - Keep release notes scoped to published 1.6.11 (
dc645a3) - Document discovery, fallback, and swipe locking changes (
2daf285) - Update LSPosed summary for swipe locks and discovery fallback (
18655a9) - Update English LSPosed summary for swipe locks and discovery fallback (
9d389b4) - Respect typed Open locks from the All view (
226f656) - Validate Telegram notes against the release commit (
fc8dea1) - Bump version to 1.6.12 (
4f7cdf3) - Prepare List Cleaner 1.6.12 release (
3aebf75)