Compare commits

...

578 Commits

Author SHA1 Message Date
cfde1e1e62 重构数据解析,ui组件刷新逻辑 2025-06-13 16:15:25 +08:00
0f382baec1 Merge branch 'feat/GHZSCY-8049' into 'dev'
feat: 游戏详情UI优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-8049

See merge request halo/android/assistant-android!2207
2025-05-27 14:39:06 +08:00
62f80bbfdd feat: 游戏详情UI优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-8049 2025-05-27 14:39:06 +08:00
63be9ac221 chore: 版本更新至 5.43.0 2025-05-27 14:04:44 +08:00
ade32ef92d Merge branch 'feat/GHZSCY-7987' into 'dev'
合并【光环助手】畅玩游戏管理游戏显示问题

See merge request halo/android/assistant-android!2206
2025-05-27 11:19:57 +08:00
58702b46aa Revert "ci: 测试 https://jira.shanqu.cc/browse/GHZSCY-7987"
This reverts commit 75ca0a8379.
2025-05-27 11:15:55 +08:00
e6d6fc5309 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/minigame/wechat/WGameSubjectCPMRemoteDataSource.kt
#	dependencies.gradle
2025-05-27 09:29:44 +08:00
1460348582 Merge branch 'feat/GHZSCY-7972' into 'dev'
feat: 【畅玩助手】文件夹权限申请 https://jira.shanqu.cc/browse/GHZSCY-7972

See merge request halo/android/assistant-android!2205
2025-05-26 11:31:40 +08:00
c49b3c5efe feat: 【畅玩助手】文件夹权限申请 https://jira.shanqu.cc/browse/GHZSCY-7972 2025-05-26 11:27:05 +08:00
4f7c468cde fix: 畅玩加载中没有显示正在下载的游戏 https://jira.shanqu.cc/browse/GHZSCY-7987 2025-05-23 17:53:59 +08:00
df93bdda2e Merge branch 'dev' into feat/GHZSCY-7987 2025-05-23 15:54:42 +08:00
086796915b Merge branch 'feat/GHZSCY-7955' into 'dev'
feat: CPM微信小游戏推荐优化 https://jira.shanqu.cc/browse/GHZSCY-7954

See merge request halo/android/assistant-android!2204
2025-05-22 16:40:44 +08:00
f99e5f403d feat: CPM微信小游戏推荐优化 https://jira.shanqu.cc/browse/GHZSCY-7954 2025-05-22 16:25:40 +08:00
9785f4fa13 Merge branch 'feat/GHZSCY-8006' into 'dev'
fix: 广告系统-新增广告游戏的过滤条件 https://jira.shanqu.cc/browse/GHZSCY-8006

See merge request halo/android/assistant-android!2203
2025-05-20 17:17:22 +08:00
6cdff338ed fix: 广告系统-新增广告游戏的过滤条件 https://jira.shanqu.cc/browse/GHZSCY-8006 2025-05-20 17:16:45 +08:00
761093a768 chore: 版本更新至 5.41.4 2025-05-20 11:05:49 +08:00
e5a0db4513 Merge branch 'hotfix/v5.41.3-1173/dsp_crash' into 'release'
fix: 修复 DetailViewHolder 触发的弹窗在模拟器上的闪退问题

See merge request halo/android/assistant-android!2202
2025-05-20 10:05:26 +08:00
a3df62bba8 fix: 修复 DetailViewHolder 触发的弹窗在模拟器上的闪退问题 2025-05-20 09:56:20 +08:00
ee773f7e31 Merge branch 'hotfix/v5.41.3-1173/huawei-crash' into 'release'
fix: 补充屏蔽华为 Android 10 设备上的热启动广告显示

See merge request halo/android/assistant-android!2201
2025-05-19 16:00:29 +08:00
227a5e677f fix: 补充屏蔽华为 Android 10 设备上的热启动广告显示 2025-05-19 15:56:04 +08:00
c41939cd79 Merge branch 'feat/GHZSCY-7999' into 'dev'
feat: 专题合集新增自定义设置-0516运营验收优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-7999

See merge request halo/android/assistant-android!2200
2025-05-19 14:10:04 +08:00
125ef60176 feat: 专题合集新增自定义设置-0516运营验收优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-7999 2025-05-19 14:10:04 +08:00
e2bf2773e4 Merge branch 'fix/GHZSCY-8001-pr' into 'dev'
fix:分类新增搜索功能-0516运营验收-客户端 https://jira.shanqu.cc/browse/GHZSCY-8001

See merge request halo/android/assistant-android!2199
2025-05-19 11:09:28 +08:00
e3596c758e fix:分类新增搜索功能-0516运营验收-客户端 https://jira.shanqu.cc/browse/GHZSCY-8001 2025-05-19 11:00:38 +08:00
75ca0a8379 ci: 测试 https://jira.shanqu.cc/browse/GHZSCY-7987 2025-05-19 10:49:17 +08:00
ef7d2860e5 feat: 修复页面onStart没有刷新数据 https://jira.shanqu.cc/browse/GHZSCY-7987 2025-05-19 10:48:04 +08:00
bfc8981253 chore: 版本更新至 5.41.3 2025-05-19 10:42:28 +08:00
12d6d338aa Merge branch 'hotfix/v5.41.2-1172/huawei-crash' into 'release'
fix: 屏蔽华为系 Android 10 设备的穿山甲广告,避免启动闪退

See merge request halo/android/assistant-android!2198
2025-05-19 10:39:51 +08:00
4da3c3aec1 fix: 屏蔽华为系 Android 10 设备的穿山甲广告,避免启动闪退 2025-05-19 10:37:59 +08:00
e608a51cce feat: 修复畅玩游戏管理页面编辑状态点击删除按钮,取消操作之后导致已下载的游戏变为暂停https://jira.shanqu.cc/browse/GHZSCY-7987 2025-05-16 18:19:53 +08:00
4f2aea7fcf Merge branch 'fix/GHZSCY-7989-pr' into 'dev'
fix:【光环助手】页面刷新问题 https://jira.shanqu.cc/browse/GHZSCY-7989

See merge request halo/android/assistant-android!2197
2025-05-16 15:47:30 +08:00
3abcad5d5d fix:【光环助手】页面刷新问题 https://jira.shanqu.cc/browse/GHZSCY-7989 2025-05-16 15:29:59 +08:00
1cca908327 Merge branch 'feat/GHZSCY-7058-rebase' into 'dev'
feat: 广告系统 https://jira.shanqu.cc/browse/GHZSCY-7058

See merge request halo/android/assistant-android!2103
2025-05-16 13:52:37 +08:00
63c0b859f4 feat: 广告系统 https://jira.shanqu.cc/browse/GHZSCY-7058 2025-05-16 13:52:37 +08:00
5deb741942 Merge branch 'feat/GHZSCY-7642' into 'dev'
畅玩汉化翻译功能

See merge request halo/android/assistant-android!2196
2025-05-15 16:55:35 +08:00
e855f59ae4 Merge branch 'feat/GHZSCY-7642' of git.shanqu.cc:halo/android/assistant-android into feat/GHZSCY-7642 2025-05-15 16:50:08 +08:00
9ea4b1367e Revert .gitlab-ci.yml 2025-05-15 16:49:29 +08:00
e44c11349b feat: 替换正式环境2.0.0插件url 2025-05-15 16:49:29 +08:00
a0ea9f9f44 feat: https://jira.shanqu.cc/browse/GHZSCY-7638 替换新版插件 2025-05-15 16:49:29 +08:00
082d3297f7 feat: 修复用户没有下载新的畅玩游戏,插件更新没有触发的问题。 https://jira.shanqu.cc/browse/GHZSCY-7642 2025-05-15 16:49:29 +08:00
f81055ae7f feat: 汉化打包测试 https://jira.shanqu.cc/browse/GHZSCY-7642 2025-05-15 16:49:29 +08:00
8e3de4e441 feat: 优化汉化UI 2025-05-15 16:49:29 +08:00
7cf66c4362 feat: 畅玩汉化功能 2025-05-15 16:49:29 +08:00
d514e4ce1b Merge branch 'fix/GHZSCY-7994-pr' into 'dev'
fix:【光环助手】开屏自有广告显示问题 https://jira.shanqu.cc/browse/GHZSCY-7994

See merge request halo/android/assistant-android!2194
2025-05-15 16:44:58 +08:00
9d0f75a882 fix:【光环助手】开屏自有广告显示问题 https://jira.shanqu.cc/browse/GHZSCY-7994 2025-05-15 16:44:58 +08:00
6c8c2f2340 Revert .gitlab-ci.yml 2025-05-15 16:43:15 +08:00
8d7afea0f6 feat: 替换正式环境2.0.0插件url 2025-05-15 16:40:36 +08:00
aff6cbccdc Merge branch 'feat/GHZSCY-7948' into 'dev'
xpak兼容更多的apks安装

See merge request halo/android/assistant-android!2193
2025-05-15 16:31:15 +08:00
b19b6960ac xpak兼容更多的apks安装 2025-05-15 16:31:15 +08:00
c60b317125 Merge branch 'feat/GHZSCY-7492' into 'dev'
feat: 游戏礼包新增领取条件 https://jira.shanqu.cc/browse/GHZSCY-7492

See merge request halo/android/assistant-android!2192
2025-05-15 15:32:39 +08:00
4fbb9d0c88 feat: 游戏礼包新增领取条件 https://jira.shanqu.cc/browse/GHZSCY-7492 2025-05-15 15:12:20 +08:00
f039d71562 Merge branch 'feat/install-external' into 'dev'
feat: 从SD卡兼容所有文件管理权限

See merge request halo/android/assistant-android!2191
2025-05-15 14:52:45 +08:00
1d74bfc7a8 feat: 从SD卡兼容所有文件管理权限 2025-05-15 14:52:27 +08:00
3d118544bb Merge branch 'feat/GHZSCY-7890' into 'dev'
feat: 游戏详情-内容卡片 红点显示优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7890

See merge request halo/android/assistant-android!2190
2025-05-15 14:47:37 +08:00
730611362f feat: 游戏详情-内容卡片 红点显示优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7890 2025-05-15 14:47:37 +08:00
9825bb7d3f Merge branch 'feat/GHZSCY-7903' into 'dev'
feat: 关于插件说明的优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7903

See merge request halo/android/assistant-android!2189
2025-05-15 14:47:06 +08:00
7dfb69fd34 feat: 关于插件说明的优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7903 2025-05-15 14:47:06 +08:00
fd5a3104c4 Merge branch 'fix/game_detail_crash' into 'release'
fix: 修复游戏详情页滚动到顶部的偶发闪退...

See merge request halo/android/assistant-android!2188
2025-05-14 14:20:11 +08:00
486dd57a24 fix: 修复游戏详情页滚动到顶部的偶发闪退 https://sentry.shanqu.cc/organizations/lightgame/issues/444460/?project=22&referrer=issue-stream&statsPeriod=14d 2025-05-14 14:07:36 +08:00
058b51f050 chore: 版本更新至 5.41.2 2025-05-14 13:57:16 +08:00
149a49fdd8 Merge branch 'cherry-pick-380939b8' into 'release'
Merge branch 'fix/GHZSCY-7971-pr' into 'dev'

See merge request halo/android/assistant-android!2187
2025-05-14 13:50:11 +08:00
4314797166 Merge branch 'fix/GHZSCY-7971-pr' into 'dev' 2025-05-14 13:50:11 +08:00
380939b8c4 Merge branch 'fix/GHZSCY-7971-pr' into 'dev'
fix:【光环助手】组件显示问题 https://jira.shanqu.cc/browse/GHZSCY-7971

See merge request halo/android/assistant-android!2185
2025-05-14 13:49:24 +08:00
83d43f32bf fix:【光环助手】组件显示问题 https://jira.shanqu.cc/browse/GHZSCY-7971 2025-05-14 13:49:23 +08:00
184e0731fb Merge branch 'fix/GHZSCY-7976' into 'dev'
fix: 游戏弹窗显示优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-7976

See merge request halo/android/assistant-android!2186
2025-05-14 13:48:57 +08:00
085356d85e fix: 游戏弹窗显示优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-7976 2025-05-14 13:48:57 +08:00
44138225fc Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	dependencies.gradle
2025-05-14 09:25:17 +08:00
9c86504c2f Merge branch 'hotfix/v5.41.0-1070/search_culprit' into 'release'
Hotfix/v5.41.0 1070/search culprit

See merge request halo/android/assistant-android!2184
2025-05-14 09:24:25 +08:00
e4cf36d1b8 fix: 修复部分设备弹起 DSP 游戏详情弹窗的时候的问题 2025-05-13 16:35:34 +08:00
676e7a4d94 fix: 修复搜索页配置的搜索专题无法正常显示的问题 2025-05-13 16:35:08 +08:00
09e439f143 feat: https://jira.shanqu.cc/browse/GHZSCY-7638 替换新版插件 2025-05-13 15:20:46 +08:00
c23a78a546 feat: https://jira.shanqu.cc/browse/GHZSCY-7638 https://jira.shanqu.cc/browse/GHZSCY-7879 https://jira.shanqu.cc/browse/GHZSCY-7972 打包测试 2025-05-13 14:45:21 +08:00
b3ee742faf chore: 版本更新至 5.41.1 2025-05-09 18:38:25 +08:00
ead61c1916 Merge branch 'hotfix/v5.41.0-1070/crash' into 'release'
hotfix: 修复搜索页下载闪退问题

See merge request halo/android/assistant-android!2183
2025-05-09 18:37:42 +08:00
9bb20ca41f hotfix: 修复搜索页下载闪退问题 2025-05-09 18:36:59 +08:00
74942be890 Merge branch 'fix/issues-445867' into 'release'
fix:https://sentry.shanqu.cc/organizations/lightgame/issues/445867/?project=22...

See merge request halo/android/assistant-android!2182
2025-05-09 11:16:32 +08:00
391eb64df1 fix:https://sentry.shanqu.cc/organizations/lightgame/issues/445867/?project=22... 2025-05-09 11:16:32 +08:00
03ba6f5614 Merge branch 'fix/GHZSCY-7961-pr' into 'release'
fix:【光环助手】V5.41.0版本出包-05/08测试-客户端 https://jira.shanqu.cc/browse/GHZSCY-7961

See merge request halo/android/assistant-android!2181
2025-05-09 10:37:10 +08:00
1552a3e95d fix:【光环助手】V5.41.0版本出包-05/08测试-客户端 https://jira.shanqu.cc/browse/GHZSCY-7961 2025-05-09 10:34:57 +08:00
9b7526773c Merge branch 'fix/game_detail_video' into 'release'
fix: 修复游戏详情页视频主动播放时退出页面没有停止播放的问题

See merge request halo/android/assistant-android!2179
2025-05-08 18:20:51 +08:00
764402b701 fix: 修复游戏详情页视频主动播放时退出页面没有停止播放的问题 2025-05-08 18:16:30 +08:00
dc7ebbc308 Merge branch 'fix/GHZSCY-7951-mr' into 'release'
fix: 评论区版本号显示优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-7951

See merge request halo/android/assistant-android!2178
2025-05-08 16:49:09 +08:00
065ebe32ed fix: 评论区版本号显示优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-7951 2025-05-08 16:49:09 +08:00
c284fcd531 Merge branch 'fix/game_detail_video' into 'release'
fix: 修复游戏详情页视频主动播放时退出页面没有停止播放的问题

See merge request halo/android/assistant-android!2177
2025-05-08 16:37:29 +08:00
101aa11855 fix: 修复游戏详情页视频主动播放时退出页面没有停止播放的问题 2025-05-08 16:26:55 +08:00
9158d951f4 Merge branch 'revert-d3c9cb77' into 'dev'
Revert "Merge branch 'revert-26e272ed' into 'dev'"

See merge request halo/android/assistant-android!2176
2025-05-08 11:11:25 +08:00
1c7f5c2d26 Revert "Merge branch 'revert-26e272ed' into 'dev'" 2025-05-08 11:11:25 +08:00
bc630f63d4 Merge branch 'revert-21a4ff55' into 'dev'
Revert "Merge branch 'revert-GHZSCY-7496' into 'dev'"

See merge request halo/android/assistant-android!2175
2025-05-08 11:04:32 +08:00
1a2cfb79c2 Revert "Merge branch 'revert-GHZSCY-7496' into 'dev'"
This reverts merge request !2174
2025-05-08 10:57:31 +08:00
7b708ebd8d chore: 版本更新至 5.42.0 2025-05-08 10:50:58 +08:00
21a4ff5560 Merge branch 'revert-GHZSCY-7496' into 'dev'
Revert "feat: 专题合集新增自定义设置—客户端 https://jira.shanqu.cc/browse/GHZSCY-7496"

See merge request halo/android/assistant-android!2174
2025-05-08 10:40:50 +08:00
034b7f07ee Revert "feat: 专题合集新增自定义设置—客户端 https://jira.shanqu.cc/browse/GHZSCY-7496"
This reverts commit d874b91b
2025-05-08 10:32:37 +08:00
d3c9cb7776 Merge branch 'revert-26e272ed' into 'dev'
Revert "Merge branch 'feat/GHZSCY-7512-pr' into 'dev'"

See merge request halo/android/assistant-android!2173
2025-05-08 09:21:42 +08:00
8593f5cd0d Revert "Merge branch 'feat/GHZSCY-7512-pr' into 'dev'"
This reverts merge request !2172
2025-05-08 09:21:23 +08:00
26e272edd0 Merge branch 'feat/GHZSCY-7512-pr' into 'dev'
feat:分类新增搜索功能—客户端 https://jira.shanqu.cc/browse/GHZSCY-7512

See merge request halo/android/assistant-android!2172
2025-05-07 15:16:09 +08:00
cc0683c3c7 feat:分类新增搜索功能—客户端 https://jira.shanqu.cc/browse/GHZSCY-7512 2025-05-07 15:09:35 +08:00
7d9f36d587 Merge branch 'feat/GHZSCY-7848-pr' into 'dev'
feat:奇游加速器第三期迭代—客户端 https://jira.shanqu.cc/browse/GHZSCY-7864

See merge request halo/android/assistant-android!2168
2025-05-07 10:33:50 +08:00
eac6bc2c7f feat:奇游加速器第三期迭代—客户端 https://jira.shanqu.cc/browse/GHZSCY-7864 2025-05-07 10:33:50 +08:00
1fd0d7f215 Merge branch 'feat/GHZSCY-7889' into 'dev'
feat:神策埋点优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7889

See merge request halo/android/assistant-android!2169
2025-05-07 09:30:12 +08:00
cd5748fa1c feat:神策埋点优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7889 2025-05-07 09:30:12 +08:00
3cc4a2b9bc Merge branch 'fix/GHZSCY-7907' into 'dev'
feat:【光环助手】自定义页面-游戏组件显示问题 https://jira.shanqu.cc/browse/GHZSCY-7907

See merge request halo/android/assistant-android!2170
2025-05-07 09:29:46 +08:00
55056b772e feat:【光环助手】自定义页面-游戏组件显示问题 https://jira.shanqu.cc/browse/GHZSCY-7907 2025-05-07 09:29:46 +08:00
a11acbb8c4 Merge branch 'fix/dsp_install_error' into 'dev'
feat: 广告系统-APP启动埋点事件优化 https://jira.shanqu.cc/browse/GHZSCY-7937

See merge request halo/android/assistant-android!2166
2025-04-30 15:24:51 +08:00
24d59aaa85 fix: 广告系统-APP启动埋点事件优化 https://jira.shanqu.cc/browse/GHZSCY-7937 2025-04-30 14:46:03 +08:00
f57a95b82c feat: 广告系统-APP启动埋点事件优化 https://jira.shanqu.cc/browse/GHZSCY-7937 2025-04-30 13:55:09 +08:00
3a78b307d3 Merge branch 'feat/GHZSCY-7820-continued' into 'dev'
feat:新增dsp广告合作模式—客户端 https://jira.shanqu.cc/browse/GHZSCY-7820

See merge request halo/android/assistant-android!2157
2025-04-30 09:59:24 +08:00
c4dccb7aa7 feat:新增dsp广告合作模式—客户端 https://jira.shanqu.cc/browse/GHZSCY-7820 2025-04-30 09:59:24 +08:00
7612c6afd7 Merge branch 'feat/GHZSCY-7927' into 'dev'
feat: GameDetailModuleClick埋点上报优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-7927

See merge request halo/android/assistant-android!2165
2025-04-28 15:27:29 +08:00
2c781bcbf1 feat: GameDetailModuleClick埋点上报优化-客户端 https://jira.shanqu.cc/browse/GHZSCY-7927 2025-04-28 15:27:29 +08:00
7ab09e42ca Merge branch 'feat/GHZSCY-7869' into 'dev'
feat: 游戏详情组件UI调整—客户端 https://jira.shanqu.cc/browse/GHZSCY-7869

See merge request halo/android/assistant-android!2164
2025-04-27 17:24:27 +08:00
292c96586a feat: 游戏详情组件UI调整—客户端 https://jira.shanqu.cc/browse/GHZSCY-7869 2025-04-27 17:24:27 +08:00
7681b63e27 Merge branch 'fix/GHZSCY-7922' into 'dev'
fix:【光环助手】视频播放问题 https://jira.shanqu.cc/browse/GHZSCY-7922

See merge request halo/android/assistant-android!2163
2025-04-27 15:18:28 +08:00
95966be1a1 fix:【光环助手】视频播放问题 https://jira.shanqu.cc/browse/GHZSCY-7922 2025-04-27 15:18:28 +08:00
9eab3361a0 Merge branch 'fix/iothread-livedata' into 'dev'
fix: 在 io 线程设置 livedata value 导致的问题

See merge request halo/android/assistant-android!2162
2025-04-27 14:30:14 +08:00
d0d5ccdc45 fix: 在 io 线程设置 livedata value 导致的问题 2025-04-27 14:29:09 +08:00
c61d0bc9cc Revert "feat: 重新启用在华为 Android 10 上的开屏广告,测试闪退情况"
This reverts commit aed8e50db3.
2025-04-27 11:05:24 +08:00
2da07354e7 Merge branch 'feat/GHZSCY-7496' into 'dev'
feat: 专题合集新增自定义设置—客户端 https://jira.shanqu.cc/browse/GHZSCY-7496

See merge request halo/android/assistant-android!2161
2025-04-27 11:03:31 +08:00
d874b91b7c feat: 专题合集新增自定义设置—客户端 https://jira.shanqu.cc/browse/GHZSCY-7496 2025-04-27 11:03:31 +08:00
62e62d3a93 chore: 版本更新至 5.41.0 2025-04-27 10:03:20 +08:00
2e806d77e1 Merge branch 'fix/GHZSCY-7916' into 'dev'
Resolve GHZSCY-7916 "Fix/"

Closes GHZSCY-7916

See merge request halo/android/assistant-android!2160
2025-04-25 16:33:50 +08:00
30da988ebc fix: 助手更新显示问题 https://jira.shanqu.cc/browse/GHZSCY-7916 2025-04-25 16:27:12 +08:00
fd61e83f8e Revert "Revert "fix: "点"符号设置颜色""
This reverts commit e5161ae350.
2025-04-24 15:44:34 +08:00
0712960a30 Revert "Revert "feat: 【光环助手】实名认证特殊字符输入优化 https://jira.shanqu.cc/browse/GHZSCY-7702""
This reverts commit b1b231a309.
2025-04-24 15:44:34 +08:00
5dfdaa0353 Merge remote-tracking branch 'origin/release' into dev 2025-04-24 15:16:28 +08:00
fa4dce66a6 Merge branch 'feat/GHZSCY-7704' into 'dev'
【畅玩】实名认证特殊符号以及字符限制优化

See merge request halo/android/assistant-android!2159
2025-04-22 10:09:24 +08:00
8a017df220 Revert .gitlab-ci.yml 2025-04-22 10:08:42 +08:00
3a0be0a6ee 【单机&畅玩】实名认证特殊符号以及字符限制优化 https://jira.shanqu.cc/browse/GHZSCY-7704 2025-04-21 17:47:07 +08:00
d50eeddde2 Merge branch 'fix/GHZSCY-7860' into 'release'
fix:【光环助手】游戏专题显示问题 https://jira.shanqu.cc/browse/GHZSCY-7860

See merge request halo/android/assistant-android!2158
2025-04-15 11:23:14 +08:00
89aa6e7abc fix:【光环助手】游戏专题显示问题 https://jira.shanqu.cc/browse/GHZSCY-7860 2025-04-15 11:23:14 +08:00
ab795ab538 Merge branch 'feat/more-xapk-error-log' into 'release'
feat: xapk 解压失败增加异常摘要字段

See merge request halo/android/assistant-android!2156
2025-04-10 10:08:07 +08:00
ba0854ad9a feat: xapk 解压失败增加异常摘要字段 2025-04-10 10:00:57 +08:00
fc2051387a Merge branch 'cherry-pick' into 'release'
合并部分需求到 release

See merge request halo/android/assistant-android!2155
2025-04-10 09:43:58 +08:00
ab2973c7be feat: 游戏预约相关优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7828 2025-04-10 09:35:01 +08:00
2a08ea681d fix: 修复游戏详情视频/图集Tab闪烁的问题 2025-04-10 09:35:00 +08:00
e23d510fb0 fix: 游戏详情-视频/图集tab 神策埋点补充—客户端 https://jira.shanqu.cc/browse/GHZSCY-7781 2025-04-10 09:35:00 +08:00
3c6ee0c782 chore: 版本更新至 5.40.2 2025-04-09 15:43:49 +08:00
07840822a8 Merge branch 'fix/GHZSCY-7806-pick' into 'release'
fix:【光环助手】通知栏目 滚动问题 https://jira.shanqu.cc/browse/GHZSCY-7806

See merge request halo/android/assistant-android!2154
2025-04-09 13:45:37 +08:00
12e547d333 fix:【光环助手】通知栏目 滚动问题 https://jira.shanqu.cc/browse/GHZSCY-7806 2025-04-09 13:42:14 +08:00
8bb3736ad1 Merge branch 'fix/redirect-crash' into 'release'
fix: 捕抓重定向后的下载地址 url 异常造成的闪退

See merge request halo/android/assistant-android!2153
2025-04-09 11:28:39 +08:00
aa9ba5163f fix: 捕抓重定向后的下载地址 url 异常造成的闪退 2025-04-09 11:27:54 +08:00
23033edc42 Merge branch 'fix/sentry-user-id' into 'release'
feat: sentry 日志使用 base64 转码后的 androidId 替换原始随机 id

See merge request halo/android/assistant-android!2152
2025-04-09 11:18:05 +08:00
308e134aff feat: sentry 日志使用 base64 转码后的 androidId 替换原始随机 id 2025-04-09 11:17:30 +08:00
ac78ea0498 Merge branch 'feat/upload-accelerator-set-token-log' into 'release'
feat:将奇游加速器 setToken 错误日志从sentry转移到火山云

See merge request halo/android/assistant-android!2151
2025-04-09 11:13:31 +08:00
38bab9cf4f feat:将奇游加速器 setToken 错误日志从sentry转移到火山云 2025-04-09 11:13:30 +08:00
d3351ec0b6 feat: 读取汉化接口配置 https://jira.shanqu.cc/browse/GHZSCY-7642 2025-04-08 16:34:19 +08:00
e3f883b784 Merge branch 'feat/GHZSCY-7828' into 'dev'
feat: 游戏预约相关优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7828

See merge request halo/android/assistant-android!2150
2025-04-08 15:31:12 +08:00
fbb81d7e45 feat: 游戏预约相关优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7828 2025-04-08 15:28:21 +08:00
750ec04c9d Merge branch 'fix/game_detail_cover_tab' into 'dev'
fix: 修复游戏详情视频/图集Tab闪烁的问题

See merge request halo/android/assistant-android!2149
2025-04-07 18:00:37 +08:00
e23a3d3938 fix: 修复游戏详情视频/图集Tab闪烁的问题 2025-04-07 17:57:14 +08:00
e769c0e5f5 fix: 修复初始化汉化进程导致unity游戏卡屏的问题 https://jira.shanqu.cc/browse/GHZSCY-7642 2025-04-07 10:08:35 +08:00
d75020cdb5 Merge branch 'feat/GHZSCY-7781' into 'dev'
fix: 游戏详情-视频/图集tab 神策埋点补充—客户端 https://jira.shanqu.cc/browse/GHZSCY-7781

See merge request halo/android/assistant-android!2148
2025-04-07 09:54:40 +08:00
c56c71d1f1 fix: 游戏详情-视频/图集tab 神策埋点补充—客户端 https://jira.shanqu.cc/browse/GHZSCY-7781 2025-04-07 09:54:40 +08:00
ccfa50d748 Merge branch 'feat/GHZSCY-7515' into 'dev'
feat:开服订阅通知频率优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7515

See merge request halo/android/assistant-android!2145
2025-04-03 11:33:41 +08:00
7176a5a4c4 feat:开服订阅通知频率优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7515 2025-04-03 11:33:41 +08:00
d007092193 Merge branch 'feat/GHZSCY-7702' into 'dev'
feat: 实名认证字符优化 (光环助手和畅玩)

See merge request halo/android/assistant-android!2147
2025-04-03 10:45:54 +08:00
2552743ff2 Merge branch 'feat/GHZSCY-7702' into 'dev'
feat: 实名认证字符优化 (光环助手和畅玩)

See merge request halo/android/assistant-android!2146
2025-04-03 10:42:01 +08:00
4faf15ffe7 feat: 实名认证字符优化 (光环助手和畅玩) 2025-04-03 10:42:01 +08:00
33d6ed75ad ci: revert 2025-04-03 10:39:55 +08:00
2eb4878b12 Merge branch 'fix/GHZSCY-7806' into 'dev'
fix:【光环助手】通知栏目 滚动问题 https://jira.shanqu.cc/browse/GHZSCY-7806

See merge request halo/android/assistant-android!2144
2025-04-03 10:07:41 +08:00
2bea3c72d7 fix:【光环助手】通知栏目 滚动问题 https://jira.shanqu.cc/browse/GHZSCY-7806 2025-04-03 09:59:57 +08:00
fa3db9d521 fix: 实名认证页面首页,右上角多显示了“·”的按钮 https://jira.shanqu.cc/browse/GHZSCY-7702,https://jira.shanqu.cc/browse/GHZSCY-7791 2025-04-02 16:36:30 +08:00
8084cda37d Merge branch 'hotfix/v5.40.1-1151/update_upload_sdk' into 'release'
更新火山云上传 SDK

See merge request halo/android/assistant-android!2143
2025-04-02 11:53:34 +08:00
e624f34de1 fix: 禁用火山云上传分片功能 2025-04-02 10:29:56 +08:00
b832c0c14f Merge branch 'hotfix/v5.40.1-1151/GHZSCY-7796' into 'release'
云存档引导游戏下载问题 https://jira.shanqu.cc/browse/GHZSCY-7796

See merge request halo/android/assistant-android!2142
2025-04-01 17:38:48 +08:00
6610c43937 chore: 更新火山云上传 SDK 2025-04-01 17:38:19 +08:00
ec29d94fb7 fix: 云存档引导游戏下载问题 https://jira.shanqu.cc/browse/GHZSCY-7796 2025-04-01 14:44:46 +08:00
efee9409bf Merge branch 'feat/add-room-ktx' into 'dev'
为了Room能和Flow一起使用,需要引入room-ktx

See merge request halo/android/assistant-android!2141
2025-04-01 09:31:26 +08:00
38a7eaf780 为了Room能和Flow一起使用,需要引入room-ktx 2025-04-01 09:28:05 +08:00
a1b4233fdb Merge branch 'feat/GHZSCY-7784' into 'dev'
feat:处理以 LiveData 形式直接监听数据库变更的代码 https://jira.shanqu.cc/browse/GHZSCY-7784

See merge request halo/android/assistant-android!2140
2025-03-31 17:20:33 +08:00
60c24e7457 feat:处理以 LiveData 形式直接监听数据库变更的代码 https://jira.shanqu.cc/browse/GHZSCY-7784 2025-03-31 17:20:33 +08:00
b6ec74d789 chore: 版本更新只 5.40.1 2025-03-31 14:31:26 +08:00
2d7224cf16 Merge branch 'fix/crashes' into 'release'
修复Sentry闪退

See merge request halo/android/assistant-android!2139
2025-03-31 11:43:45 +08:00
3f45344b54 Merge branch 'feat/update-qy-sdk' into 'release'
feat:更新奇游加速器sdk

See merge request halo/android/assistant-android!2138
2025-03-31 11:39:28 +08:00
1c3dbce08d feat:更新奇游加速器sdk 2025-03-31 11:39:28 +08:00
7844800b0e fix: 禁用RecyclerView动画效果避免异常闪退 https://sentry.shanqu.cc/organizations/lightgame/issues/441824/?project=22 2025-03-31 11:38:05 +08:00
ebcfd9c85d fix: 修复游戏详情页偶发空指针闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/443716/?project=22 2025-03-31 11:37:07 +08:00
3825315f65 Merge branch 'hotfix/v5.40.0-1150/router-crash' into 'release'
fix: 尝试修复进程启动时路由异常导致的闪退问题

See merge request halo/android/assistant-android!2137
2025-03-28 17:53:50 +08:00
3ffe4f9bc6 fix: 尝试修复路由异步初始化导致的闪退问题 2025-03-28 17:05:59 +08:00
bb3a849671 feat: 修复用户没有下载新的畅玩游戏,插件更新没有触发的问题。 https://jira.shanqu.cc/browse/GHZSCY-7642 2025-03-27 16:08:26 +08:00
4ed1e1e64a feat: 汉化打包测试 https://jira.shanqu.cc/browse/GHZSCY-7642 2025-03-27 13:44:54 +08:00
9f4eaa67fa feat: 优化汉化UI 2025-03-27 10:48:08 +08:00
729685e764 feat: 实名认证字符优化 (光环助手和畅玩)
https://jira.shanqu.cc/browse/GHZSCY-7702https://jira.shanqu.cc/browse/GHZSCY-7704
2025-03-25 17:54:35 +08:00
b2fc01ae48 Merge branch 'feat/va-relative' into 'release'
Revert 畅玩实名认证特殊字符

See merge request halo/android/assistant-android!2135
2025-03-25 17:29:42 +08:00
06f932af14 Revert 畅玩实名认证特殊字符 2025-03-25 17:29:13 +08:00
c2fe3bb64a Merge branch 'hotfix/GHZSCY-7702' into 'release'
Revert "fix: "点"符号设置颜色"

See merge request halo/android/assistant-android!2134
2025-03-25 17:24:30 +08:00
b1b231a309 Revert "feat: 【光环助手】实名认证特殊字符输入优化 https://jira.shanqu.cc/browse/GHZSCY-7702"
This reverts commit cc05dabb93.
2025-03-25 17:23:29 +08:00
e5161ae350 Revert "fix: "点"符号设置颜色"
This reverts commit 2ba39188f7.
2025-03-25 17:22:58 +08:00
655173482a feat: 畅玩汉化功能 2025-03-25 14:45:55 +08:00
4dfa7733ad Merge branch 'feat/va-relative' into 'dev'
feat: 5.40.0 va相关的更新

See merge request halo/android/assistant-android!2133
2025-03-25 14:32:58 +08:00
3906d9b84b feat: 5.40.0 va相关的更新 2025-03-25 14:31:39 +08:00
775e6cc689 Merge branch 'feat/remove-duplicate-log' into 'dev'
删除多余的日志上报

See merge request halo/android/assistant-android!2132
2025-03-25 14:25:39 +08:00
019b9f3f82 删除多余的日志上报 2025-03-25 14:24:05 +08:00
49f752dab5 Merge branch 'fix/jg_push_source_entrance' into 'dev'
fix: 修复极光推送跳转没有携带来源信息的问题

See merge request halo/android/assistant-android!2131
2025-03-25 10:45:05 +08:00
0cbda119d4 fix: 修复极光推送跳转没有携带来源信息的问题 2025-03-25 10:43:59 +08:00
aed8e50db3 feat: 重新启用在华为 Android 10 上的开屏广告,测试闪退情况 2025-03-25 10:17:57 +08:00
da5bb9eaf3 Merge branch 'feat/GHZSCY-7525' into 'dev'
feat: 头条推广包转化归因优化及SDK更新 https://jira.shanqu.cc/browse/GHZSCY-7525.cc/browse/GHZSCY-7525

See merge request halo/android/assistant-android!2130
2025-03-25 09:57:44 +08:00
d7593de98b feat: 头条推广包转化归因优化及SDK更新 https://jira.shanqu.cc/browse/GHZSCY-7525.cc/browse/GHZSCY-7525 2025-03-25 09:57:08 +08:00
69d2d699fe Merge branch 'feat/GHZSCY-7712' into 'dev'
feat: 后台功能面板组件交互优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7712

See merge request halo/android/assistant-android!2129
2025-03-24 14:31:32 +08:00
a438ef16c0 feat: 后台功能面板组件交互优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7712 2025-03-24 14:31:32 +08:00
d5a2cecd29 Merge branch 'fix/GHZSCY-7737' into 'dev'
fix:【光环助手】游戏详情下载触发跳转异常 https://jira.shanqu.cc/browse/GHZSCY-7737

See merge request halo/android/assistant-android!2128
2025-03-24 11:30:23 +08:00
65a4e675fa fix:【光环助手】游戏详情下载触发跳转异常 https://jira.shanqu.cc/browse/GHZSCY-7737 2025-03-24 11:30:23 +08:00
ec3e6d5f7b Merge branch 'fix/GHZSCY-7691' into 'dev'
fix: 2025/3/14 - 埋点补充 https://jira.shanqu.cc/browse/GHZSCY-7691

See merge request halo/android/assistant-android!2116
2025-03-24 10:03:53 +08:00
07b0afce03 fix: 2025/3/14 - 埋点补充 https://jira.shanqu.cc/browse/GHZSCY-7691 2025-03-24 10:03:53 +08:00
852a6d32d6 Merge branch 'fix/GHZSCY-7736' into 'dev'
fix: 间距显示问题-客户端 https://jira.shanqu.cc/browse/GHZSCY-7736

See merge request halo/android/assistant-android!2127
2025-03-24 09:44:19 +08:00
55022d8b1c fix: 间距显示问题-客户端 https://jira.shanqu.cc/browse/GHZSCY-7736 2025-03-24 09:42:26 +08:00
eb7d407e92 Merge branch 'fix/GHZSCY-7735' into 'dev'
fix: 版本求更新显示优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7735

See merge request halo/android/assistant-android!2126
2025-03-21 18:02:02 +08:00
733cd1e198 fix: 版本求更新显示优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7735 2025-03-21 17:57:02 +08:00
1d767018f6 Merge branch 'fix/va/unity-crash' into 'dev'
fix: 部分unity游戏启动闪退

See merge request halo/android/assistant-android!2125
2025-03-21 17:36:55 +08:00
0a3616a1c0 fix: 部分unity游戏启动闪退 2025-03-21 17:36:09 +08:00
05108ab478 Merge branch 'fix/crash-in-splash' into 'dev'
fix:java.lang.RuntimeException: Unable to start activity...

See merge request halo/android/assistant-android!2124
2025-03-21 11:23:33 +08:00
508c90cc63 fix:java.lang.RuntimeException: Unable to start activity... 2025-03-21 11:23:33 +08:00
6242f79f80 Merge branch 'fix/GHZSCY-7728' into 'dev'
fix: 部分位置跳转到游戏开服表无【新增】功能 https://jira.shanqu.cc/browse/GHZSCY-7728

See merge request halo/android/assistant-android!2123
2025-03-20 16:29:36 +08:00
71dd964440 fix: 部分位置跳转到游戏开服表无【新增】功能 https://jira.shanqu.cc/browse/GHZSCY-7728 2025-03-20 16:25:22 +08:00
63fc720c40 Merge remote-tracking branch 'origin/release' into dev 2025-03-20 15:42:57 +08:00
5da02c4b64 Merge branch 'hotfix/v5.39.5-1195/rank_text_width_issue' into 'release'
fix: 修复搜索页推荐榜单文字宽度问题

See merge request halo/android/assistant-android!2122
2025-03-20 15:16:40 +08:00
f94b28a085 fix: 修复搜索页推荐榜单文字宽度问题 2025-03-20 15:15:24 +08:00
e8a199b5c0 Merge branch 'feat/GHZSCY-7702' into 'dev'
fix: "点"符号设置颜色

See merge request halo/android/assistant-android!2121
2025-03-20 11:06:51 +08:00
2ba39188f7 fix: "点"符号设置颜色 2025-03-20 11:06:37 +08:00
963074d5d8 Merge branch 'feat/GHZSCY-7704' into 'dev'
fix: “点”符号大小和颜色设置

See merge request halo/android/assistant-android!2120
2025-03-20 10:51:39 +08:00
cc629819d9 fix: “点”符号大小和颜色设置 2025-03-20 10:51:13 +08:00
d82505ab5d Merge branch 'feat/GHZSCY-7704' into 'dev'
feat: [畅玩]实名认证特殊符号以及字符限制优化 https://jira.shanqu.cc/browse/GHZSCY-7704

See merge request halo/android/assistant-android!2119
2025-03-20 09:46:54 +08:00
a917214b36 feat: [畅玩]实名认证特殊符号以及字符限制优化 https://jira.shanqu.cc/browse/GHZSCY-7704 2025-03-20 09:46:34 +08:00
bdf9094799 Merge branch 'feat/common-chips' into 'dev'
feat:添加通用组件:选项标签Chips

See merge request halo/android/assistant-android!2118
2025-03-20 09:45:39 +08:00
df0d0604b9 feat:添加通用组件:选项标签Chips 2025-03-20 09:39:51 +08:00
f100d906ab Merge branch 'feat/GHZSCY-7702' into 'dev'
feat: 【光环助手】实名认证特殊字符输入优化 https://jira.shanqu.cc/browse/GHZSCY-7702

See merge request halo/android/assistant-android!2117
2025-03-19 17:51:51 +08:00
cc05dabb93 feat: 【光环助手】实名认证特殊字符输入优化 https://jira.shanqu.cc/browse/GHZSCY-7702 2025-03-19 17:45:52 +08:00
bd39ac2eaf Merge branch 'fix/drop_font_color_in_dark_mode' into 'dev'
fix: 修复部分富文本中的颜色在深色模式下没有去除的问题

See merge request halo/android/assistant-android!2115
2025-03-19 17:10:52 +08:00
31903d21c0 fix: 修复部分富文本中的颜色在深色模式下没有去除的问题 2025-03-19 17:03:45 +08:00
266fcc4c38 Merge branch 'feat/GHZSCY-7642' into 'dev'
feat: 优化汉化UI

See merge request halo/android/assistant-android!2114
2025-03-19 11:31:34 +08:00
075ed04191 feat: 优化汉化UI 2025-03-19 11:30:55 +08:00
c804c2f7fd Merge branch 'feat/GHZSCY-7642' into 'dev'
feat: 畅玩汉化翻译功能

See merge request halo/android/assistant-android!2113
2025-03-18 11:39:09 +08:00
882f0a7b3e feat: 畅玩汉化翻译功能 2025-03-18 11:37:18 +08:00
3cf86a500b Merge branch 'feat/GHZSCY-7568' into 'dev'
feat: 游戏详情改版补充优化1—客户端(1) https://jira.shanqu.cc/browse/GHZSCY-7568

See merge request halo/android/assistant-android!2112
2025-03-18 11:14:49 +08:00
3cd70b5b8f feat: 游戏详情改版补充优化1—客户端(1) https://jira.shanqu.cc/browse/GHZSCY-7568 2025-03-18 11:14:49 +08:00
60f35a89b4 Merge branch 'feat/GHZSCY-6982-2' into 'dev'
feat:【光环助手】搜索业务:神策埋点相关搜索结果点击事件新增序号属性position https://jira.shanqu.cc/browse/GHZSCY-6982

See merge request halo/android/assistant-android!2111
2025-03-17 15:43:10 +08:00
1503c23246 feat:【光环助手】搜索业务:神策埋点相关搜索结果点击事件新增序号属性position https://jira.shanqu.cc/browse/GHZSCY-6982 2025-03-17 15:38:01 +08:00
ea9e91618f Merge branch 'fix/GHZSCY-7685' into 'dev'
fix:游戏预约功能(第六期)—0313运营测试-客户端...

See merge request halo/android/assistant-android!2110
2025-03-17 11:12:07 +08:00
d52fcc2185 fix:游戏预约功能(第六期)—0313运营测试-客户端... 2025-03-17 11:12:07 +08:00
db047c36d7 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	dependencies.gradle
2025-03-14 15:22:00 +08:00
1e58bec4a0 Merge branch 'feat/GHZSCY-7668' into 'dev'
feat: 光环助手测试包增加相关快捷功能 https://jira.shanqu.cc/browse/GHZSCY-7668

See merge request halo/android/assistant-android!2109
2025-03-14 15:19:22 +08:00
87ff1a64b3 Merge branch 'fix/improper-router' into 'release'
fix: 修复光环未正常启动也能使用路由跳转至指定页面的问题

See merge request halo/android/assistant-android!2108
2025-03-14 15:16:21 +08:00
b3678d7a54 fix: 修复光环未正常启动也能使用路由跳转至指定页面的问题 2025-03-14 14:28:53 +08:00
c7fa04792b chore: 版本更新至 5.39.5 2025-03-14 10:14:08 +08:00
76ea531419 Merge branch 'fix/GHZSCY-7687' into 'release'
fix:【光环助手】搜索内容标签点击跳转异常 https://jira.shanqu.cc/browse/GHZSCY-7687

See merge request halo/android/assistant-android!2107
2025-03-13 18:20:31 +08:00
d821da0b2c fix:【光环助手】搜索内容标签点击跳转异常 https://jira.shanqu.cc/browse/GHZSCY-7687 2025-03-13 18:20:31 +08:00
d9b137504a Merge branch 'fix/GHZSCY-7661' into 'release'
fix:【光环助手】游戏详情自定义tab关联自定义页面的视频播放问题 https://jira.shanqu.cc/browse/GHZSCY-7661

See merge request halo/android/assistant-android!2105
2025-03-13 16:36:39 +08:00
93369f5676 fix:【光环助手】游戏详情自定义tab关联自定义页面的视频播放问题 https://jira.shanqu.cc/browse/GHZSCY-7661 2025-03-13 16:36:39 +08:00
b109c3bf6f Merge branch 'fix/GHZSCY-7681' into 'dev'
fix: 视频/图片上传问题 https://jira.shanqu.cc/browse/GHZSCY-7681

See merge request halo/android/assistant-android!2106
2025-03-13 16:03:36 +08:00
bb80560a49 fix: 视频/图片上传问题 https://jira.shanqu.cc/browse/GHZSCY-7681 2025-03-13 16:02:48 +08:00
c43a9e3b6e feat: 光环助手测试包增加相关快捷功能 https://jira.shanqu.cc/browse/GHZSCY-7668 2025-03-13 14:53:03 +08:00
34d255d258 Merge branch 'feat/GHZSCY-7676' into 'release'
fix: 新游开测相关功能优化(第四期)—0313运营测试-客户端 https://jira.shanqu.cc/browse/GHZSCY-7676

See merge request halo/android/assistant-android!2104
2025-03-13 13:43:15 +08:00
3ca17cea07 fix: 新游开测相关功能优化(第四期)—0313运营测试-客户端 https://jira.shanqu.cc/browse/GHZSCY-7676 2025-03-13 13:40:10 +08:00
d3e23bfbb5 Merge branch 'feat/GHZSCY-6834' into 'dev'
feat:游戏预约功能(第六期)—客户端 https://jira.shanqu.cc/browse/GHZSCY-6834

See merge request halo/android/assistant-android!2102
2025-03-11 16:53:11 +08:00
273a9f010d feat:游戏预约功能(第六期)—客户端 https://jira.shanqu.cc/browse/GHZSCY-6834 2025-03-11 16:53:11 +08:00
e8cbaf89ff Merge branch 'feat/GHZSCY-6817' into 'dev'
feat:游戏专题新增“竖式图文列表”样式—客户端 https://jira.shanqu.cc/browse/GHZSCY-6817

See merge request halo/android/assistant-android!2101
2025-03-11 14:45:23 +08:00
0e3586a556 Merge branch 'feat/GHZSCY-7048' into 'dev'
feat: 推广包快手API新增次留上报 https://jira.shanqu.cc/browse/GHZSCY-7048

See merge request halo/android/assistant-android!2099
2025-03-11 14:38:02 +08:00
d546651c06 feat:游戏专题新增“竖式图文列表”样式—客户端 https://jira.shanqu.cc/browse/GHZSCY-6817 2025-03-11 14:24:46 +08:00
815f567f44 Merge branch 'feat/GHZSCY-6812' into 'dev'
feat:https://jira.shanqu.cc/browse/GHZSCY-6812 发表内容输入规则优化—客户端

See merge request halo/android/assistant-android!2100
2025-03-11 14:20:41 +08:00
ba3e9357a1 feat:https://jira.shanqu.cc/browse/GHZSCY-6812 发表内容输入规则优化—客户端 2025-03-11 14:20:41 +08:00
312448daae Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	dependencies.gradle
2025-03-11 10:53:15 +08:00
a00a1ced7e Merge branch 'fix/message_link_skip' into 'release'
fix: 修复消息中心跳转问题

See merge request halo/android/assistant-android!2098
2025-03-11 10:42:18 +08:00
1587ca8e6a fix: 修复消息中心跳转问题 2025-03-11 10:35:39 +08:00
86b4761a1c Merge branch 'fix/game_detail_dark_mode' into 'release'
fix: 修复游戏详情页闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/379887/events/0f296b9965884a4f944867479ad7d6c7/?project=22

See merge request halo/android/assistant-android!2097
2025-03-10 10:04:15 +08:00
0446d87b24 fix: 修复游戏详情切换深色模式出现的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/440456/events/3cfa315cbb734e9688984dddf75fefbd/?project=22 2025-03-10 09:48:04 +08:00
6338fb4dd0 Merge branch 'fix/game_detail_video' into 'release'
fix: 修复游戏详情部分16:9视频存在黑边的问题

See merge request halo/android/assistant-android!2096
2025-03-07 11:54:32 +08:00
6056b7ce1f fix: 修复游戏详情部分16:9视频存在黑边的问题 2025-03-07 11:50:08 +08:00
d51d3c16fe Merge branch 'fix/GHZSCY-7609' into 'release'
fix:【光环助手】UI显示问题 https://jira.shanqu.cc/browse/GHZSCY-7609

See merge request halo/android/assistant-android!2095
2025-03-07 11:34:56 +08:00
d3858ba38f fix:【光环助手】UI显示问题 https://jira.shanqu.cc/browse/GHZSCY-7609 2025-03-07 11:31:21 +08:00
3cbee34b8a chore: 版本更新至 5.39.4 2025-03-07 09:31:21 +08:00
ec88f52603 Merge branch 'fix/GHZSCY-7625' into 'release'
fix: 2025/3/6 - 验收问题 - 客户端 https://jira.shanqu.cc/browse/GHZSCY-7625

See merge request halo/android/assistant-android!2094
2025-03-06 17:46:23 +08:00
b669e216c4 fix: 2025/3/6 - 验收问题 - 客户端 https://jira.shanqu.cc/browse/GHZSCY-7625 2025-03-06 17:46:06 +08:00
8a6d476636 Merge branch 'feat/GHZSCY-7541' into 'dev'
feat:客户端穿山甲广告SDK升级新版本—客户端 https://jira.shanqu.cc/browse/GHZSCY-7541

See merge request halo/android/assistant-android!2093
2025-03-06 14:33:05 +08:00
17b34c9e6f feat:客户端穿山甲广告SDK升级新版本—客户端 https://jira.shanqu.cc/browse/GHZSCY-7541 2025-03-06 14:31:16 +08:00
795b640870 Merge branch 'feat/GHZSCY-7623' into 'release'
feat: 神策埋点事件优化 https://jira.shanqu.cc/browse/GHZSCY-7622

See merge request halo/android/assistant-android!2092
2025-03-06 14:10:31 +08:00
099d026e73 feat: 神策埋点事件优化 https://jira.shanqu.cc/browse/GHZSCY-7622 2025-03-06 14:09:22 +08:00
162381527c Merge branch 'fix/fix-set-acct-token-failed' into 'release'
https://sentry.shanqu.cc/organizations/lightgame/issues/440135 此bug为奇游sdk setToken失败,errro_message为The SDK is not initialized, please call init in Application to initialize the SDK

See merge request halo/android/assistant-android!2091
2025-03-06 11:26:00 +08:00
dedbe1d18c https://sentry.shanqu.cc/organizations/lightgame/issues/440135 此bug为奇游sdk setToken失败,errro_message为The SDK is not initialized, please call init in Application to initialize the SDK 2025-03-06 11:26:00 +08:00
b775c2f0a9 Merge branch 'fix/game_detail_dark_mode_crash' into 'release'
fix: 修复游戏详情切换深色模式出现的闪退问题...

See merge request halo/android/assistant-android!2090
2025-03-06 09:38:36 +08:00
7e079bc8fa fix: 修复游戏详情切换深色模式出现的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/440241/?project=22&referrer=issue-stream&statsPeriod=14d 2025-03-06 09:33:48 +08:00
b719763f2d Merge branch 'fix/GHZSCY-7613' into 'release'
Revert "ci"

See merge request halo/android/assistant-android!2089
2025-03-05 17:23:50 +08:00
fdc04bf8cb fix:【光环助手】轮播banner背景显示问题 https://jira.shanqu.cc/browse/GHZSCY-7613 2025-03-05 17:23:50 +08:00
27811b027f chore: 版本更新至 5.39.3 2025-03-05 15:07:47 +08:00
4e8b8435b8 Merge branch 'hotfix/v5.39.2-1132/remove_useless_sentry_event' into 'release'
build: 移除无用的 sentry 事件

See merge request halo/android/assistant-android!2088
2025-03-05 15:04:58 +08:00
a7efd9528e build: 移除无用的 sentry 事件 2025-03-05 15:04:21 +08:00
982e3a9739 Merge branch 'fix/empty_stack_crash' into 'release'
fix: 修复更新页面BusinessId出现的闪退问题...

See merge request halo/android/assistant-android!2087
2025-03-05 14:50:21 +08:00
a942cdbe51 fix: 修复更新页面BusinessId出现的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/440154/?project=22 2025-03-05 14:43:29 +08:00
f6f0a54cb4 Merge branch 'fix/game_detail_crash' into 'release'
fix: 修复游戏详情页闪退问题...

See merge request halo/android/assistant-android!2086
2025-03-05 14:01:40 +08:00
e26856220a fix: 修复游戏详情页闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/379887/events/0f296b9965884a4f944867479ad7d6c7/?project=22 2025-03-05 13:49:38 +08:00
0f36d7ccfa Merge branch 'fix/GHZSCY-7608' into 'release'
fix:【光环助手】奇游加速器第二期迭代-03/04测试-客户端 https://jira.shanqu.cc/browse/GHZSCY-7608

See merge request halo/android/assistant-android!2084
2025-03-05 11:30:06 +08:00
d0c6a499f8 Merge branch 'fix/GHZSCY-7612' into 'release'
fix:【光环助手】功能标签引导的出现时机问题 https://jira.shanqu.cc/browse/GHZSCY-7612

See merge request halo/android/assistant-android!2085
2025-03-05 11:25:25 +08:00
c56963fab3 fix:【光环助手】功能标签引导的出现时机问题 https://jira.shanqu.cc/browse/GHZSCY-7612 2025-03-05 11:19:43 +08:00
0faa0b490a fix:【光环助手】奇游加速器第二期迭代-03/04测试-客户端 https://jira.shanqu.cc/browse/GHZSCY-7608 2025-03-05 11:19:27 +08:00
51cc1e3104 Merge branch 'fix/game_detail_web' into 'release'
fix: 修复游戏详情网页不能左右滑动切换Tab的问题

See merge request halo/android/assistant-android!2083
2025-03-05 10:50:11 +08:00
ae0ef717d5 fix: 修复游戏详情网页不能左右滑动切换Tab的问题 2025-03-05 10:40:21 +08:00
02ed9c247a Merge branch 'fix/game_detail_divider' into 'release'
fix: 修复光环助手的游戏详情页分割线显示问题

See merge request halo/android/assistant-android!2082
2025-03-04 17:03:23 +08:00
a747917370 fix: 修复光环助手的游戏详情页分割线显示问题 2025-03-04 17:01:02 +08:00
69241c489b chore: 版本更新至 5.40.0 2025-03-04 16:23:00 +08:00
66ffb5cedc chore: 版本更新值 5.39.2 2025-03-04 16:13:30 +08:00
97b3efc968 Merge branch 'fix/wrong_global_screen_width' into 'dev'
fix: 修复页面重建时全局屏幕宽度的值为 0 的问题

See merge request halo/android/assistant-android!2081
2025-03-04 15:57:35 +08:00
288f7370aa fix: 修复页面重建时全局屏幕宽度的值为 0 的问题 2025-03-04 15:56:46 +08:00
f9db7068f2 Merge branch 'fix/game_detail' into 'dev'
fix: 游戏详情Dialog入参改为使用Arguments传递

See merge request halo/android/assistant-android!2080
2025-03-04 15:36:48 +08:00
b4390f2811 fix: 游戏详情Dialog入参改为使用Arguments传递 2025-03-04 15:24:56 +08:00
dbc2be5bc6 Merge branch 'feat/GHZSCY-7568' into 'dev'
游戏详情页补充优化

See merge request halo/android/assistant-android!2079
2025-03-04 11:55:02 +08:00
dec2c35ff4 游戏详情页补充优化 2025-03-04 11:55:02 +08:00
77514aa2a9 Merge branch 'feat/GHZSCY-7446' into 'dev'
feat:【光环助手】一键登录相关UI优化-UI https://jira.shanqu.cc/browse/GHZSCY-7445

See merge request halo/android/assistant-android!2078
2025-03-04 11:07:51 +08:00
40cdda7bae feat:【光环助手】一键登录相关UI优化-UI https://jira.shanqu.cc/browse/GHZSCY-7445 2025-03-04 11:07:51 +08:00
4917b1d4ff Merge branch 'fix/GHZSCY-7589' into 'dev'
fix:【光环助手】游戏单广场遮罩错位问题 https://jira.shanqu.cc/browse/GHZSCY-7589

See merge request halo/android/assistant-android!2077
2025-03-04 10:49:09 +08:00
d646e971f7 fix:【光环助手】游戏单广场遮罩错位问题 https://jira.shanqu.cc/browse/GHZSCY-7589 2025-03-04 10:48:32 +08:00
af9ba8a4d0 Merge branch 'feat/GHZSCY-7458-rebase-from-dev' into 'dev'
feat:https://jira.shanqu.cc/browse/GHZSCY-6976 奇游加速SDK接入—客户端

See merge request halo/android/assistant-android!2075
2025-03-04 10:44:00 +08:00
738dfd3b4d feat:https://jira.shanqu.cc/browse/GHZSCY-6976 奇游加速SDK接入—客户端 2025-03-04 10:44:00 +08:00
0f0962b261 Merge branch 'feat/GHZSCY-7544' into 'dev'
feat: 实名认证相关优化 https://jira.shanqu.cc/browse/GHZSCY-7544

See merge request halo/android/assistant-android!2074
2025-03-04 09:58:57 +08:00
ffa61e8b96 feat: 实名认证相关优化 https://jira.shanqu.cc/browse/GHZSCY-7544 2025-03-04 09:54:51 +08:00
b460750f5a Merge branch 'feat/va-relative' into 'dev'
feat: 预防进程组被杀时,server_dead的误报

See merge request halo/android/assistant-android!2073
2025-02-28 17:22:31 +08:00
528d7511f9 feat: 预防进程组被杀时,server_dead的误报
feat: 启动前台服务的兼容代码
2025-02-28 17:22:01 +08:00
02523b9e33 Merge branch 'refactor/add-comment' into 'dev'
refactor: 添加关于前台服务的提示性注释

See merge request halo/android/assistant-android!2072
2025-02-28 15:24:37 +08:00
bfc4083544 refactor: 添加关于前台服务的提示性注释 2025-02-28 15:24:07 +08:00
18e14d3811 Merge branch 'feat/va-relative' into 'dev'
fix: 停止前台服务的正确使用方法

See merge request halo/android/assistant-android!2071
2025-02-28 14:30:42 +08:00
89901028ea fix: 停止前台服务的正确使用方法 2025-02-28 14:30:21 +08:00
20c3f5cf46 Merge branch 'feat/va-relative' into 'dev'
feat: 恢复VA服务进程保活机制

See merge request halo/android/assistant-android!2070
2025-02-28 10:03:07 +08:00
9bc155816a feat: 恢复VA服务进程保活机制 2025-02-28 10:02:31 +08:00
92366c5629 Merge branch 'feat/va-relative' into 'dev'
chore: va组件升级 2.0.8

See merge request halo/android/assistant-android!2069
2025-02-27 15:48:27 +08:00
a1fd894dde chore: va组件升级 2.0.8
feat: 同步商业版 b370a11df7f0c3dbe4074024b1890c015136267e
feat: 优化crash上报逻辑
2025-02-27 15:47:21 +08:00
03757b22c7 Merge branch 'fix/GHZSCY-7539' into 'dev'
fix: 处理部分华为设备 APP 闪退问题 https://jira.shanqu.cc/browse/GHZSCY-7539

See merge request halo/android/assistant-android!2068
2025-02-26 16:33:39 +08:00
ce10d82a8f Merge branch 'fix/GHZSCY-5855' into 'dev'
feat: 游戏详情页改版优化 https://jira.shanqu.cc/browse/GHZSCY-5855

See merge request halo/android/assistant-android!2067
2025-02-26 14:17:16 +08:00
74a4feee9e feat: 游戏详情页改版优化 https://jira.shanqu.cc/browse/GHZSCY-5855 2025-02-26 14:17:16 +08:00
9cb0736e30 fix: 部分华为设备APP闪退问题 https://jira.shanqu.cc/browse/GHZSCY-7539 2025-02-24 17:54:01 +08:00
b954df3267 Merge branch 'fix/GHZSCY-7530' into 'dev'
fix:【光环助手】游戏单热搜榜 显示问题 https://jira.shanqu.cc/browse/GHZSCY-7530

See merge request halo/android/assistant-android!2066
2025-02-21 10:51:33 +08:00
0607a37256 fix:【光环助手】游戏单热搜榜 显示问题 https://jira.shanqu.cc/browse/GHZSCY-7530 2025-02-21 10:48:47 +08:00
00e4c7f1bd Merge branch 'fix/GHZSCY-7470' into 'dev'
fix: 修复部分设备安装xapk时提示解压失败 https://jira.shanqu.cc/browse/GHZSCY-7470

See merge request halo/android/assistant-android!2065
2025-02-20 14:16:24 +08:00
7d94250914 fix: 修复部分设备安装xapk时提示解压失败 https://jira.shanqu.cc/browse/GHZSCY-7470 2025-02-20 11:46:10 +08:00
7b8634aa40 Merge branch 'feat/GHZSCY-5855' into 'dev'
feat: 游戏详情页改版优化 https://jira.shanqu.cc/browse/GHZSCY-5855

See merge request halo/android/assistant-android!2047
2025-02-19 10:31:33 +08:00
210e18eb34 feat: 游戏详情页改版优化 https://jira.shanqu.cc/browse/GHZSCY-5855 2025-02-19 10:31:33 +08:00
957eff3c1e Merge branch 'fix/usage_stats_crash' into 'dev'
fix: 捕抓游戏游玩时长功能接口返回内容为空时的闪退问题

See merge request halo/android/assistant-android!2064
2025-02-17 14:28:30 +08:00
72b953b7c8 fix: 捕抓游戏游玩时长功能接口返回内容为空时的闪退问题 2025-02-17 14:26:57 +08:00
53fb77d2dc Merge branch 'fix/game_collection_square_fab' into 'dev'
fix: 修复首页游戏单列表滑动过程中快速切换tab错误显示右下角按钮的问题

See merge request halo/android/assistant-android!2063
2025-02-14 15:44:55 +08:00
f78e7a10a6 fix: 修复首页游戏单列表滑动过程中快速切换tab错误显示右下角按钮的问题 2025-02-14 15:42:10 +08:00
6aebea14bc Merge branch 'feat/add_push_id_to_debug_info' into 'dev'
feat: 我的页面 debug 数据增加推送 id

See merge request halo/android/assistant-android!2062
2025-02-14 15:30:25 +08:00
fd0fc31fc3 feat: 我的页面 debug 数据增加推送 id 2025-02-14 15:28:24 +08:00
889558eb4b Merge branch 'fix/GHZSCY-7461' into 'dev'
feat: 注销页面支持由网页端管理返回操作

See merge request halo/android/assistant-android!2060
2025-02-14 13:59:33 +08:00
37ec9ae66c feat: 注销页面支持由网页端管理返回操作 2025-02-14 10:39:30 +08:00
f4d34a635a Merge branch 'fix/search_fragment_recreate_culprit' into 'dev'
fix: 修复搜索页回收重建后不能正确刷新显示内容的问题

See merge request halo/android/assistant-android!2059
2025-02-14 09:52:35 +08:00
024895838c fix: 修复搜索页回收重建后不能正确刷新显示内容的问题 2025-02-13 15:58:44 +08:00
740bdbf79a Merge branch 'fix/GHZSCY-7405' into 'dev'
游戏显示异常问题 https://jira.shanqu.cc/browse/GHZSCY-7405

See merge request halo/android/assistant-android!2058
2025-02-12 15:36:24 +08:00
73f7bee3cc fix: 游戏显示异常问题 https://jira.shanqu.cc/browse/GHZSCY-7405 2025-02-12 14:51:35 +08:00
b37f247b14 Merge branch 'fix/GHZSCY-7349' into 'dev'
fix: 游戏大小显示问题 https://jira.shanqu.cc/browse/GHZSCY-7349

See merge request halo/android/assistant-android!2054
2025-02-12 14:50:30 +08:00
811378f411 Merge branch 'fix/va-proxy-npe' into 'dev'
fix: BindService代理NPE的问题。

See merge request halo/android/assistant-android!2057
2025-02-12 13:53:43 +08:00
f910cb67da fix: BindService代理NPE的问题。 2025-02-12 13:53:27 +08:00
4f2874877c Merge branch 'fix/va-proxy-npe' into 'dev'
fix: BindService代理NPE的问题。

See merge request halo/android/assistant-android!2056
2025-02-12 11:16:42 +08:00
15b35fd6b7 Merge branch 'fix/sentry-436163' into 'dev'
fix: 多进程下没有初始化mApp导致的闪退

See merge request halo/android/assistant-android!2055
2025-02-12 11:15:08 +08:00
cd64bb79a2 fix: 多进程下没有初始化mApp导致的闪退 2025-02-12 11:14:22 +08:00
d57c03b1f8 fix: BindService代理NPE的问题。 2025-02-12 11:12:16 +08:00
1895977d4c fix: 游戏大小显示问题 https://jira.shanqu.cc/browse/GHZSCY-7349 2025-02-12 10:03:32 +08:00
08571998b6 Merge branch 'fix/search_rank_icon_reuse_culprit' into 'dev'
fix: 修复搜索页面榜单的 icon 复用问题

See merge request halo/android/assistant-android!2053
2025-02-11 10:47:22 +08:00
21cdadca13 Merge remote-tracking branch 'origin/release' into dev 2025-02-11 10:39:29 +08:00
54dfa46204 fix: 修复搜索页面榜单的 icon 复用问题 2025-02-11 10:38:13 +08:00
c9f14641c9 Merge branch 'fix/GHZSCY-7440' into 'dev'
fix: 视频合集返回按钮点击无响应 https://jira.shanqu.cc/browse/GHZSCY-7440

See merge request halo/android/assistant-android!2052
2025-02-10 16:58:52 +08:00
0e95c0cbf6 fix: 视频合集返回按钮点击无响应 https://jira.shanqu.cc/browse/GHZSCY-7440 2025-02-10 16:23:51 +08:00
2a93af56ee Merge branch 'fix/GHZSCY-7435' into 'release'
Revert "ci"

See merge request halo/android/assistant-android!2051
2025-02-08 15:41:32 +08:00
28e785745b Revert "ci" 2025-02-08 15:41:32 +08:00
317620daf4 Merge branch 'feat/make_download_more_reponsive' into 'dev'
feat: 第一次包名列表获取成功时初始化浏览器安装条件,提高下载按钮反应速度

See merge request halo/android/assistant-android!2046
2025-02-07 17:41:48 +08:00
bf95a00bc6 Merge branch 'fix/game_update_crashes' into 'release'
fix: 修复游戏更新相关多线程并发操作引起的闪退问题

See merge request halo/android/assistant-android!2050
2025-02-06 16:03:48 +08:00
cb05c8a020 fix: 修复游戏更新相关多线程并发操作引起的闪退问题 2025-02-06 15:15:07 +08:00
d458898eb1 Merge branch 'chen/fix-search-page-crash' into 'release'
fix:https://sentry.shanqu.cc/organizations/lightgame/issues/431718/?project=22

See merge request halo/android/assistant-android!2049
2025-02-06 11:18:48 +08:00
f4f422b089 fix:https://sentry.shanqu.cc/organizations/lightgame/issues/431718/?project=22 2025-02-06 11:11:02 +08:00
e48b11f19d Merge branch 'hotfix/v5.38.8-1118/quick_back_pressed_crashed' into 'release'
fix: 启动应用时快速返回可能会闪退的问题 https://sentry.shanqu.cc/organizations/lightgame/issues/432602/

See merge request halo/android/assistant-android!2048
2025-02-06 10:34:07 +08:00
b6fe834406 fix: 启动应用时快速返回可能会闪退的问题 https://sentry.shanqu.cc/organizations/lightgame/issues/432602/ 2025-02-06 10:31:19 +08:00
d0bf23ae48 Merge remote-tracking branch 'origin/release' into dev 2025-01-17 14:15:55 +08:00
8b1f35516d feat: 第一次包名列表获取成功时初始化浏览器安装条件,提高下载按钮反应速度 2025-01-17 14:14:49 +08:00
b2fde1e0af Merge branch 'hotfix/v5.38.8-1118/meta_build_script_channel_issue' into 'release'
fix: 修复推广打包渠道不生效的问题

See merge request halo/android/assistant-android!2045
2025-01-16 16:01:39 +08:00
ab1350ff46 fix: 修复推广打包渠道不生效的问题 2025-01-16 16:00:25 +08:00
7f991e29d4 Merge branch 'fix/xiaomi_parallel_game_auth' into 'dev'
fix: 修复小米部分机型双开由于缺少权限无法授权登录的问题

See merge request halo/android/assistant-android!2044
2025-01-16 11:04:40 +08:00
40edf76aed fix: 修复小米部分机型双开由于缺少权限无法授权登录的问题 2025-01-16 11:04:40 +08:00
aaeb83c5df Merge branch 'fix/splash_flicker_on_miui' into 'dev'
fix: 修复部分小米设备修改状态栏颜色导致开屏广告闪烁的问题

See merge request halo/android/assistant-android!2043
2025-01-16 09:29:05 +08:00
5739f0a800 fix: 修复部分小米设备修改状态栏颜色导致开屏广告闪烁的问题 2025-01-15 17:58:16 +08:00
10cc81e7fc Merge branch 'feat/va-relative' into 'dev'
feat: 同步va的release代码

See merge request halo/android/assistant-android!2042
2025-01-15 15:00:42 +08:00
60a50f5722 feat: 同步va的release代码 2025-01-15 14:58:32 +08:00
644881c14f Merge branch 'fix/package_check_stuck_issue' into 'dev'
fix: 修复包名检测弹窗弹出较慢的问题

See merge request halo/android/assistant-android!2041
2025-01-15 14:48:19 +08:00
a0e43930a0 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	app/src/main/java/com/gh/ad/AdDelegateHelper.kt
#	dependencies.gradle
#	module_login/src/main/java/com/gh/gamecenter/login/user/UserRepository.java
#	vasdk
2025-01-15 14:27:40 +08:00
aa5f6f4f24 fix: 修复包名检测弹窗弹出较慢的问题 2025-01-15 14:22:22 +08:00
ab7668fd81 chore: 版本更新至 5.38.8 2025-01-15 09:19:40 +08:00
c6f014c984 Merge branch 'hotfix/v5.38.7-1117/pre_download_error' into 'release'
fix: 修复预下载获取资源时,服务端报错未能正确处理的问题

See merge request halo/android/assistant-android!2040
2025-01-14 16:30:31 +08:00
c215bd195e fix: 修复预下载获取资源时,服务端报错未能正确处理的问题 2025-01-14 16:27:43 +08:00
bb73598a87 Merge branch 'hotfix/va-relative' into 'release'
fix: va_core进程没有启动导致aidl的NPE问题。

See merge request halo/android/assistant-android!2039
2025-01-14 16:24:52 +08:00
c6f70d1b4c fix: va_core进程没有启动导致aidl的NPE问题。 2025-01-14 16:23:01 +08:00
ce7f75976c Merge branch 'fix/GHZSCY-7371' into 'dev'
fix: 游戏详情-多版本插件下载问题 https://jira.shanqu.cc/browse/GHZSCY-7371

See merge request halo/android/assistant-android!2038
2025-01-14 13:45:06 +08:00
c8a7999990 fix: 游戏详情-多版本插件下载问题 https://jira.shanqu.cc/browse/GHZSCY-7371 2025-01-14 10:49:52 +08:00
0cd281a53c Merge branch 'hotfix/va-relative' into 'release'
fix: 手机不支持armeabi-v7a架构时,根据游戏来选择架构

See merge request halo/android/assistant-android!2037
2025-01-10 18:01:24 +08:00
e92d89d498 fix: 手机不支持armeabi-v7a架构时,根据游戏来选择架构 2025-01-10 17:44:03 +08:00
a22858389b chore: 版本更新至 5.38.7 2025-01-10 13:55:24 +08:00
e9d091043d Merge branch 'hotfix/va-relative' into 'release'
feat: 同步商业版VA,修复权限问题。

See merge request halo/android/assistant-android!2036
2025-01-10 11:25:46 +08:00
db4ac95094 feat: 同步商业版VA,修复权限问题。
fix: 实名认证超大UI问题
fix: sentry va relative log.
2025-01-10 11:24:45 +08:00
13be47d440 Merge branch 'fix/search-page-crash' into 'release'
fix:https://sentry.shanqu.cc/organizations/lightgame/issues/423398/?project=22

See merge request halo/android/assistant-android!2035
2025-01-10 11:21:43 +08:00
beee098cfe fix:https://sentry.shanqu.cc/organizations/lightgame/issues/423398/?project=22 2025-01-10 11:17:26 +08:00
d67aaf956b Merge branch 'feat/GHZSCY-7046' into 'release'
feat: 补充启动广告图相关广告加载事件埋点—客户端 https://jira.shanqu.cc/browse/GHZSCY-7046

See merge request halo/android/assistant-android!2034
2025-01-09 17:29:21 +08:00
1ed9151b1f feat: 补充启动广告图相关广告加载事件埋点—客户端 https://jira.shanqu.cc/browse/GHZSCY-7046 2025-01-09 16:43:54 +08:00
13f20f6883 Merge branch 'hotfix/v5.38.6-1116/ad_view_background' into 'release'
fix: 还原自有开屏广告的背景颜色 https://jira.shanqu.cc/browse/GHZSCY-7360

See merge request halo/android/assistant-android!2033
2025-01-09 15:28:06 +08:00
78e320a192 fix: 还原自有开屏广告的背景颜色 https://jira.shanqu.cc/browse/GHZSCY-7360 2025-01-09 15:27:34 +08:00
e51db47fad Merge branch 'cherry-pick-f8a26ece' into 'release'
Merge branch 'fix/GHZSCY-7277' into 'dev'

See merge request halo/android/assistant-android!2032
2025-01-09 15:24:18 +08:00
ac02ea88b9 Merge branch 'fix/GHZSCY-7277' into 'dev'
修复错误的下载错误提示 https://jira.shanqu.cc/browse/GHZSCY-7277

See merge request halo/android/assistant-android!2025

(cherry picked from commit f8a26ece01)

54ee3ea3 fix: 游戏下载异常提示 https://jira.shanqu.cc/browse/GHZSCY-7277

Co-authored-by: 陈君陶 <chenjuntao@ghzhushou.com>
2025-01-09 15:23:53 +08:00
f60004fc81 Merge branch 'feat/GHZSCY-7359' into 'release'
需求合并

See merge request halo/android/assistant-android!2031
2025-01-09 15:05:29 +08:00
0cf39a82e2 Merge branch 'fix/viewstub_crashes' into 'release'
fix: 修复ViewStub偶发闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/422108/events/?project=22 https://sentry.shanqu.cc/organizations/lightgame/issues/425087/?project=22

See merge request halo/android/assistant-android!2030
2025-01-09 15:03:51 +08:00
315f244153 fix:【光环助手】包名检测及搜索页面在深色模式下的显示问题 https://jira.shanqu.cc/browse/GHZSCY-6985 2025-01-09 14:54:37 +08:00
f4bdc02d70 fix: 【光环助手】深色模式显示问题 https://jira.shanqu.cc/browse/GHZSCY-7121 2025-01-09 14:54:17 +08:00
aef39eb481 feat: 样式组件优化汇总—客户端 https://jira.shanqu.cc/browse/GHZSCY-6866 2025-01-09 14:53:37 +08:00
dc2e7147d9 fix: 修复ViewStub偶发闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/422108/events/?project=22 https://sentry.shanqu.cc/organizations/lightgame/issues/425087/?project=22 2025-01-09 14:49:58 +08:00
fdcb6342bf Merge branch 'hotfix/v5.38.6-1116/crashes' into 'release'
修复部分 5.38.6 线上闪退

See merge request halo/android/assistant-android!2029
2025-01-09 14:37:49 +08:00
b0da4f8986 Merge branch 'hotfix/v5.38.6-1116/blank_ad_view' into 'release'
fix: 优化开屏广告的显示,提高线程池的 core 线程数,限制视频开屏广告的触摸控制

See merge request halo/android/assistant-android!2028
2025-01-09 14:37:40 +08:00
f7cc906cc5 fix: 优化开屏广告的显示,提高线程池的 core 线程数,限制视频开屏广告的触摸控制 2025-01-09 14:37:40 +08:00
795fbabd90 Merge branch 'hotfix/v5.38.6-1116/login_culprit' into 'release'
修复`我的光环`页面在用户信息接口异常时的显示问题 https://jira.shanqu.cc/browse/GHZSCY-7340

See merge request halo/android/assistant-android!2027
2025-01-09 14:34:25 +08:00
e770f8a359 fix: 修复安装完成后更新安装信息时的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/395511 2025-01-09 11:49:38 +08:00
dd12b103be fix: 捕抓上报游戏启动日志的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/406179 2025-01-09 09:59:32 +08:00
21f4a398d5 fix: 处理数组越界闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/408904 2025-01-09 09:45:22 +08:00
f8a26ece01 Merge branch 'fix/GHZSCY-7277' into 'dev'
修复错误的下载错误提示 https://jira.shanqu.cc/browse/GHZSCY-7277

See merge request halo/android/assistant-android!2025
2025-01-08 10:10:32 +08:00
54ee3ea376 fix: 游戏下载异常提示 https://jira.shanqu.cc/browse/GHZSCY-7277 2025-01-07 17:56:09 +08:00
8dfb1644a8 fix: 登录状态显示问题 https://jira.shanqu.cc/browse/GHZSCY-7340 2025-01-07 17:48:53 +08:00
945e034f88 Merge branch 'fix/bind_phone_toRequestBody' into 'dev'
fix: 修复 bindPhone 相关接口 toRequestBody 时没有附带正确 body 的问题; 还原原生 settings 实现

See merge request halo/android/assistant-android!2024
2025-01-06 15:52:23 +08:00
a5ca88729a fix: 修复 bindPhone 相关接口 toRequestBody 时没有附带正确 body 的问题; 还原原生 settings 实现 2025-01-06 15:51:40 +08:00
d4bb3835cf Merge branch 'revert-e30557e2' into 'dev'
Revert "fix:https://jira.shanqu.cc/browse/GHZSCY-7300 【光环助手】预约上线弹窗神策数据上报问题"

See merge request halo/android/assistant-android!2022
2024-12-31 18:13:23 +08:00
3c63b74900 Revert "fix:https://jira.shanqu.cc/browse/GHZSCY-7300 【光环助手】预约上线弹窗神策数据上报问题"
This reverts merge request !2020
2024-12-31 18:10:16 +08:00
712cd21f6e Merge branch 'feat/GHZSCY-7168' into 'dev'
feat:CPM微信小游戏“换一批”功能优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7168

See merge request halo/android/assistant-android!2012
2024-12-31 16:58:00 +08:00
2b9098faa7 feat:CPM微信小游戏“换一批”功能优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-7168 2024-12-31 16:38:25 +08:00
c0fde44534 Merge branch 'feat/upload_route_doc' into 'dev'
feat: 光环助手跳转链接规则优化 (补充跳转文档上传的脚本)

See merge request halo/android/assistant-android!2021
2024-12-31 16:35:28 +08:00
785f99f0ef feat: 光环助手跳转链接规则优化 (补充跳转文档上传的脚本) 2024-12-31 16:34:59 +08:00
dbd733aec6 Merge branch 'fix/GHZSCY-7300' into 'dev'
fix:https://jira.shanqu.cc/browse/GHZSCY-7300 【光环助手】预约上线弹窗神策数据上报问题

See merge request halo/android/assistant-android!2020
2024-12-31 15:46:36 +08:00
e30557e261 fix:https://jira.shanqu.cc/browse/GHZSCY-7300 【光环助手】预约上线弹窗神策数据上报问题 2024-12-31 15:45:05 +08:00
9744b95126 Merge branch 'fix/viewstub_crash' into 'release'
fix: 修复ViewStub偶发闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/423818/?project=22

See merge request halo/android/assistant-android!2019
2024-12-27 15:14:25 +08:00
009608165c Merge branch 'fix-issues-421826' into 'release'
fix:https://sentry.shanqu.cc/organizations/lightgame/issues/421826/?project=22

See merge request halo/android/assistant-android!2018
2024-12-27 14:02:39 +08:00
98356a7dd7 fix: 修复ViewStub偶发闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/423818/?project=22 2024-12-27 13:56:10 +08:00
8389041379 fix:https://sentry.shanqu.cc/organizations/lightgame/issues/421826/?project=22 2024-12-27 13:49:29 +08:00
e4352590e9 Merge branch 'feat/GHZSCY-7052' into 'dev'
feat: 游戏下载关闭状态新增“跳转第三方”—客户端 https://jira.shanqu.cc/browse/GHZSCY-7052

See merge request halo/android/assistant-android!2017
2024-12-26 10:41:37 +08:00
4f68a52d54 feat: 游戏下载关闭状态新增“跳转第三方”—客户端 https://jira.shanqu.cc/browse/GHZSCY-7052 2024-12-26 10:41:37 +08:00
93f87c8022 Merge branch 'feat/GHZSCY-6866' into 'dev'
feat: 样式组件优化汇总—客户端 https://jira.shanqu.cc/browse/GHZSCY-6866

See merge request halo/android/assistant-android!2016
2024-12-24 11:42:13 +08:00
a77beed7db feat: 样式组件优化汇总—客户端 https://jira.shanqu.cc/browse/GHZSCY-6866 2024-12-24 11:42:13 +08:00
112ddfda13 Merge branch 'feat/GHZSCY-6945' into 'dev'
feat: 消息通知:极光推送本地化—客户端 https://jira.shanqu.cc/browse/GHZSCY-6945

See merge request halo/android/assistant-android!2015
2024-12-24 11:41:36 +08:00
14cf39f10b feat: 消息通知:极光推送本地化—客户端 https://jira.shanqu.cc/browse/GHZSCY-6945 2024-12-24 11:41:36 +08:00
d775e804fd Merge branch 'feat/GHZSCY-6824' into 'dev'
feat: 新游开测相关功能优化(第四期)—客户端 https://jira.shanqu.cc/browse/GHZSCY-6824

See merge request halo/android/assistant-android!2014
2024-12-24 10:11:27 +08:00
d65062af26 feat: 新游开测相关功能优化(第四期)—客户端 https://jira.shanqu.cc/browse/GHZSCY-6824 2024-12-24 10:11:27 +08:00
2522bf5654 Merge branch 'fix/parallel_game_auth' into 'dev'
fix: 修复双开分身游戏无法授权登录的问题

See merge request halo/android/assistant-android!2013
2024-12-19 17:03:24 +08:00
92177ae5f2 fix: 修复双开分身游戏无法授权登录的问题 2024-12-19 17:03:24 +08:00
21ab15a907 Merge branch 'feat/GHZSCY-6335' into 'dev'
feat:【光环助手】实名认证-实名状态更新——畅玩助手 https://jira.shanqu.cc/browse/GHZSCY-6335

See merge request halo/android/assistant-android!2011
2024-12-16 14:38:15 +08:00
5bea92c08e feat:【光环助手】实名认证-实名状态更新——畅玩助手 https://jira.shanqu.cc/browse/GHZSCY-6335 2024-12-16 14:04:38 +08:00
da6725e444 Merge branch 'feat/GHZSCY-6335' into 'dev'
feat:【光环助手】实名认证-实名状态更新——畅玩助手 https://jira.shanqu.cc/browse/GHZSCY-6335

See merge request halo/android/assistant-android!2010
2024-12-16 11:51:21 +08:00
2a2e887ddf feat:【光环助手】实名认证-实名状态更新——畅玩助手 https://jira.shanqu.cc/browse/GHZSCY-6335 2024-12-16 11:41:22 +08:00
cc39a754db build: 合并 vasdk 在 release 分支相关的内容 2024-12-11 17:03:15 +08:00
b14cd3d143 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt
#	app/src/main/java/com/gh/vspace/VHelper.kt
#	dependencies.gradle
#	vasdk
2024-12-11 16:47:12 +08:00
dc5b354861 Merge branch 'feat/GHZSCY-7039' into 'dev'
fix: https://jira.shanqu.cc/browse/GHZSCY-7037 实名认证弹窗层级优化

See merge request halo/android/assistant-android!2009
2024-12-11 16:32:09 +08:00
64462ebdbe fix: https://jira.shanqu.cc/browse/GHZSCY-7037 实名认证弹窗层级优化 2024-12-11 16:31:23 +08:00
2e63257523 Merge branch 'fix/game_collection_square_crash' into 'release'
fix: 修复游戏单广场闪退问题...

See merge request halo/android/assistant-android!2007
2024-12-09 10:36:46 +08:00
c69d117ee7 Merge branch 'feat/remove-gitlab-test-branch' into 'dev'
feat:移除gitlab-ci测试分支

See merge request halo/android/assistant-android!2006
2024-12-09 10:30:56 +08:00
ddccb25559 feat:移除gitlab-ci测试分支 2024-12-09 10:30:27 +08:00
913ea39302 Merge branch 'feature-GHZS-5572' into 'dev'
feat: 搜索业务-新增搜索发现取代热门标签—客户端 https://jira.shanqu.cc/browse/GHZSCY-5572

See merge request halo/android/assistant-android!1922
2024-12-09 10:27:39 +08:00
1002d02f12 feat: 搜索业务-新增搜索发现取代热门标签—客户端 https://jira.shanqu.cc/browse/GHZSCY-5572 2024-12-09 10:27:39 +08:00
fa663cd2f6 fix: 修复游戏单广场闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/379887/?project=22&query=is%3Aunresolved+assigned%3Ame&referrer=issue-stream&statsPeriod=14d 2024-12-09 09:59:53 +08:00
19af061311 Merge branch 'feat/GHZSCY-7123' into 'release'
feat:【光环助手】游戏搜索-排序专题 显示问题 https://jira.shanqu.cc/browse/GHZSCY-7123

See merge request halo/android/assistant-android!2004
2024-12-06 17:22:38 +08:00
d643795fa3 feat:【光环助手】游戏搜索-排序专题 显示问题 https://jira.shanqu.cc/browse/GHZSCY-7123 2024-12-06 17:22:38 +08:00
44d93b7527 Merge branch 'fix/sentry-va' into 'dev'
fix: sentry 捕获的异常 https://sentry.shanqu.cc/organizations/lightgame/issues/398398/?project=22

See merge request halo/android/assistant-android!2005
2024-12-06 16:55:03 +08:00
c3d55d4ff9 fix: sentry crash[https://sentry.shanqu.cc/organizations/lightgame/issues/399032/?project=22] 2024-12-06 16:46:46 +08:00
d6f35c5942 Merge branch 'fix/GHZSCY-7121' into 'dev'
fix: 【光环助手】深色模式显示问题 https://jira.shanqu.cc/browse/GHZSCY-7121

See merge request halo/android/assistant-android!2003
2024-12-05 11:07:45 +08:00
c53c1b8228 fix: 【光环助手】深色模式显示问题 https://jira.shanqu.cc/browse/GHZSCY-7121 2024-12-05 11:07:45 +08:00
61b967e533 fix: sentry 捕获的异常 https://sentry.shanqu.cc/organizations/lightgame/issues/398398/?project=22
https://sentry.shanqu.cc/organizations/lightgame/issues/397892/?project=22
2024-12-03 18:01:30 +08:00
b1f2d0a303 Merge branch 'fix/sentry-621063' into 'release'
fix: Sentry-421063 畅玩游戏启动弹窗异步更新下载游戏数量UI时导致的崩溃问题...

See merge request halo/android/assistant-android!2002
2024-12-03 14:10:47 +08:00
bb906f0bb8 fix: Sentry-421063 畅玩游戏启动弹窗异步更新下载游戏数量UI时导致的崩溃问题... 2024-12-03 14:10:47 +08:00
6f242dcc95 Merge branch 'fix/view_stub_crash' into 'release'
fix: 补充ViewStub闪退Sentry埋点

See merge request halo/android/assistant-android!2001
2024-12-03 13:42:44 +08:00
b47a64c63d fix: 补充ViewStub闪退Sentry埋点 2024-12-03 13:40:45 +08:00
948df2582c Merge branch 'fix/view_stub_crash' into 'release'
fix: 捕获ViewStub偶发的空指针闪退问题...

See merge request halo/android/assistant-android!2000
2024-12-03 12:04:31 +08:00
35edcf1d68 fix: 捕获ViewStub偶发的空指针闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/418647/events/1d426e3ceda5477c9afbc6712d335b22/?project=22 2024-12-03 11:40:14 +08:00
286d7650f2 Merge branch 'hotfix/v5.38.6-1116/crashes' into 'release'
修复部分线上闪退问题

See merge request halo/android/assistant-android!1999
2024-12-03 10:43:39 +08:00
e566ab838f fix: 捕抓磁盘满了时的闪退 https://sentry.shanqu.cc/organizations/lightgame/issues/397785 2024-12-03 09:31:09 +08:00
cae720d4ec Merge branch 'fix/auth' into 'release'
fix: 修复未打开过光环时无法获取登录状态并授权的问题

See merge request halo/android/assistant-android!1998
2024-12-02 17:21:28 +08:00
925516724f fix: 修复未打开过光环时无法获取登录状态并授权的问题 2024-12-02 17:21:27 +08:00
a5f807c038 fix: 修复下载完成清理资源时因为磁盘满了引起的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/397443/ 2024-12-02 14:52:37 +08:00
f442a70bd3 Merge branch 'fix/delete_appointment_crash' into 'release'
fix:https://sentry.shanqu.cc/organizations/lightgame/issues/423693/?project=22...

See merge request halo/android/assistant-android!1997
2024-12-02 14:42:27 +08:00
9b3dab9897 fix:https://sentry.shanqu.cc/organizations/lightgame/issues/423693/?project=22... 2024-12-02 14:42:27 +08:00
d939aae901 fix: 移除为了能正常收取 BroadcastReceiver 而创建的 InstallService (后续已改为回到应用刷新列表) https://sentry.shanqu.cc/organizations/lightgame/issues/389377/ 2024-12-02 14:31:29 +08:00
028974ec0d fix: 捕抓磁盘已满时下载简单内容造成的闪退 https://sentry.shanqu.cc/organizations/lightgame/issues/401379 2024-12-02 11:42:18 +08:00
ecd4610186 fix: 捕抓磁盘已满时下载广告插件造成的闪退 https://sentry.shanqu.cc/organizations/lightgame/issues/418801/ 2024-12-02 11:17:02 +08:00
21e5f2c98d Merge branch 'fix/webview_crash' into 'release'
fix: 修复某些机型启用WebView深色模式出现的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/421910

See merge request halo/android/assistant-android!1996
2024-12-02 10:57:52 +08:00
71c0cfe350 fix: 修复某些机型启用WebView深色模式出现的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/421910 2024-12-02 10:55:37 +08:00
5d4648b3d2 feat: 推广包快手API新增次留上报 https://jira.shanqu.cc/browse/GHZSCY-7048 2024-11-27 15:59:53 +08:00
3b8b60bc6b Merge branch 'fix/GHZSCY-7019' into 'release'
fix:【光环助手】自定义页面的搜索显示问题 https://jira.shanqu.cc/browse/GHZSCY-7019

See merge request halo/android/assistant-android!1995
2024-11-27 14:07:54 +08:00
ac59158dbb fix:【光环助手】自定义页面的搜索显示问题 https://jira.shanqu.cc/browse/GHZSCY-7019 2024-11-27 14:07:54 +08:00
5becdf2095 chore: 版本更新至 5.38.6 2024-11-27 11:42:36 +08:00
a88b49344f Merge branch 'hotfix/v5.38.5-1115/remove_registeraion_id' into 'release'
fix: 移除极光 registration_id

See merge request halo/android/assistant-android!1994
2024-11-27 10:43:19 +08:00
f34646cde8 fix: 移除极光 registration_id 2024-11-27 10:42:15 +08:00
bc4bb9b7c6 feat: 关于投诉邮箱部分数据遗失的对外说明 https://jira.shanqu.cc/browse/GHZSCY-7033 2024-11-25 17:46:05 +08:00
9e8ffce772 Merge branch 'hotfix/v5.38.5-1115/vgame_config' into 'release'
fix: 修复接口请求失败时会把畅玩入口关闭的问题

See merge request halo/android/assistant-android!1993
2024-11-25 16:07:13 +08:00
008985489a fix: 修复接口请求失败时会把畅玩入口关闭的问题 2024-11-25 16:01:07 +08:00
2f3fbd3e7c Merge branch 'fix/custom_page_missing_required_view_id' into 'release'
fix:https://sentry.shanqu.cc/organizations/lightgame/issues/408589/events/edfa...

See merge request halo/android/assistant-android!1992
2024-11-25 09:26:26 +08:00
abef224830 fix:https://sentry.shanqu.cc/organizations/lightgame/issues/408589/events/edfa... 2024-11-25 09:26:26 +08:00
8feb9b788e Merge branch 'hotfix/v5.35.5-1115/auth_crash' into 'release'
fix: 修复授权登录页面的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/373402/?project=22

See merge request halo/android/assistant-android!1991
2024-11-25 09:22:52 +08:00
0a059deb44 fix: 修复授权登录页面的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/373402/?project=22 2024-11-22 10:14:27 +08:00
448160d255 Merge branch 'hotfix/v5.38.4-1114/va' into 'release'
fix: 修复混淆把这个方法移除了。

See merge request halo/android/assistant-android!1990
2024-11-21 14:45:54 +08:00
533f93a340 fix: 修复混淆把这个方法移除了。 2024-11-21 14:44:58 +08:00
d80b8a97a3 chore: 版本更新至 5.38.5 2024-11-21 11:50:17 +08:00
f2e6d98788 Merge branch 'feat/GHZSCY-6923' into 'release'
feat: CPM微信小游戏优化第二期—客户端 https://jira.shanqu.cc/browse/GHZSCY-6923

See merge request halo/android/assistant-android!1986
2024-11-21 11:27:25 +08:00
238a83c5fe feat: CPM微信小游戏优化第二期—客户端 https://jira.shanqu.cc/browse/GHZSCY-6923 2024-11-21 11:27:25 +08:00
ca71f23363 Merge branch 'hotfix/v5.38.4-1114/GHZSCY-7004' into 'release'
fix: 神策数据库部分字段超存储上线的问题 https://jira.shanqu.cc/browse/GHZSCY-7004

See merge request halo/android/assistant-android!1989
2024-11-21 09:57:59 +08:00
c96b41c621 fix: 神策数据库部分字段超存储上线的问题 https://jira.shanqu.cc/browse/GHZSCY-7004 2024-11-21 09:57:59 +08:00
9afb35bbb9 feat: 将与服务器校对时间的间隔改为 24 小时一次 2024-11-20 16:49:04 +08:00
e8ee63d52c Merge branch 'hotfix/v5.38.4-1114/GHZSCY-7004' into 'release'
fix: 神策数据库部分字段超存储上线的问题 https://jira.shanqu.cc/browse/GHZSCY-7004

See merge request halo/android/assistant-android!1987
2024-11-20 11:34:56 +08:00
90359cfffd fix: 神策数据库部分字段超存储上线的问题 https://jira.shanqu.cc/browse/GHZSCY-7004 2024-11-20 10:05:28 +08:00
a3da883033 Merge branch 'revert-8c95286f' into 'release'
Revert "Merge branch 'feat/GHZSCY-6923' into 'release'"

See merge request halo/android/assistant-android!1984
2024-11-19 18:16:53 +08:00
a9f1437a52 Revert "Merge branch 'feat/GHZSCY-6923' into 'release'" 2024-11-19 18:16:53 +08:00
8c95286fe5 Merge branch 'feat/GHZSCY-6923' into 'release'
feat: CPM微信小游戏优化第二期—客户端 https://jira.shanqu.cc/browse/GHZSCY-6923

See merge request halo/android/assistant-android!1982
2024-11-19 18:12:55 +08:00
8a835a94e3 feat: CPM微信小游戏优化第二期—客户端 https://jira.shanqu.cc/browse/GHZSCY-6923 2024-11-19 16:46:05 +08:00
14ec4aed3a Merge branch 'hotfix/v5.38.4-1114/GHZSCY-7004' into 'release'
fix: 神策数据库部分字段超存储上线的问题 https://jira.shanqu.cc/browse/GHZSCY-7004

See merge request halo/android/assistant-android!1981
2024-11-19 15:37:52 +08:00
07f956a1f0 fix: 神策数据库部分字段超存储上线的问题 https://jira.shanqu.cc/browse/GHZSCY-7004 2024-11-19 15:26:12 +08:00
6ef8d04e57 Merge branch 'fix/jg_push' into 'release'
fix: 神策上报极光推送ID改为profileSet方法

See merge request halo/android/assistant-android!1980
2024-11-18 18:21:45 +08:00
30248ef205 fix: 神策上报极光推送ID改为profileSet方法 2024-11-18 18:20:40 +08:00
87b9bb0bf3 fix: 修复下载过程中 response code 为 304 时造成下载异常的问题 2024-11-18 11:35:56 +08:00
b346882bfa Merge branch 'fix/GHZSCY-6939-merge' into 'release'
fix:【光环助手】“视频横屏滑动”专题视频播放问题 https://jira.shanqu.cc/browse/GHZSCY-6939

See merge request halo/android/assistant-android!1979
2024-11-15 17:51:24 +08:00
eeddb5ea51 fix:【光环助手】“视频横屏滑动”专题视频播放问题 https://jira.shanqu.cc/browse/GHZSCY-6939 2024-11-15 16:55:35 +08:00
2ccdd93e47 build: 处理编译问题
Signed-off-by: chenjuntao <chenjuntao@ghzhushou.com>
2024-11-14 16:31:49 +08:00
d98466f60f build: 路由文档仅手动启用时生成 2024-11-14 16:19:42 +08:00
2afc2bc9d6 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/search/viewmodel/SearchGameListViewModel.kt
#	dependencies.gradle
#	feature/floating-window/src/demo/java/com/gh/gamecenter/feedback/view/help/QaFeedbackDialogFragment.kt
#	vasdk
2024-11-14 15:21:44 +08:00
243b0ccbd4 Merge branch 'fix/GHZSCY-6575' into 'dev'
fix: 下载按钮由双下载切换回单下载时的问题 https://jira.shanqu.cc/browse/GHZSCY-6575

See merge request halo/android/assistant-android!1878
2024-11-14 15:15:46 +08:00
78f9aa3ee4 Merge branch 'hotfix/v5.38.4-1114/GHZSCY-6927' into 'release'
fix: 深色模式下富文本指定颜色无法显示的问题 https://jira.shanqu.cc/browse/GHZSCY-6927

See merge request halo/android/assistant-android!1978
2024-11-14 10:21:48 +08:00
f355eae99b Merge branch 'feat/GHZSCY-6985' into 'dev'
fix:【光环助手】包名检测及搜索页面在深色模式下的显示问题 https://jira.shanqu.cc/browse/GHZSCY-6985

See merge request halo/android/assistant-android!1977
2024-11-13 17:39:06 +08:00
3c1af6e02d fix:【光环助手】包名检测及搜索页面在深色模式下的显示问题 https://jira.shanqu.cc/browse/GHZSCY-6985 2024-11-13 17:37:23 +08:00
57a8b96f56 Merge branch 'feat/GHZSCY-6984' into 'dev'
feat:搜索业务:神策埋点相关搜索结果点击事件新增序号属性position—客户端 https://jira.shanqu.cc/browse/GHZSCY-6984

See merge request halo/android/assistant-android!1976
2024-11-13 16:49:15 +08:00
71265e0ea7 feat:搜索业务:神策埋点相关搜索结果点击事件新增序号属性position—客户端 https://jira.shanqu.cc/browse/GHZSCY-6984 2024-11-13 16:46:09 +08:00
b007e63b5e Merge branch 'fix/GHZSCY-6971' into 'dev'
fix:【光环助手】2410后台优化-游戏专题-1112-测试-客户端 https://jira.shanqu.cc/browse/GHZSCY-6971

See merge request halo/android/assistant-android!1975
2024-11-12 17:40:35 +08:00
c281ea7ac5 fix:【光环助手】2410后台优化-游戏专题-1112-测试-客户端 https://jira.shanqu.cc/browse/GHZSCY-6971 2024-11-12 17:39:02 +08:00
f34ad0675d Merge branch 'hotfix/v5.38.4-1114/va' into 'release'
feat: 1. Android 8.0 以下不初始化VA。2.去掉VA的javahook。3. 去掉VA外部应用监听。

See merge request halo/android/assistant-android!1974
2024-11-12 17:24:03 +08:00
36abcc9f19 feat: 1. Android 8.0 以下不初始化VA。2.去掉VA的javahook。3. 去掉VA外部应用监听。 2024-11-12 11:17:02 +08:00
d6443a401a Merge branch 'feat/GHZSCY-5738' into 'dev'
fix:【光环助手】客户端UI组件规范更新同步2024/06/17 https://jira.shanqu.cc/browse/GHZSCY-5738

See merge request halo/android/assistant-android!1973
2024-11-12 09:28:36 +08:00
6c8ea6ffb2 fix:【光环助手】客户端UI组件规范更新同步2024/06/17 https://jira.shanqu.cc/browse/GHZSCY-5738 2024-11-11 18:04:22 +08:00
ae878eddf1 Merge branch 'hotfix/v5.38.4-1114/remove_useless_import' into 'release'
fix: 移除无用 import

See merge request halo/android/assistant-android!1971
2024-11-11 18:03:45 +08:00
ece519115b fix: 移除无用 import 2024-11-11 18:03:01 +08:00
b9e0a8e37a Merge branch 'hotfix/v5.38.4-1114/deadobject-crash' into 'release'
fix: 修复部分调用 PackageManager 相关的方法的闪退(提供异常时的回落)...

See merge request halo/android/assistant-android!1970
2024-11-11 17:35:26 +08:00
34ca8896ae fix: 修复部分调用 PackageManager 相关的方法的闪退(提供异常时的回落) https://sentry.shanqu.cc/organizations/lightgame/issues/418276/ https://sentry.shanqu.cc/organizations/lightgame/issues/417950/ 2024-11-11 17:24:40 +08:00
d6e19bfaff Merge branch 'fix/GHZSCY-6944' into 'release'
fix:【光环助手】神策埋点游戏单搜索结果点击事件游戏单标题的内容错误 https://jira.shanqu.cc/browse/GHZSCY-6944

See merge request halo/android/assistant-android!1969
2024-11-08 09:26:58 +08:00
943fb4d4e0 fix:【光环助手】神策埋点游戏单搜索结果点击事件游戏单标题的内容错误 https://jira.shanqu.cc/browse/GHZSCY-6944 2024-11-08 09:23:42 +08:00
2c5471d524 Merge branch 'fix/sentry-418688' into 'release'
fix: Sentry-418688 SearchActivity回调onSavedInstance后,调用FragmentManager的popBackStack引发的崩溃问题

See merge request halo/android/assistant-android!1968
2024-11-07 13:42:39 +08:00
cf527db60e fix: Sentry-418688 SearchActivity回调onSavedInstance后,调用FragmentManager的popBackStack引发的崩溃问题 2024-11-07 13:42:39 +08:00
f261991a55 fix: 深色模式下富文本指定颜色无法显示的问题 https://jira.shanqu.cc/browse/GHZSCY-6927
Signed-off-by: chenjuntao <chenjuntao@ghzhushou.com>
2024-11-06 15:49:31 +08:00
0f9f0b7c9a Merge branch 'feat/GHZSCY-6645' into 'dev'
feat:媒体文件上传控件优化 (二、三)—客户端 https://jira.shanqu.cc/browse/GHZSCY-6645

See merge request halo/android/assistant-android!1967
2024-11-06 15:09:48 +08:00
c29efbefd7 feat:媒体文件上传控件优化 (二、三)—客户端 https://jira.shanqu.cc/browse/GHZSCY-6645 2024-11-06 15:09:47 +08:00
ab66621751 chore: 版本更新至 5.38.4 2024-11-04 17:59:19 +08:00
af262c624a Merge branch 'feat/GHZSCY-6904' into 'release'
feat:【光环助手】搜索bug https://jira.shanqu.cc/browse/GHZSCY-6904

See merge request halo/android/assistant-android!1966
2024-11-04 16:28:48 +08:00
d2813ecbda feat:【光环助手】搜索bug https://jira.shanqu.cc/browse/GHZSCY-6904 2024-11-04 16:28:48 +08:00
0ea932e36d Merge branch 'hotfix/v5.38.3-1113/aidl_npe_crash' into 'release'
fix: 尝试修复aidl获取对象为空导致NPE。https://sentry.shanqu.cc/organizations/lightgame/issues/399032/?project=22

See merge request halo/android/assistant-android!1965
2024-11-04 14:35:50 +08:00
68151ed6f9 fix: 尝试修复aidl获取对象为空导致NPE。https://sentry.shanqu.cc/organizations/lightgame/issues/399032/?project=22 2024-11-04 14:34:53 +08:00
e6d2361008 Merge branch 'hotfix/v5.38.3-1113/concurrent_crash' into 'release'
fix: 修复部分 5.38.3 的线上闪退问题

See merge request halo/android/assistant-android!1964
2024-11-04 13:43:00 +08:00
570b777c8e Merge branch 'hotfix/v5.38.3-1113/crashes' into 'release'
修复Sentry上的闪退问题

See merge request halo/android/assistant-android!1963
2024-11-04 11:50:45 +08:00
0e557b2246 fix: 修复启动游戏时多线程操作闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/406116/?project=22
Signed-off-by: chenjuntao <chenjuntao@ghzhushou.com>
2024-11-04 11:50:41 +08:00
f155440814 fix: 修复下载 exception 异常为空时的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/416995/?project=22
Signed-off-by: chenjuntao <chenjuntao@ghzhushou.com>
2024-11-04 11:49:57 +08:00
62ba9fc7bf fix: 修复游戏详情评论页面重建时出现的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/379887/events/aa3bbc5102ed4a57b66c3c7fed5d7b34/?project=22 2024-11-04 11:26:00 +08:00
4637aa8808 fix: 修复下拉推送偶发的空指针闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/418647/events/1d426e3ceda5477c9afbc6712d335b22/?project=22 2024-11-04 11:24:08 +08:00
81998e3aad Merge branch 'fix/sentry-418235' into 'release'
fix: 畅玩启动提示弹窗游戏列表数组越界问题 https://sentry.shanqu.cc/organizations/lightgame/issues/418304/?project=22

See merge request halo/android/assistant-android!1962
2024-11-01 16:15:14 +08:00
82a8aa03ba fix: 畅玩启动提示弹窗游戏列表数组越界问题 https://sentry.shanqu.cc/organizations/lightgame/issues/418304/?project=22 2024-11-01 16:13:05 +08:00
c876711578 chore: 版本更新至 5.38.3 2024-11-01 09:37:56 +08:00
41fcee7f4d Merge branch 'feat/GHZSCY-6876' into 'release'
Resolve GHZSCY-6876 "Feat/"

See merge request halo/android/assistant-android!1961
2024-11-01 09:37:04 +08:00
0ccbc4d581 feat:一键登录SDK更新—客户端 https://jira.shanqu.cc/browse/GHZSCY-6876 2024-11-01 09:37:04 +08:00
56151bc38d Merge branch 'fix/va-test-install' into 'dev'
fix: 1. 测试版本没有 从SD卡安装 的问题。2. 重复卸载安装不生效的bug

See merge request halo/android/assistant-android!1960
2024-10-31 16:07:30 +08:00
b7a0f3e74b fix: 1. 测试版本没有 从SD卡安装 的问题。2. 重复卸载安装不生效的bug 2024-10-31 16:06:12 +08:00
f05fc73e3a Merge branch 'hotfix/v5.38.2-1112/binding_crash' into 'release'
fix: 修复 SearchToolbarTabWrapperFragment 页面 binding bindView 时的闪退问题...

See merge request halo/android/assistant-android!1959
2024-10-31 10:31:26 +08:00
ca3c545f26 Merge branch 'hotfix/v5.38.1-1111/GHZSCY-6855' into 'release'
fix: 神策下载按钮点击事件相关字段上报异常排查 https://jira.shanqu.cc/browse/GHZSCY-6855

See merge request halo/android/assistant-android!1958
2024-10-31 10:28:28 +08:00
226539328e fix: 修复 SearchToolbarTabWrapperFragment 页面 binding bindView 时的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/418028/?project=22
Signed-off-by: chenjuntao <chenjuntao@ghzhushou.com>
2024-10-31 10:13:36 +08:00
bb7db78b0c Merge branch 'hotfix/v5.38.2-1112/va_launch_crash' into 'release'
fix: 修复点击畅玩启动插屏广告出现的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/418073/?project=22

See merge request halo/android/assistant-android!1957
2024-10-31 09:47:03 +08:00
ede62c5363 fix: 修复点击畅玩启动插屏广告出现的闪退问题 https://sentry.shanqu.cc/organizations/lightgame/issues/418073/?project=22 2024-10-31 09:44:40 +08:00
12bb6824ea Merge branch 'fix/wx_subscribe_msg_response_handle' into 'release'
fix: 修复微信开服提醒消息回调处理异常问题

See merge request halo/android/assistant-android!1955
2024-10-30 14:44:16 +08:00
15c0950754 fix: 修复微信开服提醒消息回调处理异常问题 2024-10-30 14:42:55 +08:00
f86b7fe12a Merge branch 'hotfix/v5.38.2-1112/emulator_auth' into 'release'
fix: 修复雷电模拟器网游插件登录后跳转回游戏出现的闪退问题

See merge request halo/android/assistant-android!1954
2024-10-30 14:31:22 +08:00
d12cdbd34b fix: 修复雷电模拟器网游插件登录后跳转回游戏出现的闪退问题 2024-10-30 14:31:22 +08:00
8436d4eda3 Merge branch 'hotfix/v5.38.2-1112/multi_tab_loading' into 'release'
fix: 修复多tab导航页loading动画没有显示的问题

See merge request halo/android/assistant-android!1952
2024-10-29 13:51:10 +08:00
be832037a7 fix: 修复多tab导航页loading动画没有显示的问题 2024-10-29 13:41:36 +08:00
c75a7444a9 Merge branch 'feat/GHZSCY-5889-therouter' into 'dev'
feat: 光环助手跳转链接规则优化(路由框架切换至 theRouter) https://jira.shanqu.cc/browse/GHZSCY-5889

See merge request halo/android/assistant-android!1925
2024-10-28 17:42:56 +08:00
0ae6279d60 feat: 光环助手跳转链接规则优化(路由框架切换至 theRouter) https://jira.shanqu.cc/browse/GHZSCY-5889 2024-10-28 17:42:56 +08:00
b620257825 Merge branch 'hotfix/v5.38.2-1112/GHZSCY-6859' into 'release'
fix:【光环助手】深色模式切换显示问题 https://jira.shanqu.cc/browse/GHZSCY-6859

See merge request halo/android/assistant-android!1951
2024-10-28 17:13:30 +08:00
6c88cace99 fix:【光环助手】深色模式切换显示问题 https://jira.shanqu.cc/browse/GHZSCY-6859 2024-10-28 17:11:23 +08:00
f875fa1b14 Merge branch 'feat/GHZSCY-6828' into 'release'
feat: CPM微信小游戏一期优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-6828

See merge request halo/android/assistant-android!1948
2024-10-28 14:54:49 +08:00
8076c3a70a feat: CPM微信小游戏一期优化—客户端 https://jira.shanqu.cc/browse/GHZSCY-6828 2024-10-28 14:54:49 +08:00
bebab317a3 fix: 神策下载按钮点击事件相关字段上报异常排查 https://jira.shanqu.cc/browse/GHZSCY-6855 2024-10-28 14:38:06 +08:00
c450ca570d Merge branch 'hotfix/v5.38.2-1112/GHZSCY-6854' into 'release'
fix:【光环助手】切换深色/普通模式tab字体颜色变化问题 https://jira.shanqu.cc/browse/GHZSCY-6854

See merge request halo/android/assistant-android!1950
2024-10-28 10:23:56 +08:00
d239b0755f fix:【光环助手】切换深色/普通模式tab字体颜色变化问题 https://jira.shanqu.cc/browse/GHZSCY-6854 2024-10-28 10:20:53 +08:00
f4b54cbfa0 chore: 版本更新至 5.39.0
Signed-off-by: chenjuntao <chenjuntao@ghzhushou.com>
2024-10-25 11:23:43 +08:00
0a187b2242 fix: 下载按钮由双下载切换回单下载时的问题 https://jira.shanqu.cc/browse/GHZSCY-6575
Signed-off-by: chenjuntao <chenjuntao@ghzhushou.com>
2024-08-26 14:16:37 +08:00
1445 changed files with 47142 additions and 24842 deletions

View File

@ -157,3 +157,4 @@ oss-upload&send-email:
only: only:
- dev - dev
- release - release

View File

@ -2,7 +2,9 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' // kotlin apply plugin: 'kotlin-android' // kotlin
apply plugin: 'kotlin-parcelize' apply plugin: 'kotlin-parcelize'
apply plugin: 'com.google.devtools.ksp'
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
apply plugin: 'therouter'
import groovy.xml.XmlUtil import groovy.xml.XmlUtil
@ -51,6 +53,10 @@ android {
} }
} }
ksp {
arg("ROUTER_MODULE_NAME", project.getName())
}
defaultConfig { defaultConfig {
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
multiDexEnabled true multiDexEnabled true
@ -107,6 +113,7 @@ android {
buildConfigField "String", "WECHAT_SECRET", "\"${WECHAT_SECRET}\"" buildConfigField "String", "WECHAT_SECRET", "\"${WECHAT_SECRET}\""
buildConfigField "String", "TENCENT_APPID", "\"${TENCENT_APPID}\"" buildConfigField "String", "TENCENT_APPID", "\"${TENCENT_APPID}\""
buildConfigField "String", "WEIBO_APPKEY", "\"${WEIBO_APPKEY}\"" buildConfigField "String", "WEIBO_APPKEY", "\"${WEIBO_APPKEY}\""
buildConfigField "String", "DSP_API_HOST","\"${DSP_API_HOST}\""
// 一体包的32位畅玩游戏助手包名 // 一体包的32位畅玩游戏助手包名
buildConfigField "String", "EXT_PACKAGE_NAME", "\"${rootProject.ext.EXT_PACKAGE_NAME}\"" buildConfigField "String", "EXT_PACKAGE_NAME", "\"${rootProject.ext.EXT_PACKAGE_NAME}\""
} }
@ -123,12 +130,6 @@ android {
} }
} }
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.name)
}
}
packagingOptions { packagingOptions {
// exclude 部分冗余的文件 // exclude 部分冗余的文件
exclude 'META-INF/gradle/incremental.annotation.processors' exclude 'META-INF/gradle/incremental.annotation.processors'
@ -153,7 +154,7 @@ android {
zipAlignEnabled false zipAlignEnabled false
signingConfig signingConfigs.debug signingConfig signingConfigs.debug
buildConfigField "String", "EXPOSURE_REPO", "\"test\"" buildConfigField "String", "EXPOSURE_REPO", "\"exposure\""
buildConfigField "String", "EXPOSURE_VERSION", "\"E4\"" buildConfigField "String", "EXPOSURE_VERSION", "\"E4\""
multiDexKeepProguard file("tinker_multidexkeep.pro") multiDexKeepProguard file("tinker_multidexkeep.pro")
@ -197,7 +198,7 @@ android {
java.srcDirs = ['src/main/java', "src/default/java"] java.srcDirs = ['src/main/java', "src/default/java"]
} }
internal { internal {
java.srcDirs = ['src/main/java', "src/default/java"] java.srcDirs = ['src/main/java', "src/default/java", "src/internal/java"]
} }
tea { tea {
java.srcDirs = ['src/main/java', 'src/tea/java'] java.srcDirs = ['src/main/java', 'src/tea/java']
@ -346,7 +347,7 @@ repositories {
android.applicationVariants.configureEach { variant -> android.applicationVariants.configureEach { variant ->
variant.mergeAssets.doLast { variant.mergeAssets.doLast {
def assetDir = variant.mergeAssetsProvider.get().outputDir.get() def assetDir = variant.mergeAssetsProvider.get().outputDir.get()
def unwantedAssets = ['2011394667', 'gdt_plugin/gdtadv2.jar'] def unwantedAssets = ['1832823466', 'gdt_plugin/gdtadv2.jar']
unwantedAssets.each { assetPath -> unwantedAssets.each { assetPath ->
def file = new File([assetDir, assetPath].join(File.separator)) def file = new File([assetDir, assetPath].join(File.separator))
@ -378,7 +379,7 @@ dependencies {
implementation "androidx.annotation:annotation:${annotation}" implementation "androidx.annotation:annotation:${annotation}"
implementation "androidx.viewpager2:viewpager2:${viewpager2}" implementation "androidx.viewpager2:viewpager2:${viewpager2}"
kapt "androidx.room:room-compiler:${room}" ksp("androidx.room:room-compiler:${room}")
implementation "com.tencent.vasdolly:helper:${apkChannelPackage}" implementation "com.tencent.vasdolly:helper:${apkChannelPackage}"
implementation "com.tencent.vasdolly:writer:${apkChannelPackage}" implementation "com.tencent.vasdolly:writer:${apkChannelPackage}"
@ -402,7 +403,7 @@ dependencies {
exclude module: "gsyvideoplayer-androidvideocache" exclude module: "gsyvideoplayer-androidvideocache"
exclude group: "tv.danmaku.ijk.media" exclude group: "tv.danmaku.ijk.media"
}) })
implementation ("com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-exo_player2:$gsyVideo") { implementation("com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-exo_player2:$gsyVideo") {
exclude group: 'com.google.android.exoplayer', module: 'extension-rtmp' exclude group: 'com.google.android.exoplayer', module: 'extension-rtmp'
} }
@ -428,7 +429,8 @@ dependencies {
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:${desugarJdkLibs}" coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:${desugarJdkLibs}"
kapt "com.alibaba:arouter-compiler:$arouterVersion" kapt "com.google.auto.service:auto-service:${autoServiceVersion}"
ksp "cn.therouter:apt:${routerVersion}"
implementation project(':ndownload') implementation project(':ndownload')
implementation project(':vspace-bridge:vspace') implementation project(':vspace-bridge:vspace')
@ -450,9 +452,9 @@ dependencies {
exclude group: 'androidx.swiperefreshlayout' exclude group: 'androidx.swiperefreshlayout'
} }
// implementation(project(':module_setting_compose')) { // implementation(project(':module_setting_compose')) {
// exclude group: 'androidx.swiperefreshlayout' // exclude group: 'androidx.swiperefreshlayout'
// } // }
if (!gradle.ext.excludeOptionalModules || gradle.ext.enablePkg) { if (!gradle.ext.excludeOptionalModules || gradle.ext.enablePkg) {
implementation(project(':feature:pkg')) implementation(project(':feature:pkg'))
@ -509,6 +511,10 @@ dependencies {
implementation(project(':feature:sentry')) implementation(project(':feature:sentry'))
} }
if (gradle.ext.enableRouteDoc) {
ksp project(":feature:route_doc")
}
implementation(project(':feature:media_select')) implementation(project(':feature:media_select'))
implementation(project(":module_va_api")) implementation(project(":module_va_api"))
@ -521,6 +527,20 @@ dependencies {
debugImplementation 'com.bytedance.android:shadowhook:1.0.9' debugImplementation 'com.bytedance.android:shadowhook:1.0.9'
debugImplementation 'io.github.shiqos:wytrace:1.0.1' debugImplementation 'io.github.shiqos:wytrace:1.0.1'
if (!gradle.ext.excludeOptionalModules || gradle.ext.enableAccelerator) {
implementation(project(":feature:accelerator"))
}
if (!gradle.ext.excludeOptionalModules || gradle.ext.enableAliPay) {
implementation(project(":feature:ali_pay"))
}
if(!gradle.ext.excludeOptionalModules || gradle.ext.enableWechatPay){
implementation(project(":feature:wechat_pay"))
}
implementation "me.xdrop:fuzzywuzzy:${fuzzyVersion}"
} }
File propFile = file('sign.properties') File propFile = file('sign.properties')

View File

@ -20,6 +20,7 @@
-keep class com.gh.gamecenter.db.info.* {*;} -keep class com.gh.gamecenter.db.info.* {*;}
-keep class com.gh.gamecenter.entity.** {<fields>;} -keep class com.gh.gamecenter.entity.** {<fields>;}
-keep class com.gh.gamecenter.qa.entity.** {<fields>;} -keep class com.gh.gamecenter.qa.entity.** {<fields>;}
-keep class com.gh.gamecenter.gamedetail.entity.** {<fields>;}
-keep class com.gh.download.DownloadDataSimpleEntity {<fields>;} -keep class com.gh.download.DownloadDataSimpleEntity {<fields>;}
-keep class com.gh.gamecenter.floatingwindow.FloatingWindowEntity {<fields>;} -keep class com.gh.gamecenter.floatingwindow.FloatingWindowEntity {<fields>;}
-keep class com.gh.gamecenter.BR -keep class com.gh.gamecenter.BR
@ -76,6 +77,7 @@
### TEA ### TEA
-keep class com.gh.gamecenter.TeaHelper { *; } -keep class com.gh.gamecenter.TeaHelper { *; }
-keep class com.bytedance.ads.convert.broadcast.common.EncryptionTools {*;}
### EasyFloat ### EasyFloat
-keep class com.lzf.easyfloat.* {*;} -keep class com.lzf.easyfloat.* {*;}

Binary file not shown.

View File

@ -3,9 +3,14 @@ package com.gh.vspace.installexternalgames
import android.Manifest import android.Manifest
import android.app.Dialog import android.app.Dialog
import android.content.ComponentName import android.content.ComponentName
import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Environment
import android.provider.Settings
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.gh.common.util.DialogUtils import com.gh.common.util.DialogUtils
@ -37,6 +42,9 @@ class InstallExternalGameFragment : ToolbarFragment(), OnItemClickListener {
private var uninstallDisposable: Disposable? = null private var uninstallDisposable: Disposable? = null
private var shouldScan = false
override fun getLayoutId() = 0 override fun getLayoutId() = 0
override fun getInflatedLayout() = override fun getInflatedLayout() =
@ -74,7 +82,24 @@ class InstallExternalGameFragment : ToolbarFragment(), OnItemClickListener {
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
} }
requestStoragePermission()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
shouldScan = true
AlertDialog.Builder(requireContext()).setMessage("请在设置页面允许光环助手")
.setNegativeButton("") { dialog, which ->
val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}.show()
} else {
mViewModel.scanPaths()
}
} else {
requestStoragePermission()
}
} }
private fun requestStoragePermission() { private fun requestStoragePermission() {
@ -96,6 +121,12 @@ class InstallExternalGameFragment : ToolbarFragment(), OnItemClickListener {
} }
} }
override fun onStart() {
super.onStart()
if (shouldScan) {
mViewModel.scanPaths()
}
}
private fun initView() { private fun initView() {
dialog = DialogUtils.showWaitDialog(requireContext(), "") dialog = DialogUtils.showWaitDialog(requireContext(), "")
@ -152,7 +183,7 @@ class InstallExternalGameFragment : ToolbarFragment(), OnItemClickListener {
}, true) }, true)
VHelper.newCwValidateVspaceBeforeAction( VHelper.newCwValidateVspaceBeforeAction(
requireContext(),null, requireContext(), null,
) { ) {
dialog.show() dialog.show()
} }

View File

@ -10,9 +10,9 @@
<queries> <queries>
<package android:name="com.gh.toolmap" /> <package android:name="com.gh.toolmap" />
<intent> <intent>
<action android:name="android.intent.action.VIEW"/> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE"/> <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="ghtoolmap"/> <data android:scheme="ghtoolmap" />
</intent> </intent>
</queries> </queries>
@ -68,6 +68,13 @@
<!-- 悬浮窗 --> <!-- 悬浮窗 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 适配 双开/分身 游戏授权登录 -->
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
<!-- 日历 -->
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-sdk tools:overrideLibrary=" <uses-sdk tools:overrideLibrary="
com.shuyu.gsyvideoplayer, com.shuyu.gsyvideoplayer,
com.shuyu.gsyvideoplayer.lib, com.shuyu.gsyvideoplayer.lib,
@ -194,7 +201,9 @@
android:name="io.sentry.breadcrumbs.system-events" android:name="io.sentry.breadcrumbs.system-events"
android:value="false" /> android:value="false" />
<meta-data android:name="module_version" android:value="${VA_VERSION_NAME}" /> <meta-data
android:name="module_version"
android:value="${VA_VERSION_NAME}" />
<service android:name="com.gh.ndownload.NDownloadService" /> <service android:name="com.gh.ndownload.NDownloadService" />
@ -517,10 +526,6 @@
android:name=".video.data.VideoDataActivity" android:name=".video.data.VideoDataActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity
android:name=".video.poster.PosterEditActivity"
android:screenOrientation="portrait" />
<activity <activity
android:name=".forum.detail.ForumDetailActivity" android:name=".forum.detail.ForumDetailActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
@ -638,8 +643,9 @@
<!-- android:theme="@android:style/Theme.Translucent" />--> <!-- android:theme="@android:style/Theme.Translucent" />-->
<activity <activity
android:name="com.gh.gamecenter.SkipActivity" android:name="com.gh.gamecenter.SkipCompatActivity"
android:exported="true" android:exported="true"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat.Light.Fullscreen.Transparent"> android:theme="@style/Theme.AppCompat.Light.Fullscreen.Transparent">
<intent-filter> <intent-filter>
<data android:scheme="ghzhushou" /> <data android:scheme="ghzhushou" />
@ -663,7 +669,8 @@
android:name=".authorization.AuthorizationActivity" android:name=".authorization.AuthorizationActivity"
android:exported="true" android:exported="true"
android:launchMode="singleTask" android:launchMode="singleTask"
android:screenOrientation="portrait"> android:screenOrientation="portrait"
android:taskAffinity=".auth">
<intent-filter> <intent-filter>
<data android:scheme="ghzhushou_authorization" /> <data android:scheme="ghzhushou_authorization" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
@ -809,6 +816,14 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/AppCompatTheme.APP" /> android:theme="@style/AppCompatTheme.APP" />
<activity
android:name=".video.poster.PosterEditActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.halo.assistant.accelerator.MyAssetsActivity"
android:screenOrientation="portrait" />
<!-- <activity--> <!-- <activity-->
<!-- android:name="${applicationId}.douyinapi.DouYinEntryActivity"--> <!-- android:name="${applicationId}.douyinapi.DouYinEntryActivity"-->
<!-- android:launchMode="singleTask"--> <!-- android:launchMode="singleTask"-->
@ -864,10 +879,6 @@
<!-- tools:node="remove" />--> <!-- tools:node="remove" />-->
<!-- </provider>--> <!-- </provider>-->
<service android:name="com.gh.gamecenter.install.InstallService" />
<service android:name="com.gh.download.suspendwindow.DownloadSuspendWindowService" />
<receiver <receiver
android:name="com.gh.gamecenter.receiver.DownloadReceiver" android:name="com.gh.gamecenter.receiver.DownloadReceiver"
android:exported="false"> android:exported="false">

File diff suppressed because one or more lines are too long

View File

@ -4,6 +4,8 @@ import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import android.graphics.drawable.Animatable
import android.os.Build
import android.os.Message import android.os.Message
import android.text.TextUtils import android.text.TextUtils
import android.view.View import android.view.View
@ -12,20 +14,22 @@ import android.widget.FrameLayout
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.launcher.ARouter import com.therouter.TheRouter
import com.facebook.drawee.controller.BaseControllerListener
import com.facebook.drawee.view.SimpleDraweeView import com.facebook.drawee.view.SimpleDraweeView
import com.facebook.imagepipeline.image.ImageInfo
import com.gh.common.exposure.ExposureManager import com.gh.common.exposure.ExposureManager
import com.gh.common.util.DirectUtils.directToLinkPage import com.gh.common.util.DirectUtils.directToLinkPage
import com.gh.common.util.LogUtils import com.gh.common.util.LogUtils
import com.gh.common.util.NewFlatLogUtils.logOpenScreenAdSkip import com.gh.common.util.NewFlatLogUtils
import com.gh.common.util.PackageUtils import com.gh.common.util.PackageUtils
import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.MainActivity import com.gh.gamecenter.MainActivity
import com.gh.gamecenter.R import com.gh.gamecenter.R
import com.gh.gamecenter.common.base.activity.BaseActivity import com.gh.gamecenter.common.base.activity.BaseActivity
import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.common.exposure.ExposureSource import com.gh.gamecenter.common.exposure.ExposureSource
import com.gh.gamecenter.common.exposure.meta.MetaUtil
import com.gh.gamecenter.common.retrofit.BiResponse import com.gh.gamecenter.common.retrofit.BiResponse
import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.AppExecutor import com.gh.gamecenter.core.AppExecutor
@ -40,6 +44,7 @@ import com.gh.gamecenter.feature.exposure.ExposureType
import com.gh.gamecenter.retrofit.RetrofitManager import com.gh.gamecenter.retrofit.RetrofitManager
import com.halo.assistant.HaloApp import com.halo.assistant.HaloApp
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import java.util.Locale
/** /**
* 广告实现代理类 * 广告实现代理类
@ -59,6 +64,8 @@ object AdDelegateHelper {
private val mGameSearchAdList: ArrayList<AdConfig> by lazy { arrayListOf() } private val mGameSearchAdList: ArrayList<AdConfig> by lazy { arrayListOf() }
private var mVGameLaunchAd: AdConfig? = null private var mVGameLaunchAd: AdConfig? = null
private var ownerSplashAdLoadTime = 0L
val vGameLaunchAd: AdConfig? val vGameLaunchAd: AdConfig?
get() = mVGameLaunchAd get() = mVGameLaunchAd
@ -76,6 +83,7 @@ object AdDelegateHelper {
} }
var isShowingSplashAd = false // 是否正在显示开屏广告 var isShowingSplashAd = false // 是否正在显示开屏广告
var isOwnerSplashAdShown = false // 自有开屏广告是否展示
var gameSearchKeyword = "" var gameSearchKeyword = ""
fun initAdSdk(context: Context) { fun initAdSdk(context: Context) {
@ -94,8 +102,7 @@ object AdDelegateHelper {
private fun initAdSdkInternal(context: Context) { private fun initAdSdkInternal(context: Context) {
// 初始化穿山甲 // 初始化穿山甲
if (mCsjAdImpl == null) { if (mCsjAdImpl == null) {
mCsjAdImpl = mCsjAdImpl = TheRouter.get(ICsjAdProvider::class.java)
ARouter.getInstance().build(RouteConsts.provider.csjAd).navigation() as? ICsjAdProvider
val csjAppId = if (EnvHelper.isDevEnv) BuildConfig.DEV_CSJ_APPID else BuildConfig.CSJ_APPID val csjAppId = if (EnvHelper.isDevEnv) BuildConfig.DEV_CSJ_APPID else BuildConfig.CSJ_APPID
mCsjAdImpl?.initSDK(context, csjAppId, HaloApp.getInstance().oaid) mCsjAdImpl?.initSDK(context, csjAppId, HaloApp.getInstance().oaid)
// 监听亮色/暗色模式切换 // 监听亮色/暗色模式切换
@ -115,7 +122,12 @@ object AdDelegateHelper {
if (isFromRetry && mAdConfigList.isNotEmpty()) { if (isFromRetry && mAdConfigList.isNotEmpty()) {
return return
} }
val paramsMap = if (keyword.isNotEmpty()) mapOf("keyword" to keyword) else mapOf()
val paramsMap = if (keyword.isNotEmpty()) {
mapOf("keyword" to keyword, "android_sdk_version" to Build.VERSION.SDK_INT)
} else {
mapOf("android_sdk_version" to Build.VERSION.SDK_INT)
}
RetrofitManager.getInstance() RetrofitManager.getInstance()
.newApi .newApi
.getAdConfig(paramsMap) .getAdConfig(paramsMap)
@ -173,6 +185,20 @@ object AdDelegateHelper {
when (config.location) { when (config.location) {
"halo_launch" -> { "halo_launch" -> {
config.ownerAd?.startAd?.let { it.id = config.ownerAd.id } config.ownerAd?.startAd?.let { it.id = config.ownerAd.id }
// HarmonyOS 2.2.0 版本不展示第三方开屏广告 (因为会引起奇怪的闪退)
if (MetaUtil.getRom().name == "HarmonyOS"
&& MetaUtil.getRom().versionName == "2.2.0"
&& config.displayRule.adSource == AD_TYPE_SDK) {
return
}
// 华为系 Android 10 不展示第三方开屏广告 (因为会引起奇怪的闪退)
if (isBuggyHuaweiDevice() && config.displayRule.adSource == AD_TYPE_SDK) {
return
}
mSplashAd = config mSplashAd = config
} }
@ -201,6 +227,7 @@ object AdDelegateHelper {
private fun shouldShowStartUpAdWhenHotLaunch() = (mCsjAdImpl != null) private fun shouldShowStartUpAdWhenHotLaunch() = (mCsjAdImpl != null)
&& mSplashAd?.displayRule?.hotStartSplashAd?.type == AD_TYPE_SDK && mSplashAd?.displayRule?.hotStartSplashAd?.type == AD_TYPE_SDK
&& mSplashAd?.hotStartThirdPartyAd != null && mSplashAd?.hotStartThirdPartyAd != null
&& !isBuggyHuaweiDevice()
/** /**
* 是否需要显示下载管理广告 * 是否需要显示下载管理广告
@ -303,6 +330,7 @@ object AdDelegateHelper {
) { ) {
val hideCallback = { val hideCallback = {
isShowingSplashAd = false isShowingSplashAd = false
isOwnerSplashAdShown = false
hideAction.invoke() hideAction.invoke()
} }
if (mSplashAd != null) { if (mSplashAd != null) {
@ -575,6 +603,8 @@ object AdDelegateHelper {
handler: BaseActivity.BaseHandler, handler: BaseActivity.BaseHandler,
hideCallback: () -> Unit hideCallback: () -> Unit
) { ) {
isOwnerSplashAdShown = false
val jumpBtn = startAdContainer.findViewById<TextView>(R.id.jumpBtn) val jumpBtn = startAdContainer.findViewById<TextView>(R.id.jumpBtn)
val jumpDetailBtn: TextView = startAdContainer.findViewById(R.id.jumpDetailBtn) val jumpDetailBtn: TextView = startAdContainer.findViewById(R.id.jumpDetailBtn)
val adImage: SimpleDraweeView = startAdContainer.findViewById(R.id.adImage) val adImage: SimpleDraweeView = startAdContainer.findViewById(R.id.adImage)
@ -592,39 +622,63 @@ object AdDelegateHelper {
), null, null ), null, null
) )
adImage.visibleIf(true)
ImageUtils.display(adImage, ad.img)
if (ad.isImageType) { if (ad.isImageType) {
adVideo.visibleIf(false) adVideo.visibleIf(false)
adImage.visibleIf(true)
ImageUtils.displayWithCallback(adImage, ad.img, true, object : BaseControllerListener<ImageInfo>() {
override fun onSubmit(id: String?, callerContext: Any?) {
super.onSubmit(id, callerContext)
adImage.post {
ownerSplashAdLoadTime = System.currentTimeMillis()
NewFlatLogUtils.logSplashAdLoad(ad.id)
}
}
override fun onFinalImageSet(id: String?, imageInfo: ImageInfo?, animatable: Animatable?) {
isOwnerSplashAdShown = true
adImage.post {
NewFlatLogUtils.logSplashAdShow(ad.id, System.currentTimeMillis() - ownerSplashAdLoadTime)
}
}
override fun onFailure(id: String?, throwable: Throwable?) {
super.onFailure(id, throwable)
NewFlatLogUtils.logSplashAdFail(ad.id, "启动广告图加载失败")
}
})
} else { } else {
adVideo.visibleIf(true) adImage.visibleIf(false)
adVideo.startPlay(ad.video.url) adVideo.startPlay(ad.video.url)
} }
startAdContainer.setOnClickListener { startAdContainer.setOnClickListener {
// 拦截点击事件传递 // 拦截点击事件传递
} }
jumpBtn.setOnClickListener { jumpBtn.setOnClickListener {
handler.removeMessages(MainActivity.COUNTDOWN_AD) it.debounceActionWithInterval(1000L) {
hideCallback.invoke() if (!isOwnerSplashAdShown) {
val linkEntity = ad.jump NewFlatLogUtils.logSplashAdFail(ad.id, "加载过程中点击跳过广告")
logOpenScreenAdSkip( }
ad.id, handler.removeMessages(MainActivity.COUNTDOWN_AD)
(if (linkEntity.text != null) linkEntity.text else "")!!, hideCallback.invoke()
(if (linkEntity.type != null) linkEntity.type else "")!!, val linkEntity = ad.jump
(if (linkEntity.link != null) linkEntity.link else "")!! NewFlatLogUtils.logOpenScreenAdSkip(
) ad.id,
SensorsBridge.trackEvent( (if (linkEntity.text != null) linkEntity.text else "")!!,
"SplashAdOwnSkip", (if (linkEntity.type != null) linkEntity.type else "")!!,
"splash_ad_id", (if (linkEntity.link != null) linkEntity.link else "")!!
ad.id, )
"link_type", SensorsBridge.trackEvent(
linkEntity.type ?: "", "SplashAdOwnSkip",
"link_id", "splash_ad_id",
linkEntity.link ?: "", ad.id,
"link_text", "link_type",
linkEntity.text ?: "" linkEntity.type ?: "",
) "link_id",
linkEntity.link ?: "",
"link_text",
linkEntity.text ?: ""
)
}
} }
val sources: MutableList<ExposureSource> = ArrayList() val sources: MutableList<ExposureSource> = ArrayList()
sources.add(ExposureSource("开屏广告", ad.id)) sources.add(ExposureSource("开屏广告", ad.id))
@ -742,4 +796,16 @@ object AdDelegateHelper {
mCsjAdImpl?.cancelSplashAd(context) mCsjAdImpl?.cancelSplashAd(context)
} }
/**
* 是否为有问题的华为系 Android 10 设备
*/
private fun isBuggyHuaweiDevice(): Boolean {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) {
val manufacturer = Build.MANUFACTURER.lowercase(Locale.CHINA) ?: ""
return manufacturer == "huawei" || manufacturer == "honor"
} else {
return false
}
}
} }

View File

@ -19,10 +19,10 @@ import java.net.URLConnection
object AdPluginDownloadHelper : InnerDownloadListener { object AdPluginDownloadHelper : InnerDownloadListener {
private const val CSJ_FILE_NAME = "2011394667" private const val CSJ_FILE_NAME = "1832823466"
private const val GDT_FILE_NAME = "gdt_plugin/gdtadv2.jar" private const val GDT_FILE_NAME = "gdt_plugin/gdtadv2.jar"
private const val CSJ_PLUGIN_URL = "https://and-static.ghzs66.com/android/static/2011394667" private const val CSJ_PLUGIN_URL = "https://and-static.ghzs66.com/android/static/1832823466"
private const val GDT_PLUGIN_URL = "https://and-static.ghzs66.com/android/static/gdtadv2.jar" private const val GDT_PLUGIN_URL = "https://and-static.ghzs66.com/android/static/gdtadv2.jar"
private var csjDownloadedCallback: (() -> Unit)? = null private var csjDownloadedCallback: (() -> Unit)? = null

View File

@ -1,13 +1,10 @@
package com.gh.ad package com.gh.ad
import android.content.Context
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewStub import android.view.ViewStub
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.common.provider.ILaunchAd import com.gh.gamecenter.common.provider.ILaunchAd
import com.gh.gamecenter.common.utils.SensorsBridge import com.gh.gamecenter.common.utils.SensorsBridge
import com.gh.gamecenter.common.utils.goneIf import com.gh.gamecenter.common.utils.goneIf
@ -15,10 +12,8 @@ import com.gh.gamecenter.core.utils.DisplayUtils
import com.gh.gamecenter.core.utils.SPUtils import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.entity.AdConfig import com.gh.gamecenter.entity.AdConfig
@Route(path = RouteConsts.provider.vaAd, name = "畅玩启动页广告") @com.therouter.inject.ServiceProvider
class LaunchAdImpl : ILaunchAd { class LaunchAdImpl : ILaunchAd {
override fun init(context: Context?) {
}
override fun requestAd(fragment: Fragment, container: ViewGroup, maskView: View, topViewStub: ViewStub, bottomViewStub: ViewStub, adClickAction: () -> Unit): View { override fun requestAd(fragment: Fragment, container: ViewGroup, maskView: View, topViewStub: ViewStub, bottomViewStub: ViewStub, adClickAction: () -> Unit): View {
if (AdDelegateHelper.shouldShowHelperLaunchAd()) { if (AdDelegateHelper.shouldShowHelperLaunchAd()) {
@ -104,4 +99,4 @@ class LaunchAdImpl : ILaunchAd {
companion object { companion object {
private const val AD_PLACEMENT = "畅玩启动" private const val AD_PLACEMENT = "畅玩启动"
} }
} }

View File

@ -44,6 +44,16 @@ class SplashAdVideoView @JvmOverloads constructor(
return R.layout.layout_splash_ad_video return R.layout.layout_splash_ad_video
} }
override fun touchSurfaceMoveFullLogic(absDeltaX: Float, absDeltaY: Float) {
// no nothing
}
override fun onPrepared() {
super.onPrepared()
visibility = VISIBLE
}
override fun onAutoCompletion() { override fun onAutoCompletion() {
setStateAndUi(CURRENT_STATE_AUTO_COMPLETE); setStateAndUi(CURRENT_STATE_AUTO_COMPLETE);

View File

@ -21,26 +21,31 @@ import com.gh.common.view.RichEditor
import com.gh.gamecenter.CropImageActivity import com.gh.gamecenter.CropImageActivity
import com.gh.gamecenter.R import com.gh.gamecenter.R
import com.gh.gamecenter.common.base.activity.ToolBarActivity import com.gh.gamecenter.common.base.activity.ToolBarActivity
import com.gh.gamecenter.common.constant.EntranceConsts
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.common.entity.LocalVideoEntity import com.gh.gamecenter.common.entity.LocalVideoEntity
import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.AppExecutor import com.gh.gamecenter.core.AppExecutor
import com.gh.gamecenter.core.runOnIoThread import com.gh.gamecenter.core.runOnIoThread
import com.gh.gamecenter.core.utils.* import com.gh.gamecenter.core.utils.*
import com.gh.gamecenter.entity.* import com.gh.gamecenter.entity.GamesCollectionEntity
import com.gh.gamecenter.feature.entity.GameEntity import com.gh.gamecenter.entity.MyVideoEntity
import com.gh.gamecenter.qa.editor.* import com.gh.gamecenter.entity.VideoEntity
import com.gh.gamecenter.feature.entity.AnswerEntity import com.gh.gamecenter.feature.entity.AnswerEntity
import com.gh.gamecenter.feature.entity.ArticleEntity import com.gh.gamecenter.feature.entity.ArticleEntity
import com.gh.gamecenter.feature.entity.GameEntity
import com.gh.gamecenter.feature.selector.ChooseType import com.gh.gamecenter.feature.selector.ChooseType
import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.qa.editor.*
import com.gh.gamecenter.qa.entity.EditorInsertEntity import com.gh.gamecenter.qa.entity.EditorInsertEntity
import com.gh.gamecenter.video.poster.PosterEditActivity import com.gh.gamecenter.video.poster.video.VideoPosterFragment
import com.gh.gamecenter.video.upload.UploadManager import com.gh.gamecenter.video.upload.UploadManager
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.halo.assistant.HaloApp import com.halo.assistant.HaloApp
import com.lightgame.utils.Util_System_Keyboard import com.lightgame.utils.Util_System_Keyboard
import com.lightgame.utils.Utils import com.lightgame.utils.Utils
import com.lightgame.view.CheckableImageView import com.lightgame.view.CheckableImageView
import com.therouter.TheRouter
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
@ -229,6 +234,7 @@ abstract class BaseRichEditorActivity<VM : BaseRichEditorViewModel> constructor(
@SuppressLint("AddJavascriptInterface", "ClickableViewAccessibility") @SuppressLint("AddJavascriptInterface", "ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
VideoPosterFragment.createVideoCoverFile(this)
findView() findView()
onRichClick() onRichClick()
mViewModel = provideViewModel() mViewModel = provideViewModel()
@ -739,9 +745,9 @@ abstract class BaseRichEditorActivity<VM : BaseRichEditorViewModel> constructor(
mViewModel.id = id mViewModel.id = id
mViewModel.videoId = videoId mViewModel.videoId = videoId
val videoEntity = VideoEntity(url = url) val videoEntity = VideoEntity(url = url)
val intent = TheRouter.build(RouteConsts.activity.videoCoverEditActivity)
PosterEditActivity.getIntentByVideo(this@BaseRichEditorActivity, videoEntity) .withParcelable(EntranceConsts.KEY_VIDEO_ENTITY, videoEntity)
startActivityForResult(intent, REQUEST_CODE_IMAGE_CROP) .navigation(this@BaseRichEditorActivity, REQUEST_CODE_IMAGE_CROP)
} }
@JavascriptInterface @JavascriptInterface

View File

@ -2,9 +2,9 @@ package com.gh.base
import android.app.Activity import android.app.Activity
import android.app.Application import android.app.Application
import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.alibaba.android.arouter.launcher.ARouter
import com.gh.ad.AdDelegateHelper import com.gh.ad.AdDelegateHelper
import com.gh.common.util.FloatingBackViewManager import com.gh.common.util.FloatingBackViewManager
import com.gh.common.xapk.XapkInstaller import com.gh.common.xapk.XapkInstaller
@ -15,27 +15,45 @@ import com.gh.gamecenter.SplashAdActivity
import com.gh.gamecenter.SplashScreenActivity import com.gh.gamecenter.SplashScreenActivity
import com.gh.gamecenter.authorization.AuthorizationActivity import com.gh.gamecenter.authorization.AuthorizationActivity
import com.gh.gamecenter.common.base.GlobalActivityManager import com.gh.gamecenter.common.base.GlobalActivityManager
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.common.provider.IHelpAndFeedbackProvider import com.gh.gamecenter.common.provider.IHelpAndFeedbackProvider
import com.gh.gamecenter.common.utils.PackageFlavorHelper import com.gh.gamecenter.common.utils.PackageFlavorHelper
import com.gh.gamecenter.core.provider.IPushProvider import com.gh.gamecenter.core.provider.IPushProvider
import com.gh.gamecenter.login.utils.QuickLoginHelper
import com.gh.gamecenter.login.view.LoginActivity import com.gh.gamecenter.login.view.LoginActivity
import com.gh.gamecenter.va.VCore import com.gh.gamecenter.va.VCore
import com.gh.gamecenter.login.utils.QuickLoginHelper
import com.gh.vspace.VHelper import com.gh.vspace.VHelper
import com.halo.assistant.HaloApp import com.halo.assistant.HaloApp
import com.therouter.TheRouter
// TODO移动到对应的模块 // TODO移动到对应的模块
class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks { class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks {
private var isFromBackgroundToForeground = false // 是否后台回到前台 private var isFromBackgroundToForeground = false // 是否后台回到前台
override fun onActivityPreCreated(activity: Activity, savedInstanceState: Bundle?) {
if (QuickLoginHelper.isLoginAuthPage(activity)) {
try {
val resources = activity.resources
val config = Configuration(resources.configuration)
config.fontScale = 1.0f
// 更新Resources配置
val metrics = resources.displayMetrics
metrics.scaledDensity = metrics.density
resources.updateConfiguration(config, metrics)
} catch (e: Exception) {
// 设置字体失败
}
}
}
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
// do nothing // do nothing
} }
override fun onActivityStarted(activity: Activity) { override fun onActivityStarted(activity: Activity) {
GlobalActivityManager.currentActivity = activity GlobalActivityManager.currentActivity = activity
GlobalActivityManager.activityCount ++ GlobalActivityManager.activityCount++
if (GlobalActivityManager.activityCount == 1 && isFromBackgroundToForeground) { if (GlobalActivityManager.activityCount == 1 && isFromBackgroundToForeground) {
if (AdDelegateHelper.shouldShowStartUpAd(true) if (AdDelegateHelper.shouldShowStartUpAd(true)
&& !HaloApp.getInstance().isDisableSplashAdTemporarily && !HaloApp.getInstance().isDisableSplashAdTemporarily
@ -53,7 +71,7 @@ class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks {
if (GlobalActivityManager.activityCount == 1) { if (GlobalActivityManager.activityCount == 1) {
// 清除桌面角标 // 清除桌面角标
if (activity !is SplashScreenActivity && activity !is AuthorizationActivity) { if (activity !is SplashScreenActivity && activity !is AuthorizationActivity) {
val pushProvider = ARouter.getInstance().build(RouteConsts.provider.push).navigation() as? IPushProvider val pushProvider = TheRouter.get(IPushProvider::class.java)
pushProvider?.cleanBadgeNumber(activity.applicationContext) pushProvider?.cleanBadgeNumber(activity.applicationContext)
} }
} }
@ -111,7 +129,7 @@ class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks {
} }
override fun onActivityStopped(activity: Activity) { override fun onActivityStopped(activity: Activity) {
GlobalActivityManager.activityCount -- GlobalActivityManager.activityCount--
isFromBackgroundToForeground = GlobalActivityManager.activityCount <= 0 isFromBackgroundToForeground = GlobalActivityManager.activityCount <= 0
} }
@ -126,9 +144,7 @@ class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks {
} }
private fun isSuggestionActivity(activity: Activity): Boolean { private fun isSuggestionActivity(activity: Activity): Boolean {
val helpAndFeedbackProvider = val helpAndFeedbackProvider = TheRouter.get(IHelpAndFeedbackProvider::class.java)
ARouter.getInstance().build(RouteConsts.provider.helpAndFeedback)
.navigation() as? IHelpAndFeedbackProvider
return helpAndFeedbackProvider?.isSuggestionActivity(activity) ?: false return helpAndFeedbackProvider?.isSuggestionActivity(activity) ?: false
} }

View File

@ -3,6 +3,8 @@ package com.gh.common
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.os.Handler
import android.os.Looper
import android.util.Base64 import android.util.Base64
import android.view.View import android.view.View
import android.webkit.JavascriptInterface import android.webkit.JavascriptInterface
@ -11,7 +13,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import com.alibaba.android.arouter.launcher.ARouter import androidx.lifecycle.Lifecycle
import com.gh.common.exposure.ExposureManager import com.gh.common.exposure.ExposureManager
import com.gh.common.util.* import com.gh.common.util.*
import com.gh.common.util.LogUtils import com.gh.common.util.LogUtils
@ -19,10 +21,12 @@ import com.gh.download.DownloadManager
import com.gh.download.PackageObserver import com.gh.download.PackageObserver
import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.ImageViewerActivity import com.gh.gamecenter.ImageViewerActivity
import com.gh.gamecenter.R
import com.gh.gamecenter.WebActivity import com.gh.gamecenter.WebActivity
import com.gh.gamecenter.common.callback.BiCallback import com.gh.gamecenter.common.callback.BiCallback
import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.Constants.SP_MEMBER_PAYMENT_BUTTON_CLICK
import com.gh.gamecenter.common.constant.Constants.SP_MEMBER_RECHARGE_BUTTON_CLICK
import com.gh.gamecenter.common.entity.NotificationUgc import com.gh.gamecenter.common.entity.NotificationUgc
import com.gh.gamecenter.common.exposure.ExposureSource import com.gh.gamecenter.common.exposure.ExposureSource
import com.gh.gamecenter.common.loghub.LoghubUtils import com.gh.gamecenter.common.loghub.LoghubUtils
@ -30,20 +34,23 @@ import com.gh.gamecenter.common.provider.IHelpAndFeedbackProvider
import com.gh.gamecenter.common.tracker.Tracker import com.gh.gamecenter.common.tracker.Tracker
import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.common.utils.NewFlatLogUtils import com.gh.gamecenter.common.utils.NewFlatLogUtils
import com.gh.gamecenter.common.utils.SensorsBridge.EVENT_MEMBER_RECHARGE_BUTTON_CLICK
import com.gh.gamecenter.common.utils.SensorsBridge.EVENT_NAME
import com.gh.gamecenter.common.utils.SensorsBridge.KEY_IS_FIRST_TIME
import com.gh.gamecenter.common.view.dsbridge.CompletionHandler import com.gh.gamecenter.common.view.dsbridge.CompletionHandler
import com.gh.gamecenter.core.AppExecutor import com.gh.gamecenter.core.AppExecutor
import com.gh.gamecenter.core.provider.IAcceleratorProvider
import com.gh.gamecenter.core.provider.IPushProvider import com.gh.gamecenter.core.provider.IPushProvider
import com.gh.gamecenter.core.runOnIoThread import com.gh.gamecenter.core.runOnIoThread
import com.gh.gamecenter.core.runOnUiThread import com.gh.gamecenter.core.runOnUiThread
import com.gh.gamecenter.core.utils.CurrentActivityHolder import com.gh.gamecenter.core.utils.*
import com.gh.gamecenter.core.utils.DisplayUtils
import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.core.utils.ToastUtils
import com.gh.gamecenter.entity.SensorsEvent import com.gh.gamecenter.entity.SensorsEvent
import com.gh.gamecenter.eventbus.EBDownloadStatus import com.gh.gamecenter.eventbus.EBDownloadStatus
import com.gh.gamecenter.eventbus.EBPackage import com.gh.gamecenter.eventbus.EBPackage
import com.gh.gamecenter.feature.entity.AcctRecordEntity
import com.gh.gamecenter.feature.entity.Badge import com.gh.gamecenter.feature.entity.Badge
import com.gh.gamecenter.feature.entity.GameEntity import com.gh.gamecenter.feature.entity.GameEntity
import com.gh.gamecenter.feature.entity.OrderEntity
import com.gh.gamecenter.feature.exposure.ExposureEvent import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.gh.gamecenter.login.user.LoginTag import com.gh.gamecenter.login.user.LoginTag
import com.gh.gamecenter.login.user.UserManager import com.gh.gamecenter.login.user.UserManager
@ -55,10 +62,14 @@ import com.gh.gamecenter.personalhome.border.AvatarBorderActivity
import com.gh.gamecenter.setting.SettingBridge import com.gh.gamecenter.setting.SettingBridge
import com.gh.vspace.VHelper import com.gh.vspace.VHelper
import com.halo.assistant.HaloApp import com.halo.assistant.HaloApp
import com.halo.assistant.accelerator.repository.AccelerationRepository.Companion.PAYMENT_TYPE_ALIPAY
import com.halo.assistant.accelerator.repository.AccelerationRepository.Companion.PAYMENT_TYPE_WECHAT
import com.halo.assistant.accelerator.repository.AcceleratorDataHolder
import com.lightgame.download.DataWatcher import com.lightgame.download.DataWatcher
import com.lightgame.download.DownloadEntity import com.lightgame.download.DownloadEntity
import com.lightgame.download.DownloadStatus.* import com.lightgame.download.DownloadStatus.*
import com.lightgame.utils.Utils import com.lightgame.utils.Utils
import com.therouter.TheRouter
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode import org.greenrobot.eventbus.ThreadMode
@ -71,10 +82,11 @@ import java.util.*
class DefaultJsApi( class DefaultJsApi(
var context: Context, var context: Context,
val entrance: String = "", val entrance: String = "",
private var mFragment: Fragment? = null, private val mFragment: Fragment? = null,
private var mBbsId: String? = "", private var mBbsId: String? = "",
private var mOriginUrl: String? = "", private var mOriginUrl: String? = "",
private val mForumName: String? = "", private val mForumName: String? = "",
private val listener: OnWebClickListener? = null
) { ) {
companion object { companion object {
@ -87,6 +99,8 @@ class DefaultJsApi(
private var mDownloadHandler: CompletionHandler<Any>? = null // 下载信息回调 private var mDownloadHandler: CompletionHandler<Any>? = null // 下载信息回调
private var mExposureEvent: ExposureEvent? = null // 活动曝光实体 private var mExposureEvent: ExposureEvent? = null // 活动曝光实体
private val handler = Handler(Looper.getMainLooper())
init { init {
if (mFragment != null) { if (mFragment != null) {
EventBus.getDefault().register(this) EventBus.getDefault().register(this)
@ -233,6 +247,12 @@ class DefaultJsApi(
VHelper.launch(context, packageName) VHelper.launch(context, packageName)
} }
} else { } else {
val wechatPkgName = "com.tencent.mm"
if (packageName == wechatPkgName && !PackageUtils.isInstalled(context, wechatPkgName)) {
// 如果是微信客户端,需要检查是否安装微信
ToastUtils.showToast(R.string.wechat_app_not_install_tips.toResString())
return@runOnUiThread
}
PackageLauncher.launchApp(context, packageName = packageName) PackageLauncher.launchApp(context, packageName = packageName)
} }
} }
@ -345,7 +365,7 @@ class DefaultJsApi(
@JavascriptInterface @JavascriptInterface
fun getPushId(): String { fun getPushId(): String {
val pushProvider = ARouter.getInstance().build(RouteConsts.provider.push).navigation() as? IPushProvider val pushProvider = TheRouter.get(IPushProvider::class.java)
return pushProvider?.getRegistrationId(HaloApp.getInstance()) ?: "unknown" return pushProvider?.getRegistrationId(HaloApp.getInstance()) ?: "unknown"
} }
@ -424,8 +444,7 @@ class DefaultJsApi(
@JavascriptInterface @JavascriptInterface
fun showQaFeedbackDialog(msg: Any) { fun showQaFeedbackDialog(msg: Any) {
val mHelpAndFeedbackHelp = val mHelpAndFeedbackHelp = TheRouter.get(IHelpAndFeedbackProvider::class.java)
ARouter.getInstance().build(RouteConsts.provider.helpAndFeedback).navigation() as? IHelpAndFeedbackProvider
mHelpAndFeedbackHelp?.showQaFeedbackDialogFragment(context as AppCompatActivity, msg.toString()) mHelpAndFeedbackHelp?.showQaFeedbackDialogFragment(context as AppCompatActivity, msg.toString())
} }
@ -496,6 +515,44 @@ class DefaultJsApi(
} }
} }
@JavascriptInterface
fun saveWechatQRCode(msg: Any) {
val base64StringData = msg.toString()
runOnUiThread {
(context as? FragmentActivity)?.checkStoragePermissionBeforeAction {
runOnIoThread {
val base64String = base64StringData.replace("data:image/png;base64", "")
tryWithDefaultCatch {
val imageFile =
File(HaloApp.getInstance().cacheDir.absolutePath + File.separator + System.currentTimeMillis() + ".png")
val decodedString = Base64.decode(base64String, Base64.DEFAULT)
val bos = BufferedOutputStream(FileOutputStream(imageFile))
bos.write(decodedString)
bos.flush()
bos.close()
ImageUtils.saveImageToFile(imageFile, "", true) {
// 这里是 ui 线程
// 保存微信二维码成功1s 以后跳转微信
if (mFragment != null && mFragment.lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
handler.removeCallbacksAndMessages(null)
handler.postDelayed({
val wechatPkgName = "com.tencent.mm"
if (!PackageUtils.isInstalled(context, wechatPkgName)) {
ToastUtils.showToast(R.string.wechat_app_not_install_tips.toResString())
return@postDelayed
}
PackageLauncher.launchApp(context, packageName = wechatPkgName)
}, 1000)
}
}
}
}
}
}
}
@JavascriptInterface @JavascriptInterface
fun loginWithCallback(msg: Any, handler: CompletionHandler<Any>) { fun loginWithCallback(msg: Any, handler: CompletionHandler<Any>) {
mLoginHandler = handler mLoginHandler = handler
@ -700,6 +757,86 @@ class DefaultJsApi(
} }
} }
@JavascriptInterface
fun preOrderWithAli(json: Any) {
val order = json.toString().toObject<OrderEntity>() ?: return
trackMemberPaymentButtonClick(order, PAYMENT_TYPE_ALIPAY)
listener?.onPreOrderWithAli(order)
}
@JavascriptInterface
fun preOrderWithWechat(json: Any) {
val order = json.toString().toObject<OrderEntity>() ?: return
trackMemberPaymentButtonClick(order, PAYMENT_TYPE_WECHAT)
listener?.onPreOrderWithWechat(order)
}
private fun trackMemberPaymentButtonClick(order: OrderEntity, paymentType: String) {
val isFirstTime = SPUtils.getBoolean(SP_MEMBER_PAYMENT_BUTTON_CLICK, true)
SPUtils.setBoolean(SP_MEMBER_PAYMENT_BUTTON_CLICK, false)
SensorsBridge.trackMemberPaymentButtonClick(
isFirstTime,
paymentType,
order.setMenuName,
order.paymentAmount
)
}
@JavascriptInterface
fun startGameAccelerate(acctJson: Any) {
if (acctJson is String) {
val acctRecord = GsonUtils.fromJson(acctJson, AcctRecordEntity::class.java)
val accInfo = acctRecord.accInfo
listener?.onStartGameAccelerate(accInfo)
}
}
@JavascriptInterface
fun getCurAcctGameId(): String {
return AcceleratorDataHolder.instance.getAcceleratingGameId()
}
@JavascriptInterface
fun stopGameAccelerate() {
listener?.onStopGameAccelerate()
}
@JavascriptInterface
fun getDurationRemainingTime(msg: Any, handler: CompletionHandler<Any>) {
TheRouter.get(IAcceleratorProvider::class.java)?.loadQyUserPermissionData {
val durationExpiredMinute = AcceleratorDataHolder.instance.vipEntity?.durationExpiredTime ?: 0L
handler.complete(durationExpiredMinute)
}
}
@JavascriptInterface
fun refreshToken(token: Any, handler: CompletionHandler<Any>) {
val accessToken = token.toString()
UserManager.getInstance().refreshToken(accessToken, object : UserManager.refreshCallBack {
override fun onLogin() {
handler.complete(true)
}
override fun onLoginFailure(errorMessage: String?) {
handler.complete(false)
}
})
}
@JavascriptInterface
fun trackSensorsAnalytics(json: Any) {
val hashMap = json.toString().toObject<HashMap<String, Any>>() ?: return
val eventName = hashMap.remove(EVENT_NAME) ?: return
when (eventName) {
EVENT_MEMBER_RECHARGE_BUTTON_CLICK -> {
hashMap[KEY_IS_FIRST_TIME] = SPUtils.getBoolean(SP_MEMBER_RECHARGE_BUTTON_CLICK, true)
SPUtils.setBoolean(SP_MEMBER_RECHARGE_BUTTON_CLICK, false)
}
}
SensorsBridge.trackSensorsAnalyticsFromWeb(eventName.toString(), hashMap)
}
/** /**
* 获取 ExposureEvent可能为空 * 获取 ExposureEvent可能为空
*/ */
@ -720,6 +857,8 @@ class DefaultJsApi(
} }
EventBus.getDefault().unregister(this@DefaultJsApi) EventBus.getDefault().unregister(this@DefaultJsApi)
handler.removeCallbacksAndMessages(null)
} }
} }
@ -816,4 +955,15 @@ class DefaultJsApi(
} }
} }
} }
interface OnWebClickListener {
fun onPreOrderWithAli(order: OrderEntity)
fun onPreOrderWithWechat(order: OrderEntity)
fun onStartGameAccelerate(accInfo: AcctRecordEntity.AccInfo)
fun onStopGameAccelerate()
}
} }

View File

@ -15,6 +15,7 @@ import com.gh.common.util.DirectUtils.directToLegacyVideoDetail
import com.gh.common.util.DirectUtils.directToLinkPage import com.gh.common.util.DirectUtils.directToLinkPage
import com.gh.common.util.DirectUtils.directToQa import com.gh.common.util.DirectUtils.directToQa
import com.gh.common.util.PackageUtils import com.gh.common.util.PackageUtils
import com.gh.gamecenter.SkipCompatActivity
import com.gh.gamecenter.WebActivity import com.gh.gamecenter.WebActivity
import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.constant.EntranceConsts import com.gh.gamecenter.common.constant.EntranceConsts
@ -66,6 +67,10 @@ object DefaultUrlHandler {
bringAppToFront: Boolean = false, bringAppToFront: Boolean = false,
sourceEntrance: String = ""): Boolean { sourceEntrance: String = ""): Boolean {
val uri = Uri.parse(url) val uri = Uri.parse(url)
// 优先交给新的路由拦截处理
if (SkipCompatActivity.handleSkip(context, uri)) return true
if ("ghzhushou" == uri.scheme) { if ("ghzhushou" == uri.scheme) {
Utils.log("url = $url") Utils.log("url = $url")
Utils.log("url = " + uri.scheme!!) Utils.log("url = " + uri.scheme!!)

View File

@ -17,7 +17,7 @@ import kotlin.concurrent.fixedRateTimer
object FixedRateJobHelper { object FixedRateJobHelper {
private const val CHECKER_PERIOD: Long = 15 * 1000L private const val CHECKER_PERIOD: Long = 15 * 1000L
private const val TIME_PERIOD: Long = 10 * 60 * 1000L private const val TIME_PERIOD: Long = 24 * 60 * 60 * 1000L
private const val LOGHUB_PERIOD: Long = 2 * 60 * 1000L private const val LOGHUB_PERIOD: Long = 2 * 60 * 1000L
private const val EXPOSURE_PERIOD: Long = 1 * 60 * 1000L private const val EXPOSURE_PERIOD: Long = 1 * 60 * 1000L
private const val REGION_SETTING_PERIOD: Long = 60 * 1000L private const val REGION_SETTING_PERIOD: Long = 60 * 1000L
@ -35,7 +35,7 @@ object FixedRateJobHelper {
// 时间检查每15秒检查一次 // 时间检查每15秒检查一次
fixedRateTimer("Global-Fixed-Rate-Timer", initialDelay = 100, period = CHECKER_PERIOD) { fixedRateTimer("Global-Fixed-Rate-Timer", initialDelay = 100, period = CHECKER_PERIOD) {
val elapsedTime = mExecuteCount * CHECKER_PERIOD val elapsedTime = mExecuteCount * CHECKER_PERIOD
// 时间校对,10分钟一次 // 时间校对,24 小时一次
if (elapsedTime % TIME_PERIOD == 0L) { if (elapsedTime % TIME_PERIOD == 0L) {
RetrofitManager.getInstance().api.time RetrofitManager.getInstance().api.time
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())

View File

@ -4,6 +4,7 @@ import android.app.Activity
import android.content.Context import android.content.Context
import com.gh.common.util.DialogUtils import com.gh.common.util.DialogUtils
import com.gh.common.util.DirectUtils import com.gh.common.util.DirectUtils
import com.gh.common.util.PackageChangeHelper
import com.gh.common.util.TempCertificationUtils import com.gh.common.util.TempCertificationUtils
import com.gh.gamecenter.feature.entity.GameEntity import com.gh.gamecenter.feature.entity.GameEntity
@ -25,6 +26,10 @@ class LandPageAddressHandler : DownloadChainHandler() {
processEndCallback?.invoke(asVGame, null) processEndCallback?.invoke(asVGame, null)
} }
} else { } else {
val packageName = gameEntity.getApk().firstOrNull()?.packageName
if (packageName?.isNotEmpty() == true) {
PackageChangeHelper.addInstallPendingPackage(packageName)
}
DirectUtils.directToExternalBrowser(context, gameEntity.landPageAddressDialog!!.link!!) DirectUtils.directToExternalBrowser(context, gameEntity.landPageAddressDialog!!.link!!)
} }
} }

View File

@ -8,12 +8,21 @@ import com.gh.gamecenter.feature.entity.GameEntity
class PackageCheckHandler : DownloadChainHandler() { class PackageCheckHandler : DownloadChainHandler() {
override fun handleRequest(context: Context, gameEntity: GameEntity, asVGame: Boolean) { override fun handleRequest(context: Context, gameEntity: GameEntity, asVGame: Boolean) {
PackageCheckDialogFragment.show((context as AppCompatActivity), gameEntity) { fun nextOrProcessEnd() {
if (hasNext()) { if (hasNext()) {
getNext()?.handleRequest(context, gameEntity, asVGame) getNext()?.handleRequest(context, gameEntity, asVGame)
} else { } else {
processEndCallback?.invoke(asVGame, null) processEndCallback?.invoke(asVGame, null)
} }
} }
if (gameEntity.canSpeed) {
nextOrProcessEnd()
} else {
PackageCheckDialogFragment.show((context as AppCompatActivity), gameEntity) {
nextOrProcessEnd()
}
}
} }
} }

View File

@ -66,6 +66,8 @@ public class Config {
public static final String WGAME_CPM_BUSIAPPID = BuildConfig.WGAME_CPM_BUSIAPPID; public static final String WGAME_CPM_BUSIAPPID = BuildConfig.WGAME_CPM_BUSIAPPID;
public static final String WGAME_CPM_API_HOST = EnvHelper.getWGameCPMHost(); public static final String WGAME_CPM_API_HOST = EnvHelper.getWGameCPMHost();
public static final String DSP_API_HOST = EnvHelper.getDspHost();
// Third-Party confs // Third-Party confs
public static final String WECHAT_APPID = BuildConfig.WECHAT_APPID; public static final String WECHAT_APPID = BuildConfig.WECHAT_APPID;
public static final String WECHAT_SECRET = BuildConfig.WECHAT_SECRET; public static final String WECHAT_SECRET = BuildConfig.WECHAT_SECRET;
@ -114,8 +116,6 @@ public class Config {
if (!TextUtils.isEmpty(json)) { if (!TextUtils.isEmpty(json)) {
mSettingsEntity = GsonUtils.fromJson(json, SettingsEntity.class); mSettingsEntity = GsonUtils.fromJson(json, SettingsEntity.class);
} }
mSettingsEntity.setGameSmooth("off");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -263,8 +263,7 @@ public class Config {
public void onSuccess(VSetting data) { public void onSuccess(VSetting data) {
mVSetting = data; mVSetting = data;
SPUtils.setString(Constants.SP_V_SETTINGS, GsonUtils.toJson(data)); SPUtils.setString(Constants.SP_V_SETTINGS, GsonUtils.toJson(data));
VHelper.checkVspaceUpdate(HaloApp.getInstance());
VHelper.init(HaloApp.getInstance());
} }
}); });
} }

View File

@ -1,5 +1,10 @@
package com.gh.common.databind; package com.gh.common.databind;
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_SELLING_POINT;
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_TEST;
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_TYPE;
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_UPDATE;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color; import android.graphics.Color;
@ -8,17 +13,20 @@ import android.text.SpannableString;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.style.ForegroundColorSpan; import android.text.style.ForegroundColorSpan;
import android.view.View; import android.view.View;
import android.view.ViewParent;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import com.gh.common.chain.BrowserInstallHandler; import com.gh.common.chain.BrowserInstallHandler;
import com.gh.common.chain.DownloadChainBuilder;
import com.gh.common.chain.DownloadChainHandler;
import com.gh.common.chain.CheckDownloadHandler; import com.gh.common.chain.CheckDownloadHandler;
import com.gh.common.chain.CheckStoragePermissionHandler; import com.gh.common.chain.CheckStoragePermissionHandler;
import com.gh.common.chain.DownloadChainBuilder;
import com.gh.common.chain.DownloadChainHandler;
import com.gh.common.chain.DownloadDialogHelperHandler; import com.gh.common.chain.DownloadDialogHelperHandler;
import com.gh.common.chain.GamePermissionHandler; import com.gh.common.chain.GamePermissionHandler;
import com.gh.common.chain.LandPageAddressHandler; import com.gh.common.chain.LandPageAddressHandler;
@ -48,6 +56,7 @@ import com.gh.download.server.BrowserInstallHelper;
import com.gh.gamecenter.DownloadManagerActivity; import com.gh.gamecenter.DownloadManagerActivity;
import com.gh.gamecenter.R; import com.gh.gamecenter.R;
import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.WebActivity;
import com.gh.gamecenter.common.databinding.LayoutGameItemSellingPointBinding;
import com.gh.gamecenter.common.entity.LinkEntity; import com.gh.gamecenter.common.entity.LinkEntity;
import com.gh.gamecenter.common.utils.DarkModeUtils; import com.gh.gamecenter.common.utils.DarkModeUtils;
import com.gh.gamecenter.common.utils.ExtensionsKt; import com.gh.gamecenter.common.utils.ExtensionsKt;
@ -55,6 +64,7 @@ import com.gh.gamecenter.common.utils.FileUtils;
import com.gh.gamecenter.common.utils.NewFlatLogUtils; import com.gh.gamecenter.common.utils.NewFlatLogUtils;
import com.gh.gamecenter.common.utils.SensorsBridge; import com.gh.gamecenter.common.utils.SensorsBridge;
import com.gh.gamecenter.core.utils.MtaHelper; import com.gh.gamecenter.core.utils.MtaHelper;
import com.gh.gamecenter.core.utils.TimeUtils;
import com.gh.gamecenter.core.utils.ToastUtils; import com.gh.gamecenter.core.utils.ToastUtils;
import com.gh.gamecenter.feature.entity.ApkEntity; import com.gh.gamecenter.feature.entity.ApkEntity;
import com.gh.gamecenter.feature.entity.GameEntity; import com.gh.gamecenter.feature.entity.GameEntity;
@ -201,7 +211,8 @@ public class BindingAdapters {
gameEntity, gameEntity,
traceEvent, traceEvent,
entrance, entrance,
location + ":" + gameEntity.getName()); location + ":" + gameEntity.getName(),
null);
return null; return null;
}); });
final DownloadChainHandler chainHandler = builder.buildHandlerChain(); final DownloadChainHandler chainHandler = builder.buildHandlerChain();
@ -246,7 +257,8 @@ public class BindingAdapters {
gameEntity, gameEntity,
traceEvent, traceEvent,
entrance, entrance,
location + ":" + gameEntity.getName()); location + ":" + gameEntity.getName(),
null);
} }
break; break;
case INSTALL_PLUGIN: case INSTALL_PLUGIN:
@ -262,7 +274,9 @@ public class BindingAdapters {
SensorsBridge.trackInstallGameClick( SensorsBridge.trackInstallGameClick(
gameEntity.getId(), gameEntity.getId(),
gameEntity.getName() != null ? gameEntity.getName() : "", gameEntity.getName() != null ? gameEntity.getName() : "",
"主动安装" "主动安装",
gameEntity.isDspGame(),
gameEntity.getDspAdId()
); );
DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(gameEntity); DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(gameEntity);
@ -287,19 +301,11 @@ public class BindingAdapters {
}); });
break; break;
case RESERVED: case RESERVED:
if ("download".equals(gameEntity.getReserveStatus())) { ReservationHelper.showCancelReservationDialog(progressBar.getContext(), gameEntity, () -> {
ReservationHelper.showDeleteReservationDialog(progressBar.getContext(), () -> { ReservationHelper.cancelReservation(gameEntity, () -> {
ReservationHelper.deleteReservation(gameEntity, () -> { updateReservation(progressBar, gameEntity);
updateReservation(progressBar, gameEntity);
});
}); });
} else { });
ReservationHelper.showCancelReservationDialog(progressBar.getContext(),gameEntity, () -> {
ReservationHelper.cancelReservation(gameEntity, () -> {
updateReservation(progressBar, gameEntity);
});
});
}
break; break;
case H5_GAME: case H5_GAME:
LinkEntity linkEntity = gameEntity.getH5Link(); LinkEntity linkEntity = gameEntity.getH5Link();
@ -345,9 +351,9 @@ public class BindingAdapters {
} }
progressBar.setButtonStyle(DownloadButton.ButtonStyle.H5_GAME); progressBar.setButtonStyle(DownloadButton.ButtonStyle.H5_GAME);
} else { } else {
if (offStatus != null && "dialog".equals(offStatus)) { if (("dialog".equals(offStatus) || "third_party".equals(offStatus))) {
progressBar.setText("查看"); progressBar.setText("查看");
progressBar.setButtonStyle(DownloadButton.ButtonStyle.NONE); progressBar.setButtonStyle(DownloadButton.ButtonStyle.NONE_WITH_HINT);
} else if ("updating".equals(offStatus)) { } else if ("updating".equals(offStatus)) {
progressBar.setText("更新中"); progressBar.setText("更新中");
progressBar.setButtonStyle(DownloadButton.ButtonStyle.UPDATING); progressBar.setButtonStyle(DownloadButton.ButtonStyle.UPDATING);
@ -478,39 +484,37 @@ public class BindingAdapters {
} }
} }
// 包含测试开服标签 /**
public static void setGameTags(LinearLayout layout, GameEntity gameEntity) { * 包含测试开服标签
*
* @param layout
* @param gameEntity
* @param subjectTag 默认为 “”只有游戏专题可以配置subjectTag
*/
public static void setGameTags(LinearLayout layout, GameEntity gameEntity, String subjectTag) {
try { try {
if (layout.getVisibility() == View.GONE) return; if (layout.getVisibility() == View.GONE) return;
ArrayList<TagStyleEntity> tagStyle = new ArrayList<>(); ArrayList<TagStyleEntity> tagStyle = new ArrayList<>();
TestEntity test = gameEntity.getTest(); TestEntity test = gameEntity.getTest();
if (test != null if (test != null && subjectTag.equals(SUBJECT_TAG_TEST)) {
// 这个判断用于开测表列表 // 显示开测表标签
&& !"type_tag".equals(test.getGameTag())) { TagStyleEntity typeTag = new TagStyleEntity();
if ("custom".equals(test.getGameTag())) { boolean isDarkModeOn = DarkModeUtils.INSTANCE.isDarkModeOn(layout.getContext());
TagStyleEntity typeTag = new TagStyleEntity(); typeTag.setName(test.getType() != null ? test.getType() : "");
if (!TextUtils.isEmpty(test.getText())) { typeTag.setBackground("1AFFA142");
typeTag.setName(test.getText() != null ? test.getText() : ""); typeTag.setColor(isDarkModeOn ? "EB9238" : "FFA142");
} else { tagStyle.add(typeTag);
typeTag.setName(test.getType() != null ? test.getType() : "");
}
typeTag.setBackground("E8F3FF");
typeTag.setColor("1383EB");
tagStyle.add(typeTag);
} else {
TagStyleEntity typeTag = new TagStyleEntity();
boolean isDarkModeOn = DarkModeUtils.INSTANCE.isDarkModeOn(layout.getContext());
typeTag.setName(test.getType() != null ? test.getType() : "");
typeTag.setBackground("1AFFA142");
typeTag.setColor(isDarkModeOn ? "EB9238" : "FFA142");
tagStyle.add(typeTag);
TagStyleEntity timeTag = new TagStyleEntity(); TagStyleEntity timeTag = new TagStyleEntity();
if (test.getStartPending()) {
timeTag.setName(test.getStartText());
} else {
timeTag.setName(GameViewUtils.getGameTestDate(test.getStart())); timeTag.setName(GameViewUtils.getGameTestDate(test.getStart()));
timeTag.setBackground("1A06CEA8");
timeTag.setColor(isDarkModeOn ? "07A385" : "06CEA8");
tagStyle.add(timeTag);
} }
timeTag.setBackground("1A06CEA8");
timeTag.setColor(isDarkModeOn ? "07A385" : "06CEA8");
tagStyle.add(timeTag);
} else { } else {
tagStyle = gameEntity.getTagStyle(); tagStyle = gameEntity.getTagStyle();
} }
@ -520,6 +524,68 @@ public class BindingAdapters {
} }
} }
public static void setGameTagsWithSellingPoint(LinearLayout layout, LayoutGameItemSellingPointBinding binding, GameEntity gameEntity, String subjectTag) {
if (subjectTag.equals(SUBJECT_TAG_SELLING_POINT)) {
layout.setVisibility(View.GONE);
binding.getRoot().setVisibility(View.VISIBLE);
GameEntity.SellingPoints sellingPoints = gameEntity.getSellingPoints();
if (sellingPoints != null) {
binding.tvSellingPoints.setVisibility(View.VISIBLE);
binding.tvSellingPoints.setText(sellingPoints.getText());
} else {
binding.tvSellingPoints.setVisibility(View.GONE);
}
ArrayList<TagStyleEntity> tagStyle = gameEntity.getTagStyle();
StringBuilder tagText = new StringBuilder();
for (int i = 0; i < tagStyle.size(); i++) {
if (i < 3) {
tagText.append(i == 0 ? "" : "·").append(tagStyle.get(i).getName());
}
}
binding.gtcvTags.setText(tagText);
} else {
layout.setVisibility(View.VISIBLE);
binding.getRoot().setVisibility(View.GONE);
switch (subjectTag) {
case SUBJECT_TAG_UPDATE:
List<TagStyleEntity> updateTags = new ArrayList<>();
TagStyleEntity updateTag = new TagStyleEntity(
"local_generated",
TimeUtils.getFormatTime(gameEntity.getUpdateTime(), "MM-dd") + " 更新",
"",
"1383EB",
"E8F3FF",
"1383EB",
false
);
updateTags.add(updateTag);
GameViewUtils.setLabelList(layout.getContext(), layout, updateTags);
break;
case SUBJECT_TAG_TYPE:
GameViewUtils.setLabelList(layout.getContext(), layout, gameEntity.getTagStyle());
break;
default:
setGameTags(layout, gameEntity, subjectTag);
break;
}
}
ViewParent parent = binding.getRoot().getParent();
if (parent instanceof ConstraintLayout) {
ConstraintLayout constraintLayout = (ConstraintLayout) parent;
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout);
constraintSet.clear(R.id.gameDesSpace, ConstraintSet.BOTTOM);
if (subjectTag.equals(SUBJECT_TAG_SELLING_POINT)) {
constraintSet.connect(R.id.gameDesSpace, ConstraintSet.BOTTOM, R.id.layout_selling_points, ConstraintSet.TOP);
} else {
constraintSet.connect(R.id.gameDesSpace, ConstraintSet.BOTTOM, R.id.label_list, ConstraintSet.TOP);
}
constraintSet.applyTo(constraintLayout);
}
}
public static void setVideoDetailGameTags(LinearLayout layout, GameEntity gameEntity) { public static void setVideoDetailGameTags(LinearLayout layout, GameEntity gameEntity) {
try { try {
ArrayList<TagStyleEntity> tagStyle = new ArrayList<>(); ArrayList<TagStyleEntity> tagStyle = new ArrayList<>();

View File

@ -0,0 +1,294 @@
package com.gh.common.dialog
import android.content.Context
import android.os.Bundle
import android.os.Parcelable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import com.gh.common.util.DirectUtils
import com.gh.gamecenter.R
import com.gh.gamecenter.common.HaloApp
import com.gh.gamecenter.common.base.fragment.BaseDialogFragment
import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.utils.SensorsBridge
import com.gh.gamecenter.common.utils.dip2px
import com.gh.gamecenter.core.utils.CurrentActivityHolder
import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.databinding.DialogFragmentAccelerateExporationBinding
import kotlinx.parcelize.Parcelize
public class AccelerateExpirationDialogFragment : BaseDialogFragment() {
private lateinit var binding: DialogFragmentAccelerateExporationBinding
private var _reminder: ExpirationReminder? = null
override fun onBack(): Boolean {
return true
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_reminder = arguments?.getParcelable(KEY_EXPIRATION_REMINDER)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return DialogFragmentAccelerateExporationBinding.inflate(inflater, container, false)
.also {
binding = it
}.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val reminder = _reminder ?: return
val (title, content) = when (reminder) {
is ExpirationReminder.UserExpired -> {
SensorsBridge.trackMonthlyPackageExpiresDialogShow(
reminder.gameId, reminder.gameName, reminder.pkgName, reminder.sourceEntrance
)
getString(
R.string.membership_expiration_reminder_title,
"${reminder.days}"
) to getString(R.string.membership_expiration_reminder_content)
}
is ExpirationReminder.InsufficientDuration -> {
SensorsBridge.trackInsufficientDurationDialogShow(
reminder.gameId,
reminder.gameName,
reminder.pkgName,
reminder.sourceEntrance
)
getString(
R.string.duration_time_out_reminder_title,
"${reminder.hours}"
) to getString(R.string.duration_time_out_reminder_content)
}
is ExpirationReminder.DurationExpired -> {
SensorsBridge.trackTimedPackageExpiresDialogShow(
reminder.gameId,
reminder.gameName,
reminder.pkgName,
reminder.sourceEntrance
)
getString(
R.string.duration_expiration_reminder_title,
"${reminder.days}"
) to getString(R.string.duration_expiration_reminder_content)
}
is ExpirationReminder.TimeRunsOut -> {
SensorsBridge.trackDurationExhaustedDialogShow()
getString(R.string.accelerator_member_expired_title) to getString(R.string.accelerator_member_expired_content)
}
}
binding.tvTitle.text = title
binding.tvContent.text = content
binding.tvCancel.setOnClickListener {
when (reminder) {
is ExpirationReminder.UserExpired -> {
SensorsBridge.trackMonthlyPackageExpiresDialogClick(
reminder.gameId, reminder.gameName, reminder.pkgName, reminder.sourceEntrance, BUTTON_NAME_KNOW
)
}
is ExpirationReminder.InsufficientDuration -> {
SensorsBridge.trackInsufficientDurationDialogClick(
reminder.gameId, reminder.gameName, reminder.pkgName, reminder.sourceEntrance, BUTTON_NAME_KNOW
)
}
is ExpirationReminder.DurationExpired -> {
SensorsBridge.trackTimedPackageExpiresDialogClick(
reminder.gameId, reminder.gameName, reminder.pkgName, reminder.sourceEntrance, BUTTON_NAME_KNOW
)
}
is ExpirationReminder.TimeRunsOut -> {
SensorsBridge.trackDurationExhaustedDialogClick(BUTTON_NAME_KNOW)
}
}
dismissAllowingStateLoss()
}
binding.tvSubmit.setOnClickListener {
when (reminder) {
is ExpirationReminder.UserExpired -> {
SensorsBridge.trackMonthlyPackageExpiresDialogClick(
reminder.gameId, reminder.gameName, reminder.pkgName, reminder.sourceEntrance, BUTTON_NAME_BUY
)
}
is ExpirationReminder.InsufficientDuration -> {
SensorsBridge.trackInsufficientDurationDialogClick(
reminder.gameId, reminder.gameName, reminder.pkgName, reminder.sourceEntrance, BUTTON_NAME_BUY
)
}
is ExpirationReminder.DurationExpired -> {
SensorsBridge.trackTimedPackageExpiresDialogClick(
reminder.gameId, reminder.gameName, reminder.pkgName, reminder.sourceEntrance, BUTTON_NAME_BUY
)
}
is ExpirationReminder.TimeRunsOut -> {
SensorsBridge.trackDurationExhaustedDialogClick(BUTTON_NAME_BUY)
}
}
SensorsBridge.trackMyAssetsPageShow(
reminder.pkgName,
reminder.gameId,
reminder.gameName,
reminder.dialogName
)
dismissAllowingStateLoss()
DirectUtils.navigateToMyAssetsPage(requireContext(), reminder.sourceEntrance)
}
}
override fun onStart() {
super.onStart()
val width = HaloApp.getInstance().resources.displayMetrics.widthPixels - 60F.dip2px()
val height = dialog?.window?.attributes?.height ?: ViewGroup.LayoutParams.WRAP_CONTENT
dialog?.window?.setLayout(width, height)
}
companion object {
const val KEY_EXPIRATION_REMINDER = "key_expiration_reminder"
private const val BUTTON_NAME_KNOW = "知道了"
private const val BUTTON_NAME_BUY = "前往购买"
fun checkDialogShown(context: Context, reminder: ExpirationReminder, callback: ((Boolean) -> Unit)? = null) {
when (reminder) {
is ExpirationReminder.UserExpired -> {
val days = SPUtils.getLong(Constants.SP_ACCELERATOR_USER_REMAINING_REMIND)
if (reminder.days != days) {
SPUtils.setLong(Constants.SP_ACCELERATOR_USER_REMAINING_REMIND, reminder.days)
show(context, reminder)
callback?.invoke(true)
} else {
callback?.invoke(false)
}
}
is ExpirationReminder.InsufficientDuration -> {
val hours = SPUtils.getLong(Constants.SP_ACCELERATOR_DURATION_REMAINING_HOURS)
if (reminder.hours != hours) {
SPUtils.setLong(Constants.SP_ACCELERATOR_DURATION_REMAINING_HOURS, reminder.hours)
show(context, reminder)
callback?.invoke(true)
} else {
callback?.invoke(false)
}
}
is ExpirationReminder.DurationExpired -> {
val days = SPUtils.getLong(Constants.SP_ACCELERATOR_DURATION_REMAINING_DAYS)
if (reminder.days != days) {
SPUtils.setLong(Constants.SP_ACCELERATOR_DURATION_REMAINING_DAYS, reminder.days)
show(context, reminder)
callback?.invoke(true)
} else {
callback?.invoke(false)
}
}
is ExpirationReminder.TimeRunsOut -> {
val hasShow = SPUtils.getBoolean(Constants.SP_ACCELERATOR_MEMBERSHIP_EXPIRED)
if (!hasShow) {
SPUtils.setBoolean(Constants.SP_ACCELERATOR_MEMBERSHIP_EXPIRED, true)
show(context, reminder)
callback?.invoke(true)
} else {
callback?.invoke(false)
}
}
}
}
fun show(context: Context, reminder: ExpirationReminder) {
if (context is AppCompatActivity) {
context.supportFragmentManager
} else {
(CurrentActivityHolder.getCurrentActivity() as? AppCompatActivity)?.supportFragmentManager
}?.let {
val fragment = AccelerateExpirationDialogFragment().apply {
arguments = Bundle().apply {
putParcelable(KEY_EXPIRATION_REMINDER, reminder)
}
}
fragment.show(it, AcceleratorPermissionGuideDialogFragment::class.java.name)
}
}
}
sealed class ExpirationReminder(
val gameId: String,
val gameName: String,
val pkgName: String,
val sourceEntrance: String
) :
Parcelable {
abstract val dialogName: String
@Parcelize
data class InsufficientDuration(
val hours: Long,
private val _gameId: String,
private val _gameName: String,
private val _pkgName: String,
private val _sourceEntrance: String,
) :
ExpirationReminder(_gameId, _gameName, _pkgName, _sourceEntrance) {
override val dialogName: String
get() = "时长不足提示弹窗"
}
@Parcelize
data class DurationExpired(
val days: Long,
private val _gameId: String,
private val _gameName: String,
private val _pkgName: String,
private val _sourceEntrance: String,
) :
ExpirationReminder(_gameId, _gameName, _pkgName, _sourceEntrance) {
override val dialogName: String
get() = "计时套餐临期提示弹窗"
}
@Parcelize
data class UserExpired(
val days: Long,
private val _gameId: String,
private val _gameName: String,
private val _pkgName: String,
private val _sourceEntrance: String,
) :
ExpirationReminder(_gameId, _gameName, _pkgName, _sourceEntrance) {
override val dialogName: String
get() = "包月套餐临期提示弹窗"
}
@Parcelize
data class TimeRunsOut(
private val _sourceEntrance: String,
) : ExpirationReminder("", "", "", _sourceEntrance) {
override val dialogName: String
get() = "时长耗尽提示弹窗"
}
}
}

View File

@ -0,0 +1,68 @@
package com.gh.common.dialog
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import com.gh.gamecenter.common.HaloApp
import com.gh.gamecenter.common.base.fragment.BaseDialogFragment
import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.utils.dip2px
import com.gh.gamecenter.core.utils.CurrentActivityHolder
import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.databinding.DialogFragmentAcceleratorPermissionGuideBinding
class AcceleratorPermissionGuideDialogFragment : BaseDialogFragment() {
private lateinit var binding: DialogFragmentAcceleratorPermissionGuideBinding
private var callback: (() -> Unit)? = null
override fun onBack(): Boolean {
return true
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return DialogFragmentAcceleratorPermissionGuideBinding.inflate(inflater, container, false)
.also {
binding = it
}.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
SPUtils.setBoolean(Constants.SP_ACCELERATOR_PERMISSION_GUIDE_SHOW, true)
binding.tvSubmit.setOnClickListener {
dismiss()
callback?.invoke()
}
}
fun setOnCallback(block: () -> Unit) {
this.callback = block
}
override fun onStart() {
super.onStart()
val width = HaloApp.getInstance().resources.displayMetrics.widthPixels - 60F.dip2px()
val height = dialog?.window?.attributes?.height ?: ViewGroup.LayoutParams.WRAP_CONTENT
dialog?.window?.setLayout(width, height)
}
companion object {
fun show(context: Context, callback: () -> Unit) {
if (context is AppCompatActivity) {
context.supportFragmentManager
} else {
(CurrentActivityHolder.getCurrentActivity() as? AppCompatActivity)?.supportFragmentManager
}?.let {
val fragment = AcceleratorPermissionGuideDialogFragment()
fragment.setOnCallback(callback)
fragment.show(it, AcceleratorPermissionGuideDialogFragment::class.java.name)
}
}
}
}

View File

@ -3,7 +3,6 @@ package com.gh.common.dialog
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.content.Context import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.content.pm.PackageInfo
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -19,7 +18,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.gh.common.util.DirectUtils import com.gh.common.util.DirectUtils
import com.gh.common.util.LogUtils import com.gh.common.util.LogUtils
import com.gh.common.util.PackageHelper
import com.gh.common.util.PackageUtils import com.gh.common.util.PackageUtils
import com.gh.download.DownloadManager import com.gh.download.DownloadManager
import com.gh.gamecenter.common.base.BaseRecyclerViewHolder import com.gh.gamecenter.common.base.BaseRecyclerViewHolder
@ -59,7 +57,6 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
private val mDuration = 3000 private val mDuration = 3000
private var mDisposable: Disposable? = null private var mDisposable: Disposable? = null
private var mAdapter: PackageCheckAdapter? = null private var mAdapter: PackageCheckAdapter? = null
private var mAllInstalledPackages = PackageHelper.getInstalledPackageNameList(HaloApp.getInstance().application, 0)
var gameEntity: GameEntity? = null var gameEntity: GameEntity? = null
var callBack: ConfirmListener? = null var callBack: ConfirmListener? = null
@ -195,7 +192,7 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
if (binding.noRemindAgainCb.isChecked) { if (binding.noRemindAgainCb.isChecked) {
saveRecord(entity) saveRecord(entity)
} }
val isAllPackageInstalled = isAllPackageInstalled(mAllInstalledPackages, entity) val isAllPackageInstalled = isAllPackageInstalled(entity)
if (isAllPackageInstalled) { if (isAllPackageInstalled) {
mDismissByTouchInside = true mDismissByTouchInside = true
callBack?.onConfirm() callBack?.onConfirm()
@ -299,7 +296,7 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
private fun getNotInstalledLink(packageDialogEntity: PackageDialogEntity): LinkEntity? { private fun getNotInstalledLink(packageDialogEntity: PackageDialogEntity): LinkEntity? {
val links = LinkedHashSet<LinkEntity>() val links = LinkedHashSet<LinkEntity>()
packageDialogEntity.detectionObjects.forEach { obj -> packageDialogEntity.detectionObjects.forEach { obj ->
if (!checkDetectionsInstalled(mAllInstalledPackages, obj.packages)) { if (!checkDetectionsInstalled(obj.packages)) {
obj.assignDownload.forEach { obj.assignDownload.forEach {
links.add(packageDialogEntity.links[it]) links.add(packageDialogEntity.links[it])
} }
@ -325,9 +322,8 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
mAllInstalledPackages = PackageHelper.getInstalledPackageNameList(HaloApp.getInstance().application, 0)
gameEntity?.packageDialog?.let { gameEntity?.packageDialog?.let {
if (isAllPackageInstalled(mAllInstalledPackages, it)) { if (isAllPackageInstalled(it)) {
callBack?.onConfirm() callBack?.onConfirm()
dismissAllowingStateLoss() dismissAllowingStateLoss()
} }
@ -363,7 +359,6 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
fun onEventMainThread(busFour: EBPackage) { fun onEventMainThread(busFour: EBPackage) {
if (busFour.isInstalledOrUninstalled()) { if (busFour.isInstalledOrUninstalled()) {
mAllInstalledPackages = PackageHelper.getInstalledPackageNameList(HaloApp.getInstance().application, 0)
mAdapter?.notifyDataSetChanged() mAdapter?.notifyDataSetChanged()
} }
} }
@ -388,7 +383,7 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
val entity = entities[position] val entity = entities[position]
holder.binding.gameNameTv.text = entity.text holder.binding.gameNameTv.text = entity.text
if (position <= index) { if (position <= index) {
val isAllInstalled = checkDetectionsInstalled(mAllInstalledPackages, entity.packages) val isAllInstalled = checkDetectionsInstalled(entity.packages)
if (isAllInstalled) { if (isAllInstalled) {
holder.binding.statusTv.text = "已安装" holder.binding.statusTv.text = "已安装"
holder.binding.statusTv.setTextColor(ContextCompat.getColor(context, com.gh.gamecenter.common.R.color.text_theme)) holder.binding.statusTv.setTextColor(ContextCompat.getColor(context, com.gh.gamecenter.common.R.color.text_theme))
@ -416,8 +411,7 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
return return
} }
val allInstalledPackages = PackageHelper.getInstalledPackageNameList(HaloApp.getInstance().application, 0) if (isAllPackageInstalled(packageDialogEntity)) {
if (isAllPackageInstalled(allInstalledPackages, packageDialogEntity)) {
callBack.onConfirm() callBack.onConfirm()
return return
} }
@ -453,13 +447,11 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
} }
private fun checkDetectionsInstalled( private fun checkDetectionsInstalled(
allInstalledPackages: List<String>,
packages: ArrayList<String> packages: ArrayList<String>
): Boolean { ): Boolean {
var isPackagesInstalled = false var isPackagesInstalled = false
packages.forEach { packageName -> packages.forEach { packageName ->
val isInstalled = allInstalledPackages.find { it == packageName } != null if (PackageUtils.isInstalledFromAllPackage(HaloApp.getInstance(), packageName)) {
if (isInstalled) {
isPackagesInstalled = true isPackagesInstalled = true
return@forEach return@forEach
} }
@ -469,17 +461,14 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
fun isAllPackageInstalled( fun isAllPackageInstalled(
allInstalledPackages: List<String>,
packageDialogEntity: PackageDialogEntity packageDialogEntity: PackageDialogEntity
): Boolean { ): Boolean {
var isAllInstalled = true
packageDialogEntity.detectionObjects.forEach loop@{ obj -> packageDialogEntity.detectionObjects.forEach loop@{ obj ->
if (!checkDetectionsInstalled(allInstalledPackages, obj.packages)) { if (!checkDetectionsInstalled(obj.packages)) {
isAllInstalled = false return false
return isAllInstalled
} }
} }
return isAllInstalled return true
} }
} }
} }

View File

@ -16,12 +16,10 @@ import com.gh.gamecenter.GameDetailActivity
import com.gh.gamecenter.R import com.gh.gamecenter.R
import com.gh.gamecenter.common.base.BaseRecyclerViewHolder import com.gh.gamecenter.common.base.BaseRecyclerViewHolder
import com.gh.gamecenter.common.base.fragment.BaseDialogFragment import com.gh.gamecenter.common.base.fragment.BaseDialogFragment
import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.exposure.ExposureSource import com.gh.gamecenter.common.exposure.ExposureSource
import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.common.view.FixLinearLayoutManager import com.gh.gamecenter.common.view.FixLinearLayoutManager
import com.gh.gamecenter.core.utils.DisplayUtils import com.gh.gamecenter.core.utils.DisplayUtils
import com.gh.gamecenter.core.utils.SPUtils.getBoolean
import com.gh.gamecenter.databinding.DialogReserveBinding import com.gh.gamecenter.databinding.DialogReserveBinding
import com.gh.gamecenter.databinding.DialogReserveItemBinding import com.gh.gamecenter.databinding.DialogReserveItemBinding
import com.gh.gamecenter.feature.entity.GameEntity import com.gh.gamecenter.feature.entity.GameEntity

View File

@ -16,6 +16,7 @@ import com.gh.common.pop.EditBindWechatPop
import com.gh.common.pop.RealNameTipsPop import com.gh.common.pop.RealNameTipsPop
import com.gh.gamecenter.R import com.gh.gamecenter.R
import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.entity.WechatConfigEntity
import com.gh.gamecenter.common.utils.dip2px import com.gh.gamecenter.common.utils.dip2px
import com.gh.gamecenter.common.utils.goneIf import com.gh.gamecenter.common.utils.goneIf
import com.gh.gamecenter.common.utils.toObject import com.gh.gamecenter.common.utils.toObject
@ -83,79 +84,90 @@ class ReserveSuccessReminderDialog(
handlers.clear() handlers.clear()
binding.flContentContainer.removeAllViews() binding.flContentContainer.removeAllViews()
val smsConfig = reserveReminder.smsConfig val configTypes = mutableListOf<Int>()
val wechatConfig = reserveReminder.wechatConfig // 短信
when { if (reserveReminder.hasSmsConfig) {
reserveReminder.onlyShowWechatReminder && !wechatConfig.isReminderEnable -> { // 只显示微信:未开启 if (reserveReminder.smsConfig.notice) {
binding.tvContent.setText(R.string.reverse_success_without_reminder_tips) configTypes.add(SMS_REMINDER_ENABLE_TYPE)
arrayListOf(OnlyWechatReminderUnableHandler(16.dp, binding.flContentContainer, this)) } else {
configTypes.add(SMS_REMINDER_UNABLE_TYPE)
} }
reserveReminder.onlyShowWechatReminder && wechatConfig.isReminderEnable -> { // 只显示微信:已开
binding.tvContent.setText(R.string.reverse_success_with_reminder_tips)
arrayListOf(
WechatReminderEnableHandler(
reserveReminder.wechatConfig.nickName,
8.dp,
binding.flContentContainer,
this
)
)
}
!smsConfig.notice && !wechatConfig.isReminderEnable -> { // 短信,微信未开启
binding.tvContent.setText(R.string.reverse_success_without_reminder_tips)
arrayListOf(
SmsReminderUnableHandler(16.dp, binding.flContentContainer, this),
WechatReminderUnableHandler(8.dp, binding.flContentContainer, this)
)
}
smsConfig.notice && wechatConfig.isReminderEnable -> {// 短信,微信已开启
binding.tvContent.setText(R.string.reverse_success_with_reminder_tips)
arrayListOf(
SmsReminderEnableHandler(reserveReminder.smsConfig, 8.dp, binding.flContentContainer, this),
WechatReminderEnableHandler(
reserveReminder.wechatConfig.nickName,
8.dp,
binding.flContentContainer,
this
)
)
}
smsConfig.notice && !wechatConfig.isReminderEnable -> { // 短信开启,微信未开启
binding.tvContent.setText(R.string.reverse_success_with_reminder_tips)
arrayListOf(
SmsReminderEnableHandler(smsConfig, 8.dp, binding.flContentContainer, this),
WechatReminderUnableHandler(16.dp, binding.flContentContainer, this)
)
}
!smsConfig.notice && wechatConfig.isReminderEnable -> { // 微信开启,短信未开启
binding.tvContent.setText(R.string.reverse_success_with_reminder_tips)
arrayListOf(
WechatReminderEnableHandler(
wechatConfig.nickName,
8.dp,
binding.flContentContainer,
this
),
SmsReminderUnableHandler(16.dp, binding.flContentContainer, this)
)
}
else -> {
binding.tvContent.setText(R.string.reverse_success_without_reminder_tips)
arrayListOf()
}
}.let {
handlers.clear()
handlers.addAll(it)
} }
// 微信
if (reserveReminder.wechatConfig.isReminderEnable) {
configTypes.add(WECHAT_REMINDER_ENABLE_TYPE)
} else {
configTypes.add(WECHAT_REMINDER_UNABLE_TYPE)
}
// 日历
if (reserveReminder.hasCalendarConfig) {
if (reserveReminder.calendarConfig.notice) {
configTypes.add(CALENDAR_REMINDER_ENABLE_TYPE)
} else {
configTypes.add(CALENDAR_REMINDER_UNABLE_TYPE)
}
}
if (configTypes.size == 1) {
// 只有微信提醒
if (configTypes.first() == WECHAT_REMINDER_ENABLE_TYPE) {
binding.tvContent.setText(R.string.reverse_success_with_reminder_tips)
handlers.add(
WechatReminderEnableHandler(reserveReminder.wechatConfig, 8.dp, binding.flContentContainer, this)
)
} else {
binding.tvContent.setText(R.string.reverse_success_without_reminder_tips)
handlers.add(OnlyWechatReminderUnableHandler(16.dp, binding.flContentContainer, this))
}
} else {
binding.tvContent.setText(R.string.reverse_success_with_reminder_tips)
var isLargerSpacing = true
fun getPaddingTop(): Int {
val paddingTop = if (isLargerSpacing) 16.dp else 8.dp
isLargerSpacing = false
return paddingTop
}
configTypes.sorted().forEach {
when (it) {
SMS_REMINDER_ENABLE_TYPE -> {
isLargerSpacing = true
SmsReminderEnableHandler(reserveReminder.smsConfig, 8.dp, binding.flContentContainer, this)
}
SMS_REMINDER_UNABLE_TYPE -> {
SmsReminderUnableHandler(getPaddingTop(), binding.flContentContainer, this)
}
WECHAT_REMINDER_ENABLE_TYPE -> {
isLargerSpacing = true
WechatReminderEnableHandler(
reserveReminder.wechatConfig,
8.dp,
binding.flContentContainer,
this
)
}
WECHAT_REMINDER_UNABLE_TYPE ->
WechatReminderUnableHandler(getPaddingTop(), binding.flContentContainer, this)
CALENDAR_REMINDER_ENABLE_TYPE -> {
isLargerSpacing = true
CalendarReminderEnableHandler(8.dp, binding.flContentContainer, this)
}
CALENDAR_REMINDER_UNABLE_TYPE ->
CalendarReminderUnableHandler(getPaddingTop(), binding.flContentContainer, this)
else -> null
}?.let(handlers::add)
}
}
handlers.forEach { handlers.forEach {
binding.flContentContainer.addView(it.init()) binding.flContentContainer.addView(it.init())
} }
@ -220,9 +232,14 @@ class ReserveSuccessReminderDialog(
listener.changeWechatBinding() listener.changeWechatBinding()
} }
override fun updateCalendarReminder() {
listener.updateCalendarReminder()
}
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
window?.let { window?.let {
it.setDimAmount(0.4F)
it.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) it.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
val params = it.attributes val params = it.attributes
params.width = DisplayUtils.dip2px(300F) params.width = DisplayUtils.dip2px(300F)
@ -244,6 +261,13 @@ class ReserveSuccessReminderDialog(
private val Int.dp: Int private val Int.dp: Int
get() = DisplayUtils.dip2px(this.toFloat()) get() = DisplayUtils.dip2px(this.toFloat())
private const val SMS_REMINDER_ENABLE_TYPE = 1
private const val WECHAT_REMINDER_ENABLE_TYPE = 2
private const val CALENDAR_REMINDER_ENABLE_TYPE = 3
private const val SMS_REMINDER_UNABLE_TYPE = 4
private const val WECHAT_REMINDER_UNABLE_TYPE = 5
private const val CALENDAR_REMINDER_UNABLE_TYPE = 6
fun create(context: Context, listener: OnReserveReminderListener) = fun create(context: Context, listener: OnReserveReminderListener) =
ReserveSuccessReminderDialog( ReserveSuccessReminderDialog(
context, context,
@ -360,7 +384,7 @@ class ReserveSuccessReminderDialog(
} }
class WechatReminderEnableHandler( class WechatReminderEnableHandler(
private val nickName: String, private val wechatConfig: WechatConfigEntity,
topMargin: Int, topMargin: Int,
parent: ViewGroup, parent: ViewGroup,
listener: OnReserveSuccessListener listener: OnReserveSuccessListener
@ -380,7 +404,7 @@ class ReserveSuccessReminderDialog(
}.root }.root
override fun initView() { override fun initView() {
binding.tvWechat.text = nickName binding.tvWechat.text = wechatConfig.nickName
binding.vModifyWechat.setOnClickListener { binding.vModifyWechat.setOnClickListener {
editWechatPop.showAsDropDown( editWechatPop.showAsDropDown(
binding.ivModifyWechat, binding.ivModifyWechat,
@ -411,6 +435,51 @@ class ReserveSuccessReminderDialog(
} }
class CalendarReminderUnableHandler(
topMargin: Int,
parent: ViewGroup,
listener: OnReserveSuccessListener
) : ReminderContentHandler(topMargin, parent, listener) {
private lateinit var binding: LayoutReserveWechatReminderUnableBinding
// 复用微信提醒未开启状态布局
override fun createView(inflater: LayoutInflater) =
LayoutReserveWechatReminderUnableBinding.inflate(inflater, parent, false)
.also {
binding = it
}.root
override fun initView() {
binding.tvWechatReminderTitle.setText(R.string.calendar_reminders)
binding.tvWechatReminderDescription.setText(R.string.calendar_reminders_description)
binding.vWechatAdd.setOnClickListener {
listener.updateCalendarReminder()
}
}
}
class CalendarReminderEnableHandler(
topMargin: Int,
parent: ViewGroup,
listener: OnReserveSuccessListener
) : ReminderContentHandler(topMargin, parent, listener) {
private lateinit var binding: LayoutReserveCalendarReminderUnableBinding
override fun createView(inflater: LayoutInflater) =
LayoutReserveCalendarReminderUnableBinding.inflate(inflater, parent, false)
.also {
binding = it
}.root
override fun initView() {
}
}
} }
@ -425,4 +494,6 @@ interface OnReserveSuccessListener {
fun verifyPhoneNumber() fun verifyPhoneNumber()
fun changeWechatBinding() fun changeWechatBinding()
fun updateCalendarReminder()
} }

View File

@ -17,7 +17,7 @@ import com.gh.gamecenter.common.entity.ErrorEntity
import com.gh.gamecenter.core.utils.CurrentActivityHolder import com.gh.gamecenter.core.utils.CurrentActivityHolder
import com.gh.gamecenter.core.utils.DisplayUtils import com.gh.gamecenter.core.utils.DisplayUtils
import com.gh.gamecenter.databinding.DialogWechatBindingFailedBinding import com.gh.gamecenter.databinding.DialogWechatBindingFailedBinding
import com.gh.gamecenter.login.user.UserRepository import com.gh.gamecenter.login.user.UserManager
import com.lightgame.utils.Utils import com.lightgame.utils.Utils
class WechatBindingFailedDialogFragment : BaseDialogFragment() { class WechatBindingFailedDialogFragment : BaseDialogFragment() {
@ -48,10 +48,10 @@ class WechatBindingFailedDialogFragment : BaseDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
UserRepository.getInstance().loginUserInfo.observe(viewLifecycleOwner) { UserManager.getInstance().userInfoEntity?.let {
currentUserId = it.data.getShortUserId() currentUserId = it.getShortUserId()
binding.tvCurrentName.text = it.data.name binding.tvCurrentName.text = it.name ?: ""
binding.ivCurrentAvatar.displayAvatar(it.data.icon) binding.ivCurrentAvatar.displayAvatar(it.icon)
binding.tvUserId.text = getString(R.string.user_id, currentUserId) binding.tvUserId.text = getString(R.string.user_id, currentUserId)
} }

View File

@ -0,0 +1,54 @@
package com.gh.common.exposure
import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.gh.gamecenter.feature.exposure.IExposureStateChangeListener
import com.gh.gamecenter.feature.exposure.RecyclerViewExposureHelper
import com.lightgame.utils.Utils
class DefaultExposureStateChangeListener : IExposureStateChangeListener {
override fun onExposureStateChange(
exposureEvent: ExposureEvent,
position: Int,
inExposure: Boolean
) {
val exposureStatus = if (inExposure) "曝光中" else "结束曝光"
val isCPMExposureEvent = exposureEvent.payload.miniGameType == Constants.WECHAT_MINI_GAME_CPM
Utils.log(
RecyclerViewExposureHelper.TAG,
"onExposureStateChange: 名称 ${exposureEvent.payload.gameName} 位置 $position, $exposureStatus"
)
// 如果是 CPM 曝光事件,且在曝光中,直接上报 CPM 曝光 (内部有做简单的去重处理CPM 曝光追求一个及时上报,不用理会曝光时长)
if (isCPMExposureEvent && inExposure) {
Utils.log(
RecyclerViewExposureHelper.TAG,
"上报 CPM 曝光 ${exposureEvent.payload.gameName} ${exposureEvent.id}"
)
ExposureManager.logCPM(exposureEvent)
}
if (!inExposure
&& System.currentTimeMillis() - exposureEvent.timeInMillisecond > DEFAULT_VALID_EXPOSURE_THRESHOLD
) {
Utils.log(
RecyclerViewExposureHelper.TAG,
"上报曝光 ${exposureEvent.payload.gameName} ${exposureEvent.id},是否为 CPM 小游戏 -> ${isCPMExposureEvent}" +
"曝光时长为 ${System.currentTimeMillis() - exposureEvent.timeInMillisecond}ms"
)
// 标记当前 ExposureEvent 已经被使用过
exposureEvent.markIsUsed()
ExposureManager.log(exposureEvent)
}
}
companion object {
// 默认曝光有效时长
const val DEFAULT_VALID_EXPOSURE_THRESHOLD = 1000L
}
}

View File

@ -19,7 +19,7 @@ class ExposureListener(var fragment: Fragment, var exposable: IExposable) : Recy
ExposureThrottleBus( ExposureThrottleBus(
{ commitExposure(it) }, { commitExposure(it) },
Consumer(Throwable::printStackTrace), Consumer(Throwable::printStackTrace),
{ commitWXCPMExposure(it) } { commitExternalExposure(it) }
) )
} }
var layoutManager: LayoutManager? = null var layoutManager: LayoutManager? = null
@ -31,6 +31,7 @@ class ExposureListener(var fragment: Fragment, var exposable: IExposable) : Recy
override fun onFragmentPaused(fm: FragmentManager, f: Fragment) { override fun onFragmentPaused(fm: FragmentManager, f: Fragment) {
if (fragment == f) { if (fragment == f) {
visibleState?.let { commitExposure(it) } visibleState?.let { commitExposure(it) }
visibleState?.let { commitExternalExposure(it) }
throttleBus.clear() throttleBus.clear()
} }
} }
@ -96,23 +97,33 @@ class ExposureListener(var fragment: Fragment, var exposable: IExposable) : Recy
} }
/** /**
* 微信小游戏CPM曝光事件接口上报由于普通曝光事件的上报通道存在节流特性不符合CPM接口对于数据上报的实时性和准确性的要求所以使用额外的通道进行上报 * 提交第三方的曝光事件 微信小游戏CPM 和 DSP 游戏)
* 由于普通曝光事件的上报通道存在节流特性不符合CPM接口对于数据上报的实时性和准确性的要求所以使用额外的通道进行上报
*/ */
private fun commitWXCPMExposure(visibleState: ExposureThrottleBus.VisibleState) { private fun commitExternalExposure(visibleState: ExposureThrottleBus.VisibleState) {
val eventList = arrayListOf<ExposureEvent>() val cpmEventList = arrayListOf<ExposureEvent>()
val dspEventList = arrayListOf<ExposureEvent>()
for (pos in visibleState.firstVisiblePosition..visibleState.lastVisiblePosition) { for (pos in visibleState.firstVisiblePosition..visibleState.lastVisiblePosition) {
try { try {
exposable.getEventByPosition(pos)?.let { exposable.getEventByPosition(pos)?.let {
if (it.payload.miniGameType == Constants.WECHAT_MINI_GAME_CPM) { when (it.payload.miniGameType) {
eventList.add(it) Constants.WECHAT_MINI_GAME_CPM -> cpmEventList.add(it)
Constants.DSP_GAME -> dspEventList.add(it)
else -> {
// do nothing
}
} }
} }
exposable.getEventListByPosition(pos)?.let { list -> exposable.getEventListByPosition(pos)?.let { list ->
list.forEach { list.forEach {
if (it.payload.miniGameType == Constants.WECHAT_MINI_GAME_CPM) { when (it.payload.miniGameType) {
eventList.add(it) Constants.WECHAT_MINI_GAME_CPM -> cpmEventList.add(it)
Constants.DSP_GAME -> dspEventList.add(it)
else -> {
// do nothing
}
} }
} }
} }
@ -120,7 +131,8 @@ class ExposureListener(var fragment: Fragment, var exposable: IExposable) : Recy
// Just ignore the error. // Just ignore the error.
} }
} }
ExposureManager.logCPM(eventList) ExposureManager.logExternal(cpmEventList, dspEventList)
} }
} }

View File

@ -4,10 +4,14 @@ import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.loghub.TLogHubHelper import com.gh.gamecenter.common.loghub.TLogHubHelper
import com.gh.gamecenter.common.utils.FixedSizeLinkedHashSet import com.gh.gamecenter.common.utils.FixedSizeLinkedHashSet
import com.gh.gamecenter.common.utils.toJson
import com.gh.gamecenter.core.AppExecutor import com.gh.gamecenter.core.AppExecutor
import com.gh.gamecenter.dsp.DspReportHelper
import com.gh.gamecenter.feature.exposure.ExposureEvent import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.gh.gamecenter.feature.exposure.ExposureType
import com.gh.gamecenter.feature.minigame.wechat.WGameSubjectCPMListReportHelper import com.gh.gamecenter.feature.minigame.wechat.WGameSubjectCPMListReportHelper
import com.google.gson.ExclusionStrategy
import com.google.gson.FieldAttributes
import com.google.gson.GsonBuilder
import com.lightgame.utils.Utils import com.lightgame.utils.Utils
import com.volcengine.model.tls.LogItem import com.volcengine.model.tls.LogItem
@ -29,6 +33,20 @@ object ExposureManager {
private val exposureSet by lazy { hashSetOf<ExposureEvent>() } private val exposureSet by lazy { hashSetOf<ExposureEvent>() }
private val exposureCache by lazy { FixedSizeLinkedHashSet<String>(300) } private val exposureCache by lazy { FixedSizeLinkedHashSet<String>(300) }
private val gson by lazy {
GsonBuilder()
.addSerializationExclusionStrategy(object: ExclusionStrategy {
override fun shouldSkipClass(clazz: Class<*>): Boolean {
return false
}
override fun shouldSkipField(f: FieldAttributes): Boolean {
return f.name == "additional"
}
})
.create()
}
/** /**
* Log a single exposure event. * Log a single exposure event.
*/ */
@ -36,6 +54,10 @@ object ExposureManager {
AppExecutor.logExecutor.execute { AppExecutor.logExecutor.execute {
if (event.payload.miniGameType == Constants.WECHAT_MINI_GAME_CPM) { if (event.payload.miniGameType == Constants.WECHAT_MINI_GAME_CPM) {
WGameSubjectCPMListReportHelper.reportExposure(event) WGameSubjectCPMListReportHelper.reportExposure(event)
} else if (event.payload.miniGameType == Constants.DSP_GAME) {
if (event.event == ExposureType.DOWNLOAD_COMPLETE) {
DspReportHelper.report(event.payload.downloadUrl)
}
} }
if (!exposureCache.contains(event.id)) { if (!exposureCache.contains(event.id)) {
exposureSet.add(event) exposureSet.add(event)
@ -63,14 +85,29 @@ object ExposureManager {
} }
} }
/**
* Log a collection of exposure event for external use.
*/
fun logExternal(cpmEventList: List<ExposureEvent>, dspEventList: ArrayList<ExposureEvent>) {
AppExecutor.logExecutor.execute {
if (cpmEventList.isNotEmpty()) {
WGameSubjectCPMListReportHelper.reportExposure(cpmEventList.toSet())
}
if (dspEventList.isNotEmpty()) {
for (event in dspEventList) {
DspReportHelper.report(event.payload.showUrl)
}
}
}
}
/** /**
* Log a wechat mini game cpm collection of exposure event. * Log a wechat mini game cpm collection of exposure event.
*/ */
fun logCPM(eventList: List<ExposureEvent>) { fun logCPM(event: ExposureEvent) {
AppExecutor.logExecutor.execute { AppExecutor.logExecutor.execute {
if (eventList.isNotEmpty()) { WGameSubjectCPMListReportHelper.reportExposure(event)
WGameSubjectCPMListReportHelper.reportExposure(eventList.toSet())
}
} }
} }
@ -102,14 +139,14 @@ object ExposureManager {
private fun buildLog(event: ExposureEvent) = LogItem(System.currentTimeMillis()).apply { private fun buildLog(event: ExposureEvent) = LogItem(System.currentTimeMillis()).apply {
addContent("__id", event.id) addContent("__id", event.id)
addContent("payload", event.payload.toJson()) addContent("payload", gson.toJson(event.payload))
addContent("event", event.event.toString()) addContent("event", event.event.toString())
addContent("source", eliminateMultipleBrackets(event.source.toJson())) addContent("source", eliminateMultipleBrackets(gson.toJson(event.source)))
addContent("meta", event.meta.toJson()) addContent("meta", gson.toJson(event.meta))
addContent("real_millisecond", event.timeInMillisecond.toString()) addContent("real_millisecond", event.timeInMillisecond.toString())
addContent( addContent(
"e-traces", if (event.eTrace != null) { "e-traces", if (event.eTrace != null) {
eliminateMultipleBrackets(event.eTrace?.toJson() ?: "") eliminateMultipleBrackets(gson.toJson(event.eTrace))
} else "" } else ""
) )
} }

View File

@ -8,13 +8,13 @@ object ExposureTraceUtils {
val traceList = arrayListOf<ExposureEvent>() val traceList = arrayListOf<ExposureEvent>()
event?.let { event?.let {
//这里使用deepCopy是为了防止循环引用调用hashCode方法触发StackOverflowError错误 //这里使用 copy是为了防止循环引用调用hashCode方法触发StackOverflowError错误
val deepCopy = it.deepCopy() val exposureCopy = it.shallowCopy()
if (deepCopy.eTrace == null) { if (exposureCopy.eTrace == null) {
traceList.add(deepCopy) traceList.add(exposureCopy)
} else { } else {
traceList.addAll(deepCopy.eTrace!!) traceList.addAll(exposureCopy.eTrace!!)
traceList.add(flattenTrace(deepCopy)) traceList.add(flattenTrace(exposureCopy))
} }
} }

View File

@ -89,6 +89,7 @@ object ExposureUtils {
exposureEvent.payload.path = path exposureEvent.payload.path = path
exposureEvent.payload.speed = speed exposureEvent.payload.speed = speed
exposureEvent.payload.redirectedUrlList = redirectedUrlList exposureEvent.payload.redirectedUrlList = redirectedUrlList
exposureEvent.payload.downloadUrl = gameEntity.downloadUrl
ExposureManager.log(exposureEvent) ExposureManager.log(exposureEvent)
ExposureManager.commitSavedExposureEvents(forcedUpload = true) ExposureManager.commitSavedExposureEvents(forcedUpload = true)

View File

@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import com.gh.gamecenter.R import com.gh.gamecenter.R
import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.retrofit.BiResponse import com.gh.gamecenter.common.retrofit.BiResponse
import com.gh.gamecenter.common.utils.PackageFlavorHelper
import com.gh.gamecenter.common.utils.debounceActionWithInterval import com.gh.gamecenter.common.utils.debounceActionWithInterval
import com.gh.gamecenter.common.utils.toJson import com.gh.gamecenter.common.utils.toJson
import com.gh.gamecenter.common.utils.toObject import com.gh.gamecenter.common.utils.toObject
@ -123,10 +124,16 @@ object RegionSettingHelper {
mIsInit = false mIsInit = false
} }
val fakeIp = if (PackageFlavorHelper.IS_TEST_FLAVOR) {
SPUtils.getString(Constants.SP_TEST_FLAVOR_IP)
} else {
""
}
// 使用默认的 Schdulers.io() 可能会触发 OOM // 使用默认的 Schdulers.io() 可能会触发 OOM
RetrofitManager.getInstance() RetrofitManager.getInstance()
.api .api
.getRegionSetting(HaloApp.getInstance().channel) .getRegionSetting(HaloApp.getInstance().channel, fakeIp)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.subscribe(object : BiResponse<RegionSetting>() { .subscribe(object : BiResponse<RegionSetting>() {
override fun onSuccess(data: RegionSetting) { override fun onSuccess(data: RegionSetting) {

View File

@ -0,0 +1,45 @@
package com.gh.common.fragment
import androidx.fragment.app.FragmentManager
import java.lang.reflect.Field
fun FragmentManager.popBackStackAllowStateLoss() {
popBackStackAllowStateLoss(-1, 0)
}
fun FragmentManager.popBackStackAllowStateLoss(id: Int, flags: Int) {
if (!isStateSaved) {
popBackStack(id, flags)
}
}
fun FragmentManager.popBackStackAllowStateLoss(name: String?, flags: Int) {
if (!isStateSaved) {
popBackStack(name, flags)
}
}
fun FragmentManager.popBackStackImmediateAllowStateLoss() = popBackStackAllowStateLoss(-1, 0)
fun FragmentManager.popBackStackImmediateAllowStateLoss(id: Int, flags: Int) =
if (!isStateSaved) {
popBackStackImmediate(id, flags)
} else {
false
}
@Throws(NoSuchFieldException::class)
private fun getField(clazz: Class<*>, name: String): Field {
var cls: Class<*>? = clazz
while (cls != null) {
try {
val declaredField = cls.getDeclaredField(name)
declaredField.isAccessible = true
return declaredField
} catch (e: NoSuchFieldException) {
e.printStackTrace()
}
cls = cls.superclass
}
throw NoSuchFieldException()
}

View File

@ -7,19 +7,20 @@ import androidx.room.TypeConverters
import androidx.room.migration.Migration import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase import androidx.sqlite.db.SupportSQLiteDatabase
import com.gh.gamecenter.entity.GamesCollectionEntity import com.gh.gamecenter.entity.GamesCollectionEntity
import com.gh.gamecenter.entity.HistoryGameDetailEntity
import com.gh.gamecenter.entity.HistoryGameEntity import com.gh.gamecenter.entity.HistoryGameEntity
import com.gh.gamecenter.entity.MyVideoEntity import com.gh.gamecenter.entity.MyVideoEntity
import com.gh.gamecenter.feature.entity.NewsEntity
import com.gh.gamecenter.feature.entity.AnswerEntity import com.gh.gamecenter.feature.entity.AnswerEntity
import com.gh.gamecenter.feature.entity.ArticleEntity import com.gh.gamecenter.feature.entity.ArticleEntity
import com.gh.gamecenter.feature.entity.NewsEntity
import com.gh.gamecenter.feature.room.converter.* import com.gh.gamecenter.feature.room.converter.*
import com.gh.gamecenter.room.converter.* import com.gh.gamecenter.room.converter.*
import com.gh.gamecenter.room.dao.* import com.gh.gamecenter.room.dao.*
import com.halo.assistant.HaloApp import com.halo.assistant.HaloApp
@Database( @Database(
entities = [AnswerEntity::class, ArticleEntity::class, NewsEntity::class, HistoryGameEntity::class, MyVideoEntity::class, GamesCollectionEntity::class], entities = [AnswerEntity::class, ArticleEntity::class, NewsEntity::class, HistoryGameEntity::class, MyVideoEntity::class, GamesCollectionEntity::class, HistoryGameDetailEntity::class],
version = 14, version = 15,
exportSchema = false exportSchema = false
) )
@TypeConverters( @TypeConverters(
@ -53,6 +54,7 @@ abstract class HistoryDatabase : RoomDatabase() {
abstract fun gameDao(): GameDao abstract fun gameDao(): GameDao
abstract fun videoHistoryDao(): VideoHistoryDao abstract fun videoHistoryDao(): VideoHistoryDao
abstract fun gamesCollectionDao(): GamesCollectionDao abstract fun gamesCollectionDao(): GamesCollectionDao
abstract fun gameDetailDao(): GameDetailHistoryDao
companion object { companion object {
@ -152,6 +154,12 @@ abstract class HistoryDatabase : RoomDatabase() {
} }
} }
val MIGRATION_14_15: Migration = object : Migration(14, 15) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("CREATE TABLE HistoryGameDetailEntity (id TEXT NOT NULL PRIMARY KEY, name TEXT DEFAULT '')")
}
}
val instance by lazy { val instance by lazy {
Room.databaseBuilder( Room.databaseBuilder(
HaloApp.getInstance().application, HaloApp.getInstance().application,
@ -170,6 +178,7 @@ abstract class HistoryDatabase : RoomDatabase() {
.addMigrations(MIGRATION_11_12) .addMigrations(MIGRATION_11_12)
.addMigrations(MIGRATION_12_13) .addMigrations(MIGRATION_12_13)
.addMigrations(MIGRATION_13_14) .addMigrations(MIGRATION_13_14)
.addMigrations(MIGRATION_14_15)
.build() .build()
} }
} }

View File

@ -44,6 +44,20 @@ object HistoryHelper {
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.gameDao().addGame(historyGameEntity) } } runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.gameDao().addGame(historyGameEntity) } }
} }
@JvmStatic
fun insertGameDetail(gameEntity: GameEntity) {
val historyGameDetailEntity = HistoryGameDetailEntity(gameEntity.id, gameEntity.name)
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.gameDetailDao().addGame(historyGameDetailEntity) } }
}
@JvmStatic
fun getHistoryGameDetailById(id: String): HistoryGameDetailEntity? =
try {
HistoryDatabase.instance.gameDetailDao().getHistoryGameDetailById(id)
} catch (e: Throwable) {
null
}
private fun convertGameUpdateEntityToHistoryGameEntity(updateEntity: GameUpdateEntity): HistoryGameEntity { private fun convertGameUpdateEntityToHistoryGameEntity(updateEntity: GameUpdateEntity): HistoryGameEntity {
val historyGame = HistoryGameEntity() val historyGame = HistoryGameEntity()
@ -142,6 +156,15 @@ object HistoryHelper {
} }
} }
@JvmStatic
fun deleteGameDetailEntity(gameId: String) {
runOnIoThread {
tryCatchInRelease {
HistoryDatabase.instance.gameDetailDao().deleteGame(HistoryGameDetailEntity(id = gameId))
}
}
}
@JvmStatic @JvmStatic
fun emptyDatabase() { fun emptyDatabase() {

View File

@ -1,12 +1,9 @@
package com.gh.common.iinterface package com.gh.common.iinterface
interface ISmartRefreshContent { import com.scwang.smartrefresh.layout.api.RefreshLayout
/** import com.scwang.smartrefresh.layout.constant.RefreshState
* 启用/关闭 页面滑动
* @param isScrollEnabled 是否启用
*/
fun setScrollEnabled(isScrollEnabled: Boolean)
interface ISmartRefreshContent {
fun onRefresh() fun onRefresh()
/** /**
@ -14,4 +11,6 @@ interface ISmartRefreshContent {
* @param isSwipeRefreshEnabled 是否启用 * @param isSwipeRefreshEnabled 是否启用
*/ */
fun setSwipeRefreshEnabled(isSwipeRefreshEnabled: Boolean) fun setSwipeRefreshEnabled(isSwipeRefreshEnabled: Boolean)
fun onStateChanged(refreshLayout: RefreshLayout, oldState: RefreshState, newState: RefreshState)
} }

View File

@ -0,0 +1,29 @@
package com.gh.common.interceptor
import com.gh.gamecenter.common.constant.RouteConsts
import com.halo.assistant.HaloApp
import com.therouter.router.RouteItem
import com.therouter.router.interceptor.RouterReplaceInterceptor
import com.therouter.router.matchRouteMap
/**
* 主拦截器
*/
class MainInterceptor: RouterReplaceInterceptor() {
override fun replace(routeItem: RouteItem?): RouteItem? {
if (routeItem == null) return null
// 用户是否已经同意隐私政策
val isUserAcceptPrivacyPolicy = HaloApp.isUserAcceptPrivacyPolicy(HaloApp.getInstance())
// 如果用户已经同意隐私政策并且应用已经启动,直接返回 routeItem ,运行跳转
if (isUserAcceptPrivacyPolicy && HaloApp.getInstance().isAlreadyUpAndRunning) {
return routeItem
}
// 指向调整为 SplashScreenActivity
return matchRouteMap(RouteConsts.activity.splashActivity)
}
}

View File

@ -103,7 +103,6 @@ class AccelerateNotificationHandler(priority: Int) : PriorityChainHandler(priori
context = activity, context = activity,
gameId = gameEntity.id, gameId = gameEntity.id,
entrance = "首页插件上架弹窗", entrance = "首页插件上架弹窗",
defaultTab = -1,
isSkipGameComment = false, isSkipGameComment = false,
scrollToLibao = false, scrollToLibao = false,
openVideoStreaming = false, openVideoStreaming = false,

View File

@ -59,7 +59,7 @@ class CustomFloatingWindowHandler(priority: Int) : PriorityChainHandler(priority
override fun onProcess(): Boolean { override fun onProcess(): Boolean {
when (getStatus()) { when (getStatus()) {
STATUS_VALID -> { STATUS_VALID -> {
_showFloatingAction.value = Event(data) _showFloatingAction.postValue(Event(data))
return true return true
// floatingWindowProvider.showFloatingWindowOnly( // floatingWindowProvider.showFloatingWindowOnly(
// mFragment!!, // mFragment!!,

View File

@ -64,7 +64,8 @@ object GlobalPriorityChainHelper : ISuperiorChain {
* 预启动所有的优先级弹窗管理链 * 预启动所有的优先级弹窗管理链
*/ */
fun preStart(withSpecialDelay: Boolean) { fun preStart(withSpecialDelay: Boolean) {
val launchRedirectHandler = LaunchRedirectHandler(-101) val launchRedirectHandler = LaunchRedirectHandler(-102)
val membershipExpiredHandler = MembershipExpiredHandler(-101)
val updateDialogHandler = UpdateDialogHandler(-100) val updateDialogHandler = UpdateDialogHandler(-100)
val privacyPolicyDialogHandler = PrivacyPolicyDialogHandler(-99) val privacyPolicyDialogHandler = PrivacyPolicyDialogHandler(-99)
val notificationPermissionDialogHandler = NotificationPermissionDialogHandler(0) val notificationPermissionDialogHandler = NotificationPermissionDialogHandler(0)
@ -74,6 +75,7 @@ object GlobalPriorityChainHelper : ISuperiorChain {
val resumeDownloadHandler = ResumeDownloadHudHandler(4) val resumeDownloadHandler = ResumeDownloadHudHandler(4)
mainChain.addHandler(launchRedirectHandler) mainChain.addHandler(launchRedirectHandler)
mainChain.addHandler(membershipExpiredHandler)
mainChain.addHandler(updateDialogHandler) mainChain.addHandler(updateDialogHandler)
mainChain.addHandler(privacyPolicyDialogHandler) mainChain.addHandler(privacyPolicyDialogHandler)
mainChain.addHandler(welcomeDialogHandler) mainChain.addHandler(welcomeDialogHandler)
@ -83,6 +85,7 @@ object GlobalPriorityChainHelper : ISuperiorChain {
mainChain.addHandler(resumeDownloadHandler) mainChain.addHandler(resumeDownloadHandler)
launchRedirectHandler.doPreProcess() launchRedirectHandler.doPreProcess()
membershipExpiredHandler.doPreProcess()
updateDialogHandler.doPreProcess() updateDialogHandler.doPreProcess()
// 首次启动延迟 300ms保证请求首次启动时已经获取到了 GID 、 OAID 等标记 // 首次启动延迟 300ms保证请求首次启动时已经获取到了 GID 、 OAID 等标记

View File

@ -5,6 +5,7 @@ import com.gh.common.util.DirectUtils
import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.common.entity.LaunchRedirect import com.gh.gamecenter.common.entity.LaunchRedirect
import com.gh.gamecenter.common.entity.LaunchRedirectWrapper import com.gh.gamecenter.common.entity.LaunchRedirectWrapper
import com.gh.gamecenter.common.pagelevel.PageLevelManager
import com.gh.gamecenter.common.retrofit.BiResponse import com.gh.gamecenter.common.retrofit.BiResponse
import com.gh.gamecenter.common.utils.singleToMain import com.gh.gamecenter.common.utils.singleToMain
import com.gh.gamecenter.core.AppExecutor import com.gh.gamecenter.core.AppExecutor
@ -65,9 +66,11 @@ class LaunchRedirectHandler(priority: Int) : PriorityChainHandler(priority) {
override fun onProcess(): Boolean { override fun onProcess(): Boolean {
val currentActivity = CurrentActivityHolder.getCurrentActivity() val currentActivity = CurrentActivityHolder.getCurrentActivity()
if (GlobalPriorityChainHelper.isThisActivityValid(currentActivity)) { if (GlobalPriorityChainHelper.isThisActivityValid(currentActivity) && launchData?.type != "bottom_tab") {
if (getStatus() == STATUS_VALID) { if (getStatus() == STATUS_VALID) {
// 当 type 为 "bottom_tab" 时上面 doPreProcess 中已经处理过了,但再选中一次好像也没有什么问题,先不特殊处理这个 case 了 // 设置下一个页面为顶级页面
PageLevelManager.setNextPageAsSupremePageLevel()
DirectUtils.directToLinkPage(currentActivity!!, launchData!!, "首次启动跳转", "") DirectUtils.directToLinkPage(currentActivity!!, launchData!!, "首次启动跳转", "")
// 跳转页面不管回调,延迟 500ms 后执行下一个 handler // 跳转页面不管回调,延迟 500ms 后执行下一个 handler
AppExecutor.uiExecutor.executeWithDelay({ AppExecutor.uiExecutor.executeWithDelay({

View File

@ -0,0 +1,80 @@
package com.gh.common.prioritychain
import android.os.Bundle
import androidx.fragment.app.FragmentActivity
import com.gh.common.dialog.AccelerateExpirationDialogFragment
import com.gh.gamecenter.common.constant.Constants.SP_ACCELERATOR_MEMBERSHIP_EXPIRED
import com.gh.gamecenter.core.utils.CurrentActivityHolder
import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.login.user.UserRepository
import com.halo.assistant.accelerator.repository.AcceleratorDataHolder
class MembershipExpiredHandler(priority: Int) : PriorityChainHandler(priority) {
fun doPreProcess() {
UserRepository.getInstance().setAutoLoginListener {
val hasShow = SPUtils.getBoolean(SP_ACCELERATOR_MEMBERSHIP_EXPIRED)
val vipEntity = AcceleratorDataHolder.instance.vipEntity
if (getStatus() == STATUS_PENDING) {
if (vipEntity == null ||
vipEntity.vipStatus ||
vipEntity.isNewUser ||
vipEntity.isVipRefundUser ||
vipEntity.isDurationRefundUser ||
hasShow
) {
processNext()
} else {
updateStatus(STATUS_VALID)
process()
}
} else {
if (vipEntity == null ||
vipEntity.vipStatus ||
vipEntity.isNewUser ||
vipEntity.isVipRefundUser ||
vipEntity.isDurationRefundUser ||
hasShow
) {
updateStatus(STATUS_INVALID)
} else {
updateStatus(STATUS_VALID)
}
}
}
}
override fun onProcess(): Boolean {
val currentActivity = CurrentActivityHolder.getCurrentActivity()
if (GlobalPriorityChainHelper.isThisActivityValid(currentActivity)) {
when (getStatus()) {
STATUS_VALID -> {
val reminder = AccelerateExpirationDialogFragment.ExpirationReminder.TimeRunsOut("")
SPUtils.setBoolean(SP_ACCELERATOR_MEMBERSHIP_EXPIRED, true)
val dialogFragment = AccelerateExpirationDialogFragment().apply {
arguments = Bundle().apply {
putParcelable(
AccelerateExpirationDialogFragment.KEY_EXPIRATION_REMINDER, reminder
)
}
}
dialogFragment.dialog?.setOnDismissListener {
processNext()
}
dialogFragment.show(
(currentActivity as FragmentActivity).supportFragmentManager,
AccelerateExpirationDialogFragment::class.java.name
)
return true
}
STATUS_INVALID -> {
processNext()
}
}
}
return false
}
}

View File

@ -1,18 +0,0 @@
package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.ActivationHelper
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IActivationProvider
@Route(path = RouteConsts.provider.activation, name = "ActivationHelper暴露服务")
class ActivationProviderImpl : IActivationProvider {
override fun init(context: Context?) {
// Do nothing
}
override fun sendActivationInfo() {
ActivationHelper.sendActivationInfo()
}
}

View File

@ -1,19 +0,0 @@
package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.AdHelper
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.entity.SettingsEntity
import com.gh.gamecenter.feature.provider.IAdHelperProvider
@Route(path = RouteConsts.provider.adHelper, name = "AdHelper暴露服务")
class AdHelperProviderImpl : IAdHelperProvider {
override fun getSuggestionFunctionAd(): SettingsEntity.AD? {
return AdHelper.getAd(AdHelper.LOCATION_SUGGESTION_FUNCTION)
}
override fun init(context: Context?) {
// Do nothing
}
}

View File

@ -1,20 +1,15 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.R import com.gh.gamecenter.R
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IAppProvider import com.gh.gamecenter.core.provider.IAppProvider
import com.gh.gamecenter.core.provider.IFlavorProvider import com.gh.gamecenter.core.provider.IFlavorProvider
import com.gh.gamecenter.va.VCore import com.gh.gamecenter.va.VCore
import com.halo.assistant.HaloApp import com.halo.assistant.HaloApp
@Route(path = RouteConsts.provider.app, name = "Application暴露服务") @com.therouter.inject.ServiceProvider
class AppProviderImpl : IAppProvider { class AppProviderImpl : IAppProvider {
override fun init(context: Context?) {
// Do nothing
}
override fun getAppName(): String { override fun getAppName(): String {
return HaloApp.getInstance().getString(R.string.app_name) return HaloApp.getInstance().getString(R.string.app_name)
@ -93,4 +88,5 @@ class AppProviderImpl : IAppProvider {
override fun initImageLoaderIfNeeded() { override fun initImageLoaderIfNeeded() {
HaloApp.getInstance().initFresco() HaloApp.getInstance().initFresco()
} }
} }

View File

@ -1,16 +1,15 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import android.view.View import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.databind.BindingAdapters import com.gh.common.databind.BindingAdapters
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.databinding.LayoutGameItemSellingPointBinding
import com.gh.gamecenter.feature.entity.GameEntity import com.gh.gamecenter.feature.entity.GameEntity
import com.gh.gamecenter.feature.provider.IBindingAdaptersProvider import com.gh.gamecenter.feature.provider.IBindingAdaptersProvider
import com.gh.gamecenter.home.custom.adapter.CustomViewExt
@Route(path = RouteConsts.provider.bindingAdapters, name = "BindingAdapters暴露服务") @com.therouter.inject.ServiceProvider
class BindingAdaptersProviderImpl : IBindingAdaptersProvider { class BindingAdaptersProviderImpl : IBindingAdaptersProvider {
override fun setGameName( override fun setGameName(
view: TextView, view: TextView,
@ -21,7 +20,7 @@ class BindingAdaptersProviderImpl : IBindingAdaptersProvider {
} }
override fun setGameTags(layout: LinearLayout, gameEntity: GameEntity) { override fun setGameTags(layout: LinearLayout, gameEntity: GameEntity) {
BindingAdapters.setGameTags(layout, gameEntity) BindingAdapters.setGameTags(layout, gameEntity, "")
} }
override fun setMessageUnread(view: TextView, unreadCount: Int) { override fun setMessageUnread(view: TextView, unreadCount: Int) {
@ -32,7 +31,16 @@ class BindingAdaptersProviderImpl : IBindingAdaptersProvider {
BindingAdapters.setGame(view, gameEntity) BindingAdapters.setGame(view, gameEntity)
} }
override fun init(context: Context?) { override fun setGameTagsWithSellingPoints(
// Do nothing layout: LinearLayout,
sellingPointsBinding: LayoutGameItemSellingPointBinding,
gameEntity: GameEntity,
subjectTag: String
) {
BindingAdapters.setGameTagsWithSellingPoint(layout, sellingPointsBinding, gameEntity, subjectTag)
}
override fun setGameDescription(tvDesc: TextView, briefStyle: String, game: GameEntity) {
CustomViewExt.setDescription(tvDesc, briefStyle, game)
} }
} }

View File

@ -1,12 +1,9 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.download.server.BrowserInstallHelper import com.gh.download.server.BrowserInstallHelper
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IBrowserInstallHelperProvider import com.gh.gamecenter.core.provider.IBrowserInstallHelperProvider
@Route(path = RouteConsts.provider.browserInstallHelper, name = "BrowserInstallHelper暴露服务") @com.therouter.inject.ServiceProvider
class BrowserInstallHelperProviderImpl : IBrowserInstallHelperProvider { class BrowserInstallHelperProviderImpl : IBrowserInstallHelperProvider {
override fun isUseBrowserToInstallEnabled(): Boolean = BrowserInstallHelper.isUseBrowserToInstallEnabled() override fun isUseBrowserToInstallEnabled(): Boolean = BrowserInstallHelper.isUseBrowserToInstallEnabled()
@ -15,9 +12,4 @@ class BrowserInstallHelperProviderImpl : IBrowserInstallHelperProvider {
override fun logSwitchInstallSettingEvent() { override fun logSwitchInstallSettingEvent() {
BrowserInstallHelper.logOrdinaryBrowserEvent(BrowserInstallHelper.Type.SWITCH_INSTALL_SETTING) BrowserInstallHelper.logOrdinaryBrowserEvent(BrowserInstallHelper.Type.SWITCH_INSTALL_SETTING)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,17 +1,10 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IBuildConfigProvider import com.gh.gamecenter.core.provider.IBuildConfigProvider
@Route(path = RouteConsts.provider.buildConfig, name = "BuildConfig暴露服务") @com.therouter.inject.ServiceProvider
class BuildConfigImpl : IBuildConfigProvider { class BuildConfigImpl : IBuildConfigProvider {
override fun init(context: Context?) {
// Do nothing
}
override fun getApplicationId(): String = BuildConfig.APPLICATION_ID override fun getApplicationId(): String = BuildConfig.APPLICATION_ID
override fun getVersionName(): String = BuildConfig.VERSION_NAME override fun getVersionName(): String = BuildConfig.VERSION_NAME
@ -38,4 +31,6 @@ class BuildConfigImpl : IBuildConfigProvider {
override fun getWGameCPMBusiAppId(): String = BuildConfig.WGAME_CPM_BUSIAPPID override fun getWGameCPMBusiAppId(): String = BuildConfig.WGAME_CPM_BUSIAPPID
override fun getLogProducerProject(): String = BuildConfig.LOG_HUB_PROJECT override fun getLogProducerProject(): String = BuildConfig.LOG_HUB_PROJECT
override fun getDspApiHost(): String = BuildConfig.DSP_API_HOST
} }

View File

@ -1,18 +1,12 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.CheckLoginUtils import com.gh.common.util.CheckLoginUtils
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.ICheckLoginProvider import com.gh.gamecenter.core.provider.ICheckLoginProvider
@Route(path = RouteConsts.provider.checkLogin, name = "CheckLoginUtils暴露服务") @com.therouter.inject.ServiceProvider
class CheckLoginProviderImpl : ICheckLoginProvider { class CheckLoginProviderImpl : ICheckLoginProvider {
override fun checkLogin(context: Context, entrance: String, action: (() -> Unit)?) { override fun checkLogin(context: Context, entrance: String, action: (() -> Unit)?) {
CheckLoginUtils.checkLogin(context, entrance, action) CheckLoginUtils.checkLogin(context, entrance, action)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -3,20 +3,16 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Parcelable import android.os.Parcelable
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.CommentDetailActivity import com.gh.gamecenter.CommentDetailActivity
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.provider.ICommentDetailProvider import com.gh.gamecenter.feature.provider.ICommentDetailProvider
import com.gh.gamecenter.feature.entity.MessageEntity import com.gh.gamecenter.feature.entity.MessageEntity
@Route(path = RouteConsts.provider.commentDetail, name = "CommentDetailActivity暴露服务") @com.therouter.inject.ServiceProvider
class CommentDetailProviderImpl : ICommentDetailProvider { class CommentDetailProviderImpl : ICommentDetailProvider {
override fun getIntent(context: Context, commentId: String?, message: Parcelable): Intent { override fun getIntent(context: Context, commentId: String?, message: Parcelable): Intent {
return CommentDetailActivity.getIntent(context, commentId, message as MessageEntity.Article) return CommentDetailActivity.getIntent(context, commentId, message as MessageEntity.Article)
} }
}
override fun init(context: Context?) {
// Do nothing
}
}

View File

@ -1,18 +1,14 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.ICommentManagerProvider import com.gh.gamecenter.core.provider.ICommentManagerProvider
import com.gh.gamecenter.manager.CommentManager import com.gh.gamecenter.manager.CommentManager
@Route(path = RouteConsts.provider.commentManager, name = "CommentManager暴露服务") @com.therouter.inject.ServiceProvider
class CommentManagerProviderImpl : ICommentManagerProvider { class CommentManagerProviderImpl : ICommentManagerProvider {
override fun addUrl(ids: String) { override fun addUrl(ids: String) {
CommentManager.getInstance().addUrl(ids) CommentManager.getInstance().addUrl(ids)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -2,12 +2,12 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.widget.TextView import android.widget.TextView
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.common.util.CommentUtils import com.gh.common.util.CommentUtils
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.provider.ICommentUtilsProvider import com.gh.gamecenter.feature.provider.ICommentUtilsProvider
@Route(path = RouteConsts.provider.commentUtils, name = "CommentUtils暴露服务") @com.therouter.inject.ServiceProvider
class CommentUtilsProviderImpl : ICommentUtilsProvider { class CommentUtilsProviderImpl : ICommentUtilsProvider {
override fun setCommentTime(textView: TextView, time: Long) { override fun setCommentTime(textView: TextView, time: Long) {
CommentUtils.setCommentTime(textView, time) CommentUtils.setCommentTime(textView, time)
@ -16,8 +16,4 @@ class CommentUtilsProviderImpl : ICommentUtilsProvider {
override fun getCommentTime(timestamp: Long): String { override fun getCommentTime(timestamp: Long): String {
return CommentUtils.getCommentTime(timestamp) return CommentUtils.getCommentTime(timestamp)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -8,7 +8,7 @@ import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.facebook.drawee.view.SimpleDraweeView import com.facebook.drawee.view.SimpleDraweeView
import com.gh.common.util.ConcernContentUtils import com.gh.common.util.ConcernContentUtils
import com.gh.common.view.ImageContainerView import com.gh.common.view.ImageContainerView
@ -18,7 +18,7 @@ import com.gh.gamecenter.common.utils.toArrayList
import com.gh.gamecenter.core.provider.IConcernArticleUtilsProvider import com.gh.gamecenter.core.provider.IConcernArticleUtilsProvider
import com.gh.gamecenter.databinding.RecyclerGameArticleBinding import com.gh.gamecenter.databinding.RecyclerGameArticleBinding
@Route(path = RouteConsts.provider.concernContentUtils, name = "ConcernContentUtils暴露服务") @com.therouter.inject.ServiceProvider
class ConcernArticleUtilsProviderImpl : IConcernArticleUtilsProvider { class ConcernArticleUtilsProviderImpl : IConcernArticleUtilsProvider {
override fun addContentPic( override fun addContentPic(
context: Context, context: Context,
@ -95,8 +95,4 @@ class ConcernArticleUtilsProviderImpl : IConcernArticleUtilsProvider {
override fun getTvComment(binding: ViewBinding): TextView = (binding as RecyclerGameArticleBinding).tvComment override fun getTvComment(binding: ViewBinding): TextView = (binding as RecyclerGameArticleBinding).tvComment
override fun getTvShare(binding: ViewBinding): TextView = (binding as RecyclerGameArticleBinding).tvShare override fun getTvShare(binding: ViewBinding): TextView = (binding as RecyclerGameArticleBinding).tvShare
}
override fun init(context: Context?) {
// Do nothing
}
}

View File

@ -6,14 +6,14 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.common.utils.goneIf import com.gh.gamecenter.common.utils.goneIf
import com.gh.gamecenter.common.utils.toColor import com.gh.gamecenter.common.utils.toColor
import com.gh.gamecenter.core.provider.IConcernGiftPackUtilsProvider import com.gh.gamecenter.core.provider.IConcernGiftPackUtilsProvider
import com.gh.gamecenter.databinding.RecyclerGiftPackBinding import com.gh.gamecenter.databinding.RecyclerGiftPackBinding
@Route(path = RouteConsts.provider.concernGiftPackUtils, name = "ConcernGiftPackUtils暴露服务") @com.therouter.inject.ServiceProvider
class ConcernGiftPackUtilsProviderImpl : IConcernGiftPackUtilsProvider { class ConcernGiftPackUtilsProviderImpl : IConcernGiftPackUtilsProvider {
override fun createBinding(parent: ViewGroup): ViewBinding { override fun createBinding(parent: ViewGroup): ViewBinding {
val inflater = LayoutInflater.from(parent.context) val inflater = LayoutInflater.from(parent.context)
@ -48,7 +48,4 @@ class ConcernGiftPackUtilsProviderImpl : IConcernGiftPackUtilsProvider {
override fun getTvGiftPackContent(viewBinding: ViewBinding) = override fun getTvGiftPackContent(viewBinding: ViewBinding) =
(viewBinding as RecyclerGiftPackBinding).tvGiftPackContent (viewBinding as RecyclerGiftPackBinding).tvGiftPackContent
override fun init(context: Context?) { }
// Do Nothing
}
}

View File

@ -2,19 +2,15 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.ConcernActivity import com.gh.gamecenter.ConcernActivity
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IConcernProvider import com.gh.gamecenter.core.provider.IConcernProvider
@Route(path = RouteConsts.provider.concernActivity, name = "ConcernActivity暴露服务") @com.therouter.inject.ServiceProvider
class ConcernProviderImpl : IConcernProvider { class ConcernProviderImpl : IConcernProvider {
override fun getIntent(context: Context, entrance: String): Intent { override fun getIntent(context: Context, entrance: String): Intent {
return ConcernActivity.getIntent(context, entrance) return ConcernActivity.getIntent(context, entrance)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -2,18 +2,14 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IConcernShareNewsProvider import com.gh.gamecenter.core.provider.IConcernShareNewsProvider
import com.gh.gamecenter.newsdetail.NewsShareDialog import com.gh.gamecenter.newsdetail.NewsShareDialog
@Route(path = RouteConsts.provider.concernShareNews, name = "ConcernShareNews暴露服务") @com.therouter.inject.ServiceProvider
class ConcernShareNewsProviderImpl : IConcernShareNewsProvider { class ConcernShareNewsProviderImpl : IConcernShareNewsProvider {
override fun share(activity: AppCompatActivity, shortId: String?, id: String?, gameIcon: String?, title: String?) { override fun share(activity: AppCompatActivity, shortId: String?, id: String?, gameIcon: String?, title: String?) {
NewsShareDialog.show(activity, shortId, id, gameIcon, title) NewsShareDialog.show(activity, shortId, id, gameIcon, title)
} }
override fun init(context: Context?) {
// Do Nothing
}
} }

View File

@ -1,12 +1,9 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.constant.Config import com.gh.common.constant.Config
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IConfigProvider import com.gh.gamecenter.core.provider.IConfigProvider
@Route(path = RouteConsts.provider.config, name = "Config暴露服务") @com.therouter.inject.ServiceProvider
class ConfigProviderImpl : IConfigProvider { class ConfigProviderImpl : IConfigProvider {
override fun getTencentAppId(): String { override fun getTencentAppId(): String {
return Config.TENCENT_APPID return Config.TENCENT_APPID
@ -103,8 +100,4 @@ class ConfigProviderImpl : IConfigProvider {
override fun isJiguangSwitch(): Boolean { override fun isJiguangSwitch(): Boolean {
return Config.getNewApiSettingsEntity()?.jiguangSwitch ?: false return Config.getNewApiSettingsEntity()?.jiguangSwitch ?: false
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,19 +1,12 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.constant.Config import com.gh.common.constant.Config
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.entity.SettingsEntity import com.gh.gamecenter.feature.entity.SettingsEntity
import com.gh.gamecenter.feature.provider.IConfigSettingProvider import com.gh.gamecenter.feature.provider.IConfigSettingProvider
@Route(path = RouteConsts.provider.configSetting, name = "Config.getSettings暴露服务") @com.therouter.inject.ServiceProvider
class ConfigSettingProviderImpl : IConfigSettingProvider { class ConfigSettingProviderImpl : IConfigSettingProvider {
override fun getSettings(): SettingsEntity? { override fun getSettings(): SettingsEntity? {
return Config.getSettings() return Config.getSettings()
} }
override fun init(context: Context?) {
// do nothing
}
} }

View File

@ -0,0 +1,58 @@
package com.gh.common.provider
import android.content.Context
import android.content.Intent
import android.net.Uri
import com.gh.gamecenter.CropImageActivity
import com.gh.gamecenter.R
import com.gh.gamecenter.core.provider.ICropImageProvider
import com.gh.gamecenter.personalhome.background.BackgroundClipActivity
import com.halo.assistant.fragment.user.UserPortraitCropImageActivity
import com.lightgame.utils.Utils
import com.zhihu.matisse.internal.utils.PathUtils
@com.therouter.inject.ServiceProvider
class CropImageProviderImpl : ICropImageProvider {
override fun getCropImageIntent(data: List<Uri>, imageType: Int, entrance: String, context: Context): Intent? {
if (data.isEmpty()) {
return null
}
val picturePath = PathUtils.getPath(context, data[0])
Utils.log("picturePath = $picturePath")
return when (imageType) {
IMAGE_TYPE_AVATAR -> {// 上传头像
UserPortraitCropImageActivity.getIntent(
context,
picturePath,
"我的光环(选择头像)"
)
}
IMAGE_TYPE_GAME_COLLECTION_COVER -> {// 游戏单封面
CropImageActivity.getIntent(
context,
picturePath,
142 / 328F,
false,
R.layout.layout_game_collection_crop_image_assist,
entrance
)
}
IMAGE_TYPE_PERSONAL_BACKGROUND -> { // 用户主页背景
BackgroundClipActivity.getIntent(context, picturePath, entrance)
}
else ->
null
}
}
companion object {
const val IMAGE_TYPE_AVATAR = 1
const val IMAGE_TYPE_GAME_COLLECTION_COVER = 2
const val IMAGE_TYPE_PERSONAL_BACKGROUND = 3
}
}

View File

@ -1,12 +1,12 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.common.util.DataCollectionUtils import com.gh.common.util.DataCollectionUtils
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.provider.IDataCollectionProvider import com.gh.gamecenter.feature.provider.IDataCollectionProvider
@Route(path = RouteConsts.provider.dataCollection, name = "DataCollectionUtils暴露服务") @com.therouter.inject.ServiceProvider
class DataCollectionProviderImpl : IDataCollectionProvider { class DataCollectionProviderImpl : IDataCollectionProvider {
override fun uploadClick(context: Context, vararg args: String) { override fun uploadClick(context: Context, vararg args: String) {
DataCollectionUtils.uploadClick(context, *args) DataCollectionUtils.uploadClick(context, *args)
@ -15,8 +15,4 @@ class DataCollectionProviderImpl : IDataCollectionProvider {
override fun uploadConcern(context: Context, vararg args: String) { override fun uploadConcern(context: Context, vararg args: String) {
DataCollectionUtils.uploadConcern(context, *args) DataCollectionUtils.uploadConcern(context, *args)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,20 +1,12 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.DataUtils import com.gh.common.util.DataUtils
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IDataUtilsProvider import com.gh.gamecenter.core.provider.IDataUtilsProvider
import com.halo.assistant.HaloApp import com.halo.assistant.HaloApp
@Route(path = RouteConsts.provider.dataUtils, name = "DataUtils暴露服务") @com.therouter.inject.ServiceProvider
class DataUtilsProviderImpl : IDataUtilsProvider { class DataUtilsProviderImpl : IDataUtilsProvider {
override fun getDeviceCertification() { override fun getDeviceCertification() {
DataUtils.getDeviceCertification(HaloApp.getInstance().gid) DataUtils.getDeviceCertification(HaloApp.getInstance().gid)
} }
}
override fun init(context: Context?) {
// Do nothing
}
}

View File

@ -1,12 +1,12 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.common.DefaultUrlHandler import com.gh.common.DefaultUrlHandler
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IDefaultUrlHandlerProvider import com.gh.gamecenter.core.provider.IDefaultUrlHandlerProvider
@Route(path = RouteConsts.provider.defaultUrlHandler, name = "DefaultUrlHandler暴露服务") @com.therouter.inject.ServiceProvider
class DefaultUrlHandlerProviderImpl : IDefaultUrlHandlerProvider { class DefaultUrlHandlerProviderImpl : IDefaultUrlHandlerProvider {
override fun interceptUrl( override fun interceptUrl(
@ -19,7 +19,4 @@ class DefaultUrlHandlerProviderImpl : IDefaultUrlHandlerProvider {
return DefaultUrlHandler.interceptUrl(context, url, null, entrance, bringAppToFront, sourceEntrance) return DefaultUrlHandler.interceptUrl(context, url, null, entrance, bringAppToFront, sourceEntrance)
} }
override fun init(context: Context?) { }
// Do nothing
}
}

View File

@ -2,14 +2,12 @@ package com.gh.common.provider
import android.app.Dialog import android.app.Dialog
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.DialogUtils import com.gh.common.util.DialogUtils
import com.gh.gamecenter.common.callback.CancelListener import com.gh.gamecenter.common.callback.CancelListener
import com.gh.gamecenter.common.callback.ConfirmListener import com.gh.gamecenter.common.callback.ConfirmListener
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IDialogUtilsProvider import com.gh.gamecenter.core.provider.IDialogUtilsProvider
@Route(path = RouteConsts.provider.dialogUtils, name = "DialogUtils暴露服务") @com.therouter.inject.ServiceProvider
class DialogUtilsProviderImpl : IDialogUtilsProvider { class DialogUtilsProviderImpl : IDialogUtilsProvider {
override fun showRegulationTestDialog(context: Context, confirm: () -> Unit, cancel: () -> Unit) { override fun showRegulationTestDialog(context: Context, confirm: () -> Unit, cancel: () -> Unit) {
DialogUtils.showRegulationTestDialog(context, object : ConfirmListener { DialogUtils.showRegulationTestDialog(context, object : ConfirmListener {
@ -45,8 +43,4 @@ class DialogUtilsProviderImpl : IDialogUtilsProvider {
} }
override fun showBindPhoneDialog(context: Context, confirm: () -> Unit): Dialog = DialogUtils.showBindPhoneDialog(context) { confirm.invoke() } override fun showBindPhoneDialog(context: Context, confirm: () -> Unit): Dialog = DialogUtils.showBindPhoneDialog(context) { confirm.invoke() }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -3,12 +3,12 @@ package com.gh.common.provider
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.common.util.DirectUtils import com.gh.common.util.DirectUtils
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IDirectProvider import com.gh.gamecenter.core.provider.IDirectProvider
@Route(path = RouteConsts.provider.directUtils, name = "DirectUtils暴露服务") @com.therouter.inject.ServiceProvider
class DirectProviderImpl : IDirectProvider { class DirectProviderImpl : IDirectProvider {
override fun directToWebView(context: Context, url: String, entrance: String?) { override fun directToWebView(context: Context, url: String, entrance: String?) {
@ -96,8 +96,4 @@ class DirectProviderImpl : IDirectProvider {
override fun directToExternalBrowser(context: Context, url: String) { override fun directToExternalBrowser(context: Context, url: String) {
DirectUtils.directToExternalBrowser(context, url) DirectUtils.directToExternalBrowser(context, url)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,10 +1,9 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.NewFlatLogUtils import com.gh.common.util.NewFlatLogUtils
import com.gh.gamecenter.common.base.GlobalActivityManager import com.gh.gamecenter.common.base.GlobalActivityManager
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.entity.LinkEntity
import com.gh.gamecenter.common.exposure.ExposureSource import com.gh.gamecenter.common.exposure.ExposureSource
import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.entity.GameUpdateEntity import com.gh.gamecenter.entity.GameUpdateEntity
@ -14,10 +13,11 @@ import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.gh.gamecenter.feature.provider.IDownloadButtonClickedProvider import com.gh.gamecenter.feature.provider.IDownloadButtonClickedProvider
import com.gh.gamecenter.feature.view.DownloadButton import com.gh.gamecenter.feature.view.DownloadButton
import com.gh.gamecenter.packagehelper.PackageRepository import com.gh.gamecenter.packagehelper.PackageRepository
import com.halo.assistant.HaloApp
import com.lightgame.download.DownloadEntity import com.lightgame.download.DownloadEntity
import com.lightgame.utils.Utils import com.lightgame.utils.Utils
@Route(path = RouteConsts.provider.downloadButtonClickedHandler, name = "DownloadButton点击事件暴露服务") @com.therouter.inject.ServiceProvider
class DownloadButtonClickedProviderImpl : IDownloadButtonClickedProvider { class DownloadButtonClickedProviderImpl : IDownloadButtonClickedProvider {
override fun onClicked(downloadButton: DownloadButton) { override fun onClicked(downloadButton: DownloadButton) {
var gameId = "" var gameId = ""
@ -30,6 +30,11 @@ class DownloadButtonClickedProviderImpl : IDownloadButtonClickedProvider {
var packageName = "" var packageName = ""
var exposureSourceList: List<ExposureSource>? = null var exposureSourceList: List<ExposureSource>? = null
var customPageTrackData: CustomPageTrackData? = null var customPageTrackData: CustomPageTrackData? = null
var isAd = false
var adGroupId = ""
val pushMessageId = (HaloApp.get(Constants.PUSH_MESSAGE_ID, false) as? String) ?: ""
val pushLinkId = (HaloApp.get(Constants.PUSH_LINK_ENTITY, false) as? LinkEntity)?.link ?: ""
val isFromPush = pushMessageId.isNotEmpty()
val boundedObject = downloadButton.getObject() val boundedObject = downloadButton.getObject()
@ -57,6 +62,8 @@ class DownloadButtonClickedProviderImpl : IDownloadButtonClickedProvider {
packageName = boundedObject.getUniquePackageName() ?: "" packageName = boundedObject.getUniquePackageName() ?: ""
exposureSourceList = boundedObject.exposureEvent?.source exposureSourceList = boundedObject.exposureEvent?.source
customPageTrackData = boundedObject.customPageTrackData customPageTrackData = boundedObject.customPageTrackData
isAd = boundedObject.adGroupId.isNotEmpty()
adGroupId = boundedObject.adGroupId
} }
is GameUpdateEntity -> { is GameUpdateEntity -> {
@ -115,6 +122,14 @@ class DownloadButtonClickedProviderImpl : IDownloadButtonClickedProvider {
"本地下载" "本地下载"
} }
// 小游戏的启动不需要上报下载点击事件
// @see https://jira.shanqu.cc/browse/GHZSCY-7013 & https://jira.shanqu.cc/browse/GHZSCY-7918
if (boundedObject is GameEntity
&& (boundedObject.isMiniGame() || boundedObject.isDspGame)
) {
return
}
// 上报神策点击事件 // 上报神策点击事件
val customPageKV = customPageTrackData?.toKV() ?: arrayOf() val customPageKV = customPageTrackData?.toKV() ?: arrayOf()
SensorsBridge.trackEventWithExposureSource( SensorsBridge.trackEventWithExposureSource(
@ -124,7 +139,7 @@ class DownloadButtonClickedProviderImpl : IDownloadButtonClickedProvider {
"game_name", gameName, "game_name", gameName,
"game_type", gameTypeInChinese, "game_type", gameTypeInChinese,
"download_status", downloadStatusInChinese, "download_status", downloadStatusInChinese,
"button_name", downloadButton.text, "button_name", text,
"game_schema_type", gameSchemaType, "game_schema_type", gameSchemaType,
"download_type", downloadType, "download_type", downloadType,
"page_name", GlobalActivityManager.getCurrentPageEntity().pageName, "page_name", GlobalActivityManager.getCurrentPageEntity().pageName,
@ -133,14 +148,15 @@ class DownloadButtonClickedProviderImpl : IDownloadButtonClickedProvider {
"last_page_name", GlobalActivityManager.getLastPageEntity().pageName, "last_page_name", GlobalActivityManager.getLastPageEntity().pageName,
"last_page_id", GlobalActivityManager.getLastPageEntity().pageId, "last_page_id", GlobalActivityManager.getLastPageEntity().pageId,
"last_page_business_id", GlobalActivityManager.getLastPageEntity().pageBusinessId, "last_page_business_id", GlobalActivityManager.getLastPageEntity().pageBusinessId,
"is_ad", isAd.toString(),
"ad_group_id", adGroupId,
"is_from_push_notifications", isFromPush,
"message_id", pushMessageId,
"link_id", pushLinkId,
*customPageKV *customPageKV
) )
} }
} }
} }
override fun init(context: Context?) {
// do nothing
}
} }

View File

@ -1,13 +1,10 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.download.DownloadManager import com.gh.download.DownloadManager
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IDownloadManagerProvider import com.gh.gamecenter.core.provider.IDownloadManagerProvider
import com.lightgame.download.DownloadEntity import com.lightgame.download.DownloadEntity
@Route(path = RouteConsts.provider.downloadManager, name = "DownloadManager暴露服务") @com.therouter.inject.ServiceProvider
class DownloadManagerProviderImpl : IDownloadManagerProvider { class DownloadManagerProviderImpl : IDownloadManagerProvider {
override fun getDownloadEntityByUrl(url: String): DownloadEntity? { override fun getDownloadEntityByUrl(url: String): DownloadEntity? {
@ -18,8 +15,4 @@ class DownloadManagerProviderImpl : IDownloadManagerProvider {
DownloadManager.getInstance().resumeAllInvisiblePendingTask() DownloadManager.getInstance().resumeAllInvisiblePendingTask()
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -5,15 +5,16 @@ import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.common.util.EntranceUtils import com.gh.common.util.EntranceUtils
import com.gh.gamecenter.common.avoidcallback.Callback import com.gh.gamecenter.common.avoidcallback.Callback
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IEntranceUtilsProvider import com.gh.gamecenter.core.provider.IEntranceUtilsProvider
import com.lightgame.utils.AppManager import com.lightgame.utils.AppManager
@Route(path = RouteConsts.provider.entranceUtils, name = "EntranceUtils暴露服务") @com.therouter.inject.ServiceProvider
class EntranceUtilsProviderImpl : IEntranceUtilsProvider { class EntranceUtilsProviderImpl : IEntranceUtilsProvider {
override fun jumpActivity(context: Context, bundle: Bundle) { override fun jumpActivity(context: Context, bundle: Bundle) {
EntranceUtils.jumpActivity(context, bundle) EntranceUtils.jumpActivity(context, bundle)
} }
@ -32,10 +33,6 @@ class EntranceUtilsProviderImpl : IEntranceUtilsProvider {
} else { } else {
EntranceUtils.jumpActivityCompat(AppManager.getInstance().currentActivity(), bundle) EntranceUtils.jumpActivityCompat(AppManager.getInstance().currentActivity(), bundle)
} }
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,14 +1,11 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.ErrorHelper import com.gh.common.util.ErrorHelper
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IErrorHelperProvider import com.gh.gamecenter.core.provider.IErrorHelperProvider
import com.gh.gamecenter.login.user.LoginTag
import retrofit2.HttpException import retrofit2.HttpException
@Route(path = RouteConsts.provider.errorHelper, name = "ErrorHelper暴露服务") @com.therouter.inject.ServiceProvider
class ErrorHelperProviderImpl : IErrorHelperProvider { class ErrorHelperProviderImpl : IErrorHelperProvider {
override fun handleError( override fun handleError(
@ -28,7 +25,4 @@ class ErrorHelperProviderImpl : IErrorHelperProvider {
ErrorHelper.handleLoginError(context, httpException, loginTagChinese, isCertificate) ErrorHelper.handleLoginError(context, httpException, loginTagChinese, isCertificate)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,20 +1,16 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.exposure.ExposureManager import com.gh.common.exposure.ExposureManager
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.exposure.ExposureEvent import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.gh.gamecenter.feature.provider.IExposureManagerProvider import com.gh.gamecenter.feature.provider.IExposureManagerProvider
@Route(path = RouteConsts.provider.exposureManager, name = "ExposureManager暴露服务") @com.therouter.inject.ServiceProvider
class ExposureManagerProviderImpl: IExposureManagerProvider { class ExposureManagerProviderImpl: IExposureManagerProvider {
override fun logExposure(exposureEvent: ExposureEvent) { override fun logExposure(exposureEvent: ExposureEvent) {
ExposureManager.log(exposureEvent) ExposureManager.log(exposureEvent)
} }
override fun init(context: Context?) { override fun logExposureList(exposureEventList: List<ExposureEvent>) {
// do nothing ExposureManager.log(exposureEventList)
} }
} }

View File

@ -1,18 +1,11 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.FixedRateJobHelper import com.gh.common.FixedRateJobHelper
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IFixedRateJobHelperProvider import com.gh.gamecenter.core.provider.IFixedRateJobHelperProvider
@Route(path = RouteConsts.provider.fixedRateJobHelper, name = "FixedRateJobHelper暴露服务") @com.therouter.inject.ServiceProvider
class FixedRateJobHelperProviderImpl : IFixedRateJobHelperProvider { class FixedRateJobHelperProviderImpl : IFixedRateJobHelperProvider {
override fun getTimeDeltaBetweenServerAndClient(): Long { override fun getTimeDeltaBetweenServerAndClient(): Long {
return FixedRateJobHelper.timeDeltaBetweenServerAndClient return FixedRateJobHelper.timeDeltaBetweenServerAndClient
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -2,23 +2,16 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.provider.IGameCollectionDetailProvider import com.gh.gamecenter.feature.provider.IGameCollectionDetailProvider
import com.gh.gamecenter.gamecollection.detail.GameCollectionDetailActivity import com.gh.gamecenter.gamecollection.detail.GameCollectionDetailActivity
@Route(path = RouteConsts.provider.gameCollectionDetail, name = "GameCollectionDetailActivity暴露服务") @com.therouter.inject.ServiceProvider
class GameCollectionDetailProviderImpl : IGameCollectionDetailProvider { class GameCollectionDetailProviderImpl : IGameCollectionDetailProvider {
override fun getIntent(context: Context, gameCollectionId: String, isFromSquare: Boolean): Intent { override fun getIntent(context: Context, gameCollectionId: String, isFromSquare: Boolean, entrance: String): Intent {
return GameCollectionDetailActivity.getIntent(context, gameCollectionId, isFromSquare) return GameCollectionDetailActivity.getIntent(context, gameCollectionId, isFromSquare, entrance)
} }
override fun getSpecifiedCommentIntent(context: Context, gameCollectionId: String, topCommentId: String): Intent { override fun getSpecifiedCommentIntent(context: Context, gameCollectionId: String, topCommentId: String, entrance: String): Intent {
return GameCollectionDetailActivity.getSpecifiedCommentIntent(context, gameCollectionId, topCommentId) return GameCollectionDetailActivity.getSpecifiedCommentIntent(context, gameCollectionId, topCommentId, entrance)
}
override fun init(context: Context?) {
// Do nothing
} }
} }

View File

@ -1,14 +1,12 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.GameDetailActivity import com.gh.gamecenter.GameDetailActivity
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.entity.GameEntity import com.gh.gamecenter.feature.entity.GameEntity
import com.gh.gamecenter.feature.exposure.ExposureEvent import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.gh.gamecenter.feature.provider.IGameDetailProvider import com.gh.gamecenter.feature.provider.IGameDetailProvider
@Route(path = RouteConsts.provider.gameDetail, name = "GameDetailActivity暴露服务") @com.therouter.inject.ServiceProvider
class GameDetailProviderImpl : IGameDetailProvider { class GameDetailProviderImpl : IGameDetailProvider {
override fun startGameDetailActivity( override fun startGameDetailActivity(
context: Context, context: Context,
@ -54,7 +52,6 @@ class GameDetailProviderImpl : IGameDetailProvider {
context: Context, context: Context,
gameId: String, gameId: String,
entrance: String?, entrance: String?,
defaultTab: Int,
isSkipGameComment: Boolean, isSkipGameComment: Boolean,
scrollToLibao: Boolean, scrollToLibao: Boolean,
openVideoStreaming: Boolean, openVideoStreaming: Boolean,
@ -65,7 +62,6 @@ class GameDetailProviderImpl : IGameDetailProvider {
context, context,
gameId, gameId,
entrance, entrance,
defaultTab,
isSkipGameComment, isSkipGameComment,
scrollToLibao, scrollToLibao,
openVideoStreaming, openVideoStreaming,
@ -73,8 +69,4 @@ class GameDetailProviderImpl : IGameDetailProvider {
traceEvent traceEvent
) )
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,18 +1,14 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.common.util.GameTrendsHelper import com.gh.common.util.GameTrendsHelper
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IGameTrendsHelperProvider import com.gh.gamecenter.core.provider.IGameTrendsHelperProvider
@Route(path = RouteConsts.provider.gameTrendsHelper, name = "GameTrendsHelper暴露服务") @com.therouter.inject.ServiceProvider
class GameTrendsHelperProviderImpl : IGameTrendsHelperProvider { class GameTrendsHelperProviderImpl : IGameTrendsHelperProvider {
override fun updateReadPostTime() { override fun updateReadPostTime() {
GameTrendsHelper.updateReadPostTime() GameTrendsHelper.updateReadPostTime()
} }
override fun init(context: Context?) {
// do nothing
}
} }

View File

@ -1,17 +1,14 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.filter.RegionSettingHelper import com.gh.common.filter.RegionSettingHelper
import com.gh.gamecenter.feature.utils.ApkActiveUtils import com.gh.gamecenter.feature.utils.ApkActiveUtils
import com.gh.download.DownloadManager import com.gh.download.DownloadManager
import com.gh.gamecenter.common.constant.EntranceConsts import com.gh.gamecenter.common.constant.EntranceConsts
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.common.utils.countOccurrences import com.gh.gamecenter.common.utils.countOccurrences
import com.gh.gamecenter.core.provider.IHandleGameResponseProvider import com.gh.gamecenter.core.provider.IHandleGameResponseProvider
import com.gh.gamecenter.feature.entity.GameEntity import com.gh.gamecenter.feature.entity.GameEntity
@Route(path = RouteConsts.provider.handleGameResponse, name = "处理游戏类型返回") @com.therouter.inject.ServiceProvider
class HandleGameResponseProviderImpl : IHandleGameResponseProvider { class HandleGameResponseProviderImpl : IHandleGameResponseProvider {
override fun handleGameResponse(response: List<Any>, entrance: String): List<Any> { override fun handleGameResponse(response: List<Any>, entrance: String): List<Any> {
@ -37,8 +34,4 @@ class HandleGameResponseProviderImpl : IHandleGameResponseProvider {
return response return response
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,18 +1,11 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.history.HistoryHelper import com.gh.common.history.HistoryHelper
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IHistoryHelperProvider import com.gh.gamecenter.core.provider.IHistoryHelperProvider
@Route(path = RouteConsts.provider.historyHelper, name = "HistoryHelper暴露服务") @com.therouter.inject.ServiceProvider
class HistoryHelperProviderImpl : IHistoryHelperProvider { class HistoryHelperProviderImpl : IHistoryHelperProvider {
override fun emptyDatabase() { override fun emptyDatabase() {
HistoryHelper.emptyDatabase() HistoryHelper.emptyDatabase()
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -0,0 +1,59 @@
package com.gh.common.provider
import com.gh.common.util.PackageUtils
import android.annotation.SuppressLint
import com.gh.gamecenter.common.retrofit.BiResponse
import com.gh.gamecenter.common.utils.singleToMain
import com.gh.gamecenter.core.provider.IAcceleratorDataHolderProvider
import com.gh.gamecenter.feature.entity.BaseEntity
import com.gh.gamecenter.feature.entity.VipEntity
import com.gh.gamecenter.login.retrofit.RetrofitManager
import com.gh.gamecenter.login.user.UserManager
import com.halo.assistant.accelerator.repository.AcceleratorDataHolder
@com.therouter.inject.ServiceProvider
class IAcceleratorDataHolderProviderImpl : IAcceleratorDataHolderProvider {
override fun isPaidVip(): Boolean =
AcceleratorDataHolder.instance.isPaidVip
override fun getGhVersionName(): String {
return PackageUtils.getGhVersionName()
}
/**
* 请注意,由于光环后端无法获取 奇游时长套餐 加速时长,这里的 vipStatus不准
* 这里只做参考具体的状态需要奇游sdk提供如果奇游sdk返回失败则以这条接口结果为准
*/
@SuppressLint("CheckResult")
override fun loadVipEntityFromGh(userId: String, callBack: (Any?) -> Unit) {
RetrofitManager.getInstance().newApi.getVipStatus(
userId.ifBlank { UserManager.getInstance().userId },
"gjonline_vip",
true
)
.compose(singleToMain())
.subscribe(object : BiResponse<BaseEntity<VipEntity>>() {
override fun onSuccess(data: BaseEntity<VipEntity>) {
callBack(data.data)
}
override fun onFailure(exception: Exception) {
super.onFailure(exception)
callBack(null)
}
})
}
override fun updateVipEntity(data: Any) {
if (data is VipEntity) {
AcceleratorDataHolder.instance.setVipEntity(data)
}
}
override fun clear() {
AcceleratorDataHolder.instance.clear()
}
}

View File

@ -1,13 +1,13 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.common.util.LibaoUtils import com.gh.common.util.LibaoUtils
import com.gh.common.util.LibaoUtils.PostLibaoListener import com.gh.common.util.LibaoUtils.PostLibaoListener
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.ILibaoUtilsProvider import com.gh.gamecenter.core.provider.ILibaoUtilsProvider
@Route(path = RouteConsts.provider.libaoUtils, name = "LibaoUtils暴露服务") @com.therouter.inject.ServiceProvider
class LibaoUtilsProviderImpl : ILibaoUtilsProvider { class LibaoUtilsProviderImpl : ILibaoUtilsProvider {
override fun getLibaoStatus(ids: String, successCallback: ((Any?) -> Unit)?, failureCallback: (() -> Unit)?) { override fun getLibaoStatus(ids: String, successCallback: ((Any?) -> Unit)?, failureCallback: (() -> Unit)?) {
LibaoUtils.getLibaoStatus(ids, object : PostLibaoListener { LibaoUtils.getLibaoStatus(ids, object : PostLibaoListener {
@ -20,8 +20,4 @@ class LibaoUtilsProviderImpl : ILibaoUtilsProvider {
} }
}) })
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,7 +1,7 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.common.util.DirectUtils import com.gh.common.util.DirectUtils
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.common.entity.CommunityEntity import com.gh.gamecenter.common.entity.CommunityEntity
@ -10,7 +10,7 @@ import com.gh.gamecenter.common.entity.SuggestType
import com.gh.gamecenter.feature.exposure.ExposureEvent import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.gh.gamecenter.feature.provider.ILinkDirectUtilsProvider import com.gh.gamecenter.feature.provider.ILinkDirectUtilsProvider
@Route(path = RouteConsts.provider.linkDirectUtils, name = "DirectUtils暴露服务主要是暴露directToLinkPage方法") @com.therouter.inject.ServiceProvider
class LinkDirectUtilsProviderImpl : ILinkDirectUtilsProvider { class LinkDirectUtilsProviderImpl : ILinkDirectUtilsProvider {
override fun directToLinkPage( override fun directToLinkPage(
@ -61,7 +61,4 @@ class LinkDirectUtilsProviderImpl : ILinkDirectUtilsProvider {
DirectUtils.directToCommunityColumn(context, community, subjectId, entrance, path) DirectUtils.directToCommunityColumn(context, community, subjectId, entrance, path)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,19 +1,13 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.* import com.gh.common.util.*
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.* import com.gh.gamecenter.core.provider.*
@Route(path = RouteConsts.provider.logUtils, name = "LogUtils暴露服务") @com.therouter.inject.ServiceProvider
class LogUtilsProviderImpl : ILogUtilsProvider { class LogUtilsProviderImpl : ILogUtilsProvider {
override fun login(loginStep: String, loginType: String, entrance: String) { override fun login(loginStep: String, loginType: String, entrance: String) {
LogUtils.login(loginStep, loginType, entrance) LogUtils.login(loginStep, loginType, entrance)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,19 +0,0 @@
package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.DirectUtils
import com.gh.gamecenter.MainActivity
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IMainProvider
@Route(path = RouteConsts.provider.mainActivity, name = "MainActivity暴露服务")
class MainProviderImpl : IMainProvider {
override fun skipToMainActivity(context: Context, type: String) {
DirectUtils.directToHomeDefaultTab(context)
}
override fun init(context: Context?) {
// Do nothing
}
}

View File

@ -2,13 +2,13 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.MessageDetailActivity import com.gh.gamecenter.MessageDetailActivity
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.entity.ConcernEntity import com.gh.gamecenter.feature.entity.ConcernEntity
import com.gh.gamecenter.feature.provider.IMessageDetailProvider import com.gh.gamecenter.feature.provider.IMessageDetailProvider
@Route(path = RouteConsts.provider.messageDetail, name = "MessageDetailActivity暴露服务") @com.therouter.inject.ServiceProvider
class MessageDetailProviderImpl : IMessageDetailProvider { class MessageDetailProviderImpl : IMessageDetailProvider {
override fun getIntentById( override fun getIntentById(
@ -24,8 +24,4 @@ class MessageDetailProviderImpl : IMessageDetailProvider {
override fun getIntentByEntity(context: Context, concernEntity: ConcernEntity, entrance: String): Intent? { override fun getIntentByEntity(context: Context, concernEntity: ConcernEntity, entrance: String): Intent? {
return MessageDetailActivity.getIntentByEntity(context, concernEntity, entrance) return MessageDetailActivity.getIntentByEntity(context, concernEntity, entrance)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,16 +1,13 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.entity.MessageUnreadCount import com.gh.gamecenter.feature.entity.MessageUnreadCount
import com.gh.gamecenter.feature.entity.MessageUnreadEntity import com.gh.gamecenter.feature.entity.MessageUnreadEntity
import com.gh.gamecenter.feature.provider.IMessageUnreadRepositoryProvider import com.gh.gamecenter.feature.provider.IMessageUnreadRepositoryProvider
import com.gh.gamecenter.message.MessageUnreadRepository import com.gh.gamecenter.message.MessageUnreadRepository
@Route(path = RouteConsts.provider.messageUnreadRepository, name = "MessageUnreadRepository暴露服务") @com.therouter.inject.ServiceProvider
class MessageUnreadRepositoryProviderImpl : IMessageUnreadRepositoryProvider { class MessageUnreadRepositoryProviderImpl : IMessageUnreadRepositoryProvider {
override fun loadMessageUnreadData() { override fun loadMessageUnreadData() {
@ -33,7 +30,4 @@ class MessageUnreadRepositoryProviderImpl : IMessageUnreadRepositoryProvider {
return MessageUnreadRepository.messageUnreadCountLiveData return MessageUnreadRepository.messageUnreadCountLiveData
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,13 +1,13 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IMiniGameRecentlyPlayedProvider import com.gh.gamecenter.core.provider.IMiniGameRecentlyPlayedProvider
import com.gh.gamecenter.minigame.MiniGameRecentlyPlayUseCase import com.gh.gamecenter.minigame.MiniGameRecentlyPlayUseCase
@Route(path = RouteConsts.provider.miniGameRecentPlayed, name = "MiniGameRecentlyPlayed暴露服务") @com.therouter.inject.ServiceProvider
class MiniGameRecentlyPlayedProviderImpl : IMiniGameRecentlyPlayedProvider { class MiniGameRecentlyPlayedProviderImpl : IMiniGameRecentlyPlayedProvider {
override fun clearMiniGameRecentlyPlayed(gameType: String) { override fun clearMiniGameRecentlyPlayed(gameType: String) {
MiniGameRecentlyPlayUseCase.clearRecentlyPlayedMiniGameList(gameType) MiniGameRecentlyPlayUseCase.clearRecentlyPlayedMiniGameList(gameType)
@ -16,8 +16,4 @@ class MiniGameRecentlyPlayedProviderImpl : IMiniGameRecentlyPlayedProvider {
override fun refreshQQMiniRecentPlayed() { override fun refreshQQMiniRecentPlayed() {
MiniGameRecentlyPlayUseCase.loadRecentlyPlayedMiniGameList(Constants.QQ_MINI_GAME) MiniGameRecentlyPlayUseCase.loadRecentlyPlayedMiniGameList(Constants.QQ_MINI_GAME)
} }
override fun init(context: Context?) {
// no implement
}
} }

View File

@ -2,12 +2,12 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.provider.INewCommentDetailProvider import com.gh.gamecenter.feature.provider.INewCommentDetailProvider
import com.gh.gamecenter.qa.comment.NewCommentDetailActivity import com.gh.gamecenter.qa.comment.NewCommentDetailActivity
@Route(path = RouteConsts.provider.newCommentDetail, name = "NewCommentDetailActivity暴露服务") @com.therouter.inject.ServiceProvider
class NewCommentDetailProviderImpl : INewCommentDetailProvider { class NewCommentDetailProviderImpl : INewCommentDetailProvider {
override fun getAnswerCommentIntent( override fun getAnswerCommentIntent(
@ -76,8 +76,4 @@ class NewCommentDetailProviderImpl : INewCommentDetailProvider {
path path
) )
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,19 +0,0 @@
package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.PackageHelper
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IPackageHelperProvider
@Route(path = RouteConsts.provider.packageHelper, name = "PackageHelper暴露服务")
class PackageHelperProviderImpl : IPackageHelperProvider {
override fun getLocalPackageNameSet(): Set<String> {
return PackageHelper.localPackageNameSet
}
override fun init(context: Context?) {
// Do nothing
}
}

View File

@ -1,13 +1,11 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.PackageInstaller import com.gh.common.util.PackageInstaller
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IPackageInstallerProvider import com.gh.gamecenter.core.provider.IPackageInstallerProvider
import com.lightgame.download.DownloadEntity import com.lightgame.download.DownloadEntity
@Route(path = RouteConsts.provider.packageInstaller, name = "PackageInstaller暴露服务") @com.therouter.inject.ServiceProvider
class PackageInstallerProviderImpl : IPackageInstallerProvider { class PackageInstallerProviderImpl : IPackageInstallerProvider {
override fun install(context: Context, downloadEntity: DownloadEntity, showUnzipToast: Boolean) { override fun install(context: Context, downloadEntity: DownloadEntity, showUnzipToast: Boolean) {
@ -18,7 +16,4 @@ class PackageInstallerProviderImpl : IPackageInstallerProvider {
PackageInstaller.uninstall(context, path) PackageInstaller.uninstall(context, path)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -2,14 +2,12 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.content.pm.PackageInfo import android.content.pm.PackageInfo
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.PackageHelper import com.gh.common.util.PackageHelper
import com.gh.common.util.PackageUtils import com.gh.common.util.PackageUtils
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IPackageUtilsProvider import com.gh.gamecenter.core.provider.IPackageUtilsProvider
import com.gh.gamecenter.core.utils.ProcessUtil import com.gh.gamecenter.core.utils.ProcessUtil
@Route(path = RouteConsts.provider.packageUtils, name = "PackageUtils暴露服务") @com.therouter.inject.ServiceProvider
class PackageUtilsProviderImpl : IPackageUtilsProvider { class PackageUtilsProviderImpl : IPackageUtilsProvider {
override fun obtainProcessName(): String? { override fun obtainProcessName(): String? {
return ProcessUtil.getCurrentProcessName() return ProcessUtil.getCurrentProcessName()
@ -50,8 +48,4 @@ class PackageUtilsProviderImpl : IPackageUtilsProvider {
override fun getVersionNameByPackageName(packageName: String): String { override fun getVersionNameByPackageName(packageName: String): String {
return PackageUtils.getVersionNameByPackageName(packageName) ?: "" return PackageUtils.getVersionNameByPackageName(packageName) ?: ""
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,13 +1,10 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.entity.GameInstall import com.gh.gamecenter.feature.entity.GameInstall
import com.gh.gamecenter.feature.provider.IPackagesManagerProvider import com.gh.gamecenter.feature.provider.IPackagesManagerProvider
import com.gh.gamecenter.manager.PackagesManager import com.gh.gamecenter.manager.PackagesManager
@Route(path = RouteConsts.provider.packagesManager, name = "PackagesManager暴露服务") @com.therouter.inject.ServiceProvider
class PackagesManagerProviderImpl: IPackagesManagerProvider { class PackagesManagerProviderImpl: IPackagesManagerProvider {
override fun isCanPluggable(gameId: String?, packageName: String?): Boolean { override fun isCanPluggable(gameId: String?, packageName: String?): Boolean {
return PackagesManager.isCanPluggable(gameId, packageName) return PackagesManager.isCanPluggable(gameId, packageName)
@ -16,8 +13,4 @@ class PackagesManagerProviderImpl: IPackagesManagerProvider {
override fun getFilterSameApkInstalledList(): ArrayList<GameInstall> { override fun getFilterSameApkInstalledList(): ArrayList<GameInstall> {
return PackagesManager.getFilterSameApkInstalledList() return PackagesManager.getFilterSameApkInstalledList()
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,18 +1,12 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.filter.RegionSettingHelper import com.gh.common.filter.RegionSettingHelper
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.entity.GameEntity import com.gh.gamecenter.feature.entity.GameEntity
import com.gh.gamecenter.feature.entity.IpInfo import com.gh.gamecenter.feature.entity.IpInfo
import com.gh.gamecenter.feature.provider.IRegionSettingHelperProvider import com.gh.gamecenter.feature.provider.IRegionSettingHelperProvider
@Route(path = RouteConsts.provider.regionSettingHelper, name = "RegionSettingHelper暴露服务") @com.therouter.inject.ServiceProvider
class RegionSettingHelperProviderImpl : IRegionSettingHelperProvider { class RegionSettingHelperProviderImpl : IRegionSettingHelperProvider {
override fun shouldThisGameDisplayMirrorInfo(gameId: String): Boolean {
return RegionSettingHelper.shouldThisGameDisplayMirrorInfo(gameId)
}
override fun getMirrorPosition(gameId: String): Int { override fun getMirrorPosition(gameId: String): Int {
return RegionSettingHelper.getMirrorPosition(gameId) return RegionSettingHelper.getMirrorPosition(gameId)
@ -33,8 +27,4 @@ class RegionSettingHelperProviderImpl : IRegionSettingHelperProvider {
override fun shouldThisGameBeFiltered(gameId: String?): Boolean { override fun shouldThisGameBeFiltered(gameId: String?): Boolean {
return RegionSettingHelper.shouldThisGameBeFiltered(gameId) return RegionSettingHelper.shouldThisGameBeFiltered(gameId)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,12 +1,9 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.repository.ReservationRepository import com.gh.common.repository.ReservationRepository
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IReservationRepositoryProvider import com.gh.gamecenter.core.provider.IReservationRepositoryProvider
@Route(path = RouteConsts.provider.reservationRepository, name = "ReservationRepository暴露服务") @com.therouter.inject.ServiceProvider
class ReservationRepositoryProviderImpl : IReservationRepositoryProvider { class ReservationRepositoryProviderImpl : IReservationRepositoryProvider {
override fun refreshReservations() { override fun refreshReservations() {
@ -16,8 +13,4 @@ class ReservationRepositoryProviderImpl : IReservationRepositoryProvider {
override fun clearReservations() { override fun clearReservations() {
ReservationRepository.clearReservations() ReservationRepository.clearReservations()
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -5,12 +5,12 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.ISearchTabUtilsProvider import com.gh.gamecenter.core.provider.ISearchTabUtilsProvider
import com.gh.gamecenter.search.viewmodel.SearchTabViewModel import com.gh.gamecenter.search.viewmodel.SearchTabViewModel
@Route(path = RouteConsts.provider.searchTabUtils, name = "SearchTabUtils暴露服务") @com.therouter.inject.ServiceProvider
class SearchTabUtilsProviderImpl : ISearchTabUtilsProvider { class SearchTabUtilsProviderImpl : ISearchTabUtilsProvider {
override fun obtainParentViewModel(fragment: Fragment): ViewModel { override fun obtainParentViewModel(fragment: Fragment): ViewModel {
@ -29,8 +29,4 @@ class SearchTabUtilsProviderImpl : ISearchTabUtilsProvider {
null null
} }
}
override fun init(context: Context?) {
// no implement
}
}

View File

@ -1,19 +0,0 @@
package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.ShareCardPicActivity
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.entity.ConcernEntity
import com.gh.gamecenter.feature.provider.IShareCardPicProvider
@Route(path = RouteConsts.provider.shareCardPicActivity, name = "ShareCardPicActivity暴露服务")
class ShareCardPicProviderImpl : IShareCardPicProvider {
override fun startShareCardPicActivity(context: Context, concernEntity: ConcernEntity, entrance: String) {
ShareCardPicActivity.startShareCardPicActivity(context, concernEntity, entrance)
}
override fun init(context: Context?) {
// do nothing
}
}

View File

@ -1,20 +0,0 @@
package com.gh.common.provider
import android.content.Context
import android.content.Intent
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.ShareCardActivity
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.entity.ConcernEntity
import com.gh.gamecenter.feature.provider.IShareCardProvider
@Route(path = RouteConsts.provider.shareCardActivity, name = "ShareCardActivity暴露服务")
class ShareCardProviderImpl : IShareCardProvider {
override fun getIntent(context: Context, concernEntity: ConcernEntity, shareContent: String): Intent {
return ShareCardActivity.getIntent(context, concernEntity, shareContent)
}
override fun init(context: Context?) {
// do nothing
}
}

View File

@ -3,17 +3,11 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Parcelable import android.os.Parcelable
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.ShellActivity import com.gh.gamecenter.ShellActivity
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IShellProvider import com.gh.gamecenter.core.provider.IShellProvider
@Route(path = RouteConsts.provider.shellActivity, name = "ShellActivity暴露服务") @com.therouter.inject.ServiceProvider
class ShellProviderImpl : IShellProvider { class ShellProviderImpl : IShellProvider {
override fun getSwitchInstallMethodIntent(context: Context, extraParcelable: Parcelable?): Intent = override fun getSwitchInstallMethodIntent(context: Context, extraParcelable: Parcelable?): Intent =
ShellActivity.getIntent(context, ShellActivity.Type.SWITCH_INSTALL_METHOD, extraParcelable) ShellActivity.getIntent(context, ShellActivity.Type.SWITCH_INSTALL_METHOD, extraParcelable)
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -2,19 +2,15 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.provider.ISimpleAnswerDetailProvider import com.gh.gamecenter.feature.provider.ISimpleAnswerDetailProvider
import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity import com.gh.gamecenter.qa.answer.detail.SimpleAnswerDetailActivity
@Route(path = RouteConsts.provider.simpleAnswerDetail, name = "SimpleAnswerDetailActivity暴露服务") @com.therouter.inject.ServiceProvider
class SimpleAnswerDetailProviderImpl : ISimpleAnswerDetailProvider { class SimpleAnswerDetailProviderImpl : ISimpleAnswerDetailProvider {
override fun getIntent(context: Context, answerId: String, entrance: String, path: String): Intent { override fun getIntent(context: Context, answerId: String, entrance: String, path: String): Intent {
return SimpleAnswerDetailActivity.getIntent(context, answerId, entrance, path) return SimpleAnswerDetailActivity.getIntent(context, answerId, entrance, path)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,12 +1,12 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.feature.provider.ISubjectProvider import com.gh.gamecenter.feature.provider.ISubjectProvider
import com.gh.gamecenter.subject.SubjectActivity import com.gh.gamecenter.subject.SubjectActivity
@Route(path = RouteConsts.provider.subject, name = "SubjectActivity暴露服务") @com.therouter.inject.ServiceProvider
class SubjectProviderImpl : ISubjectProvider { class SubjectProviderImpl : ISubjectProvider {
override fun startSubjectActivity( override fun startSubjectActivity(
context: Context, context: Context,
@ -17,8 +17,4 @@ class SubjectProviderImpl : ISubjectProvider {
) { ) {
SubjectActivity.startSubjectActivity(context, id, name, isOrder, null, entrance) SubjectActivity.startSubjectActivity(context, id, name, isOrder, null, entrance)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -1,19 +0,0 @@
package com.gh.common.provider
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.gamecenter.feature.exposure.time.TimeUtil
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.ITimeUtilProvider
@Route(path = RouteConsts.provider.timeUtil, name = "TimeUtil暴露服务")
class TimeUtilProviderImpl : ITimeUtilProvider {
override fun currentTimeMillis() = TimeUtil.currentTimeMillis()
override fun currentTime() = TimeUtil.currentTime()
override fun init(context: Context?) {
// Do nothing
}
}

View File

@ -1,15 +1,12 @@
package com.gh.common.provider package com.gh.common.provider
import android.content.Context
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.alibaba.android.arouter.facade.annotation.Route
import com.gh.common.util.DialogUtils import com.gh.common.util.DialogUtils
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IUpdateManagerProvider import com.gh.gamecenter.core.provider.IUpdateManagerProvider
import com.gh.gamecenter.core.utils.ToastUtils import com.gh.gamecenter.core.utils.ToastUtils
import com.gh.gamecenter.update.UpdateHelper import com.gh.gamecenter.update.UpdateHelper
@Route(path = RouteConsts.provider.updateManager, name = "UpdateManager暴露服务") @com.therouter.inject.ServiceProvider
class UpdateManagerProviderImpl: IUpdateManagerProvider { class UpdateManagerProviderImpl: IUpdateManagerProvider {
override fun checkUpdate(activity: FragmentActivity, ignoreSuppressOption: Boolean) { override fun checkUpdate(activity: FragmentActivity, ignoreSuppressOption: Boolean) {
val dialog = DialogUtils.showWaitDialog(activity, "检查更新中...") val dialog = DialogUtils.showWaitDialog(activity, "检查更新中...")
@ -26,8 +23,4 @@ class UpdateManagerProviderImpl: IUpdateManagerProvider {
} }
} }
} }
override fun init(context: Context?) {
// Do nothing
}
} }

View File

@ -3,20 +3,16 @@ package com.gh.common.provider
import android.content.Context import android.content.Context
import android.os.Build import android.os.Build
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import com.alibaba.android.arouter.facade.annotation.Route import com.therouter.router.Route
import com.gh.common.util.UsageStatsHelper import com.gh.common.util.UsageStatsHelper
import com.gh.gamecenter.common.constant.RouteConsts import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.provider.IUsageStatsHelperProvider import com.gh.gamecenter.core.provider.IUsageStatsHelperProvider
@Route(path = RouteConsts.provider.usageStatsHelper, name = "UsageStatsHelper暴露服务") @com.therouter.inject.ServiceProvider
class UsageStatsHelperProviderImpl : IUsageStatsHelperProvider { class UsageStatsHelperProviderImpl : IUsageStatsHelperProvider {
@RequiresApi(Build.VERSION_CODES.LOLLIPOP_MR1) @RequiresApi(Build.VERSION_CODES.LOLLIPOP_MR1)
override fun checkForPermission(): Boolean = UsageStatsHelper.checkForPermission() override fun checkForPermission(): Boolean = UsageStatsHelper.checkForPermission()
override fun skipToUsageStats(context: Context, requestCode: Int) { override fun skipToUsageStats(context: Context, requestCode: Int) {
UsageStatsHelper.skipToUsageStats(context, requestCode) UsageStatsHelper.skipToUsageStats(context, requestCode)
} }
override fun init(context: Context?) {
// Do nothing
}
} }

Some files were not shown because too many files have changed in this diff Show More