Skip to content

Fix quick settings tile collapsing the notification panel - #2387

Open
NKU100 wants to merge 2 commits into
chen08209:mainfrom
NKU100:fix/qs-tile-collapse
Open

NKU100 wants to merge 2 commits into
chen08209:mainfrom
NKU100:fix/qs-tile-collapse

Conversation

@NKU100

@NKU100 NKU100 commented Sep 2, 2026

Copy link
Copy Markdown

Fixes #2112

问题

在快捷设置里点击 FlClash 磁贴,通知面板会立刻收起。声明了 TOGGLEABLE_TILE=true 的磁贴本应像 WLAN/蓝牙那样原地切换。

原因

TileService.onClick() 无条件调用 startActivityAndCollapse() 启动透明的 QuickActionActivity,而这个 API 的语义就是"启动 Activity 并收起面板"。该 Activity 只是个壳:onCreate 调一次 ServiceState.handleToggleAction()finish()

启动前台服务并不需要它——系统在磁贴点击时会给 15 秒临时白名单。修复的 logcat:

Background started FGS: Allowed [callingPackage: com.follow.clash; ...
  tempAllowListReason:<tile onclick,reasonCode:(unknown:329),duration:15000,callingUid:10280>]

即 FGS 本来就不是靠那个 Activity 放行的。唯一真正需要 Activity 的场合是系统 VPN 授权对话框(VpnService.prepare() 非 null),故仅在该情况下保留原路径。

改动

  • TileService.onClick():仅当需要 VPN 授权时走 QuickActionActivity,否则直接 ServiceState.handleToggleAction()
  • 新增 ServiceState.toggleRequiresVpnConsent():停止路径永不需要 UI;启动路径只在"启用 VPN 且系统尚未授权"时需要

磁贴意图仍然只经 ServiceState 表达,ServiceController 仍是唯一的绑定/运行时所有者。

真机验证

Pixel 9 Pro / Android 17,debug 包,同一配置做 A/B:

场景 改前 改后
冷启动点磁贴 面板收起、回桌面 面板保持展开,磁贴激活,tun0 建立,Activity 启动 0 次
再点一次停止 面板收起 面板保持展开,磁贴回未激活,tun0 消失
应用在后台(Dart 路径) 面板收起 面板保持展开,VPN 正常启动,Activity 启动 0 次
appops ACTIVATE_VPN deny 走 Activity 仍走 Activity(回退分支生效)

flutter analyze --no-fatal-infos 无问题;build_tooldart analyze + dart test 全绿。

第二个 commit(与本修复无关,可单独 drop)

Fix Go core build on Windows hosts:Windows 主机上 make core-android 一直失败于 ProcessException: %1 不是有效的 Win32 应用程序。NDK 的 aarch64-linux-android21-clang 无扩展名文件是 bash 脚本,Windows 需要旁边的 .cmd 包装器。

setup.dart 只把它作为 CC 交给 go build,Go 的 exec.LookPath 会自动补 PATHEXT 所以没暴露;新 buildkit 在算指纹时用 Process.runSync(cc, ['--version']) 直接 spawn,Dart 不补 PATHEXT,于是在 go build 之前就硬失败。CI 的 platform: android 只在 ubuntu-latest 上构建,故无覆盖。

@NKU100
NKU100 force-pushed the fix/qs-tile-collapse branch from 104f8dd to 995bc71 Compare September 3, 2026 19:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] 关于磁贴开关导致控制中心闪退问题

1 participant