Skip to content

2.5

Choose a tag to compare

@oopnv70-lab oopnv70-lab released this 08 Nov 15:34

2.5 版更新

本次重点:解决「设置页那个红点关不掉」的问题。

问题定位
之前 2.4 挂的是 com.hihonor.ouc 里的 HnEventBadgeView.setBadgeVisible(boolean),
实测发现那个红点根本不在「软件更新」进程里,而在系统设置里:
页面 com.android.settings / Settings$HwSystemDashboardActivity
控件 id update_count,类 HwTextView,显示内容为 1
所以 2.4 对它是无效的 —— 两者不在同一个进程。

真正的链路(读代码逐环确认)
写入方:com.hihonor.ouc 的 r9.w1.V6(Context,int)
Settings.Secure.putInt(cr, "hn_new_system_update", n)
再发广播 com.hihonor.android.hnouc.HW_NEW_SYSTEM_UPDATE
读取方:com.android.settings 的 dashboard.r0.b()
Settings.Secure.getInt(cr, "hn_new_system_update", 0) → SystemUpdatePreference.Q(n)
→ n > 0 就把红点那个 FrameLayout 设为可见
也就是说:只要这个系统设置项不是 0,设置页的红点就会一直在。

本次改动

  1. 新增 hook r9.w1.V6(Context,int)
    屏蔽开关生效时,把要写入的「新版本条数」改成 0 再放行。
    不改写成「直接拦掉整个方法」,因为 V6 还负责「值变了才发广播」
    等副作用,拦掉会留下内部状态与系统设置项不一致。
    0 表示无新版本,这是原版自己的用法(安装完成后它自己也调 V6(ctx, 0) 清零)。
  2. 打开屏蔽开关时主动清一次
    走 root 执行 settings put secure hn_new_system_update 0。
    因为 hook 只在 OUC 下次写入时才生效,若系统设置项里已经留着旧值,
    用户会一直看到红点、误以为没生效。清不掉只在设置页提示,不算保存失败。
  3. 保留 2.4 的 HnEventBadgeView hook
    它负责「软件更新」自己界面内的角标,和设置页那个红点是两条不同链路,两者都要。

开关行为
红点跟随「屏蔽系统更新」这一个开关。关掉屏蔽、或打开「强制全量包」时,
hook 原样放行,红点恢复真实状态(这两项互相覆盖的关系沿用之前的实现)。

适用版本
com.hihonor.ouc 18.0.3.230(versionCode 180003230)
com.android.settings 14.0.0.210(versionCode 14000210)
其它版本未验证,混淆名与资源 id 都可能在系统更新后变化。

安装提醒
LSPosed 里必须手动勾选作用域「软件更新」,模块内 staticScope 声明为 true,
不勾选则 hook 完全不注入(表现为开关能读写但功能不生效)。
安装完成后建议重启一次「软件更新」,让新模块注入。

已知局限
只处理 Settings.Secure 的 hn_new_system_update 这一条链路。
若以后荣耀改从通知、快捷方式或其它字段驱动红点,需要重新定位。

构建信息
versionCode 7 / versionName 2.5
commit 16db7c52b54c8dcf8af2b37f6fc35e42ff84ceee