List Cleaner 1.6.11
列表清理 / List Cleaner 1.6.11
版本码 / Version code: 36
中文
- 新增统一的系统应用 / 用户应用筛选:规则、排序和组件页都使用节省空间的“应用:全部 / 用户应用 / 系统应用”紧凑下拉,可与现有“查看”筛选组合使用。
- 应用类型在扫描时一次性识别并随候选数据保存,列表过滤不会反复查询 PackageManager;预装系统应用即使后续更新,仍按系统应用处理。
- 应用类型筛选只控制当前显示范围和全选/反选等批量操作目标,不参与现有排序,不改变已选/半选/未选状态,也不改变批量操作锁或 Root 组件状态。
- 组件页可分别查看和批量管理用户应用、系统应用;原有核心系统组件保护规则保持不变,受保护项目仍只展示、不可修改。
- 批量操作锁改为手势操作:应用或子项向右滑加锁、向左滑解锁;未锁定时不显示锁图标,锁定后才显示状态图标。整体锁保护整个应用,部分锁只保护对应子项;锁只跳过全选/反选等批量操作,仍可手动修改,不参与排序,也不改变已选/半选/未选或 Root 状态。“全部 → 已锁定”会汇总各分类中的锁定项目。
- 组件发现改为通用 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 查询;批量组件操作完成后按分类一次重新发现并批量回读状态。
- 保留 Root 真禁用、LSPosed 发现过滤以及开机/解锁/应用更新后的自动校正机制。
本版本包含 v1.6.10 之后的全部改动;正式 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.
- 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.
- 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.10. Production releases continue to use the pinned signing certificate, R8 optimization, zipalign, SHA-256, and APK identity/version verification.
版本码:36
签名证书 SHA-256:674ebcf768b46b0277ca190149df4496ea9e41a3a0d3693239f9a7f4ad1039db
源码提交:2daf2858c3550f959bbd0b8b656bc1b4c1b048f1
完整变更 / Full changelog
范围 / Range: v1.6.10...v1.6.11
- Add shared user and system app classification (
13c8629) - Store app type on resolver candidates (
7d171da) - Classify resolver candidates as user or system apps (
c7e33d8) - Classify Root components by owning app type (
2ab739e) - Carry app type through rule groups (
f6e482c) - Carry app type through priority groups (
28266b0) - Add compact user and system app filter controls (
680462a) - Filter rule apps by user or system type (
dd3bbe7) - Filter priority apps by user or system type (
f7684d0) - Add compact user and system filter to components (
e0299b6) - Add app type filter labels (
8930e3d) - Reuse shared app type classification (
04e46ab) - Add user and system app filter strings (
dbaaf93) - 添加系统和用户应用筛选文案 (
8df8092) - Add compact app filter UI strings (
85e755f) - 添加紧凑应用筛选文案 (
c110b17) - Test user and system app filtering (
ba28e55) - Document compact user and system app filtering (
f473cc8) - Document compact user and system app filtering in English (
e67e84b) - Document user and system app filters for LSPosed (
2faa03b) - Document user and system app filters for LSPosed in English (
28b5049) - Update LSPosed summary with app type filtering (
73f33a9) - Update LSPosed English summary with app type filtering (
f20b3f0) - Explain compact app type filtering in rule help (
f3741a8) - 说明紧凑系统和用户应用筛选 (
4c3318f) - Explain app type filtering in ordering help (
160e1a6) - 说明排序页系统和用户应用筛选 (
380ea37) - Explain app type filtering in component help (
47f949d) - 说明组件页系统和用户应用筛选 (
778a6ef) - Bump version to 1.6.11 (
7b9b49a) - Prepare List Cleaner 1.6.11 release (
d146060) - 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)