Compare commits

...

2525 Commits

Author SHA1 Message Date
888332ed82 Merge branch 'feature-issues1865_content_provider_sync_certification' into 'feature-issues1865_content_provider'
feat: 添加同步实名的 ContentProvider

See merge request halo/android/assistant-android!260
2022-06-10 11:26:57 +08:00
2bcf8bf330 feat: 添加同步实名的 ContentProvider 2022-06-10 11:26:57 +08:00
c7dfac8f46 fix: 更正实名状态为空时的处理
【单机插件】实名认证功能第二期(https://git.shanqu.cc/pm/halo-plugin-issues/-/issues/221)
2022-06-06 15:45:01 +08:00
08af4a99f8 fix: 移除无用对象声明
【单机插件】实名认证功能第二期(https://git.shanqu.cc/pm/halo-plugin-issues/-/issues/221)
2022-06-06 15:38:08 +08:00
f3a358eb2d feat: 对接未成年人字段
【单机插件】实名认证功能第二期(https://git.shanqu.cc/pm/halo-plugin-issues/-/issues/221)
2022-06-06 15:36:40 +08:00
6abac72ee7 添加简单的占位 Content Provider 2022-06-02 11:46:31 +08:00
b027c57a7c 提供实名认证ContentProvider 2022-06-02 11:42:19 +08:00
84b876394d Merge branch 'hotfix-v5.9.0-532-crashes' into 'release'
修复首页游戏单轮播引发的一些闪退

See merge request halo/android/assistant-android!256
2022-05-27 18:27:22 +08:00
3fb031c329 修复首页游戏单轮播引发的一些闪退 2022-05-27 18:25:22 +08:00
e46afac397 Merge branch 'hotfix-v5.9.0-532-crashes' into 'release'
修复首页游戏单安利墙引发的一些闪退

See merge request halo/android/assistant-android!255
2022-05-27 17:46:49 +08:00
fdf2c80667 修复首页游戏单安利墙引发的一些闪退 2022-05-27 17:34:01 +08:00
d12a1037a2 版本更新至 5.9.0-532 2022-05-24 17:51:10 +08:00
056400d4d1 Merge branch 'dev' into 'release'
累积变更

See merge request halo/android/assistant-android!253
2022-05-21 16:02:02 +08:00
26cbdeaf2d Merge branch 'feature-issues1865' into 'release'
【合规相关】单机游戏内实名校验功能(3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1865

See merge request halo/android/assistant-android!252
2022-05-21 15:58:45 +08:00
6a5f7f8284 【合规相关】单机游戏内实名校验功能(3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1865 2022-05-21 15:57:23 +08:00
f272e486f8 【光环助手v5.10.0】前端优化汇总5月第3周(9) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1858 2022-05-20 11:40:29 +08:00
7b0514c055 处理 SonarQube 问题 2022-05-19 15:18:00 +08:00
909e7f33a8 Merge branch 'hotfix-v5.9.0-531-night_mode_switch' into 'release'
关闭遗漏的夜间模式切换代码

See merge request halo/android/assistant-android!251
2022-05-19 11:54:24 +08:00
677511b119 关闭遗漏的夜间模式切换代码 2022-05-19 11:52:57 +08:00
26a2605cd7 Merge branch 'hotfix-v5.9.0-530-crash' into 'release'
修复首页未初始化时切换日夜间模式导致的闪退

See merge request halo/android/assistant-android!250
2022-05-19 11:21:20 +08:00
b02f650a34 修复首页未初始化时切换日夜间模式导致的闪退 2022-05-19 11:19:25 +08:00
e1d82e7fbd 版本更新至 5.9.0-531 2022-05-18 16:21:44 +08:00
4263f53315 【光环助手v5.10.0】前端优化汇总5月第3周(6) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1858 2022-05-18 15:14:17 +08:00
f235959372 Merge branch 'hotfix-v5.9.0-530-fragment_resume_crash' into 'release'
修复特殊场景下 fragment 恢复页面时的闪退

See merge request halo/android/assistant-android!249
2022-05-18 15:13:09 +08:00
7bc6655b99 修复特殊场景下 fragment 恢复页面时的闪退 2022-05-18 15:12:24 +08:00
7ecc227df5 修复从其他页面返回首页搜索栏变成深色的问题 2022-05-18 11:49:25 +08:00
3046d33f91 Merge branch 'hotfix-v5.9.0-530-crash' into 'release'
修复游戏单安利墙轮播发生的闪退问题,修复从其他页面返回首页搜索栏变成深色的问题

See merge request halo/android/assistant-android!248
2022-05-18 11:45:28 +08:00
a32829fd0d 【光环助手v5.10.0】前端优化汇总5月第3周(6) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1858 2022-05-18 11:45:25 +08:00
4819bf3ddf 修复从其他页面返回首页搜索栏变成深色的问题 2022-05-18 11:15:12 +08:00
c2e02d356d 修复游戏单安利墙轮播发生的闪退问题 2022-05-18 11:09:23 +08:00
dafaeef184 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/MainActivity.java
#	app/src/main/java/com/halo/assistant/fragment/SettingsFragment.kt
#	dependencies.gradle
2022-05-17 17:10:54 +08:00
a9917c9201 Merge branch 'hotfix-v5.8.1-512-game_list_outofbounds_crash' into 'release'
修复游戏库横向滑动专题数量为空时会闪退的问题

See merge request halo/android/assistant-android!247
2022-05-17 14:44:24 +08:00
c0b61822c0 修复游戏库横向滑动专题数量为空时会闪退的问题 2022-05-17 14:29:15 +08:00
a16a16cbdf 【光环助手V5.10.0】视频模板活动问题汇总(4) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1852 2022-05-16 16:57:26 +08:00
0decb62237 【光环助手v5.10.0】前端优化汇总5月第3周(5) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1858 2022-05-16 09:36:55 +08:00
cdedea5002 【光环助手v5.10.0】前端优化汇总5月第3周(1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1858 2022-05-13 14:39:42 +08:00
88c4ebe5a0 Merge branch 'hotfix-v5.8.1-512-databinding' into 'release'
修复移除databinding引发的问题

See merge request halo/android/assistant-android!246
2022-05-13 14:38:26 +08:00
10cbcdd768 【光环助手v5.10.0】前端优化汇总5月第3周(1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1858 2022-05-13 14:12:51 +08:00
7afbfb30a2 【光环助手V5.10.0】视频模板活动问题汇总(2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1852 2022-05-11 15:47:35 +08:00
090a567887 版本更新至 5.8.1 2022-05-11 15:09:05 +08:00
e55faee9fe Merge branch 'hotfix-v5.8.0-511-setting_crash' into 'release'
修复快速进出设置界面可能的闪退问题

See merge request halo/android/assistant-android!244
2022-05-11 15:07:29 +08:00
362e34be8a 修复快速进出设置界面可能的闪退问题 2022-05-11 15:06:08 +08:00
bf1e5586b0 Merge branch 'hotfix-v5.8.0-511-xapk_unzip_permission_on_android_s' into 'release'
修复 XAPK 在 Android 12 授权后无法解压的问题

See merge request halo/android/assistant-android!243
2022-05-11 14:28:47 +08:00
bad10158bd 修复 XAPK 在 Android 12 授权后无法解压的问题 2022-05-11 14:21:47 +08:00
5cc58e2182 Merge branch 'hotfix-v5.8.0-511_webpage_portrait' into 'release'
修改打开网页会变为横屏问题

See merge request halo/android/assistant-android!242
2022-05-11 11:47:30 +08:00
fd836137a5 修改打开网页会变为横屏问题 2022-05-11 11:05:18 +08:00
b122e460cc 补充夜间模式开关控制 2022-05-09 17:50:26 +08:00
3b29fcbef7 处理顶部 toolbar 图标存在毛刺的问题 2022-05-09 17:01:30 +08:00
9f60a2ba86 调整编译脚本 2022-05-09 16:49:35 +08:00
8df7b3d9ee 编译脚本添加关闭夜间模式入口 2022-05-09 16:40:57 +08:00
e2040f9a2d 添加夜间模式功能全局控制开关 2022-05-09 16:36:36 +08:00
e39cd494b5 日夜间模式的切换(用户中心部分) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-05-09 11:49:38 +08:00
f70b721441 版本更新至 5.8.0-511 2022-05-09 10:20:20 +08:00
lyr
877acf54f4 日夜间模式的切换(新分类页面-优化) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-05-07 18:31:45 +08:00
a31d7a06f7 修复ToolbarActivity空指针闪退 2022-05-07 18:26:56 +08:00
f52937830b 新增Extensions方法 2022-05-07 18:25:00 +08:00
b5202cc931 日夜间模式的切换(资讯页面、工具箱、设置页面 补充) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-05-07 17:14:47 +08:00
dd2bfbc53f 日夜间模式的切换(游戏板块部分) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-05-07 16:48:01 +08:00
d2f3cdadf6 修改游戏详情图片重复刷新问题 2022-05-07 16:04:32 +08:00
73a88f9099 Merge branch 'dev' of git.shanqu.cc:halo/android/assistant-android into dev 2022-05-07 15:45:50 +08:00
a86c957872 日夜间模式的切换(社区论坛部分) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-05-07 15:45:45 +08:00
lyr
45588a2580 日夜间模式的切换(新分类页面) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-05-07 15:39:03 +08:00
3b55269319 Merge remote-tracking branch 'origin/release' into dev 2022-05-07 15:18:17 +08:00
01966a87ec 移除废弃的广点通部分代码 2022-05-07 15:18:05 +08:00
b4a8e5c68d 日夜间模式的切换(游戏单部分) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-05-07 14:17:18 +08:00
aeb7842299 正式包移除夜间模式功能 2022-05-07 09:55:42 +08:00
lyr
e0bcf947bf 【光环助手V5.9.0】新社区7期-论坛详情页优化(增加标签字体颜色字段)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1789#note_146539 2022-05-06 20:53:09 +08:00
30bf685962 日夜间模式的切换(专题页面) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-05-06 20:48:17 +08:00
1e6fa023dc Merge branch 'dev' of git.shanqu.cc:halo/android/assistant-android into dev 2022-05-06 20:42:44 +08:00
b5920fc409 【光环助手V5.9.0】新社区7期-新增视频模板活动优化(后台)(22020506测试反馈1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1796 2022-05-06 20:42:35 +08:00
16ceb7115e Merge remote-tracking branch 'origin/dev' into dev 2022-05-06 18:29:57 +08:00
279ed66270 处理 SonarQube 问题 2022-05-06 18:28:56 +08:00
lyr
9bfa8a33c8 【光环助手V5.9.0】后台优化汇总4月第3周(16)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1802#note_146500 2022-05-06 18:24:57 +08:00
99bd4da08a 处理合并异常 2022-05-06 18:00:13 +08:00
4824814981 Merge remote-tracking branch 'origin/dev-5.9.0' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/teenagermode/TeenagerModeFragment.kt
#	app/src/main/java/com/gh/gamecenter/toolbox/ToolBoxItemAdapter.kt
2022-05-06 17:50:41 +08:00
10237d2fde 日夜间模式的切换(搜索页面) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65
日夜间模式的切换(搜索页面) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65
2022-05-06 17:30:50 +08:00
c1b236080e Merge remote-tracking branch 'origin/dev-5.9.0' into dev-5.9.0 2022-05-06 15:18:04 +08:00
83d16a16b8 日夜间模式的切换(搜索页面) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-05-06 15:08:58 +08:00
52ccffb97a 添加简单的日夜间模式 View 颜色切换辅助方法 2022-05-06 15:08:45 +08:00
lyr
9ed9e22df4 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(0427UI测试问题汇总 2)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794 2022-05-06 11:30:55 +08:00
5aa29782cc Merge branch 'hotfix-v5.8.0-510-image_blurry' into 'release'
修改社区信息流横向长图显示模糊问题

See merge request halo/android/assistant-android!241
2022-05-05 18:20:57 +08:00
lyr
82fcde1245 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(0505UI测试问题汇总)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794#note_146206 2022-05-05 16:08:41 +08:00
lyr
eab945acfc 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(0427UI测试问题汇总 遗留2、7)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794 2022-05-05 15:25:24 +08:00
8ed57cbfb8 修改社区信息流横向长图显示模糊问题 2022-05-05 14:11:22 +08:00
lyr
d3ed6d750b 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(微调活动主页UI) 2022-05-05 10:59:51 +08:00
lyr
bb4878eab4 【光环助手V5.9.0】新社区7期-论坛主页优化(0427UI测试 遗留问题)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1792 2022-05-05 10:11:37 +08:00
lyr
53d8444c85 Merge remote-tracking branch 'origin/dev-5.9.0' into dev-5.9.0 2022-04-29 18:30:24 +08:00
lyr
7db009a3cd 【光环助手V5.9.0】新社区7期-论坛详情页优化(0427UI测试)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1789 2022-04-29 18:30:20 +08:00
4932fc2d7b 日夜间模式的切换 https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-04-29 18:24:17 +08:00
ca55ac02b7 日夜间模式的切换(礼包页面) https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-04-29 16:27:14 +08:00
lyr
c535ffb2e0 【光环助手V5.9.0】新社区7期-论坛主页优化 (0427UI测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1792 2022-04-29 11:27:39 +08:00
9c6eb22d9d 【光环助手V5.9.0】游戏单新增[活动标签]功能(0429测试1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1780 2022-04-29 10:35:13 +08:00
lyr
9ec6ec0281 【光环助手V5.9.0】新社区7期-论坛主页优化 (0427测试反馈 3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1792 2022-04-28 17:10:05 +08:00
lyr
327441e62b 【光环助手V5.9.0】新社区7期-论坛主页优化(0427测试反馈 3)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1792 2022-04-28 17:04:27 +08:00
lyr
ae3f07a3ee 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化 (活动Tab图片使用svg实现) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794 2022-04-28 16:49:43 +08:00
f967e1f283 日夜间模式的切换 https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-04-28 16:17:29 +08:00
ba1308c568 修复创建游戏单使用草稿时无法选择活动标签的问题 2022-04-28 15:13:13 +08:00
3144e3b007 升级 gid 依赖 2022-04-28 14:50:14 +08:00
ec1c5713ad 【光环助手V5.9.0】新社区7期-内容(帖子、视频帖、提问帖)详情页优化(0428UI测试1,2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1795 2022-04-28 14:30:34 +08:00
15adc93340 Merge remote-tracking branch 'origin/dev-5.9.0' into dev-5.9.0 2022-04-28 09:53:05 +08:00
c9b27f6ebe 【光环助手V5.9.0】游戏实名认证提示及其他相关优化(0427UI测试2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1785 2022-04-28 09:52:49 +08:00
cff7f7d2e2 修改社区帖子评论作者标签显示错误 2022-04-28 09:52:28 +08:00
cb5d0c4840 修改游戏评论详情点赞图片大小 2022-04-27 18:43:32 +08:00
dea6abe399 修改游戏评论页评论、点赞图标大小 2022-04-27 18:35:07 +08:00
lyr
20c792d4fa 【光环助手V5.9.0】新社区7期-论坛主页优化(0427测试反馈 1、2) 2022-04-27 18:27:03 +08:00
lyr
b8cbd5a0fb Merge remote-tracking branch 'origin/dev-5.9.0' into dev-5.9.0 2022-04-27 18:07:40 +08:00
lyr
0a34f23e62 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化 (0427UI测试问题汇总) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794 2022-04-27 18:07:17 +08:00
7413b4e4ac 【光环助手V5.9.0】游戏实名认证提示及其他相关优化(0427UI测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1785 2022-04-27 18:04:52 +08:00
d2025c32c9 【光环助手V5.9.0】新社区7期-内容(帖子、视频帖、提问帖)详情页优化(0427UI测试2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1795 2022-04-27 17:10:21 +08:00
5c5dd35409 Merge branch 'dev-5.9.0' of git.shanqu.cc:halo/android/assistant-android into dev-5.9.0 2022-04-27 16:45:54 +08:00
b509e9046e 游戏详情日夜间模式切换 https://git.shanqu.cc/halo/android/assistant-android/-/issues/65 2022-04-27 16:45:48 +08:00
lyr
46e99434c9 【光环助手V5.9.0】新社区7期-论坛详情页优化(0427UI测试)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1789 2022-04-27 16:11:36 +08:00
b6ff94aed3 光环助手V5.9.0】新社区7期-内容(帖子、视频帖、提问帖)详情页优化(0427UI测试1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1795 2022-04-27 14:21:19 +08:00
25e0bd19bc 【光环助手V5.9.0】游戏实名认证提示及其他相关优化 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1785 2022-04-27 11:39:24 +08:00
lyr
fe5b398fad 【光环助手V5.9.0】新社区7期-论坛主页优化(0426UI测试问题汇总)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1792 2022-04-27 11:30:39 +08:00
lyr
417ed1401e 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(0426UI测试问题汇总)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794 2022-04-27 10:38:14 +08:00
48698f06cd 【光环助手V5.9.0】游戏实名认证提示及其他相关优化 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1785 2022-04-26 18:37:16 +08:00
b70a7eaf8b 【光环助手V5.9.0】游戏库新增[导航栏]功能(20220426UI测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1783 2022-04-26 17:01:27 +08:00
lyr
ad86d7bbcc 【光环助手V5.9.0】前端优化汇总4月第5周(2)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1820 2022-04-26 15:56:53 +08:00
lyr
a2eb550099 【光环助手V5.9.0】游戏库新增[导航栏]功能(0426测试)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1783 2022-04-26 15:37:59 +08:00
lyr
e736855a4a 【光环助手V5.9.0】游戏库新增[导航栏]功能(数据埋点第4点-40425测试)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1783#note_145069 2022-04-26 11:48:53 +08:00
0b49f531ac 【光环助手V5.9.0】游戏单新增[轮播图]功能(0426补充)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1781 2022-04-26 10:08:59 +08:00
lyr
c36f4d9abf 【光环助手V5.9.0】新社区7期-论坛主页优化(优化顶部轮播图)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1792 2022-04-25 18:01:08 +08:00
lyr
db72b0a5c9 【光环助手V5.9.0】游戏库新增[导航栏]功能(数据埋点 4)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1783 2022-04-25 17:11:30 +08:00
lyr
b19d21fc39 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(二(1))https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794 2022-04-25 15:37:53 +08:00
lyr
2d172d70ad 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(一(2))https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794 2022-04-25 14:24:57 +08:00
cc434771c0 修复游戏单只有单个轮播图仍然自动轮播的问题 2022-04-25 10:03:58 +08:00
f5a9502261 【光环助手V5.9.0】游戏单新增[活动标签]功能(0424UI测试内容1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1780 2022-04-24 18:07:31 +08:00
c48d970b0a 【光环助手V5.9.0】游戏单新增[轮播图]功能(0422测试2、0424UI测试内容1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1781 2022-04-24 17:49:08 +08:00
9a53c7a84e 【光环助手V5.9.0】游戏单新增[活动标签]功能(0424UI测试内容1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1780 2022-04-24 17:46:38 +08:00
ce17ae2d2b 【光环助手V5.9.0】新社区7期-内容(帖子、视频帖、提问帖)详情页优化(0424UI测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1795 2022-04-24 17:22:38 +08:00
lyr
d97f65e9b3 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(一(1))https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794 2022-04-24 16:31:34 +08:00
9f1f3a2d66 【光环助手V5.9.0】新社区7期-内容(帖子、视频帖、提问帖)详情页优化(1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1795 2022-04-24 14:24:08 +08:00
4c9609ba52 【光环助手V5.9.0】游戏单新增[活动标签]功能(0422测试1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1780 2022-04-24 11:58:11 +08:00
270203266f 修复工具箱页面空指针闪退 2022-04-24 11:46:54 +08:00
lyr
edc326ff3c 【光环助手V5.9.0】新社区7期-论坛主页优化 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1792 2022-04-24 10:34:45 +08:00
0856b8a2ab 添加 ANR 上报到 BETA 渠道 2022-04-24 10:16:37 +08:00
8f95517dd7 尝试处理更新管理页面的并发操作问题 2022-04-24 10:13:56 +08:00
c828f3f479 尝试处理游戏搜索页和下载管理页的ANR问题 2022-04-24 10:13:08 +08:00
b90d026a74 尝试修复工作任务过多无法被执行的问题 2022-04-23 16:21:41 +08:00
lyr
819beb779c 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(一(2)) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794 2022-04-22 09:53:59 +08:00
de31dcaf0b 【光环助手V5.9.0】游戏单新增[轮播图]功能 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1781 2022-04-21 16:29:23 +08:00
587c217b7c 修改游戏库导航栏小红点显示逻辑问题 2022-04-21 10:08:09 +08:00
b03e86f903 上传遗漏文件 2022-04-20 23:18:15 +08:00
ea80942937 【光环助手V5.9.0】新社区7期-推荐信息页&个人主页&活动主页优化(一(2)(大部分)、三) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1794
【光环助手V5.9.0】新社区7期-论坛主页优化(UI部分(因后端未出接口)) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1792
2022-04-20 23:13:40 +08:00
06153cbf58 【光环助手V5.9.0】游戏库新增[导航栏]功能(曝光数据埋点) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1783 2022-04-20 17:08:11 +08:00
0b94f777a2 【光环助手V5.9.0】游戏库新增[导航栏]功能 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1783 2022-04-20 11:00:36 +08:00
3d6917cd5d Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/mygame/PlayedGameAdapter.kt
#	dependencies.gradle
2022-04-19 09:24:00 +08:00
e4300ab315 更新 sentry cli token 2022-04-19 09:22:18 +08:00
ed80533198 【光环助手V5.9.0】游戏单新增[活动标签]功能(修复数据库迁移闪退) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1780 2022-04-18 15:24:34 +08:00
4b5c741ff9 【光环助手V5.9.0】游戏单新增[活动标签]功能(修复编辑游戏单丢失活动标签的问题) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1780 2022-04-18 12:02:23 +08:00
a93b49eb76 版本更新至 5.7.4 2022-04-18 11:48:07 +08:00
9fb25b80ea Merge branch 'hotfix-v5.7.3-494_crashes' into 'release'
处理一些闪退

See merge request halo/android/assistant-android!240
2022-04-18 11:06:01 +08:00
5c64deb874 修复游戏动态查看大图数组越界的问题 2022-04-18 10:48:37 +08:00
33cb09e201 请求登录dialog增加context有效性判断 2022-04-18 10:48:05 +08:00
032a9750e2 Merge branch 'hotfix-v5.7.3-494_crash' into 'release'
修改更新targetSdk为28以后透明activity配上portait在 8.0 设备上会闪退的问题

See merge request halo/android/assistant-android!238
2022-04-18 10:38:02 +08:00
ff6fcd038e Merge branch 'hotfix-v5.7.3-494_get_packagename_error' into 'release'
捕抓调用系统 API 获取包名的异常

See merge request halo/android/assistant-android!239
2022-04-18 10:37:21 +08:00
cc3908b416 捕抓调用系统 API 获取包名的异常 2022-04-18 10:35:02 +08:00
50a7527e7c 修改更新targetSdk为28以后透明activity配上portait在 8.0 设备上会闪退的问题 2022-04-18 10:34:22 +08:00
75e085b80a Merge branch 'hotfix-v5.7.3-494-played_game_wrong_status' into 'release'
修复玩过的游戏错误显示已卸载状态的问题

See merge request halo/android/assistant-android!237
2022-04-18 10:15:41 +08:00
39eecf0920 修复玩过的游戏错误显示已卸载状态的问题 2022-04-18 10:14:49 +08:00
0e9f267117 版本更新至 5.9.0 2022-04-18 09:35:26 +08:00
02bb977cc0 【光环助手V5.9.0】游戏单新增[活动标签]功能(修改活动标签说明字段) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1780 2022-04-15 15:48:07 +08:00
c4a89b9302 【光环助手V5.9.0】游戏单新增[活动标签]功能 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1780 2022-04-15 14:44:33 +08:00
cde9401b36 修复游戏动态查看大图数组越界的问题 2022-04-14 20:25:11 +08:00
edcb4a949e 【光环助手V5.9.0】新社区7期-新增视频模板活动优化(后台)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1796 2022-04-14 14:57:38 +08:00
4e0516e43f 版本更新至 5.7.3-494 2022-04-13 17:17:55 +08:00
d702cafc4f Merge branch 'hotfix-v5.7.2-uninstall' into 'release'
修复8.0以上设备无法插件化的问题

See merge request halo/android/assistant-android!236
2022-04-13 17:16:31 +08:00
6cd9076dff 修复8.0以上设备无法插件化的问题 2022-04-13 17:15:26 +08:00
a5c113e527 Merge remote-tracking branch 'origin/dev-5.9.0' into dev-5.9.0 2022-04-13 16:50:22 +08:00
048bdbc367 【光环助手V5.9.0】游戏单新增[活动标签]功能(UI部分) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1780 2022-04-13 16:49:14 +08:00
1e287f56e2 【光环助手V5.9.0】新社区7期-论坛详情页优化 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1789 2022-04-13 14:57:57 +08:00
2aacab80a6 【光环助手V5.9.0】新社区7期-内容(帖子、视频帖、提问帖)详情页优化(2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1795 2022-04-13 10:15:20 +08:00
f9d7255556 版本更新至 5.7.2-493 2022-04-12 09:50:18 +08:00
2b2cf1ca8f Merge branch 'hotfix-v5.7.1-492-fix_nullpointer_crash' into 'release'
处理空指针异常

See merge request halo/android/assistant-android!235
2022-04-12 09:48:59 +08:00
c651a97bbb 处理空指针异常 2022-04-12 09:40:53 +08:00
b54f1d125e Merge branch 'hotfix-v5.7.1-492_crash' into 'release'
修改sentry上的闪退问题

See merge request halo/android/assistant-android!232
2022-04-11 14:43:16 +08:00
ead711446d 1.修改更新targetSdk为28以后透明activity配上portait在 8.0 设备上会闪退的问题 2.修改帮助与反馈页面重建闪退问题 2022-04-11 14:43:15 +08:00
b19f0ac69c Merge branch 'hotfix-v5.7.1-492-crashes' into 'release'
修改sentry上的闪退问题

See merge request halo/android/assistant-android!234
2022-04-11 14:24:17 +08:00
25a325f7f7 Merge branch 'hotfix-v5.7.1-492-crashes' into 'dev'
修复sentry上的闪退问题

See merge request halo/android/assistant-android!233
2022-04-11 14:20:44 +08:00
8be52f7bdd 修复dialog中的lottie在非主线程执行的问题 2022-04-11 14:17:15 +08:00
3cb1cd3ba6 修复dialog中的lottie在非主线程执行的问题 2022-04-11 13:50:20 +08:00
b68a9a43de 修复青少年模式快速双击导致的闪退 2022-04-11 11:33:41 +08:00
0f80f5bc03 Merge branch 'hotfix-v5.7.1-472-out_of_bounds_crash' into 'release'
修复游戏库数组越界闪退问题

See merge request halo/android/assistant-android!231
2022-04-11 11:15:56 +08:00
647ef1d8d3 修复游戏库数组越界闪退问题 2022-04-11 11:14:18 +08:00
6c6a7f0677 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	dependencies.gradle
2022-04-07 09:59:52 +08:00
56dc30845a Merge branch 'hotfix-v5.7.1-492-wechat_redirect' into 'release'
修复微信内跳转无法跳转到论坛详情页的问题

See merge request halo/android/assistant-android!230
2022-04-07 09:58:46 +08:00
da14711bbc 修复微信内跳转无法跳转到论坛详情页的问题 2022-04-07 09:57:50 +08:00
33fe057a5f 版本更新至 5.7.1-492 2022-04-07 09:18:20 +08:00
a052f981c5 Merge branch 'feature-night_mode_test' into dev-5.9.0 2022-04-06 18:14:55 +08:00
5042bddec7 1.修改LoopThread名字 2.修改定时器回调到子线程 2022-04-06 17:45:52 +08:00
0803e61828 复用 Gson 对象 2022-04-06 16:21:18 +08:00
119f304e2f 尝试处理 ConnectivityManager 造成的内存泄漏问题 2022-04-06 11:35:36 +08:00
3db6f93b73 Merge branch 'release' into dev 2022-04-06 11:22:51 +08:00
3f74d8efc9 Merge branch 'hotfix-v5.7.1-491-wechat_crash' into 'release'
修复在 Android 8.0 系统上的微信登录闪退问题 https://git.shanqu.cc/halo/android/assistant-android/-/issues/56

See merge request halo/android/assistant-android!229
2022-04-06 11:21:55 +08:00
15aabc4db7 修复在 Android 8.0 系统上的微信登录闪退问题 https://git.shanqu.cc/halo/android/assistant-android/-/issues/56 2022-04-06 11:19:35 +08:00
3ed3a8d47a 版本更新至 5.7.1 2022-04-06 10:30:02 +08:00
3719f5e1cd Merge remote-tracking branch 'origin/release' into dev 2022-04-06 10:25:26 +08:00
957fca8960 Merge branch 'hotfix-v5.7.0-490-fix_wechat_redirect' into 'release'
修复微信内网页无法跳转光环首页的问题

See merge request halo/android/assistant-android!228
2022-04-06 10:23:06 +08:00
0066d2eb7b 修复微信内网页无法跳转光环首页的问题 2022-04-06 10:21:53 +08:00
cbae38b41d 修改加载图片重复调用AsyncImageLoader问题 2022-04-06 09:48:12 +08:00
021886c3cb 实现游戏单广场、安利墙、我的光环夜间模式切换颜色 2022-04-02 18:01:42 +08:00
6d62dd7fd1 删除多余代码 2022-04-02 17:35:07 +08:00
20d28525cf 处理加载图片时由于width获取为0导致图片占用内存过大的问题 2022-04-02 17:30:47 +08:00
a406127cda 统一纯白、纯黑色值 2022-04-02 15:31:13 +08:00
lyr
3301b30ec2 优化WebFragment是否成功加载的判断逻辑(补充) 2022-04-01 15:43:50 +08:00
f761715ebd 实现夜间模式切换首页tab和搜索栏颜色
实现游戏库夜间模式切换颜色
2022-04-01 15:28:30 +08:00
lyr
1f0216662a 优化WebFragment是否成功加载的判断逻辑 2022-04-01 15:03:32 +08:00
f483f1effc 清理无用 dokit 配置 2022-04-01 11:31:24 +08:00
cf5b0bcd41 添加 dokit 初始化脚本 2022-04-01 10:55:45 +08:00
4e51830c58 Update README.md 2022-04-01 09:23:51 +08:00
lyr
830a45e6d2 WebFragment网页销毁时移除JS Api 2022-03-31 21:58:27 +08:00
lyr
24c32b7a4b 【光环助手V5.8.0】游戏活动模板功能(前端部分)(优化游戏活动下载辅助类) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-31 21:56:22 +08:00
lyr
7e30f1702d Merge remote-tracking branch 'origin/dev' into dev 2022-03-31 20:57:21 +08:00
lyr
68ae4bf1b2 【光环助手V5.8.0】游戏活动模板功能(前端部分)(提供上报曝光方法) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-31 20:57:15 +08:00
0b757f24d1 缩小 Picasso 的内存 Lru size 2022-03-31 20:54:14 +08:00
lyr
99d0525c0a 【光环助手V5.8.0】游戏活动模板功能(前端部分)(0330测试 4)(增加防止web页面水平方向滑动冲突的JS Api) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-31 18:14:24 +08:00
4f3ec7aa18 处理 AppManager 的内存泄漏问题 2022-03-31 17:47:32 +08:00
bd228459fa 修复游戏详情页游戏图标的重复加载问题 2022-03-31 17:16:40 +08:00
c9227c20a2 修复列表游戏图标可能会加载不符合显示大小图片的问题 2022-03-31 17:15:31 +08:00
lyr
5270bc3ed7 【光环助手V5.8.0】游戏活动模板功能(前端部分)(0330测试 6(3)(4)) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-31 14:48:53 +08:00
e1de3dc873 缩减线程池核心规模 2022-03-31 11:37:43 +08:00
9303f534d9 修改夜间模式配色 2022-03-31 11:06:07 +08:00
629a694279 【光环助手V5.8.0】客户端内部需求 (0328测试 1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1746 2022-03-31 10:15:48 +08:00
0ef0ed7c50 Merge branch 'dev' into feature-night_mode_test 2022-03-30 11:36:34 +08:00
lyr
48d335ad67 【光环助手V5.8.0】游戏活动模板功能(前端部分)(0328测试 9) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-29 14:23:48 +08:00
231434caeb 新增设计师用包编译脚本 2022-03-29 10:22:10 +08:00
220fd340ce Merge branch 'dev' into feature-night_mode_test 2022-03-29 10:17:30 +08:00
5badb44e3e 处理编译问题 2022-03-29 09:43:11 +08:00
82d405c14c 【光环助手V5.8.0】前端优化汇总3月第2周(0328测试结果反馈4) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755 2022-03-28 20:32:57 +08:00
2157dcd51a Merge remote-tracking branch 'origin/dev' into dev 2022-03-28 18:38:00 +08:00
872d9d89c5 jenkins 包默认关闭 dokit 2022-03-28 18:37:52 +08:00
lyr
dae4543a82 【光环助手V5.8.0】游戏活动模板功能(前端部分)(0328测试 8) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-28 18:37:10 +08:00
60204d9ab2 测试包集成 dokit 2022-03-28 18:30:57 +08:00
0c86965260 测试包集成 dokit 2022-03-28 18:25:37 +08:00
d0ad110d9e Merge branch 'dev' into feature-night_mode_test
# Conflicts:
#	app/src/main/res/layout/questions_history_detail.xml
2022-03-28 17:40:17 +08:00
5cd88cdb7f 【光环助手V5.8.0】客户端内部需求(0328UI测试问题1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1746 2022-03-28 17:25:08 +08:00
60acd1bac4 【光环助手V5.8.0】前端优化汇总3月第2周(0328第4点UI测试问题1,2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755 2022-03-28 17:10:01 +08:00
lyr
990efacb89 【光环助手V5.8.0】前端优化汇总3月第2周(UI测试问题 2)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755#note_140469 2022-03-28 14:27:49 +08:00
7076a6acaa 【光环助手V5.8.0】前端优化汇总3月第3周(4) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1763 2022-03-28 10:44:14 +08:00
acc4d6d8ab 【光环助手V5.8.0】前端优化汇总3月第2周(第6点UI测试问题1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755 2022-03-28 10:22:29 +08:00
lyr
0a3ae4379d 【光环助手V5.8.0】游戏活动模板功能(前端部分)(优化下载) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-24 18:21:27 +08:00
lyr
8197f161c0 【光环助手V5.8.0】游戏活动模板功能(前端部分)(修复多版本游戏无法下载问题) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-24 17:10:47 +08:00
lyr
0cd5f0d640 【光环助手V5.8.0】游戏活动模板功能(前端部分)(修改判断是否完成任务的JS调用方法) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-24 11:21:41 +08:00
lyr
790093b585 处理 SonarQube 问题 2022-03-23 18:07:00 +08:00
46093c065d Merge branch 'hotfix-v5.7.0-490-category_crash' into 'release'
修复新分类页切换分类Tab可能导致的闪退问题

See merge request halo/android/assistant-android!227
2022-03-23 17:45:11 +08:00
lyr
9cc1a0dd4e 修复新分类页切换分类Tab可能导致的闪退问题 2022-03-23 17:41:23 +08:00
72a5d2881a 处理 SonarQube 问题 2022-03-23 17:31:59 +08:00
7eabb1098c 处理 SonarQube 问题 2022-03-23 17:08:36 +08:00
7a295a5d05 处理 SonarQube 问题 2022-03-23 16:36:25 +08:00
da26247d30 Merge branch 'dev-5.8.0' into dev 2022-03-23 16:02:50 +08:00
c797779598 修改帖子详情评论框弹起不能自动获取焦点问题 2022-03-23 14:49:44 +08:00
f66bf2398c 修复dialog宽度显示异常 2022-03-22 14:43:30 +08:00
lyr
010ce39e20 【光环助手V5.8.0】游戏活动模板功能(前端部分)(修改接口) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-22 14:36:38 +08:00
lyr
9320059a76 【光环助手V5.8.0】游戏活动模板功能(前端部分)(优化判断是否完成任务的JS调用方法) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-21 19:11:43 +08:00
lyr
3003a310a0 【光环助手V5.8.0】游戏活动模板功能(前端部分)(优化游戏活动页下载按钮的JS调用方法、提供判断是否完成任务的JS调用方法) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-21 18:48:15 +08:00
91af5e6fe6 【光环助手V5.8.0】后台优化汇总3月第2周 (4) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1754 2022-03-21 11:36:51 +08:00
lyr
d02dfbdaf7 【光环助手V5.8.0】游戏活动模板功能(前端部分)(提供游戏活动页下载按钮的JS调用方法) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1741 2022-03-18 18:31:46 +08:00
c3e06cc1ff 【光环助手V5.8.0】前端优化汇总3月第3周(3)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1763 2022-03-18 17:07:47 +08:00
3e86e368d8 游戏单广场选择标签后修改为不显示骨架图 2022-03-18 16:40:22 +08:00
df231d1530 【光环助手V5.8.0】游戏单功能优化 1(1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1739 2022-03-18 16:34:51 +08:00
006f71def7 Merge remote-tracking branch 'origin/feature-night_mode_test' into feature-night_mode_test 2022-03-17 17:16:24 +08:00
047dc9a7ae 调研日/夜间模式切换的实现 https://git.shanqu.cc/halo/android/assistant-android/-/issues/60 2022-03-17 17:13:16 +08:00
lyr
05abf00994 【光环助手V5.8.0】实名认证优化第五期(客户端 1、4)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1750 2022-03-17 11:59:39 +08:00
c8278f6364 修改帖子详情评论框弹起不能自动获取焦点问题 2022-03-17 11:37:11 +08:00
8cd951c669 Merge branch 'dev' into dev-5.8.0 2022-03-17 11:33:49 +08:00
c43700e4d6 【光环助手V5.8.0】前端优化汇总3月第3周(2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1763 2022-03-17 11:11:11 +08:00
fa2174319e 优化版块页刷新按钮的显示逻辑 2022-03-17 10:48:22 +08:00
lyr
4d6a71c8be 升级Loghub配置方法 2022-03-17 10:35:35 +08:00
lyr
c866f16157 修复进入新分类2.0页-精选Tab数据为空的问题 2022-03-17 10:25:46 +08:00
b99e579ccd 调整社区推荐页列表标题和正文的文本内边距 2022-03-15 16:37:30 +08:00
01eb074df1 优化底部导航栏显示
添加注释
2022-03-14 17:27:36 +08:00
f6473b0e5e Merge branch 'dev-5.8.0' into feature-night_mode_test 2022-03-14 17:11:51 +08:00
e244797e7d 调研日/夜间模式切换的实现 https://git.shanqu.cc/halo/android/assistant-android/-/issues/60 2022-03-14 17:00:28 +08:00
f267908122 Merge branch 'dev' into dev-5.8.0 2022-03-14 16:22:32 +08:00
6128e364e6 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	dependencies.gradle
2022-03-14 16:20:46 +08:00
32a4fda9bc 完全移除 DataBinding(修复首页排行榜显示问题)https://git.shanqu.cc/halo/android/assistant-android/-/issues/59 2022-03-14 15:42:53 +08:00
792ce39792 Merge branch 'hotfix-v5.6.3-474-fix_gamedetail_invisible_on_some_old_devices' into 'release'
修复部分设备游戏详情页显示为空白的问题

See merge request halo/android/assistant-android!226
2022-03-14 14:47:47 +08:00
94b80b3f8b 修复部分设备游戏详情页显示为空白的问题 2022-03-14 14:43:54 +08:00
0e49985edf Merge branch 'hotfix-v5.6.3-474-crashes' into 'release'
修复查看大图、青少年模式页面闪退

See merge request halo/android/assistant-android!225
2022-03-14 11:39:55 +08:00
164f508cbc 修复查看大图、青少年模式页面闪退 2022-03-14 11:35:21 +08:00
cdfda4d963 修改我的游戏分割线显示问题 2022-03-11 16:42:54 +08:00
c3b850972f 【光环助手V5.8.0】前端优化汇总3月第2周(0311测试结果反馈4,10) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755 2022-03-11 16:28:26 +08:00
89f8aebefe Merge branch 'dev-5.8.0' into feature-night_mode_test
# Conflicts:
#	app/src/main/res/layout/activity_ask_column_detail.xml
#	app/src/main/res/layout/activity_background_clip.xml
#	app/src/main/res/layout/activity_kaifu_patch.xml
#	app/src/main/res/layout/activity_rating_edit.xml
#	app/src/main/res/layout/activity_video_game.xml
#	app/src/main/res/layout/activity_video_uplaod.xml
#	app/src/main/res/layout/ask_search_question_item.xml
#	app/src/main/res/layout/catalog_header_item.xml
#	app/src/main/res/layout/catalog_image_item.xml
#	app/src/main/res/layout/commodity_item.xml
#	app/src/main/res/layout/common_collection_detail_one_item.xml
#	app/src/main/res/layout/common_collection_detail_two_item.xml
#	app/src/main/res/layout/common_collection_image_text_item.xml
#	app/src/main/res/layout/common_collection_item.xml
#	app/src/main/res/layout/community_follow_item.xml
#	app/src/main/res/layout/community_select_opened_item.xml
#	app/src/main/res/layout/daily_task_item.xml
#	app/src/main/res/layout/dialog_download_link.xml
#	app/src/main/res/layout/dialog_upload_schedule.xml
#	app/src/main/res/layout/download_dialog_installed_item.xml
#	app/src/main/res/layout/download_dialog_item.xml
#	app/src/main/res/layout/followers_or_fans_item.xml
#	app/src/main/res/layout/forum_search_content_list.xml
#	app/src/main/res/layout/fragment_answer_detail.xml
#	app/src/main/res/layout/fragment_answer_edit.xml
#	app/src/main/res/layout/fragment_background_preview.xml
#	app/src/main/res/layout/fragment_forum_detail.xml
#	app/src/main/res/layout/fragment_forum_video_detail.xml
#	app/src/main/res/layout/fragment_game_collection_poster.xml
#	app/src/main/res/layout/fragment_main_home.xml
#	app/src/main/res/layout/fragment_search_default.xml
#	app/src/main/res/layout/game_collection_detail_image_item.xml
#	app/src/main/res/layout/game_collection_item.xml
#	app/src/main/res/layout/game_head_item.xml
#	app/src/main/res/layout/game_image_item.xml
#	app/src/main/res/layout/game_image_slide_item.xml
#	app/src/main/res/layout/game_viewpager_item.xml
#	app/src/main/res/layout/home_amway_item.xml
#	app/src/main/res/layout/home_game_item.xml
#	app/src/main/res/layout/home_recommend_item.xml
#	app/src/main/res/layout/home_slide_list_item.xml
#	app/src/main/res/layout/item_article_detail_comment.xml
#	app/src/main/res/layout/item_forum_video.xml
#	app/src/main/res/layout/item_game_libao.xml
#	app/src/main/res/layout/item_my_game_collection.xml
#	app/src/main/res/layout/local_video_item.xml
#	app/src/main/res/layout/novice_task_item.xml
#	app/src/main/res/layout/rating_comment_item.xml
#	app/src/main/res/layout/rating_reply_item.xml
#	app/src/main/res/layout/set_wait_dialog.xml
#	app/src/main/res/layout/stairs_comment_item.xml
2022-03-11 11:41:46 +08:00
52eca3b1ab 调研日/夜间模式切换的实现 https://git.shanqu.cc/halo/android/assistant-android/-/issues/60 2022-03-11 11:18:26 +08:00
0e26943d25 【光环助手V5.8.0】前端优化汇总3月第2周(10) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755 2022-03-10 17:32:08 +08:00
8286b0137f 版本更新至 5.6.3 2022-03-10 17:22:06 +08:00
lyr
0a8bef8ac3 【光环助手V5.8.0】前端优化汇总3月第2周(3、6(游戏单详情骨架图))https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755 2022-03-10 17:13:53 +08:00
a8fa4cf872 修改设置页面异步获取缓存大小 2022-03-10 12:08:49 +08:00
775f454e38 【光环助手V5.8.0】前端优化汇总3月第2周 6(游戏单、游戏单广场) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755
【光环助手V5.8.0】游戏单功能优化(UI部分)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1739
2022-03-10 11:19:36 +08:00
b7de326a21 【光环助手V5.8.0】前端优化汇总3月第2周(4) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755 2022-03-10 09:53:06 +08:00
5b0d2e8294 缩减线程池等待队列大小 2022-03-09 15:16:29 +08:00
ec34de4675 Merge branch 'feature-optimise_filter_api' into 'dev-5.8.0'
调整启动时获取已收录游戏及游戏更新/插件化的逻辑 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1746

See merge request halo/android/assistant-android!224
2022-03-09 15:11:25 +08:00
0f6aa5ca9f 调整启动时获取已收录游戏及游戏更新/插件化的逻辑 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1746 2022-03-09 15:09:36 +08:00
lyr
b0cdd1029e 【光环助手V5.8.0】客户端内部需求 3(修改首页部分点击游戏item使用游戏id进入游戏详情)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1746 2022-03-08 16:41:52 +08:00
e554e9ca5f 修改游戏单详情游戏推荐理由不显示问题 2022-03-08 13:25:32 +08:00
ff879454c1 【光环助手V5.8.0】新社区3期-社区数据后台-内容数据(补充share_result埋点携带信息) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1420 2022-03-08 13:03:06 +08:00
7d3baaa501 【光环助手V5.8.0】前端优化汇总3月第2周(5,7) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755 2022-03-08 11:28:53 +08:00
5a57a58f0a Merge branch 'feature_remove_duplicated_files' into dev-5.8.0 2022-03-08 09:57:07 +08:00
e01bfb4676 移除完全相同的冗余资源文件 https://git.shanqu.cc/halo/android/assistant-android/-/issues/62 2022-03-08 09:53:48 +08:00
3617004de2 Merge branch 'hotfix-v5.6.2-473_simulator_not_install' into 'release'
修改第二次下载相同的游戏不能自动触发安装操作问题

See merge request halo/android/assistant-android!223
2022-03-07 18:34:28 +08:00
de8234868a 【光环助手V5.8.0】前端优化汇总3月第2周(8) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1755 2022-03-07 18:31:34 +08:00
3d31d9a435 修改第二次下载相同的游戏不能自动触发安装操作问题 2022-03-07 18:23:21 +08:00
9220f13c9e 移除完全相同的冗余资源文件 https://git.shanqu.cc/halo/android/assistant-android/-/issues/62 2022-03-07 17:42:03 +08:00
10a3ed7f15 Merge branch 'feature-remove_databinding' into dev-5.8.0
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/gamedetail/fuli/GameNewsAdapter.kt
2022-03-07 11:13:08 +08:00
680ec6e285 移除搜索默认页冗余的数据库查询 2022-03-07 10:38:27 +08:00
d99fbe5292 确定 WorkManager 调用,移除日志上报 2022-03-07 10:35:31 +08:00
554eb671b2 新增开服页面还原为DataBinding 2022-03-04 14:57:48 +08:00
9f2e46d876 完全移除 DataBinding https://git.shanqu.cc/halo/android/assistant-android/-/issues/59 2022-03-04 11:09:13 +08:00
d2efb8391c 完全移除 DataBinding https://git.shanqu.cc/halo/android/assistant-android/-/issues/59 2022-03-04 10:39:23 +08:00
ac04cc4525 修改版本说明弹窗闪退问题 2022-03-03 18:52:32 +08:00
03855609c1 完全移除 DataBinding https://git.shanqu.cc/halo/android/assistant-android/-/issues/59 2022-03-03 18:03:08 +08:00
2408af31d9 Update .gitmodules 2022-03-03 10:13:12 +08:00
fc2dcbd4b0 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	dependencies.gradle
2022-03-02 18:13:06 +08:00
3012bf6a46 版本更新至 5.8.0 2022-03-02 17:31:07 +08:00
e07529846c 完全移除 DataBinding https://git.shanqu.cc/halo/android/assistant-android/-/issues/59 2022-03-02 17:12:38 +08:00
8805763b1d 版本更新至 5.6.2-473 2022-03-02 11:11:32 +08:00
5fa578c9ed Merge branch 'hotfix-v5.6.2-472-feedback_placeholder' into 'release'
修复反馈页面默认输入内容异常的问题

See merge request halo/android/assistant-android!222
2022-03-02 11:10:18 +08:00
5056dddf26 修复反馈页面默认输入内容异常的问题 2022-03-02 11:08:31 +08:00
lyr
010c41c3c9 修复从帖子详情页点赞评论后返回论坛详情页会闪退的问题 2022-03-02 11:06:36 +08:00
bb7cea3dee 版本更新至 5.6.2 2022-03-02 10:47:11 +08:00
lyr
d7a81d2268 完全移除 Kotlin synthetics for views https://git.shanqu.cc/halo/android/assistant-android/-/issues/58 2022-03-02 10:32:19 +08:00
9b9aa8c060 Merge branch 'hotfix-v5.6.1-471-history_apk_crash' into 'release'
修复历史版本页面不存在 apk 时的闪退

See merge request halo/android/assistant-android!221
2022-03-02 09:39:05 +08:00
ee445c0819 修复历史版本页面不存在 apk 时的闪退 2022-03-02 09:37:49 +08:00
0060312d52 Merge branch 'hotfix-v5.6.1-471-offline_simulator_game_launch' into 'release'
修复无网络状态下无法启动模拟器游戏的问题

See merge request halo/android/assistant-android!220
2022-03-01 16:39:01 +08:00
3a4f4eaf24 修复无网络状态下无法启动模拟器游戏的问题 2022-03-01 16:37:15 +08:00
afa8c776b9 修复部分游戏进入游戏详情旧专区闪退的问题 2022-03-01 15:17:39 +08:00
60cfee7ce3 修改多行输入框提示文字颜色 2022-02-28 18:24:16 +08:00
e418f5d3ea 处理 SonarQube 问题 2022-02-28 18:07:34 +08:00
80f30b82b6 【光环助手V5.7.0】光环助手UI组件库(第3期)(UI测试问题汇总补充1-2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1698 2022-02-28 17:55:17 +08:00
58999418ab Merge branch 'hotfix-v5.6.0-470_imageviewer' into 'release'
处理查看大图页面sentry问题

See merge request halo/android/assistant-android!219
2022-02-28 17:21:18 +08:00
f4e90aa9da 处理查看大图页面sentry问题 2022-02-28 17:17:12 +08:00
1308737382 【光环助手V5.7.0】光环助手UI组件库(第3期)(UI测试问题汇总1-3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1698 2022-02-28 16:24:53 +08:00
c1b1b2a6ce 【光环助手V5.7.0】光环助手UI组件库(第3期)(UI测试问题汇总1-3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1698 2022-02-28 16:19:48 +08:00
82ec3569dc 版本更新至 5.6.1 2022-02-28 16:18:20 +08:00
3dd2b5df49 移除 Manifest 无用的 Activity 声明 2022-02-25 15:01:46 +08:00
lyr
34ac01cde8 处理 SonarQube 问题 2022-02-25 14:19:40 +08:00
lyr
c09efbfa78 【光环助手V5.7.0】游戏单功能优化(前端部分)(0224UI测试问题补充 遗留) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696#note_136637 2022-02-24 18:04:53 +08:00
lyr
054f6200f3 【光环助手V5.7.0】游戏单功能优化(前端部分)(0224UI测试问题补充 1修正) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696#note_136637 2022-02-24 17:57:41 +08:00
dabe88b703 【光环助手V5.7.0】自定义栏目优化(第二期)(0224UI测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1694#note_136524 2022-02-24 17:45:35 +08:00
35dee07537 【光环助手V5.7.0】游戏单功能优化(前端部分)(0224测试:1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696 2022-02-24 15:37:27 +08:00
67e44d378c 【光环助手V5.7.0】自定义栏目优化(第二期)(0224UI测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1694#note_136524 2022-02-24 14:53:31 +08:00
lyr
09d9fc446e 【光环助手V5.7.0】游戏单功能优化(前端部分)(0224UI测试问题补充 1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696#note_136491 2022-02-24 11:08:48 +08:00
1971e3bb81 修复 GameIconView 的显示问题 2022-02-24 09:43:39 +08:00
b560cdfa6e 修复登录中dialog不显示loading动画的问题
优化大图渐出动画
2022-02-23 18:17:28 +08:00
0bfdedfae8 处理 SonarQube 问题 2022-02-23 16:40:44 +08:00
5cd424a680 【光环助手V5.7.0】自定义栏目优化(第二期)(0222UI测试问题 & 0223测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1694#note_136262 2022-02-23 16:29:41 +08:00
lyr
012103e706 【光环助手V5.7.0】游戏单功能优化(前端部分)(UI测试问题汇总 3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696#note_136359 2022-02-23 16:04:17 +08:00
2ad067b80d 【光环助手V5.7.0】游戏单功能优化(前端部分)(UI测试问题汇总1,2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696 2022-02-23 14:36:45 +08:00
lyr
2f551db4c7 【光环助手V5.7.0】游戏单功能优化(前端部分)(0223测试 3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696#note_136356 2022-02-23 14:21:21 +08:00
343aa77c86 【光环助手V5.7.0】游戏单功能优化(前端部分)(0223测试:1,2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696 2022-02-23 12:05:12 +08:00
b7bbf8688f Merge branch 'flutter-dev' into 'dev'
更新Flutter Fresco插件(支持gif、webp)

See merge request halo/android/assistant-android!218
2022-02-23 10:25:19 +08:00
67a98023c6 更新Flutter Fresco插件(支持gif、webp) 2022-02-23 10:14:11 +08:00
f0c6486855 修改查看对话页面评论输入框UI错乱问题 2022-02-23 09:36:48 +08:00
201884643f 移除 butterknife 2022-02-22 18:34:47 +08:00
410ad346e6 【光环助手V5.7.0】新社区6期-活动管理优化(后台)(0222 验收问题5) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1608 2022-02-22 18:01:24 +08:00
782bb3a825 调整选择默认封面页面UI 2022-02-22 15:59:30 +08:00
e77b21719c 【光环助手V5.7.0】游戏单功能优化(前端部分)(9) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696 2022-02-22 15:43:00 +08:00
fffdd596d2 【光环助手V5.7.0】后台优化汇总2月第3周(9(2)) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1726 2022-02-22 15:03:31 +08:00
6e2b6cc397 移除 kotterknife 2022-02-22 14:47:54 +08:00
97ac478c8d 处理 SonarQube 问题 2022-02-22 14:44:46 +08:00
1b655f27d1 Merge branch 'release' into dev 2022-02-22 14:20:09 +08:00
9760aa23d7 Merge branch 'hotfix-v5.6.0-470-skip_crash' into 'release'
修复外部页面跳转偶发的 SimpleDrawee 初始化闪退

See merge request halo/android/assistant-android!217
2022-02-22 14:19:10 +08:00
6656676636 修复外部页面跳转偶发的 SimpleDrawee 初始化闪退 2022-02-22 14:15:49 +08:00
32549fc16f 处理 flutter 编译脚本依赖冲突问题 2022-02-22 12:20:07 +08:00
55d83d12bb Merge remote-tracking branch 'origin/dev' into dev 2022-02-22 11:36:20 +08:00
fd1e7f7f4c 处理SonarQube问题 2022-02-22 11:36:11 +08:00
lyr
0fc5a16f80 【光环助手V5.7.0】前端优化汇总2月第3周(6)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1728 2022-02-22 11:32:14 +08:00
4992845195 处理SonarQube问题 2022-02-22 11:25:24 +08:00
e9db55bcb6 修改sonarQube问题 2022-02-22 11:15:11 +08:00
11056df05e 【光环助手V5.7.0】自定义栏目优化(第二期)(0222测试 1~4, 6) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1694 2022-02-22 11:04:57 +08:00
lyr
ffd04b6f60 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码(补充2)https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-22 10:33:48 +08:00
abdbe601b4 修改游戏单选择默认封面弹窗点击换一批卡片位置闪烁问题 2022-02-22 10:17:23 +08:00
bca7e2e4cf Merge remote-tracking branch 'origin/release' into dev 2022-02-22 09:37:54 +08:00
fcdd78d668 Merge branch 'dev-5.7.0' into dev 2022-02-22 09:33:12 +08:00
09f1bdb915 Merge branch 'hotfix-v5.6.0-470_imageviewer' into 'release'
修复游戏详情打开大图动画异常

See merge request halo/android/assistant-android!216
2022-02-21 17:17:32 +08:00
8e5168005e 修复游戏详情打开大图动画异常 2022-02-21 17:06:10 +08:00
c210c3b286 【光环助手V5.7.0】游戏单功能优化(前端部分)(5) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696 2022-02-21 15:43:10 +08:00
9020022fdc Merge branch 'hotfix-v5.6.0-470_crash' into 'release'
修复跳转意见反馈闪退问题

See merge request halo/android/assistant-android!215
2022-02-21 15:41:39 +08:00
b13aede1d3 修复跳转意见反馈闪退问题 2022-02-21 15:40:55 +08:00
cca1f76b85 Merge branch 'feature-issues1694' into 'dev-5.7.0'
完成【光环助手V5.7.0】自定义栏目优化(第二期) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1694

See merge request halo/android/assistant-android!214
2022-02-21 15:27:06 +08:00
f667ef562e 完成【光环助手V5.7.0】自定义栏目优化(第二期) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1694
完成【光环助手V5.7.0】自定义栏目优化(第二期)(UI 逻辑部分) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1694
2022-02-21 15:25:57 +08:00
3565214e38 【光环助手V5.7.0】前端优化汇总2月第3周(9) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1728 2022-02-21 14:55:13 +08:00
8f11ad7d6c Merge remote-tracking branch 'origin/dev-5.7.0' into dev-5.7.0 2022-02-21 10:23:16 +08:00
4612f7452f 【光环助手V5.7.0】前端优化汇总2月第3周(8) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1728 2022-02-21 10:22:52 +08:00
lyr
2850789b29 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码(补充1)https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-21 10:09:24 +08:00
bf3dbb623d 修改首页重建后点击返回键闪退问题 2022-02-18 20:49:12 +08:00
9cb7cc8c07 Merge branch 'hotfix-v5.6.0-470-crash' into 'release'
修复首页页面因为内存不足回收时的闪退

See merge request halo/android/assistant-android!213
2022-02-18 17:00:56 +08:00
c7cfb7d7b7 修复首页页面因为内存不足回收时的闪退 2022-02-18 17:00:14 +08:00
018959aa03 【光环助手V5.7.0】前端优化汇总2月第3周(7,10,12) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1728 2022-02-18 16:41:10 +08:00
e64f87bc0c Merge branch 'hotfix-v5.6.0-470-fix_3th_party_login' into 'release'
修复微信绑定有机率触发的无响应问题

See merge request halo/android/assistant-android!212
2022-02-18 16:29:05 +08:00
891958c4d9 修复微信绑定有机率触发的无响应问题 2022-02-18 16:28:11 +08:00
f921ff6f4d 【光环助手V5.7.0】新社区6期-活动管理优化(后台)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1608 2022-02-18 14:35:03 +08:00
8a0809498a 移除无用 import 2022-02-18 11:31:19 +08:00
447e3f4421 Merge branch 'dev-5.7.0' of git.ghzs.com:halo/android/assistant-android into dev-5.7.0 2022-02-17 17:06:07 +08:00
e2172a6fe4 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码(补充1) https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-17 17:06:01 +08:00
ccf3e43dc1 Merge branch 'hotfix-v5.6.0-beta-crash' into 'release'
修复工具箱跳转意见反馈闪退

See merge request halo/android/assistant-android!211
2022-02-17 11:36:22 +08:00
218091e1be 修复工具箱跳转意见反馈闪退 2022-02-17 11:34:30 +08:00
lyr
ee1eafe5a1 【光环助手V5.7.0】前端优化汇总2月第3周(1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1728 2022-02-16 17:26:08 +08:00
lyr
79e95a8146 【光环助手V5.7.0】游戏单功能优化(前端部分)(4 提交遗漏文件) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696 2022-02-16 16:51:20 +08:00
lyr
3d05bad997 【光环助手V5.7.0】游戏单功能优化(前端部分)(4) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696 2022-02-16 16:50:27 +08:00
82f7efdc59 Merge branch 'release' into dev 2022-02-16 15:17:54 +08:00
25bc499245 更新 sentry 地址 2022-02-16 15:15:53 +08:00
09011ac18b 整理跳转工具箱代码 2022-02-16 14:59:23 +08:00
42a958a9cc Merge branch 'dev' into 'dev-5.7.0'
合并调整

See merge request halo/android/assistant-android!210
2022-02-16 10:08:37 +08:00
77e1df1bb0 Merge branch 'flutter-dev' into 'dev'
【光环助手V5.6.0】前端优化汇总12月第5周(0216UI调整) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672

See merge request halo/android/assistant-android!209
2022-02-16 10:05:37 +08:00
d77533a421 【光环助手V5.6.0】前端优化汇总12月第5周(0215UI测试问题) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-02-16 10:04:05 +08:00
e47e1d6747 【光环助手V5.6.0】前端优化汇总12月第5周(0216UI调整)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-02-16 09:31:08 +08:00
2922878163 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码(补充2) https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-15 17:04:59 +08:00
4608891a88 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码(补充1) https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-15 16:13:51 +08:00
8a6e0f45c7 Merge branch 'flutter-dev' into 'dev'
前端优化汇总12月第5周(02151505UI调整)

See merge request halo/android/assistant-android!208
2022-02-15 16:01:49 +08:00
e30f3269e8 Merge remote-tracking branch 'origin/flutter-dev' into flutter-dev 2022-02-15 15:46:13 +08:00
439710d5f3 【光环助手V5.6.0】前端优化汇总12月第5周(02151505UI调整)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-02-15 15:43:49 +08:00
de68d5e3f2 【光环助手V5.6.0】前端优化汇总12月第5周 (0127UI测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-02-15 14:47:42 +08:00
4643197fb4 【光环助手V5.6.0】前端优化汇总12月第5周(0215UI调整)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-02-15 12:07:29 +08:00
c1c63d82af 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码(补充1) https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-15 11:50:54 +08:00
b78eb5a268 Merge branch 'dev-5.7.0' of git.ghzs.com:halo/android/assistant-android into dev-5.7.0 2022-02-15 10:55:20 +08:00
f9361ab134 【光环助手V5.7.0】新社区6期-帖子发布页优化 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1692 2022-02-15 10:55:14 +08:00
efb6a07a13 【光环助手V5.7.0】光环助手UI组件库(第3期)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1698 2022-02-14 14:55:06 +08:00
6b0bacc018 整理游戏详情详情 tab 代码 2022-02-14 10:56:42 +08:00
c368148bfc Merge branch 'flutter-dev' into 'dev'
【客户端内部需求】使用 flutter 实现反馈详情页面(修复mumu模拟器闪退问题)

See merge request halo/android/assistant-android!207
2022-02-14 10:28:39 +08:00
d43f7240b8 【光环助手5.6.0】【客户端内部需求】使用 flutter 实现反馈详情页面(修复mumu模拟器闪退问题)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1684 2022-02-11 18:31:49 +08:00
9f2f0734ff 移除游戏详情详情 tab 使用的 databinding 代码 2022-02-11 15:04:13 +08:00
lyr
5d54fbde39 修复 WorkManager 失效的问题 https://git.shanqu.cc/halo/android/assistant-android/-/issues/57 2022-02-11 14:40:53 +08:00
93bfbe9c36 修复游戏单CardView在模拟器上不显示的问题 2022-02-11 10:58:49 +08:00
5e9e5c1892 【光环助手V5.7.0】游戏单功能优化(前端部分)(3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696 2022-02-11 10:04:55 +08:00
8c607ae05a 更新 sentry 地址 2022-02-10 18:14:08 +08:00
ee3c431ef6 【光环助手V5.7.0】游戏单功能优化(前端部分)(3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1696#note_134703 2022-02-10 17:58:54 +08:00
804f9ee111 Merge branch 'flutter-dev' into 'dev'
修复 flutter 端的问题

See merge request halo/android/assistant-android!206
2022-02-10 17:22:54 +08:00
d343519e19 Merge branch 'flutter-release' into 'release'
处理 flutter 状态栏显示异常

See merge request halo/android/assistant-android!205
2022-02-10 17:20:55 +08:00
ce43cb6226 处理 flutter 状态栏显示异常 2022-02-10 17:20:55 +08:00
08b281c428 【光环助手V5.4.0】客户端内部需求(弹窗阴影修复)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1567 2022-02-10 17:06:42 +08:00
6b3079343e 【光环助手V5.6.0】前端优化汇总12月第5周(0127UI测试BUG修复)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-02-10 17:02:02 +08:00
d4baa0b4d8 整理游戏详情详情 tab 代码 2022-02-10 15:31:13 +08:00
70b411a946 Merge branch 'feature-upgrade_targetSdk_28' into 'dev-5.7.0'
将 TargetSdk 升级到 28

See merge request halo/android/assistant-android!204
2022-02-10 11:38:27 +08:00
c7d670d50c 处理 AppManager 获取最上层页面异常 2022-02-10 10:08:27 +08:00
0e3189404e 将 TargetSdk 升级到 28 https://git.shanqu.cc/halo/android/assistant-android/-/issues/56 2022-02-10 09:28:15 +08:00
d95b2eccaf Merge remote-tracking branch 'origin/dev' into dev-5.7.0 2022-02-09 16:55:32 +08:00
1d7903ad02 Merge branch 'flutter-dev' into 'dev'
使用 flutter 实现反馈详情页面(修复0209测试反馈的BUG)

See merge request halo/android/assistant-android!203
2022-02-09 16:52:44 +08:00
31bae10c28 【光环助手5.6.0】【客户端内部需求】使用 flutter 实现反馈详情页面(修复0209测试反馈的BUG)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1684 2022-02-09 16:04:52 +08:00
3081d99e12 Merge branch 'flutter-dev' into 'dev'
使用 flutter 实现反馈详情页面(修复0208-1013测试的BUG)

See merge request halo/android/assistant-android!202
2022-02-08 18:23:18 +08:00
ac8525f4e1 Merge branch 'dev' into flutter-dev 2022-02-08 18:16:00 +08:00
f921ee35fe 【光环助手5.6.0】【客户端内部需求】使用 flutter 实现反馈详情页面(修复0208-1013测试的BUG)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1684 2022-02-08 18:04:45 +08:00
3c9f44bda0 【光环助手5.6.0】【客户端内部需求】使用 flutter 实现反馈详情页面(修复0208-1013测试的BUG)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1684 2022-02-08 18:02:30 +08:00
381b4f4e3b 修复测试包无法选择接口环境的问题 2022-02-08 17:38:36 +08:00
7defa40be5 修复首页列表分页加载完成时闪烁的问题 2022-02-08 17:18:26 +08:00
02a0a9aaee 修复一些数组越界和无应用响应闪退 2022-02-08 14:47:22 +08:00
4f4097a7a9 版本更新至 5.7.0 2022-02-08 10:50:38 +08:00
098639042b Merge branch 'feature-refactor_view_binding' into 'dev-5.7.0'
使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics

See merge request halo/android/assistant-android!201
2022-02-08 10:49:18 +08:00
lyr
3a9bc99f07 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码 https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-08 10:30:17 +08:00
37e1a18349 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码 https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-08 10:30:17 +08:00
3aa387a72a 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码 https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-08 10:29:19 +08:00
52cfa3def9 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码 https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-08 10:26:31 +08:00
506b3effdc 使用 ViewBinding 替换 ButterKnife/DataBinding/KotterKnife/Synthetics View 获取代码 https://git.shanqu.cc/halo/android/assistant-android/-/issues/55 2022-02-08 10:26:31 +08:00
9da9f118c9 Merge remote-tracking branch 'origin/dev' into dev 2022-02-08 10:12:37 +08:00
86e5995c8a Merge branch 'flutter-dev' into 'dev'
使用 flutter 实现反馈详情页面(BUG修复)

See merge request halo/android/assistant-android!200
2022-02-08 10:11:58 +08:00
cb2603d057 修复游戏搜索遇到特殊字符显示网络异常的问题 2022-02-08 09:46:35 +08:00
e6d70f23fa 【光环助手5.6.0】【客户端内部需求】使用 flutter 实现反馈详情页面(BUG修复)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1684 2022-01-29 15:29:51 +08:00
22427d0fa5 修复资讯-评论详情大图渐出动画异常 2022-01-27 18:06:01 +08:00
9459e7ca07 添加背景模糊度变更的事件埋点 2022-01-27 17:45:55 +08:00
fab7dffed0 添加EmojiUtils工具类 2022-01-27 14:25:05 +08:00
61f6e595f2 【光环助手V5.6.0】前端优化汇总12月第5周(0120UI测试、0124UI测试)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-26 19:49:57 +08:00
22f4c97314 Merge branch 'flutter-dev' into 'dev'
【光环助手V5.6.0】前端优化汇总12月第5周(0119UI测试) pm/halo-app-issues#1672

See merge request halo/android/assistant-android!199
2022-01-26 19:05:16 +08:00
6d7dbed929 Merge branch 'dev' into flutter-dev 2022-01-26 19:04:55 +08:00
22f7021ab4 【光环助手V5.6.0】前端优化汇总12月第5周(0119UI测试)[pm/halo-app-issues#1672](https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672) 2022-01-26 18:59:15 +08:00
075359ef5e 【光环助手V5.6.0】前端优化汇总12月第5周(0119UI测试) 2022-01-26 18:51:24 +08:00
dacb7e3dd6 处理 Sonarqube 异常 2022-01-26 15:36:23 +08:00
267e9f3ccc 移除无用配置 2022-01-26 15:36:23 +08:00
178865af03 Merge remote-tracking branch 'origin/dev' into dev 2022-01-26 15:31:13 +08:00
f8864b8303 修复论坛帖子列表打开大图数组越界的问题
修复帖子回复图片渐出动画异常
2022-01-26 15:25:06 +08:00
94c31916cf 移除正式包中的测试代码 2022-01-26 15:08:49 +08:00
b9b82ec3d2 Merge branch 'flutter-release' into 'release'
feature flutter

See merge request halo/android/assistant-android!198
2022-01-26 09:19:11 +08:00
ed400b7ee0 feature flutter
1.修复原生Fresco动图失效问题 
2.优化init.flutter.gradle 
3.修复flutter_fresco空赋值报错问题 
4.移除flutter根路由测试代码
2022-01-26 09:19:11 +08:00
fb653b66d1 Updated 更新Flutter模块 2022-01-25 19:47:37 +08:00
e92253eeb6 Merge branch 'dev' into flutter-dev 2022-01-25 19:44:51 +08:00
3c0f8be6ca Updated 更新Flutter模块和LGLibrary模块代码 2022-01-25 19:42:47 +08:00
46ea2f9862 Merge remote-tracking branch 'origin/flutter-dev' into flutter-dev 2022-01-25 18:47:28 +08:00
e8626221b0 移除包体无用的 Mta 代码 2022-01-25 18:10:53 +08:00
09d7ffbf0a Updated 更新Flutter模块分支代码 2022-01-25 17:52:11 +08:00
791aa46586 Updated 优化init.flutter.gradle
Updated 支持Flutter传入gameId进入游戏详情页面
2022-01-25 17:49:56 +08:00
e0f9416a1f 修复选择图片页面图片排序异常问题 2022-01-25 14:40:14 +08:00
0b4acba116 修复图片选择切换文件夹后失效的问题 2022-01-25 14:39:22 +08:00
aa9df23d18 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2022-01-24 20:24:51 +08:00
e3e44f0b19 修改个性背景预览页不能预览问题 2022-01-24 20:24:34 +08:00
1bbea7bd75 【光环助手V5.6.0】前端优化汇总12月第5周 0124UI测试 1 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672
【光环助手V5.6.0】前端优化汇总12月第5周 0124UI测试 1 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672
2022-01-24 19:59:10 +08:00
31daffa123 Merge remote-tracking branch 'origin/dev' into dev 2022-01-24 19:48:16 +08:00
e91c32c5e7 【光环助手V5.6.0】前端优化汇总12月第5周 0124UI测试 2 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-24 19:48:06 +08:00
15bb6a722d 修改浏览记录-帖子点击编辑、取消图片闪烁问题 2022-01-24 19:47:37 +08:00
16a187f7d0 【光环助手V5.6.0】前端优化汇总12月第5周(0124UI测试1,3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-24 18:44:25 +08:00
aaddcbc67a 1.修改游戏动态标题未居中问题 2.修改游戏动态背景颜色 2022-01-21 16:29:54 +08:00
5476dd443c 处理合并冲突 2022-01-21 16:15:32 +08:00
3ab52cadd5 Merge branch 'release' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java
#	app/src/main/java/com/gh/gamecenter/history/HistoryWrapperFragment.kt
#	assistant_flutter
#	dependencies.gradle
2022-01-21 16:03:27 +08:00
6f7374c479 版本更新到 5.5.7-458 2022-01-21 15:53:29 +08:00
7e296ae7ab Merge branch 'hotfix-v5.5.7-457-article_comment' into 'release'
修改帖子评论复用问题

See merge request halo/android/assistant-android!197
2022-01-21 15:46:39 +08:00
f5a985b221 修改帖子评论复用问题 2022-01-21 15:16:50 +08:00
72e061b344 【光环助手V5.6.0】前端优化汇总12月第5周(0120UI测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-21 12:06:46 +08:00
a08e6d5ad8 优化首页游戏单组件滑动性能 2022-01-21 10:12:49 +08:00
f719ec10a7 版本更新至 5.5.7 2022-01-21 10:10:23 +08:00
b680d723b1 Merge branch 'hotfix-v5.6.6-456-wrong_so_crash' into 'release'
修复部分 5.1.1 设备加载错误 so 的问题

See merge request halo/android/assistant-android!196
2022-01-21 10:07:23 +08:00
0cf410c768 修复部分 5.1.1 设备加载错误 so 的问题 2022-01-21 10:04:23 +08:00
be84693610 处理SonarQube问题 2022-01-20 11:45:11 +08:00
047b80e0d8 【光环助手V5.6.0】前端优化汇总12月第5周(0119UI测试) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-20 11:00:20 +08:00
3c255a7119 Merge branch 'hotfix_5.5.6-456-crashes' into 'release'
修复sentry一些闪退问题

See merge request halo/android/assistant-android!195
2022-01-20 10:40:35 +08:00
d9c5c7ffc4 修复WebActivity关闭Dialog闪退
修复首页游戏单安利墙组件闪退问题
2022-01-20 10:36:08 +08:00
a61b621ceb 【光环助手V5.6.0】游戏预约功能(第四期)(0119测试:2) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1637 2022-01-20 09:47:31 +08:00
90ca311205 处理SonarQube问题 2022-01-19 17:55:17 +08:00
e466d1feeb 调整 FlutterBoost 的初始化时机 2022-01-19 17:46:37 +08:00
e594703f8f Merge branch 'flutter-release' into 'release'
调整 FlutterBoost 的初始化时机

See merge request halo/android/assistant-android!194
2022-01-19 17:39:09 +08:00
cd98550183 调整 FlutterBoost 的初始化时机 2022-01-19 17:37:54 +08:00
60dbb7e11a 优化首页游戏单组件代码
处理部分SonarQube问题
2022-01-19 16:55:06 +08:00
e6cbcd385a 【光环助手V5.6.0】游戏预约功能(第四期)(埋点) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1637 2022-01-19 16:16:33 +08:00
e1f9c4984d Merge branch 'cherry-pick-89999315' into 'dev'
【光环助手5.6.0】活动跳转链接优化 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1682#note_132656

See merge request halo/android/assistant-android!193
2022-01-19 12:34:29 +08:00
lyr
039ee400ff 【光环助手5.6.0】活动跳转链接优化 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1682#note_132656
(cherry picked from commit 8999931517f55f819b3da7f854bd93a7e7d0c6ca)
2022-01-19 12:34:15 +08:00
d376f7291c 【光环助手V5.6.0】前端优化汇总12月第5周(0118UI测试问题) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-19 11:47:17 +08:00
76402b7bcf 修改工具箱版块分割线 2022-01-19 11:35:06 +08:00
c2cbfad51f 版本更新至 5.5.6 2022-01-19 11:29:56 +08:00
9848c3d07e Merge branch 'hotfix_5.5.5-455-forced_static_image_on_buggy_device' into 'release'
在特殊设备上禁用动图

See merge request halo/android/assistant-android!192
2022-01-19 10:59:41 +08:00
84a2d9cdba 在特殊设备上禁用动图 2022-01-19 10:59:41 +08:00
f2438f80e0 Merge branch 'flutter-release' into 'release'
issue 1567

See merge request halo/android/assistant-android!191
2022-01-18 17:37:15 +08:00
824d8897aa issue 1567 2022-01-18 17:37:15 +08:00
2c432348fe Merge branch 'flutter-dev' into 'dev'
issue 1567

See merge request halo/android/assistant-android!190
2022-01-18 17:31:22 +08:00
b764eb472c Fixed 修复Flutter页面横屏问题
Fixed 修复我的关注页面游戏名称带“.”问题
2022-01-18 17:15:28 +08:00
1d4333ffe4 Merge branch 'hotfix-v5.5.4-454-fix_launch_type' into 'release'
修复启动类型上报异常问题

See merge request halo/android/assistant-android!188
2022-01-18 15:12:10 +08:00
337bbe7ec3 修复启动类型上报异常问题 2022-01-18 15:11:16 +08:00
fd482f32f0 Merge branch 'hotfix-v5.5.4-454-argument_error' into 'release'
修改我的收藏、历史记录页面参数传递错误

See merge request halo/android/assistant-android!187
2022-01-18 14:05:45 +08:00
755e4f24ff 修改我的收藏、历史记录页面参数传递错误 2022-01-18 12:11:16 +08:00
9d27eaef7d Merge branch 'feature-flutter-game-comments' into 'dev'
Feature flutter game comments

See merge request halo/android/assistant-android!186
2022-01-18 10:40:58 +08:00
b0d4021212 Feature Flutter反馈详情 2022-01-18 10:40:58 +08:00
2f1137b97b Merge branch 'hotfix-v5.5.4-454-generic_crash' into 'release'
Hotfix v5.5.4 454 generic crash

See merge request halo/android/assistant-android!185
2022-01-18 10:21:36 +08:00
78541a56f8 调整包被篡改后的闪退提示弹窗 2022-01-18 10:18:29 +08:00
7d9a0d3308 尝试修复 Fresco 未能被正常初始化的问题 2022-01-18 10:18:29 +08:00
0c6ace909e 处理 Sonar 代码问题 2022-01-18 10:15:30 +08:00
8afba620f8 【光环助手V5.6.0】游戏预约功能(第四期)(0117测试:2,3,4) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1637 2022-01-18 10:08:24 +08:00
5bef19fac2 Merge branch 'hotfix-v5.5.4-454-generic_crash' into 'release'
修复 5.5.4 的一些闪退

See merge request halo/android/assistant-android!184
2022-01-18 09:25:08 +08:00
beb1c95a2b 修复 5.5.4 的一些闪退
1. 捕抓选择图片上传时的异常
2. 捕抓骨架图在老旧 oppo 设备上的夜间模式闪退
2022-01-18 09:25:08 +08:00
ec5865fa69 【光环助手V5.6.0】工具箱集合页优化(UI反馈2)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1640 2022-01-17 18:22:55 +08:00
4bd2d0aff7 Merge branch 'hotfix-v5.5.4-454-generic_crash' into 'release'
修复一些闪退

See merge request halo/android/assistant-android!183
2022-01-17 17:58:17 +08:00
ca73e267d8 Merge branch 'hotfix-v5.5.4-454-crashes' into 'release'
修改sentry上一些闪退问题

See merge request halo/android/assistant-android!182
2022-01-17 17:57:28 +08:00
628b91eed8 修复一些闪退
1. 修复未成年弹窗偶发的闪退
2. 捕抓富文本点击闪退
3. 修复首页轮播图偶发的数组越界闪退
2022-01-17 17:56:36 +08:00
878deba341 【光环助手V5.6.0】工具箱集合页优化(UI反馈1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1640 2022-01-17 17:47:53 +08:00
1376a787dd 【光环助手V5.6.0】工具箱集合页优化(20220117测试反馈2)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1640 2022-01-17 17:06:07 +08:00
9c56b67dcc 1.修改帖子详情闪退问题
2.修改视频贴评论页还未显示出来点击评论闪退问题
3.修改视频帖信息展开功能闪退问题
2022-01-17 16:36:07 +08:00
f4e7c9acc5 Merge branch 'hotfix-v5.5.4-454-my_game_activity_crash' into 'release'
修复我的游戏页显示右上角引导图导致的闪退问题

See merge request halo/android/assistant-android!181
2022-01-17 16:26:52 +08:00
lyr
0a94a27331 修复我的游戏页显示右上角引导图导致的闪退问题 2022-01-17 16:24:21 +08:00
21230d17fb 【光环助手V5.6.0】工具箱集合页优化(20220117测试反馈1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1640 2022-01-17 15:47:17 +08:00
b12d9528c1 更改emoji4j库bug并上传私有nexus 2022-01-17 15:11:13 +08:00
2127356240 【光环助手V5.6.0】前端优化汇总12月第5周(3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-17 14:25:25 +08:00
ce677b13a0 【光环助手V5.6.0】前端优化汇总12月第5周(3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-17 10:57:31 +08:00
62d6ea002d 版本更新至 5.5.5 2022-01-17 10:02:06 +08:00
e0aa84c877 Merge branch 'hotfix-v5.5.4-454-fix_wrong_so_loaded' into 'release'
尝试修复 VIVO 和 OPPO 设备加载错误 SO 的问题

See merge request halo/android/assistant-android!180
2022-01-17 10:00:57 +08:00
25f4c027bf 尝试修复 VIVO 和 OPPO 设备加载错误 SO 的问题 2022-01-17 09:59:08 +08:00
10d7bc56b1 替换微信绑定正式环境链接 2022-01-17 09:27:51 +08:00
59006ad921 Merge branch 'feature-issues1637' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt
2022-01-14 10:55:43 +08:00
a821915a1a 【光环助手V5.6.0】游戏预约功能(第四期)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1637 2022-01-14 10:49:26 +08:00
4a91d0db53 Update .gitlab-ci.yml 2022-01-13 17:23:20 +08:00
984fca183f 处理合并冲突 2022-01-13 17:21:45 +08:00
fc1710f3b9 Merge remote-tracking branch 'origin/dev-5.6.0' into dev
# Conflicts:
#	app/src/main/java/com/gh/common/util/DownloadObserver.kt
#	app/src/main/java/com/gh/common/util/EnvHelper.kt
#	app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java
#	app/src/main/java/com/gh/gamecenter/collection/GamesCollectionAdapter.kt
#	app/src/main/java/com/gh/gamecenter/collection/GamesCollectionFragment.kt
#	app/src/main/java/com/gh/gamecenter/download/NewInstalledGameFragment.kt
#	app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt
#	app/src/main/java/com/gh/gamecenter/game/rank/RankCollectionAdapter.kt
#	app/src/main/java/com/gh/gamecenter/manager/DataCollectionManager.java
#	app/src/main/java/com/gh/gamecenter/message/MessageItemViewHolder.java
#	app/src/main/java/com/gh/gamecenter/retrofit/RetrofitManager.java
#	app/src/main/java/com/halo/assistant/HaloApp.java
#	dependencies.gradle
2022-01-13 16:59:12 +08:00
56f817bb7a Merge branch 'dev' into 'release'
修复下载管理sentry问题

See merge request halo/android/assistant-android!179
2022-01-13 14:43:54 +08:00
70a939b2b6 处理部分 SonarQube 问题 2022-01-13 11:36:38 +08:00
c7f7804b52 Merge branch 'dev-5.6.0' of git.ghzs.com:halo/android/assistant-android into dev-5.6.0 2022-01-13 11:06:47 +08:00
d3494774a3 修改创建游戏单输入文字闪退问题 2022-01-13 11:06:30 +08:00
1b976106e4 尝试修复下载管理游戏更新列表数组越界闪退 2022-01-13 11:02:16 +08:00
10a81255a6 Merge dev-5.6.0 into dev-5.6.0 2022-01-13 10:50:13 +08:00
4eaa55cf78 apksig 调整为外部依赖 2022-01-13 10:46:46 +08:00
0e3ab3c3a7 Merge branch 'hotfix-v5.5.3-453-crash' into 'release'
修改sentry上闪退问题

See merge request halo/android/assistant-android!178
2022-01-13 09:10:53 +08:00
948588b874 1.修改外部浏览器跳转app闪退问题 2.修改帖子详情空指针问题 2022-01-12 19:55:10 +08:00
095139079e 修复下载管理已安装列表空指针闪退 尝试修复数组越界闪退 2022-01-12 17:40:16 +08:00
42c553b9d3 优化创建游戏单一个emoji表情只算作1个字符 2022-01-12 15:31:22 +08:00
aedd766d7d 启动弹窗图片不加入到内存缓存中 2022-01-12 15:03:00 +08:00
228ab0ca40 Merge branch 'hotfix-v5.5.3-453-room_crash' into 'release'
尝试处理数据库的CursorWindowAllocationException异常

See merge request halo/android/assistant-android!176
2022-01-12 14:11:06 +08:00
fdcb7cbbf7 Merge branch 'hotfix-v5.5.3-453-optimizate' into 'release'
修复游戏单、搜索论坛问题

See merge request halo/android/assistant-android!175
2022-01-12 11:21:38 +08:00
933f46e250 1.修改游戏单选择游戏列表复用问题
2.修改论坛搜索页热门论坛超过20个闪退问题
2022-01-12 11:08:44 +08:00
2282787bd7 Merge branch 'hotfix-v5.5.3-453-wrong_so_crash' into 'release'
再次启用 64 位 SO, 尝试修复部分 5.0 & 5.1 设备依旧读取错误图片 SO 的问题

See merge request halo/android/assistant-android!174
2022-01-12 10:52:08 +08:00
c4d3698a9b 再次启用 64 位 SO, 尝试修复部分 5.0 & 5.1 设备依旧读取错误图片 SO 的问题 2022-01-12 10:50:29 +08:00
80cc86a791 尝试处理数据库的CursorWindowAllocationException异常 2022-01-12 10:30:38 +08:00
3646672849 版本更新至 5.5.4 2022-01-11 17:26:15 +08:00
9a4c8f1f06 Merge branch 'dev' into 'release'
合并 5.5.0 游戏单活动

See merge request halo/android/assistant-android!173
2022-01-11 17:16:39 +08:00
4eba721461 调整下载进度更新方法入参 2022-01-11 16:04:09 +08:00
eeafcde6e9 修复游戏卡片快速更新时出现重复标签的问题 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1680 2022-01-11 16:03:11 +08:00
0255fdbe33 处理游戏搜索页直接读取数据库引起的无响应问题 2022-01-11 14:08:15 +08:00
ce303b37b7 修复下载管理已安装列表在安装/卸载游戏后的显示异常 2022-01-10 17:50:39 +08:00
lyr
84cd49478a 优化页面重建后的显示(5、6)https://git.shanqu.cc/halo/android/assistant-android/-/issues/54 2022-01-10 17:14:30 +08:00
0ed92483f6 修复快速来回滑动时首页榜单卡片可能闪退的问题 2022-01-07 16:37:13 +08:00
83f22c2874 优化页面重建后的显示(1) https://git.shanqu.cc/halo/android/assistant-android/-/issues/54 2022-01-07 16:26:39 +08:00
c4f6d00540 修改页面重建后没有及时刷新用户数据问题 2022-01-07 15:54:30 +08:00
6af60df87c 优化页面重建后的显示(4) https://git.shanqu.cc/halo/android/assistant-android/-/issues/54 2022-01-07 15:00:50 +08:00
d4ffa6116d 优化页面重建后的显示(2,3) https://git.shanqu.cc/halo/android/assistant-android/-/issues/54 2022-01-07 14:49:37 +08:00
dab2d40ba4 处理部分 SonarQube 问题 2022-01-07 11:58:20 +08:00
f45f29aa43 修复安利墙页面重建会闪退的问题 2022-01-07 10:17:00 +08:00
lyr
f793469dce 修复开服表页面闪退问题 2022-01-06 19:06:55 +08:00
06ced1c0d2 处理 SonarQube 问题 2022-01-06 18:32:44 +08:00
0ea396fa35 修复懒加载页面在页面重构时会显示空白的问题 2022-01-06 18:19:43 +08:00
1714b01b34 修复ImageViewerActivity单张图片渐出动画异常 2022-01-06 16:46:04 +08:00
ced132c07f Merge remote-tracking branch 'origin/dev-5.6.0' into dev-5.6.0 2022-01-06 16:28:06 +08:00
500e069139 优化 ImageViewerActivity 代码及渐出动画 https://git.shanqu.cc/halo/android/assistant-android/-/issues/52 2022-01-06 16:25:56 +08:00
lyr
2bf896aa3f 【光环助手V5.6.0】前端优化汇总12月第5周(2、7(1))https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-06 14:45:11 +08:00
9168cfc928 我的光环相关页面列表去掉分隔条用线条代替 2022-01-06 10:33:03 +08:00
0bbffb20cd Merge branch 'release' into 'dev'
Merge hotfix from release

See merge request halo/android/assistant-android!172
2022-01-05 11:49:50 +08:00
lyr
18a28254fb 【光环助手V5.6.0】前端优化汇总12月第5周(5)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-05 11:22:28 +08:00
415626ef58 版本更新至 5.5.3 2022-01-04 16:25:03 +08:00
e9ad25dc36 Merge branch 'hotfix-v5.5.2-452-realname_compat_layout' into 'release'
处理实名页面在小屏设备上的显示问题

See merge request halo/android/assistant-android!171
2022-01-04 15:44:48 +08:00
92215163bf 处理实名页面在小屏设备上的显示问题 2022-01-04 15:44:06 +08:00
b3ffe61376 Merge branch 'hotfix-v5.5.2-452-select_id_image_crash' into 'release'
修复部分设备在实名认证人工审核选择图片时的闪退问题

See merge request halo/android/assistant-android!170
2022-01-04 11:28:51 +08:00
8e6048883a 修复部分设备在实名认证人工审核选择图片时的闪退问题 2022-01-04 11:27:50 +08:00
532e40efc3 Merge branch 'hotfix-v5.5.2-452-meizu_skeleton_crash' into 'release'
捕抓骨架图在魅族设备上的闪退

See merge request halo/android/assistant-android!169
2022-01-04 10:52:12 +08:00
b775083437 捕抓骨架图在魅族设备上的闪退 2022-01-04 10:51:09 +08:00
e4b4270731 【光环助手V5.6.0】前端优化汇总12月第5周(3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-04 09:53:51 +08:00
bf0f551768 【光环助手V5.6.0】前端优化汇总12月第5周(4) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2022-01-02 16:09:59 +08:00
213ccd86c0 【光环助手V5.6.0】前端优化汇总12月第5周(4,6) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1672 2021-12-31 18:21:13 +08:00
lyr
fc5de50f61 【光环助手V5.5.0】游戏单活动:解锁好游种草新姿势(1230测试 7)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1638#note_130160 2021-12-31 16:43:59 +08:00
lyr
b896af2a15 【光环助手V5.5.0】游戏单活动:解锁好游种草新姿势(完善"url参数增加是否可以由web端处理返回键")https://git.shanqu.cc/pm/halo-app-issues/-/issues/1638#note_129888 2021-12-30 19:10:10 +08:00
lyr
93ba447192 【光环助手V5.5.0】游戏单活动:解锁好游种草新姿势(url参数增加是否可以由web端处理返回键)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1638 2021-12-30 16:56:15 +08:00
dd8cc3c744 优化 ImageViewerActivity 代码及渐出动画 https://git.shanqu.cc/halo/android/assistant-android/-/issues/52 2021-12-30 16:47:18 +08:00
064b041d28 版本更新至 5.5.2 2021-12-30 09:28:33 +08:00
a131aca047 Merge branch 'hotfix-v5.5.1-451-installed_crash' into 'release'
修复下载管理已安装列表的空列表闪退问题

See merge request halo/android/assistant-android!168
2021-12-30 09:27:32 +08:00
ad9b39a94a 修复下载管理已安装列表的空列表闪退问题 2021-12-30 09:25:22 +08:00
lyr
c3cf93eaee 【光环助手V5.5.0】游戏单活动:解锁好游种草新姿势(更新递增任务进度接口)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1638#note_129888 2021-12-29 18:32:32 +08:00
b83f98e90c Merge branch 'hotfix-v5.5.1-451-community_home_crash' into 'release'
修复首页-社区Tab重建后页面空白问题以及按返回键闪退问题

See merge request halo/android/assistant-android!167
2021-12-29 17:48:39 +08:00
lyr
5e4c451ccd 修复首页-社区Tab重建后页面空白问题以及按返回键闪退问题 2021-12-29 17:47:12 +08:00
ab5e0136a7 Merge branch 'hotfix-v5.5.1-451-forum_crash' into 'release'
修复论坛详情页面重建后闪退问题

See merge request halo/android/assistant-android!166
2021-12-29 16:40:04 +08:00
89ca11bb81 修复论坛详情页面重建后闪退问题 2021-12-29 16:40:03 +08:00
f220b2fd43 Merge branch 'hotfix-v5.5.1-451-recyclerview_crash' into 'release'
尝试修复下载管理更新页面列表闪退

See merge request halo/android/assistant-android!165
2021-12-29 15:02:19 +08:00
28d99cbe38 尝试修复下载管理更新页面列表闪退 2021-12-29 14:59:08 +08:00
9c2130562b Merge branch 'hotfix-v5.5.1-451-log_anr' into 'release'
处理部分因为日志上报造成的无响应问题

See merge request halo/android/assistant-android!164
2021-12-29 10:58:39 +08:00
d242aca942 处理部分因为日志上报造成的无响应问题 2021-12-29 10:56:39 +08:00
a341dcf0b7 Merge branch 'hotfix-v5.5.1-451-comment_detail' into 'release'
修改游戏/新闻评论详情评论输入框显示异常

See merge request halo/android/assistant-android!163
2021-12-28 18:05:03 +08:00
8a1c7ed5a0 修改游戏/新闻评论详情评论输入框显示异常 2021-12-28 17:49:17 +08:00
1e0a3e9881 处理 SonarQube Code Smell 2021-12-28 16:52:38 +08:00
d76d430672 Merge branch 'hotfix-v5.5.1-451-message_center' into 'release'
修改点赞游戏单评论回复消息跳转错误

See merge request halo/android/assistant-android!162
2021-12-28 16:50:03 +08:00
32034473ac 修改点赞游戏单评论回复消息跳转错误 2021-12-28 16:16:31 +08:00
383d349b3a 测试包测试预执行 dex2oat 2021-12-28 15:57:04 +08:00
e036f2e602 处理工具箱集合页相关SonarQube问题 2021-12-28 14:31:18 +08:00
c73b70b7e7 处理工具箱集合页相关SonarQube问题 2021-12-28 11:30:07 +08:00
d105f2a175 优化 ImageViewerActivity 代码及渐出动画 https://git.shanqu.cc/halo/android/assistant-android/-/issues/52 2021-12-28 10:18:12 +08:00
cf1dc4e4f1 版本更新至 5.5.1 2021-12-27 18:31:09 +08:00
1d9a877f59 Merge branch 'hotfix-v5.5.0-450-installed_game' into 'release'
修复已安装游戏列表空指针

See merge request halo/android/assistant-android!161
2021-12-27 18:29:27 +08:00
772226fb1a Merge branch 'hotfix-v5.5.0-450-generic_crash' into 'release'
处理闪退

See merge request halo/android/assistant-android!160
2021-12-27 18:26:57 +08:00
fe62dee207 Merge branch 'hotfix-v5.5.0-450-multiple_download_complete_event' into 'release'
临时处理因为优化性能而引起的重复触发下载完成事件的问题

See merge request halo/android/assistant-android!159
2021-12-27 18:25:52 +08:00
37309918dd 临时处理因为优化性能而引起的重复触发下载完成事件的问题 2021-12-27 18:25:11 +08:00
7f8e853657 Merge branch 'hotfix-v5.5.0-450-image_so_crash' into 'release'
去除 arm64-v8a

See merge request halo/android/assistant-android!158
2021-12-27 15:19:08 +08:00
006a8a523e 去除 arm64-v8a 2021-12-27 15:18:20 +08:00
8e497122f2 Merge branch 'hotfix-v5.5.0-450-build_script' into 'release'
处理 sentry 插件编译问题

See merge request halo/android/assistant-android!157
2021-12-27 11:10:36 +08:00
33d5353f75 处理 sentry 插件编译问题 2021-12-27 11:08:41 +08:00
6da3d46d71 Merge branch 'feature-issues1638' into 'dev'
【光环助手V5.5.0】游戏单活动:解锁好游种草新姿势(客户端部分)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1638

See merge request halo/android/assistant-android!156
2021-12-27 11:07:31 +08:00
a26e61ae4b 【光环助手V5.5.0】游戏单活动:解锁好游种草新姿势(客户端部分)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1638 2021-12-27 11:07:31 +08:00
c3d347bffe - 捕抓已收录游戏列表类型异常
- 修复无内容查看大图时的闪退问题
2021-12-27 11:02:00 +08:00
39cc7e98a8 Merge branch 'hotfix-v5.5.0-450-rank_list_crash' into 'release'
捕抓首页排行榜列表数组越界异常

See merge request halo/android/assistant-android!155
2021-12-27 10:34:59 +08:00
2a4e500893 捕抓首页排行榜列表数组越界异常 2021-12-27 10:32:25 +08:00
d6e0cfd644 修复已安装游戏列表空指针 2021-12-27 10:29:56 +08:00
dbbcd29303 MOD限制规则(新)(修复重复安装不算更新的问题) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1646 2021-12-24 16:28:02 +08:00
f3a5f28236 MOD限制规则(新)(修复请求头异常的问题) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1646 2021-12-24 14:32:26 +08:00
bfae7143b1 MOD限制规则(新)(补充请求头) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1646 2021-12-24 11:55:58 +08:00
3ce733ab67 调整异步渲染 UI API,首页安利墙应用异步渲染 2021-12-24 11:02:04 +08:00
d6f75d6dd0 完成MOD限制规则(新) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1646 2021-12-23 18:14:02 +08:00
6f3ba952ab 优化首页滑动性能 2021-12-23 17:45:34 +08:00
4203fdfb72 【光环助手V5.6.0】工具箱集合页优化 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1640 2021-12-23 16:38:21 +08:00
fd9abc7619 【光环助手5.5.0】新社区运营验收问题(5,7) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1662 2021-12-23 09:43:19 +08:00
53a9f408e7 处理 SonarQube 问题
1. 移除冗余判断
2. 处理可空异常
3. 处理捕获 InteruptionException 的状态
4. 调整类是否一致的判断方式
2021-12-22 10:58:25 +08:00
4eba49b625 Merge branch 'feature-optimizate_gamedetail' into dev-5.6.0
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt
#	app/src/main/java/com/gh/gamecenter/servers/GameServersContentAdapter.kt
2021-12-22 09:49:10 +08:00
lyr
e3476f9956 【光环助手V5.5.0】同步正式环境后测试问题汇总(12(2))https://git.shanqu.cc/pm/halo-app-issues/-/issues/1656 2021-12-21 18:08:24 +08:00
aedb08ce5d 修改编辑游戏单获取详情数据错误问题 2021-12-21 17:33:40 +08:00
lyr
9feb4e774a 处理 SonarQube 问题:
双重检查锁方式实现的单例,改为使用静态内部类方式
2021-12-21 16:51:44 +08:00
9515676876 恢复 arm64 SO,5.0 & 5.1 设备禁用 fresco native 解码 2021-12-21 16:13:36 +08:00
e250f69d6b 整理游戏详情模块代码 https://git.shanqu.cc/halo/android/assistant-android/-/issues/53 2021-12-21 15:27:46 +08:00
4d4d2c91e2 完成国家实名认证系统接入 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1645 2021-12-21 15:16:18 +08:00
1283ec94de 【光环助手V5.5.0】同步正式环境后测试问题汇总(12(1)) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1656 2021-12-21 10:09:07 +08:00
lyr
27f14ac914 【光环助手V5.6.0】客服联系QQ更换(1.我的光环-设置-账号与安全-联系客服)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1648 2021-12-20 14:56:27 +08:00
lyr
4565819dd8 【光环助手V5.5.0】同步正式环境后测试问题汇总(游戏icon为动图的情况下不会显示白色边框)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1656#note_128656 2021-12-20 14:27:58 +08:00
fa5207855e 修改提交游戏单后我的游戏单页面没有刷新数据 2021-12-17 17:53:23 +08:00
7f586a042b 修改编辑游戏单游戏不足8个且未勾选仅自己可见提示错误问题 2021-12-17 17:12:46 +08:00
1adad849e0 【光环助手V5.5.0】同步正式环境后测试问题汇总(11) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1656 2021-12-17 16:26:50 +08:00
56b2983252 整理游戏详情模块代码 https://git.shanqu.cc/halo/android/assistant-android/-/issues/53 2021-12-17 16:07:16 +08:00
lyr
8b5e0edb88 处理 SonarQube 问题:
1.双重检查锁实现单例时增加使用volatile,以防止获取到未初始化完成的对象
2.对之前未在finally进行关闭资源的流操作,使用try-with-resources实现资源自动关闭
3.使用BigDecimal.valueOf(double)代替BigDecimal(double)
2021-12-16 19:01:06 +08:00
be17d3fc97 Update .gitlab-ci.yml 2021-12-16 16:55:24 +08:00
lyr
e898b8a7a4 【光环助手V5.5.0】新社区运营测试问题汇总(2)(第10点) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1636 2021-12-15 16:25:28 +08:00
831c698f8d 版本号更新至 5.6.0,全部接口请求添加 version 和 channel 请求头 2021-12-15 16:04:36 +08:00
76b8988597 Merge branch 'dev' into dev-5.6.0 2021-12-15 15:58:44 +08:00
34b46a6143 正式环境接口切换到 5.5.0 2021-12-15 15:06:34 +08:00
422cc5d396 处理代码合并异常 2021-12-15 15:06:09 +08:00
a048e00489 Merge remote-tracking branch 'origin/feature-issues1625' into dev
# Conflicts:
#	app/src/main/java/com/gh/common/util/UploadImageUtils.kt
#	app/src/main/java/com/halo/assistant/HaloApp.java
2021-12-15 11:29:33 +08:00
7dde4eca55 优化部分代码 2021-12-15 11:14:12 +08:00
e7af8840fd 处理一些代码错误 2021-12-15 10:01:54 +08:00
903276e5ed 修复没有后门的实名下载任务也会被有后门的任务触发的问题 2021-12-14 16:22:33 +08:00
43bdfc0605 优化字符串替换 2021-12-14 15:33:41 +08:00
3c2332d6f4 处理一些代码错误 2021-12-14 11:28:35 +08:00
e222f504f6 更新 flutter 打包脚本 2021-12-14 10:59:11 +08:00
86707ccc7d 更新 flutter 打包脚本 2021-12-14 10:47:25 +08:00
ed8c1a6b6c 更新 flutter 打包脚本 2021-12-14 10:43:55 +08:00
8179715f5b 移除本地过期的隐私政策网页文件 2021-12-14 10:28:58 +08:00
3ea293612d 添加 CI 配置 2021-12-14 09:55:14 +08:00
545bb6b47d Merge branch 'dev-5.5.0' into 'dev'
5.5.0 功能变更

See merge request halo/android/assistant-android!154
2021-12-14 09:22:35 +08:00
lyr
0b40894cda 【光环助手V5.5.0】前端优化汇总第一周(1213测试 1-3)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1617#note_127947 2021-12-13 20:35:44 +08:00
e6246314fd 修复热门游戏单组件内无法上下滑动的问题 2021-12-13 20:12:20 +08:00
2c23f03cc4 修改游戏单广场布局 2021-12-13 19:26:10 +08:00
91b9502d0b 修复游戏单广场列表下滑时偏移留白的问题 2021-12-13 17:24:36 +08:00
lyr
5bbe039e9f 【光环助手V5.5.0】游戏单功能测试汇总(1213测试 8)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1651 2021-12-13 16:45:02 +08:00
8be8fbee19 去除游戏单广场头图的视差的效果 2021-12-13 15:56:30 +08:00
2e5361f844 【光环助手V5.5.0】更换引导图 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1643 2021-12-13 14:49:36 +08:00
f4ecf28808 调整实名认证按钮样式 2021-12-13 11:13:53 +08:00
5dd88e30f8 发布视频贴添加防抖处理 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1641 2021-12-13 10:41:02 +08:00
0095c82edb 修复测试包的登录问题 2021-12-13 10:20:42 +08:00
b8260cada6 文字字号从固定值改成 dimens.xml中引用的值 2021-12-13 10:04:50 +08:00
39ec77faae 调整测试环境和正式环境切换的逻辑 2021-12-10 17:57:25 +08:00
lyr
5d4434eebd 修改游戏单详情顶部遮罩 2021-12-10 16:13:25 +08:00
553ab70d78 Merge remote-tracking branch 'origin/dev' into dev-5.5.0
# Conflicts:
#	app/build.gradle
#	app/src/main/java/com/gh/common/DefaultUrlHandler.kt
#	app/src/main/java/com/gh/common/util/DirectUtils.kt
#	app/src/main/java/com/gh/common/util/EntranceUtils.java
#	build.gradle
2021-12-10 15:19:25 +08:00
23bffe7c5e 处理榜单卡片游戏文字的显示问题 2021-12-10 15:05:33 +08:00
babc41a0cb 【光环助手V5.5.0】游戏单功能测试汇总(1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1651 2021-12-10 14:26:19 +08:00
a272033834 统一颜色取值 2021-12-10 11:55:45 +08:00
82ebdd3908 【光环助手V5.5.0】游戏单数据埋点(1209测试2-3)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1549 2021-12-10 10:18:24 +08:00
lyr
30cac9f86e 【光环助手V5.5.0】游戏单数据埋点(1209测试 1) 2021-12-09 19:00:34 +08:00
lyr
6f19a2b668 【光环助手V5.5.0】游戏单详情-玩家评论(1209测试 2)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1602#note_127599 2021-12-09 17:52:39 +08:00
lyr
9235c19475 【光环助手V5.5.0】游戏单-个人主页(1209测试 3)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1591#note_127565 2021-12-09 17:22:27 +08:00
lyr
79d9d05775 Merge remote-tracking branch 'origin/dev-5.5.0' into dev-5.5.0 2021-12-09 16:36:08 +08:00
lyr
2b816a5914 修改游戏单详情顶部遮罩 2021-12-09 16:36:03 +08:00
7d163f454e 【光环助手V5.5.0】游戏单广场(1209补充2)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1598
修改游戏单广场发布控件动效
修改游戏单卡片黑色渐变遮罩
删除选择标签刷新动画
2021-12-09 16:31:37 +08:00
b44b676a59 【光环助手V5.5.0】游戏单-社区相关(1209测试:1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1595 2021-12-09 15:33:39 +08:00
c71429750c 修改添加游戏搜索时提示信息的显示问题 2021-12-09 15:13:24 +08:00
a8c273f68a 【光环助手V5.5.0】前端优化汇总第六周(1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1650 2021-12-09 10:24:52 +08:00
2588999270 Merge remote-tracking branch 'origin/dev-5.5.0' into dev-5.5.0 2021-12-09 10:20:49 +08:00
99f7bd9192 【光环助手V5.5.0】游戏单 UI 修复(创建游戏单(2)选择标签)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1647 2021-12-09 10:20:37 +08:00
70419e412e 修改我的游戏单标签显示错误问题 2021-12-09 09:54:03 +08:00
df3df01327 修改热门游戏单跳转游戏单详情参数 2021-12-08 18:32:36 +08:00
lyr
4bdc051d34 【光环助手V5.5.0】游戏单详情-顶部区域/游戏列表(1208测试 1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1601#note_127384 2021-12-08 16:29:12 +08:00
575dab06f6 完成实名认证第四期优化(20211207UI测试反馈) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1625 2021-12-08 16:12:05 +08:00
lyr
78cc7b116a 【【光环助手V5.5.0】游戏单-个人主页(1206测试 2)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1591#note_126908 2021-12-08 15:15:05 +08:00
6ebc4f1f43 【光环助手V5.5.0】首页顶部tab-游戏单广场(1208测试1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1599 2021-12-08 15:09:52 +08:00
lyr
82bb0e26ec 【光环助手V5.5.0】游戏单 UI 修复(社区 - 发帖子 - 引用游戏单)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1647 2021-12-08 10:54:37 +08:00
lyr
6c4030c965 【光环助手V5.5.0】游戏单 UI 修复(游戏单介绍页)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1647 2021-12-07 17:41:17 +08:00
lyr
ba6d3746ab 【光环助手V5.5.0】游戏单 UI 修复(游戏单详情页)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1647 2021-12-07 17:26:49 +08:00
03faa42bab 删除游戏单广场多余代码 2021-12-07 16:32:52 +08:00
151a4fd2bc DataBinding改为使用ViewBinding
优化游戏单曝光统计代码
2021-12-07 16:11:02 +08:00
lyr
3d8c4038a6 【光环助手V5.5.0】游戏单详情-玩家评论(1202测试: 15)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1602#note_126460 2021-12-07 15:20:05 +08:00
lyr
1e0265f6ff 【光环助手V5.5.0】游戏单详情-玩家评论(1202测试)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1602#note_126460 2021-12-07 15:03:10 +08:00
19871d2bed 【光环助手V5.5.0】首页顶部tab-游戏单广场(1206测试1)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1599
【光环助手V5.5.0】游戏单广场(1206测试1、3)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1598
2021-12-07 11:38:13 +08:00
3da57acf12 Merge branch 'release' into 'dev'
Merge hotfix from release

See merge request halo/android/assistant-android!153
2021-12-07 11:32:53 +08:00
f6b5e5ecc7 修复进入类型为热门回答的游戏专区会闪退的问题 2021-12-07 11:31:23 +08:00
8f471b76eb Merge branch 'feature-optimise_home_page_performance' into 'dev-5.5.0'
优化首页嵌套列表滑动性能

See merge request halo/android/assistant-android!152
2021-12-06 18:30:24 +08:00
8218aa004b 【光环助手V5.5.0】首页/版块内容列表-游戏单广场(1201测试3)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1600 2021-12-06 18:29:58 +08:00
lyr
741a4c1640 【光环助手V5.5.0】游戏单详情-顶部区域/游戏列表(1202测试)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1601#note_126457 2021-12-06 18:28:08 +08:00
63e9f02cda 优化首页嵌套列表滑动性能 2021-12-06 18:27:44 +08:00
8ed3f759b4 【光环助手V5.5.0】创建/编辑游戏单(1206测试:3) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1604 2021-12-06 16:54:39 +08:00
616abbe04c 【光环助手V5.5.0】我的光环-我的游戏单(1206测试:1) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1603 2021-12-06 15:56:58 +08:00
8ea3511451 【光环助手V5.5.0】游戏单 UI 修复(1、2、4、8(2))https://git.shanqu.cc/pm/halo-app-issues/-/issues/1647 2021-12-06 15:21:50 +08:00
52475e83e9 Merge branch 'feature-flutter-game-comments' into 'dev'
Feature flutter game comments

See merge request halo/android/assistant-android!151
2021-12-06 09:40:20 +08:00
c573fc3b8f Fixed Sentry插件冲突问题
Updated 更新Sentry DSN地址
Added 游戏动态大图长按保存功能
2021-12-06 09:40:20 +08:00
bc23240003 【光环助手V5.5.0】游戏单 UI 修复(7,8) https://git.shanqu.cc/pm/halo-app-issues/-/issues/1647 2021-12-04 14:21:47 +08:00
f92490406e 【光环助手V5.5.0】游戏单 UI 修复(1-4、6)https://git.shanqu.cc/pm/halo-app-issues/-/issues/1647 2021-12-03 18:30:05 +08:00
9ab5b67ae7 更新 Sentry 版本和 DSN 地址 2021-12-03 18:07:48 +08:00
adaffbac77 修改首页tab游戏单广场接口 2021-12-03 11:08:56 +08:00
3c9150adbc 完善游戏单广场列表分页加载 2021-12-03 10:37:16 +08:00
884e5b3095 【光环助手V5.5.0】创建/编辑游戏单(1201测试1-4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1604 2021-12-02 17:21:16 +08:00
lyr
5bafb565a2 【光环助手V5.5.0】游戏单-个人主页(1201测试:5)https://git.ghzs.com/pm/halo-app-issues/-/issues/1591#note_126169 2021-12-02 17:12:42 +08:00
c750e3a50c 【光环助手V5.5.0】游戏单广场(1202测试2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1598 2021-12-02 17:01:09 +08:00
lyr
917ed615f9 【光环助手V5.5.0】游戏单-浏览记录(1201测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1593#note_126175 2021-12-02 15:18:43 +08:00
19399824c2 Merge branch 'feature-flutter-game-comments' into 'dev'
Feature flutter game comments

See merge request halo/android/assistant-android!150
2021-12-02 15:00:37 +08:00
998cfb9233 Feature flutter game comments 2021-12-02 15:00:37 +08:00
ea86b09444 【光环助手V5.5.0】游戏单-社区相关(1201测试:4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1595 2021-12-02 11:45:35 +08:00
lyr
b399e6284c Merge remote-tracking branch 'origin/dev-5.5.0' into dev-5.5.0 2021-12-02 11:15:40 +08:00
lyr
adcc6fa5ef 【光环助手V5.5.0】游戏单-社区相关(1201测试 8)https://git.ghzs.com/pm/halo-app-issues/-/issues/1595#note_126269 2021-12-02 11:15:34 +08:00
da3fe16ac0 【光环助手V5.5.0】首页/版块内容列表-游戏单广场(1201测试2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1600
修复首页tab游戏单广场列表接口加载逻辑
2021-12-02 11:10:50 +08:00
5f2695f4fb 修复游戏单卡片UI问题 2021-12-02 10:17:33 +08:00
lyr
8408091b33 Merge remote-tracking branch 'origin/dev-5.5.0' into dev-5.5.0 2021-12-02 10:16:03 +08:00
lyr
8de2ba1c14 【光环助手V5.5.0】前端优化汇总第一周(1、2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1617 2021-12-02 10:15:57 +08:00
41680a3440 【光环助手V5.5.0】游戏单-社区相关(1201测试:1,3,9) https://git.ghzs.com/pm/halo-app-issues/-/issues/1595 2021-12-02 10:15:23 +08:00
320c44815e 【光环助手V5.5.0】游戏单广场(1201测试2、3、6)https://git.ghzs.com/pm/halo-app-issues/-/issues/1598 2021-12-01 18:35:30 +08:00
f4fb26ffa9 Merge branch 'test_flutter_script' into 'dev'
修改混 flutter 编译脚本

See merge request halo/android/assistant-android!149
2021-12-01 18:23:32 +08:00
39ba62e5bd 修改混 flutter 编译脚本 2021-12-01 18:22:49 +08:00
a2a28d801c 【光环助手V5.5.0】我的光环-我的游戏单(1201测试:2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1603 2021-12-01 17:32:32 +08:00
491c94e536 移除部分 bintray 仓库地址 2021-12-01 16:15:14 +08:00
lyr
78a805a6a2 游戏单评论列表与评论详情页同步点赞数据 2021-12-01 15:04:21 +08:00
86f6c66f97 修复游戏单广场标签筛选文字过长时显示问题
调整热门游戏单组件间距
2021-12-01 10:52:05 +08:00
lyr
674ebbfe65 通用链接模块支持跳转游戏单详情 2021-11-30 18:08:30 +08:00
48d964b957 完成1119测试反馈(3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1625 2021-11-30 18:02:10 +08:00
e08ba51951 添加 jenkins flutter 编译脚本 2021-11-30 16:35:47 +08:00
1c1c271195 【光环助手V5.5.0】新社区运营测试问题汇总(2)8 https://git.ghzs.com/pm/halo-app-issues/-/issues/1636 2021-11-30 15:50:34 +08:00
9a0d49741d Merge branch 'feature-flutter-game-comments' into 'dev'
Flutter模块合并

See merge request halo/android/assistant-android!148
2021-11-30 15:16:22 +08:00
lyr
91c07dad2c 游戏单列表与游戏单详情同步数据
(cherry picked from commit bd8fd8cec33667d9460a75d28416175b0bd2995f)
2021-11-30 14:57:26 +08:00
lyr
bfb2130517 1.修复游戏单数据库迁移报错问题;
2.游戏单详情顶部Toolbar适配小米系统


(cherry picked from commit 6cca83a7a1bd8512886a8c26db78e1fd254271c4)
2021-11-30 14:56:43 +08:00
1942cf8ce9 Added 添加Tracker初始化
Updated Lancet注解依赖声明迁移回app的build.gradle
2021-11-30 14:45:52 +08:00
3f5b5ac2ed Merge branch 'dev' into feature-flutter-game-comments 2021-11-30 11:01:53 +08:00
7ab424f107 Updated 移除无用代码 2021-11-30 09:35:32 +08:00
8403db9c0e Updated Pull away configurations of Flutter project and add them into init.flutter.gradle 2021-11-30 09:17:22 +08:00
2139c19b40 Merge branch 'feature-games_collection' into dev-5.5.0 2021-11-29 18:17:10 +08:00
lyr
34d332129b 【光环助手V5.5.0】游戏单详情-玩家评论(增加分享统计) 2021-11-29 17:54:48 +08:00
19617c7e26 【光环助手V5.5.0】首页/版块内容列表-游戏单广场 https://git.ghzs.com/pm/halo-app-issues/-/issues/1600
【光环助手V5.5.0】游戏单数据埋点(首页/版块游戏单) https://git.ghzs.com/pm/halo-app-issues/-/issues/1549
2021-11-29 17:49:27 +08:00
lyr
1ca9472eee 【光环助手V5.5.0】游戏单-个人主页(细节完善)https://git.ghzs.com/pm/halo-app-issues/-/issues/1591 2021-11-29 16:11:34 +08:00
lyr
798503cf26 【光环助手V5.5.0】游戏单详情web页(提供跳转)https://git.ghzs.com/pm/halo-app-issues/-/issues/1546 2021-11-29 10:46:06 +08:00
lyr
fb251f95ce 1.优化点击评论按钮点击自动定位到[玩家评论]区域;
2.游戏单详情添加浏览记录增加状态判断
2021-11-28 16:45:54 +08:00
44b69e3d06 修复热门游戏单组件内无法上下滑动的问题 2021-11-26 15:48:44 +08:00
lyr
b44caf693b 【光环助手V5.5.0】游戏单数据埋点(游戏单详情部分(遗漏部分)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1549 2021-11-26 15:17:30 +08:00
lyr
21c456e1d0 【光环助手V5.5.0】游戏单数据埋点(游戏单详情部分) https://git.ghzs.com/pm/halo-app-issues/-/issues/1549 2021-11-26 15:11:24 +08:00
aeb41616d9 更换 gid 依赖源 2021-11-26 10:22:56 +08:00
92b4658123 Merge remote-tracking branch 'origin/feature-games_collection' into feature-games_collection 2021-11-25 15:27:24 +08:00
95c9afa550 修复游戏单广场列表分页 2021-11-25 15:26:39 +08:00
lyr
0d28fc15e9 Merge remote-tracking branch 'origin/feature-games_collection' into feature-games_collection 2021-11-25 15:02:45 +08:00
lyr
f5ff23ff3a 【光环助手V5.5.0】游戏单详情-玩家评论(完善字段) https://git.ghzs.com/pm/halo-app-issues/-/issues/1602 2021-11-25 15:02:40 +08:00
1b838b473c 1.修改我的游戏单页面刷新问题
2.关闭游戏单发布页面时清空选择的游戏
2021-11-25 15:00:30 +08:00
lyr
f0c6e437a9 【光环助手V5.5.0】游戏单详情-玩家评论(修复评论详情闪退问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1602 2021-11-25 14:33:30 +08:00
lyr
95a955c51e 【光环助手V5.5.0】游戏单详情-玩家评论(重新优化) https://git.ghzs.com/pm/halo-app-issues/-/issues/1602 2021-11-25 13:07:15 +08:00
f3fe3990c8 【光环助手V5.5.0】游戏单数据埋点(首页游戏单)https://git.ghzs.com/pm/halo-app-issues/-/issues/1549 2021-11-24 17:13:47 +08:00
8690559646 【光环助手V5.5.0】新社区运营测试问题汇总(26) https://git.ghzs.com/pm/halo-app-issues/-/issues/1582 2021-11-24 09:43:51 +08:00
3e71115443 修正拼写错误 2021-11-23 11:45:30 +08:00
5534e6f1a7 【光环助手V5.5.0】游戏单数据埋点(游戏单广场)https://git.ghzs.com/pm/halo-app-issues/-/issues/1549 2021-11-23 11:09:28 +08:00
ffe98bfac0 【光环助手V5.5.0】游戏单-消息中心 https://git.ghzs.com/pm/halo-app-issues/-/issues/1596 2021-11-23 10:45:37 +08:00
lyr
946503d469 Merge remote-tracking branch 'origin/feature-games_collection' into feature-games_collection 2021-11-22 18:06:51 +08:00
lyr
381ce29ae9 【光环助手V5.5.0】游戏单详情-玩家评论 https://git.ghzs.com/pm/halo-app-issues/-/issues/1602
【光环助手V5.5.0】游戏单详情-顶部区域/游戏列表(对接视频数据) https://git.ghzs.com/pm/halo-app-issues/-/issues/1601
2021-11-22 18:06:43 +08:00
67bfcc82fa 【光环助手V5.5.0】游戏单数据埋点(选择标签)https://git.ghzs.com/pm/halo-app-issues/-/issues/1549 2021-11-22 18:02:01 +08:00
65e07959a5 【光环助手V5.5.0】游戏单数据埋点(选择标签)https://git.ghzs.com/pm/halo-app-issues/-/issues/1549 2021-11-22 17:59:30 +08:00
a91195d829 修复请求头的 gid 更新不及时的问题 2021-11-22 15:30:42 +08:00
3d75d8507c 优化通用导航栏标题居中的实现
优化资讯详情页面导航栏标题居中
2021-11-22 10:11:35 +08:00
2ec43d4ff2 修复ToolbarActivity导致的内存泄漏问题 2021-11-19 18:33:32 +08:00
7c55f71bb5 修复 6.0 以下设备读取 DSA 签名会闪退的问题 2021-11-19 17:47:53 +08:00
99ac44de9e 游戏单禁言弹窗判断是否永久禁言 2021-11-19 17:10:04 +08:00
9df38387f2 修复 DSA 签名游戏无法正常更新的问题 2021-11-19 16:26:02 +08:00
e870dc9fd7 修复ToolbarActivity导致的内存泄漏问题 2021-11-19 14:53:45 +08:00
d7faf04a2e Fixed 修复礼包中心搜索框清空关键字后页面状态不对的问题 2021-11-19 11:31:19 +08:00
f0e325cd2e 首页顶部tab新增游戏单类型
跳转链接新增游戏单广场类型
2021-11-19 11:19:43 +08:00
lyr
c64e0da8c7 【光环助手V5.5.0】游戏单详情web页(完成分享面板)https://git.ghzs.com/pm/halo-app-issues/-/issues/1546 2021-11-19 09:44:40 +08:00
e2140f501f 【光环助手V5.5.0】首页顶部tab-游戏单广场 https://git.ghzs.com/pm/halo-app-issues/-/issues/1599 2021-11-18 18:26:40 +08:00
020c8d4456 1.处理编辑游戏单闪退问题
2.处理选择游戏页面内存泄露问题
2021-11-18 17:47:29 +08:00
401c0bfdfe Added 添加Flutter上报事件日志 2021-11-18 16:59:01 +08:00
lyr
33c411befa 【光环助手V5.5.0】游戏单-浏览记录 https://git.ghzs.com/pm/halo-app-issues/-/issues/1593 2021-11-18 16:48:57 +08:00
041619ed0d Merge branch 'feature-cache_download_status' into 'dev-5.5.0'
尝试缓存下载队列状态,避免下载按钮直接访问数据库

See merge request halo/android/assistant-android!147
2021-11-18 15:30:45 +08:00
ad6114a44b 尝试缓存下载队列状态,避免下载按钮直接访问数据库 2021-11-18 15:30:03 +08:00
d61008349a Merge branch 'dev' into feature-flutter-game-comments 2021-11-18 15:08:06 +08:00
39cfa01f5a Fixed 游戏动态我的关注入口显示和隐藏
Fixed 游戏动态评论详情评论列表缺失问题
Fixed 我的关注无数据ui展示和取消关注列表闪烁问题
2021-11-18 14:06:43 +08:00
924f83dacf 【光环助手V5.5.0】游戏单数据埋点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1549 2021-11-18 11:21:28 +08:00
lyr
68db40c4c8 【光环助手V5.5.0】游戏单-我的收藏(对接接口) https://git.ghzs.com/pm/halo-app-issues/-/issues/1592
【光环助手V5.5.0】游戏单详情-顶部区域/游戏列表(二、视频样式-顶部区域(视频数据未对接))https://git.ghzs.com/pm/halo-app-issues/-/issues/1601
2021-11-18 10:49:14 +08:00
b53a793e1c 完成【光环助手V5.5.0】实名认证第四期优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1625 2021-11-18 09:55:14 +08:00
1097300211 修改搜索游戏意见反馈内容格式 2021-11-17 16:16:58 +08:00
1052663db0 【光环助手V5.5.0】游戏单广场https://git.ghzs.com/pm/halo-app-issues/-/issues/1598 2021-11-17 15:34:16 +08:00
e3f0311cc7 【光环助手V5.5.0】游戏单-禁言相关 https://git.ghzs.com/pm/halo-app-issues/-/issues/1597 2021-11-17 14:55:04 +08:00
f0af5787c3 【光环助手V5.5.0】游戏单-禁言相关 https://git.ghzs.com/pm/halo-app-issues/-/issues/1597 2021-11-17 14:45:31 +08:00
4ed1da1777 完成创建游戏单页面选择标签UI 2021-11-17 11:17:37 +08:00
6cca81c4bb Added 游戏动态添加loading图 2021-11-17 11:13:09 +08:00
047c45db9a 完成【光环助手V5.5.0】前端优化汇总第三周(1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1627 2021-11-17 10:30:13 +08:00
lyr
689fec168f Merge remote-tracking branch 'origin/feature-games_collection' into feature-games_collection
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java
2021-11-16 18:31:52 +08:00
lyr
cff7f4a9f5 【光环助手V5.5.0】游戏单详情-顶部区域/游戏列表(一、大图样式-顶部区域)https://git.ghzs.com/pm/halo-app-issues/-/issues/1601 2021-11-16 18:30:28 +08:00
fcb8a60722 【光环助手V5.5.0】游戏单广场(选择标签)https://git.ghzs.com/pm/halo-app-issues/-/issues/1598 2021-11-16 18:21:18 +08:00
f2ad9b2235 合并冲突 2021-11-16 15:11:58 +08:00
49067706b7 【光环助手V5.5.0】游戏单-社区相关 https://git.ghzs.com/pm/halo-app-issues/-/issues/1595 2021-11-16 15:08:49 +08:00
098f02f0aa Added 礼包中心添加请先登录界面,登录成功后刷新关注和领号箱列表 2021-11-15 18:29:45 +08:00
772aa7ca03 【光环助手V5.5.0】游戏单广场(选择标签UI)https://git.ghzs.com/pm/halo-app-issues/-/issues/1598 2021-11-15 17:38:13 +08:00
4e78162d7f 【光环助手V5.5.0】游戏单广场(UI)https://git.ghzs.com/pm/halo-app-issues/-/issues/1598
【光环助手V5.5.0】首页顶部tab-游戏单广场(UI)https://git.ghzs.com/pm/halo-app-issues/-/issues/1599
【光环助手V5.5.0】首页/版块内容列表-游戏单广场(UI)https://git.ghzs.com/pm/halo-app-issues/-/issues/1600
2021-11-15 17:27:41 +08:00
017600f90e 完成【光环助手V5.5.0】新社区运营测试问题汇总(24) https://git.ghzs.com/pm/halo-app-issues/-/issues/1582#note_123972 2021-11-15 15:52:11 +08:00
86d1749989 【光环助手V5.5.0】新社区运营测试问题汇总(11,12,18,22) https://git.ghzs.com/pm/halo-app-issues/-/issues/1582 2021-11-15 14:54:34 +08:00
32bc1a4a6f 优化创建游戏单 2021-11-15 09:36:26 +08:00
lyr
58b37f8922 【光环助手V5.5.0】游戏单-个人主页(大致完成) https://git.ghzs.com/pm/halo-app-issues/-/issues/1591
【光环助手V5.5.0】游戏单-我的收藏(大致完成)https://git.ghzs.com/pm/halo-app-issues/-/issues/1592
2021-11-14 11:47:15 +08:00
135b55b204 Fixed 礼包中心列表无数据UI不居中问题
Fixed 存号箱已过期列表下拉加载无数据时没有显示“没有更多了”
2021-11-12 18:38:18 +08:00
1f025f3556 【光环助手V5.5.0】我的光环-我的游戏单 https://git.ghzs.com/pm/halo-app-issues/-/issues/1603 2021-11-12 12:19:36 +08:00
54bf1af524 修复礼包详情领取礼包时会出现重复数据的问题 2021-11-12 11:42:16 +08:00
11cae2c56f Fixed 游戏动态-礼包详情领取礼包后页面刷新问题 2021-11-11 11:00:15 +08:00
7075f3bcc1 更新 gradle 版本 2021-11-10 18:13:07 +08:00
5df2a1c2f5 更新 sentry mapping plugin 2021-11-10 17:08:33 +08:00
831ca71a58 【光环助手V5.5.0】创建/编辑游戏单 https://git.ghzs.com/pm/halo-app-issues/-/issues/1604 2021-11-10 16:52:01 +08:00
bb854161f5 Updated 实现原生页面点击关注,领取礼包后,Flutter页面的更新 2021-11-09 18:46:41 +08:00
a98d6125da Merge remote-tracking branch 'origin/dev-5.5.0' into dev-5.5.0 2021-11-09 18:22:15 +08:00
b178961b9b 尝试修复 WebView 不可用时的闪退 https://git.ghzs.com/halo/android/assistant-android/-/issues/47 2021-11-09 18:20:58 +08:00
9c6664aed2 Merge remote-tracking branch 'origin/dev' into dev-5.5.0 2021-11-09 17:59:59 +08:00
1d254248d9 Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt
#	dependencies.gradle
2021-11-09 17:52:15 +08:00
844c028b7b 版本升级至 5.3.4 2021-11-09 14:26:54 +08:00
cf320fa01b Merge branch 'hotfix-v5.3.3-413-crash' into 'release'
修复一部分闪退

See merge request halo/android/assistant-android!145
2021-11-09 14:21:24 +08:00
739b729654 Merge branch 'hotfix-v5.3.3-413-forced_update' into 'release'
修复用户快速跳转页面可以跳过强更的问题

See merge request halo/android/assistant-android!144
2021-11-09 14:18:16 +08:00
48729b298f Merge branch 'hotfix-v5.3.3-413-optimize_real_name_input' into 'release'
去除实名认证姓名的输入限制

See merge request halo/android/assistant-android!143
2021-11-09 11:53:58 +08:00
df2d5a93a0 去除实名认证的输入限制 2021-11-09 11:49:33 +08:00
328d200a78 修复多游戏可更新时点击全部更新按钮出现的闪退问题 2021-11-09 11:36:53 +08:00
a5f5bd8828 尝试修复通用列表数据变更偶发的越界闪退 2021-11-09 11:21:40 +08:00
760aa6f8f6 停用因未正确初始化已失效的 WorkManager 2021-11-09 10:58:47 +08:00
d6a341337a 修复部分设备跳转通知设置页面的闪退问题 2021-11-09 10:46:17 +08:00
82d79028de 捕抓部分设备网页不支持关闭安全浏览触发的闪退 2021-11-09 10:40:57 +08:00
92eece6289 修复排行榜列表点击数组越界闪退 2021-11-09 10:38:16 +08:00
edd8b86144 修复下载更新页面偶发的数组越界闪退 2021-11-09 10:37:16 +08:00
5d5c8dfddb 修复首页轮播图刷新获取新渐变颜色时的越界闪退问题 2021-11-09 10:17:01 +08:00
1dc2e661d1 修复进入游戏详情页时,非活跃 tab 也会被同时初始化的问题 2021-11-09 10:13:17 +08:00
feb46a5887 测试环境api版本升级为v5d5d0 2021-11-08 18:12:53 +08:00
4086fcdb30 修复用户快速跳转页面可以跳过强更的问题 2021-11-08 11:56:58 +08:00
8dd8d21e85 Fixed Flutter页面第一次加载不显示的问题 2021-11-08 11:30:57 +08:00
42a4210290 【光环助手V5.5.0】游戏单广场(选择标签UI)https://git.ghzs.com/pm/halo-app-issues/-/issues/1598 2021-11-08 09:40:57 +08:00
9a1266d9d9 【光环助手V5.5.0】游戏单广场(选择标签UI)https://git.ghzs.com/pm/halo-app-issues/-/issues/1598 2021-11-08 09:24:26 +08:00
2915042719 Fixed 解决礼包中心模块原生页面数据更新后,Flutter页面数据的更新 2021-11-08 09:09:56 +08:00
b4730589bf Merge branch 'feature-games_collection' of git.ghzs.com:halo/android/assistant-android into feature-games_collection
# Conflicts:
#	app/src/main/res/layout/layout_menu_save.xml
#	app/src/main/res/menu/menu_save.xml
2021-11-06 15:57:04 +08:00
001cbfcdb6 【光环助手V5.5.0】创建/编辑游戏单(选择游戏/添加游戏UI) https://git.ghzs.com/pm/halo-app-issues/-/issues/1604 2021-11-06 15:55:06 +08:00
44dab8246f 【光环助手V5.5.0】游戏单广场(选择标签UI)https://git.ghzs.com/pm/halo-app-issues/-/issues/1598 2021-11-05 18:08:15 +08:00
lyr
be5cbf0ca0 【光环助手V5.5.0】游戏单-我的游戏 https://git.ghzs.com/pm/halo-app-issues/-/issues/1594 2021-11-05 14:27:15 +08:00
fa2fb66f44 取消实名认证身份证类型输入限制 2021-11-05 11:12:16 +08:00
9982ebea9e 版本更新到 5.3.3 2021-11-05 11:07:34 +08:00
2b30cc1f41 Merge branch 'hotfix-v5.3.2-412-crash' into 'release'
修复部分闪退

See merge request halo/android/assistant-android!142
2021-11-05 11:06:54 +08:00
96a19eb5ee 修复部分闪退
1. 部分5.0设备启动读取错误abi造成闪退的问题
2. 部分华为鸿蒙设备读取系统类型闪退的问题
2021-11-05 11:05:26 +08:00
85276d462f Merge branch 'hotfix-v5.3.2-412-fix_realname_input' into 'release'
修复实名身份证号无法输入 X 的问题

See merge request halo/android/assistant-android!141
2021-11-05 09:59:50 +08:00
44aebc39ea 修复实名身份证号无法输入 X 的问题 2021-11-05 09:58:42 +08:00
52294ebb3a Merge branch 'dev' into feature-flutter-game-comments
# Conflicts:
#	app/build.gradle
#	app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt
#	app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt
#	app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt
#	gradle.properties
2021-11-04 16:54:56 +08:00
623156bdb5 【光环助手V5.5.0】创建/编辑游戏单(创建游戏单UI) https://git.ghzs.com/pm/halo-app-issues/-/issues/1604 2021-11-04 10:19:34 +08:00
lyr
6bac5d79a9 【光环助手V5.5.0】前端优化汇总第一周(5)https://git.ghzs.com/pm/halo-app-issues/-/issues/1617 2021-11-03 17:44:37 +08:00
293fc635e1 Updated 整合环境配置
Added AssistantNavigator整合路由跳转代码,自动根据环境使用路由跳转类
2021-11-03 16:42:20 +08:00
0f0dc6dd9b Updated 更新文档 2021-11-02 17:36:19 +08:00
46de8f5f9e Added 添加我的关注跳转实现 2021-11-02 17:34:11 +08:00
ed6b2960cc Updated 更新文档 2021-11-02 16:55:54 +08:00
f3ef7930f3 Updated 更新Flutter路由跳转 2021-11-02 16:51:04 +08:00
lyr
5ecb3d5378 【光环助手V5.4.0】骨架屏 UI 优化(1102补充)https://git.ghzs.com/pm/halo-app-issues/-/issues/1575#note_122935 2021-11-02 16:22:33 +08:00
1d4fe89900 版本更新至 5.5.0 2021-11-02 10:18:18 +08:00
3f3b19f2cf 更新依赖库 2021-11-02 10:17:33 +08:00
af1ac4e888 Merge remote-tracking branch 'origin/dev' into dev-5.4.0 2021-11-02 10:14:47 +08:00
1478b59479 相关版本合并及处理要求 https://git.ghzs.com/pm/halo-app-issues/-/issues/1605 2021-11-01 16:14:04 +08:00
lyr
335cde94fe 【光环助手V5.4.0】客户端内部需求(新分类2.0游戏Item-UI问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1567#note_122549 2021-11-01 15:27:00 +08:00
dd1f399425 Merge branch 'feature-issues1572' into 'release'
完成实名认证优化第三期 https://git.ghzs.com/pm/halo-app-issues/-/issues/1572

See merge request halo/android/assistant-android!140
2021-11-01 15:03:26 +08:00
3e8923f34a 完成实名认证优化第三期 https://git.ghzs.com/pm/halo-app-issues/-/issues/1572 2021-11-01 15:00:35 +08:00
612fc8f444 【光环助手V5.2.0】光环助手UI组件库(第2期)(1101UI测试问题2-3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1327 2021-11-01 14:58:32 +08:00
0cbc104092 正式环境切换到 5.4.0 的接口 2021-11-01 07:31:32 +01:00
41f7e3a05a Merge branch 'hotfix-v5.3.1-411-crash' into 'release'
修复一些闪退

See merge request halo/android/assistant-android!139
2021-11-01 11:26:26 +08:00
25ce3ccdc9 修复一些闪退
1. 修复游戏详情页回到顶部的闪退
2. 尝试修复获取游戏更新时偶发的闪退
2021-11-01 11:24:43 +08:00
82a60413e1 【光环助手V5.4.0】客户端内部需求(Toolbar样式补充3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1567 2021-11-01 09:32:15 +08:00
2b4126fa71 【光环助手V5.4.0】客户端内部需求(修复视频数据出现2个返回按钮)https://git.ghzs.com/pm/halo-app-issues/-/issues/1567 2021-10-29 18:08:56 +08:00
lyr
52a7ab7b3c Merge remote-tracking branch 'origin/dev-5.4.0' into dev-5.4.0 2021-10-29 17:30:28 +08:00
lyr
9b8ce918d8 【光环助手V5.4.0】骨架屏 UI 优化(优化部分页面骨架屏显示)https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-29 17:30:23 +08:00
57081f4003 修复Toolbar按钮点击动画卡顿的问题 2021-10-29 17:28:01 +08:00
5df0d85004 Merge branch 'hotfix-v5.3.1-411-comment' into 'release'
修改未登录评论时一键登录弹窗弹起键盘没有收起问题

See merge request halo/android/assistant-android!138
2021-10-29 16:00:47 +08:00
63b88383a4 修改未登录评论时一键登录弹窗弹起键盘没有收起问题 2021-10-29 14:59:55 +08:00
7564a0a771 尝试修改发视频贴快速点击发送按钮会生成多条数据 2021-10-29 11:58:16 +08:00
36bc35a7e3 版本更新至 5.3.1 2021-10-29 11:13:46 +08:00
1c55ab8f86 Merge branch 'hotfix-v5.3.0-410-generic_crash' into 'release'
修复一系列闪退

See merge request halo/android/assistant-android!137
2021-10-29 11:02:35 +08:00
9a1f3b0fe3 修复一系列闪退
1. 跳转用户详情参数有误造成的闪退
2. 标记更新已读红点时的闪退
3. 5.0 以下设备点击更新按钮的闪退
4. 横向列表专题点击时偶发的闪退
5. 首页滑动顶部 BANNER 偶发的闪退
2021-10-29 11:01:16 +08:00
438b55c08b Updated 完成礼包中心-领取礼包功能
Updated 完成礼包中心-领号箱复制功能
2021-10-28 21:59:30 +08:00
lyr
12fcb98412 Merge remote-tracking branch 'origin/dev-5.4.0' into dev-5.4.0 2021-10-28 21:58:08 +08:00
lyr
33030cf550 优化部分页面骨架屏显示 2021-10-28 21:58:03 +08:00
9a7acef9a3 修改评论点赞图片闪烁问题 2021-10-28 21:48:09 +08:00
61f92e544b Merge remote-tracking branch 'origin/dev-5.4.0' into dev-5.4.0 2021-10-28 21:44:30 +08:00
57d6cc7d0e 【光环助手V5.4.0】儿童/青少年模式(修改密码输入框输入时的背景)https://git.ghzs.com/pm/halo-app-issues/-/issues/1571 2021-10-28 21:44:22 +08:00
919ace95b9 修改评论楼层显示错位 2021-10-28 21:16:21 +08:00
ec1af285af 【光环助手V5.4.0】儿童/青少年模式(修改密码输入框输入时的背景)https://git.ghzs.com/pm/halo-app-issues/-/issues/1571 2021-10-28 21:02:22 +08:00
6b4c02e965 【光环助手V5.4.0】儿童/青少年模式(测试反馈2、UI测试1)https://git.ghzs.com/pm/halo-app-issues/-/issues/1571 2021-10-28 20:06:21 +08:00
913bcdeeb2 捕抓卸载应用时偶发的闪退异常 2021-10-28 17:52:43 +08:00
e40857d24b Merge branch 'hotfix-v5.3.0-410-image_viewer_crash' into 'release'
修复查看大图传入数组为空时的闪退异常

See merge request halo/android/assistant-android!136
2021-10-28 17:40:56 +08:00
d3fab1aa73 修复查看大图传入数组为空时的闪退异常 2021-10-28 17:40:18 +08:00
d32698ca91 Merge branch 'hotfix-v5.3.0-410-store_old_version_info' into 'release'
为后续版本提供当前版本的版本和渠道

See merge request halo/android/assistant-android!135
2021-10-28 17:26:27 +08:00
7832276560 为后续版本提供当前版本的版本和渠道 2021-10-28 17:25:37 +08:00
2fca73dfe8 Merge branch 'hotfix-v5.3.0-410-crash' into 'release'
修复游戏搜索页面列表数组越界问题

See merge request halo/android/assistant-android!134
2021-10-28 17:11:06 +08:00
lyr
0f194a80bb 修复游戏搜索页面列表数组越界问题 2021-10-28 17:09:08 +08:00
lyr
e0cdf42d26 【光环助手V5.4.0】儿童/青少年模式(修复青少年模式下部分页面右上角依然显示下载按钮的问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1571 2021-10-28 16:48:14 +08:00
c501248408 【光环助手V5.4.0】骨架屏 UI 优化(1027UI测试问题1,2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-28 16:40:13 +08:00
a559df99ec 添加青少年模式使用须知、找回密码url 2021-10-28 15:24:54 +08:00
1cdd7ed6ef 修改评论上传图片失败没有删除违规图片问题 2021-10-28 15:07:20 +08:00
7e3bd14db4 【光环助手V5.4.0】新社区5期-内容详情页优化(1027UI测试问题5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1533 2021-10-28 14:41:47 +08:00
ab08a725ca 【光环助手V5.4.0】新社区5期-发布页优化(1028 产品验收1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1531 2021-10-28 10:19:00 +08:00
1977c80038 【光环助手V5.4.0】骨架屏 UI 优化 (中心色宽度调整为0.1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-28 10:13:06 +08:00
d9d8eaa611 【光环助手V5.4.0】骨架屏 UI 优化(1027UI测试问题1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-28 10:05:13 +08:00
e0dcb70fcd 【光环助手V5.4.0】新社区5期-内容详情页优化(1027UI测试问题5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1533 2021-10-27 22:06:02 +08:00
bb60f7f22a 修改模拟器游戏下载按钮显示错误问题
(cherry picked from commit d3e21251d9)
2021-10-27 17:52:03 +08:00
70821c73c1 【光环助手V5.4.0】新社区5期-内容详情页优化(1027UI测试问题1,2,3,7) https://git.ghzs.com/pm/halo-app-issues/-/issues/1533 2021-10-27 17:49:07 +08:00
lyr
1560234105 【光环助手V5.4.0】新社区5期-内容详情页优化(1027UI测试问题 6)https://git.ghzs.com/pm/halo-app-issues/-/issues/1533#note_122064 2021-10-27 17:38:12 +08:00
lyr
59f74ebb9e 重构通用游戏 item 布局(修改部分页面LayoutParams不适配问题)https://git.ghzs.com/halo/android/assistant-android/-/issues/46 2021-10-27 17:07:20 +08:00
d3e21251d9 修改模拟器游戏下载按钮显示错误问题 2021-10-27 15:44:00 +08:00
aedd996c3f 【光环助手V5.4.0】骨架屏 UI 优化 (1027UI测试问题 2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-27 15:03:30 +08:00
lyr
a589b77de5 修改社区-推荐页最近浏览无数据也会显示标题的问题 2021-10-27 14:49:29 +08:00
86330c74b5 Merge remote-tracking branch 'origin/dev' into dev-5.4.0 2021-10-27 11:00:54 +08:00
lyr
54a77555cc 【光环助手V5.4.0】骨架屏 UI 优化(1026测试问题 1、2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1575#note_121834 2021-10-26 17:34:36 +08:00
30ae815717 尝试修复游戏搜索详情可能发生的进度同步问题 2021-10-26 17:18:35 +08:00
1eb1b6a956 处理合并异常 2021-10-26 16:35:52 +08:00
f46b303a67 Merge branch 'feature-issues1526' into dev
# Conflicts:
#	app/src/main/java/com/gh/download/DownloadManager.java
#	app/src/main/java/com/halo/assistant/fragment/WebFragment.java
#	dependencies.gradle
2021-10-26 16:28:25 +08:00
a1ecb784e2 完成实名认证第二期优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1526 2021-10-26 16:16:08 +08:00
lyr
142e04fa60 重构通用游戏 item 布局(适配新分类2.0游戏item)https://git.ghzs.com/halo/android/assistant-android/-/issues/46 2021-10-26 15:55:35 +08:00
540d6cd1e4 完成【光环助手V5.4.0】骨架屏 UI 优化 (1026测试问题 3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-26 15:13:24 +08:00
b078f38e62 【光环助手V5.4.0】骨架屏 UI 优化(1026测试问题4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-26 14:43:11 +08:00
a2e5415b5c 【光环助手V5.4.0】新社区5期-内容详情页优化(1026产品测试2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1533 2021-10-26 11:44:57 +08:00
9aae1c5476 Keep Constraints.Group 用到的 R.id 2021-10-26 10:42:02 +08:00
e73b431378 Merge branch 'revert-6957ca54' into 'dev-5.4.0'
Revert "Merge branch 'revert-65a82369' into 'dev-5.4.0'"

See merge request halo/android/assistant-android!131
2021-10-26 10:24:58 +08:00
0fe60f52e2 Revert "Merge branch 'revert-65a82369' into 'dev-5.4.0'"
This reverts merge request !130
2021-10-26 10:22:32 +08:00
6957ca54f0 Merge branch 'revert-65a82369' into 'dev-5.4.0'
Revert "Merge branch 'feature-fast_build' into 'dev-5.4.0'"

See merge request halo/android/assistant-android!130
2021-10-25 18:18:23 +08:00
31de4089ad Revert "Merge branch 'feature-fast_build' into 'dev-5.4.0'"
This reverts merge request !128
2021-10-25 18:17:15 +08:00
d73a4704c8 Merge remote-tracking branch 'origin/dev' into dev-5.4.0
# Conflicts:
#	app/src/main/res/layout/rank_collection_item.xml
2021-10-25 09:47:18 +08:00
2f5f52471e Merge branch 'cherry-pick-37460cea' into 'dev-5.4.0'
优化首页滑动到专题合集-排行榜样式刷新加载

See merge request halo/android/assistant-android!129
2021-10-25 09:37:52 +08:00
lyr
97f82d70f5 优化首页滑动到专题合集-排行榜样式刷新加载
(cherry picked from commit 37460ceac2)
2021-10-25 09:37:39 +08:00
lyr
c355bc2b79 【光环助手V5.4.0】骨架屏 UI 优化(首页&社区)https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-24 17:32:06 +08:00
a011b5a947 修改微博分享图片异常问题 2021-10-22 22:03:02 +08:00
efdf02158c 【光环助手V5.4.0】新社区5期-内容详情页优化(一(2)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1533 2021-10-22 18:13:45 +08:00
4ca302f5fc 微调社区评论列表UI 2021-10-22 15:55:06 +08:00
lyr
e669df00b4 Merge remote-tracking branch 'origin/dev-5.4.0' into dev-5.4.0 2021-10-22 14:41:48 +08:00
lyr
19e6f1e7b7 重构通用游戏 item 布局(优化游戏名字布局) https://git.ghzs.com/halo/android/assistant-android/-/issues/46 2021-10-22 14:41:36 +08:00
025d237be0 修改社区评论选择图片且文本为空不能提交问题 2021-10-22 14:39:50 +08:00
lyr
2eb5fb7526 【光环助手V5.4.0】儿童/青少年模式(对接设置页面)https://git.ghzs.com/pm/halo-app-issues/-/issues/1571 2021-10-22 12:28:46 +08:00
3818e17976 修复专题列表游戏大小不受后台配置控制的问题 2021-10-22 10:36:45 +08:00
1f43b8b220 修复专题列表游戏大小不受后台配置控制的问题 2021-10-22 10:35:41 +08:00
lyr
10003fe49d 重构通用游戏 item 布局 https://git.ghzs.com/halo/android/assistant-android/-/issues/46 2021-10-22 10:22:11 +08:00
80a8cadaae 【光环助手V5.4.0】前端优化汇总第四周(6) https://git.ghzs.com/pm/halo-app-issues/-/issues/1574 2021-10-22 09:51:19 +08:00
88098a8255 适配接口返回 DSA 形式的游戏签名 2021-10-21 18:07:02 +08:00
66a543146a 【光环助手V5.4.0】新社区5期-内容详情页优化(一(1)、二) https://git.ghzs.com/pm/halo-app-issues/-/issues/1533 2021-10-21 17:22:42 +08:00
3aafc3fcbe 【光环助手V5.4.0】儿童/青少年模式https://git.ghzs.com/pm/halo-app-issues/-/issues/1571 2021-10-21 11:57:22 +08:00
050da95a8f 测试环境api版本升级为v5d4d0 2021-10-21 10:59:52 +08:00
lyr
40b7b09de4 【光环助手V5.4.0】前端优化汇总第二周(4)https://git.ghzs.com/pm/halo-app-issues/-/issues/1574 2021-10-21 10:27:49 +08:00
lyr
16091f759c 【光环助手V5.4.0】儿童/青少年模式(客户端展示,未对接设置页面)https://git.ghzs.com/pm/halo-app-issues/-/issues/1571 2021-10-20 17:55:41 +08:00
f65664b885 【光环助手V5.4.0】骨架屏 UI 优化(详情页&合集) https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-20 17:43:01 +08:00
lyr
3eef9c465a 【光环助手V5.4.0】前端优化汇总第二周(2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1574 2021-10-20 10:33:43 +08:00
a1b4c726dd Updated 更新游戏动态文档,新增filter字段描述
Added 礼包中心UI
2021-10-20 10:32:56 +08:00
5e2752569b 完成【光环助手V5.4.0】骨架屏 UI 优化 (游戏库&版块) https://git.ghzs.com/pm/halo-app-issues/-/issues/1575 2021-10-19 11:39:35 +08:00
65a823698a Merge branch 'feature-fast_build' into 'dev-5.4.0'
提高项目的编译性能 https://git.ghzs.com/halo/android/assistant-android/-/issues/42

See merge request halo/android/assistant-android!128
2021-10-19 10:32:57 +08:00
fdfad0edf1 【光环助手V5.4.0】前端优化汇总第二周(1,3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1574 2021-10-19 10:22:06 +08:00
dcadb529c7 修复Fragment中的Toobar返回按钮无效的问题 2021-10-19 09:54:03 +08:00
lyr
37460ceac2 优化首页滑动到专题合集-排行榜样式刷新加载 2021-10-18 18:09:21 +08:00
lyr
994397ec35 页面刷新优化(我的主页优化)https://git.ghzs.com/halo/android/assistant-android/-/issues/43 2021-10-18 17:57:06 +08:00
9354ff9af8 版本升级到 5.4.0 (430) 2021-10-18 17:46:17 +08:00
2811e21911 Updated 将AOP注入代码迁移到Flutter插件中
Fixed 项目热更新失效问题
Updated 更新文档
Updated 更新版本
2021-10-18 16:33:49 +08:00
746f81e45b Merge branch 'cherry-pick-bfa236f8' into 'dev-5.4.0'
【光环助手V5.4.0】新社区5期-活动主页(3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1535

See merge request halo/android/assistant-android!127
2021-10-18 14:42:39 +08:00
lyr
69f1887926 【光环助手V5.4.0】新社区5期-活动主页(3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1535
(cherry picked from commit bfa236f802)
2021-10-18 14:42:12 +08:00
lyr
6dfded50d6 Merge remote-tracking branch 'origin/dev' into dev 2021-10-18 11:37:12 +08:00
lyr
5e01ecf0a2 修改视频发布页-内容来源-转载网址弹窗无法触发回调问题 2021-10-18 11:37:06 +08:00
a1be42a135 【光环助手V5.4.0】后台优化汇总第三周(10(2)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1564
(cherry picked from commit 5bdd655715)
2021-10-18 11:34:45 +08:00
5bdd655715 【光环助手V5.4.0】后台优化汇总第三周(10(2)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1564 2021-10-16 09:40:35 +08:00
c32e9bd0fc 【光环助手V5.2.0】光环助手UI组件库(第2期)(二级标题导航栏)https://git.ghzs.com/pm/halo-app-issues/-/issues/1327 2021-10-15 18:28:28 +08:00
lyr
2e2985cb90 页面刷新优化 https://git.ghzs.com/halo/android/assistant-android/-/issues/43 2021-10-15 18:21:34 +08:00
lyr
f4a5dd47fc 【光环助手V5.2.0&V5.3.0】同步正式环境后测试问题汇总(13)https://git.ghzs.com/pm/halo-app-issues/-/issues/1565 2021-10-15 18:15:16 +08:00
81873bd898 Updated 更新文档 2021-10-15 15:01:26 +08:00
d6604ff2c9 Updated 更新文档 2021-10-15 14:59:31 +08:00
298b7af692 Updated 更新文档 2021-10-15 14:56:38 +08:00
433df3bebd Updated 更新文档 2021-10-15 14:49:31 +08:00
84dba2036c Updated 更新文档
Added 新增路由声明
2021-10-15 14:36:38 +08:00
924ef2a727 Added 添加游戏动态、我的关注路由
Updated 开发文档新增资源描述
2021-10-15 14:21:29 +08:00
5a2b997693 Updated 更新文档 2021-10-14 09:50:05 +08:00
ebb87962ac Updated 游戏动态模块文档新增原生支持,资源列表和路由配置描述 2021-10-14 09:44:06 +08:00
075eb1a21b 【光环助手V5.4.0】新社区5期-发布页优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1531 2021-10-13 16:57:45 +08:00
lyr
b9554d11a8 【光环助手V5.2.0&V5.3.0】同步正式环境后测试问题汇总(12)https://git.ghzs.com/pm/halo-app-issues/-/issues/1565 2021-10-13 11:36:52 +08:00
b910075c4c Merge remote-tracking branch 'origin/dev-5.3.0' into dev 2021-10-13 09:40:23 +08:00
1966e844bd 【光环助手V5.2.0&V5.3.0】同步正式环境后测试问题汇总 (8,9,10) https://git.ghzs.com/pm/halo-app-issues/-/issues/1565 2021-10-12 17:46:12 +08:00
e760a63181 重构下载管理-已安装页面https://git.ghzs.com/halo/android/assistant-android/-/issues/44 2021-10-12 16:33:23 +08:00
lyr
bfa236f802 【光环助手V5.4.0】新社区5期-活动主页(3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1535 2021-10-12 16:24:28 +08:00
lyr
7f64b51582 适配评论详情Footer显示 2021-10-12 15:31:32 +08:00
4324126660 Merge branch 'dev-5.3.0' of git.ghzs.com:halo/android/assistant-android into dev-5.3.0 2021-10-12 15:22:37 +08:00
a8c54de47d 【光环助手V5.2.0&V5.3.0】同步正式环境后测试问题汇总(6) https://git.ghzs.com/pm/halo-app-issues/-/issues/1565 2021-10-12 15:22:28 +08:00
562b3e9d3b 【光环助手V5.2.0&V5.3.0】同步正式环境后测试问题汇总 (1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1565 2021-10-12 10:59:29 +08:00
679c6da972 修复礼包中心、工具箱清理搜索文字功能实效的问题 2021-10-11 18:22:51 +08:00
lyr
793adb9a03 解决首页滑动到专题合集-排行榜样式卡顿问题 2021-10-11 18:10:21 +08:00
23c62f1092 缺省渠道改为 GH_TEST3 2021-10-11 17:25:07 +08:00
70acea8e92 Updated 优化调整Flutter项目架构,实现Flutter项目模块化 2021-10-11 10:56:33 +08:00
516d8d8044 正式环境切换到 5.3.0 的接口 2021-10-11 10:35:08 +08:00
ed2b41bc55 【光环助手V5.3.0】Q&A管理-事件埋点(1009测试1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1393 2021-10-11 09:10:29 +08:00
5351ffd6b6 【光环助手V5.3.0】Q&A管理-事件埋点(替换埋点字段qa_title为help_id) https://git.ghzs.com/pm/halo-app-issues/-/issues/1393 2021-10-09 11:56:53 +08:00
aaffbb376c Added 添加反馈页、QA页和QA集合页搜索内容为空的toast提示 2021-10-08 13:12:11 +08:00
ac852c0484 Deleted 删除多余代码 2021-10-08 10:33:13 +08:00
4bd93ad958 Fixed 反馈页点击清空按钮会强制刷新界面的问题 2021-10-08 09:46:51 +08:00
5f131848e7 Updated UI调整 2021-09-30 17:40:48 +08:00
4915f99412 Deleted 移除测试代码
Added 接入日志上报
2021-09-30 15:03:40 +08:00
92841346cd Merge branch 'dev-5.3.0' into feature-flutter-feedback 2021-09-30 11:58:38 +08:00
b0e8db6e0e Added 添加日志上报 2021-09-30 11:57:57 +08:00
d533e0ceab 提高项目的编译性能 https://git.ghzs.com/halo/android/assistant-android/-/issues/42 2021-09-30 10:15:27 +08:00
672b697209 Added 添加日志上报方法 2021-09-29 17:51:51 +08:00
c9bef1fb1a 修复 MUMU 模拟器无法显示部分图片的问题 2021-09-29 14:19:56 +08:00
454e8bb934 修复 MUMU 模拟器无法显示部分图片的问题 2021-09-29 12:00:41 +08:00
e587d0daaa 【光环助手V5.3.0】通用链接内容合集-客户端需求(0928测试:5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1473 2021-09-28 20:24:33 +08:00
fcc23ddfc2 修改部分弹窗为居中样式 2021-09-28 18:51:10 +08:00
c541805bed 【光环助手V5.3.0】通用链接内容合集-客户端需求(0928补充:1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1473 2021-09-28 17:45:35 +08:00
lyr
2c38c8fd91 优化专题合集-排行榜样式标签加载 2021-09-28 17:10:36 +08:00
15385cf78c 统一视频贴加精/取消加精接口错误处理 2021-09-28 16:33:52 +08:00
6df3a8ec51 【光环助手V5.3.0】新社区4期-详情页分享面板权限优化(0922 产品验收问题6) https://git.ghzs.com/pm/halo-app-issues/-/issues/1501 2021-09-28 16:13:10 +08:00
bca9c6d96f Merge branch 'feature-optimise_home_page_performance' into 'dev-5.3.0'
优化首页列表性能

See merge request halo/android/assistant-android!126
2021-09-28 16:04:19 +08:00
26feccc28b 优化首页列表性能 2021-09-28 16:04:18 +08:00
a1fc7d2e48 Merge remote-tracking branch 'origin/dev-5.3.0' into dev-5.3.0 2021-09-28 15:42:29 +08:00
0b42b10e41 【光环助手V5.3.0】游戏详情-开服相关优化(20210928UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1469 2021-09-28 15:42:11 +08:00
lyr
0a0912dbab 微调游戏搜索-专题样式UI 2021-09-28 15:32:55 +08:00
5e3ff2de31 Merge branch 'dev-5.3.0' of git.ghzs.com:halo/android/assistant-android into dev-5.3.0 2021-09-28 15:31:48 +08:00
55db52f8f0 【光环助手V5.3.0】新社区4期-提问帖详情页评论区权限优化(0923 产品验收问题2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1502 2021-09-28 15:31:43 +08:00
2888ab56cd 【光环助手V5.3.0】客户端内部需求(整理简单弹窗样式测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1527 2021-09-28 15:30:45 +08:00
1edc20f665 更改通用链接合集数据结构 2021-09-28 14:34:25 +08:00
72c818b17b 【光环助手V5.3.0】游戏详情-开服相关优化(20210927UI测试补充)https://git.ghzs.com/pm/halo-app-issues/-/issues/1469 2021-09-28 11:49:25 +08:00
7393dc83f5 修改选择视频时删除本地视频闪退问题 2021-09-28 10:27:23 +08:00
6043553a39 【光环助手V5.3.0】开发者中心相关配套需求 https://git.ghzs.com/pm/halo-app-issues/-/issues/1518 2021-09-28 10:25:19 +08:00
lyr
87461b52ce 【光环助手V5.3.0】专题合集-排行榜功能优化(20210927UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1471#note_119397 2021-09-28 10:07:25 +08:00
lyr
df807d746f 修改搜索结果页面加载下一页时,页面会跳动即滑动不流畅问题 2021-09-27 19:07:57 +08:00
lyr
9e7a519806 【光环助手V5.3.0】游戏搜索-客户端功能优化(第8期)(0926测试 第1点、0927测试 第1点、20210927UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1402 2021-09-27 18:35:03 +08:00
6ee4af82ad 【光环助手V5.3.0】光环前端优化汇总第二周(完成0927测试:1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1517 2021-09-27 18:07:28 +08:00
75c8a4597c Merge branch 'dev-5.3.0' of git.ghzs.com:halo/android/assistant-android into dev-5.3.0 2021-09-27 17:21:54 +08:00
de274f0954 修改通用链接详情刷新过程中滑动列表闪退问题 2021-09-27 17:21:35 +08:00
82195950b3 论坛详情精华 tab 支持视频贴 https://git.ghzs.com/pm/halo-app-issues/-/issues/1461#note_119153 2021-09-27 17:21:22 +08:00
806b3ac77e 【光环助手V5.3.0】游戏详情-开服相关优化(20210927UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1469 2021-09-27 17:17:44 +08:00
lyr
ae95bd1db8 【光环助手V5.3.0】游戏搜索-数据埋点(0927测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1403#note_119302 2021-09-27 16:48:33 +08:00
62ffefb92f 论坛发帖添加使用移动网络上传视频的弹窗 2021-09-27 16:10:58 +08:00
ca190c6d57 Updated 更新文档 2021-09-27 16:01:39 +08:00
1c739a6269 【光环助手V5.3.0】客户端内部需求(整理简单弹窗样式测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1527 2021-09-27 15:21:54 +08:00
lyr
f5386cd3c1 优化专题合集-排行榜样式显示更新逻辑 2021-09-27 15:16:06 +08:00
65aab99639 Updated 将Flutter镜像地址配置迁移到dependencies.gradle 2021-09-27 12:01:00 +08:00
lyr
7540659396 【光环助手V5.3.0】专题合集-排行榜功能优化(20210926UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1471#note_119218 2021-09-27 11:56:21 +08:00
bbb7904477 Updated 更新Flutter模块 2021-09-27 11:48:02 +08:00
056985531b 【光环助手V5.3.0】新社区4期-详情页分享面板权限优化(0922 产品验收问题5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1501 2021-09-27 11:07:36 +08:00
730739077b 【光环助手V5.3.0】游戏详情-开服相关优化(0926测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1469 2021-09-27 09:41:15 +08:00
6c82184d1d 【光环助手V5.3.0】通用链接内容合集-客户端需求(20210926UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1473 2021-09-26 20:15:05 +08:00
d3b6f6a1e4 修改通用链接列表滑动闪退问题 2021-09-26 17:29:42 +08:00
lyr
d35550900b 【光环助手V5.3.0】专题合集-排行榜功能优化(0926测试 2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1471#note_119210 2021-09-26 17:11:30 +08:00
dfc16e38eb 修改游戏详情标签被切割问题 2021-09-26 15:28:01 +08:00
08bd5f3081 【光环助手V5.3.0】新社区4期-详情页分享面板权限优化(0922 产品验收问题4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1501 2021-09-26 11:08:02 +08:00
7d98fde53a Merge branch 'dev-5.3.0' of git.ghzs.com:halo/android/assistant-android into dev-5.3.0
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/entity/LinkEntity.kt
2021-09-26 10:38:50 +08:00
486e9ae0c5 【光环助手V5.3.0】通用链接内容合集-数据埋点(测试补充:3(1)(3),4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1474 2021-09-26 10:37:32 +08:00
d51587aa66 【光环助手V5.3.0】通用链接内容合集-数据埋点 (0924测试 2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1474 2021-09-26 10:34:13 +08:00
1fabcc756d 视频帖详情页的埋点新增字段 2021-09-26 09:44:45 +08:00
ee3fc058e1 【光环助手V5.3.0】通用链接内容合集-客户端需求(0924测试3,4,5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1473 2021-09-24 17:59:02 +08:00
lyr
e66e9e1ba8 【光环助手V5.3.0】游戏搜索-客户端功能优化(第8期)(20210917测试问题 2、9) https://git.ghzs.com/pm/halo-app-issues/-/issues/1402#note_118197 2021-09-24 17:28:44 +08:00
1cb4bea73c 修改QA详情关闭页面由web端控制 2021-09-24 16:37:59 +08:00
lyr
b3a491e723 【光环助手V5.3.0】专题合集-排行榜功能优化(2、3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1471 2021-09-24 15:28:37 +08:00
b583aafa25 Fixed 使用帮助无搜索结果情况下,点击反馈按钮无反应的问题 2021-09-23 18:46:51 +08:00
9709c6cbf0 【光环助手V5.3.0】光环前端优化汇总第二周 (0922测试 1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1517 2021-09-23 18:32:19 +08:00
ca81eb2ecb 【光环助手V5.3.0】游戏管理-镜像设置优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1400 2021-09-23 17:58:32 +08:00
910d886f65 【光环助手V5.3.0】通用链接内容合集-数据埋点 (二) https://git.ghzs.com/pm/halo-app-issues/-/issues/1474 2021-09-23 17:18:44 +08:00
376411c0cf 调整申请版主按钮点击逻辑 2021-09-23 17:12:44 +08:00
ad019eff69 修改申请版主弹窗REQUEST_CODE 2021-09-23 16:43:42 +08:00
3712e67594 修改通用链接详情列表滑动闪退问题 2021-09-23 16:40:52 +08:00
c98084ec39 Merge remote-tracking branch 'origin/dev-5.3.0' into dev-5.3.0 2021-09-23 16:25:46 +08:00
5a851ea99d 调整申请版主按钮点击逻辑 2021-09-23 16:25:39 +08:00
849cdb234c 调整通用链接合集图片圆角 2021-09-23 15:43:54 +08:00
9f9313b5e7 调整申请版主按钮点击逻辑 2021-09-23 15:40:12 +08:00
1888d8cfc7 修改通用链接合集列表复用问题 2021-09-23 12:09:06 +08:00
393b747f0e Updated 优化项目架构 2021-09-23 11:58:58 +08:00
d8f9a7ed7f 【光环助手V5.3.0】[安装方式管理]新增[白名单]功能https://git.ghzs.com/pm/halo-app-issues/-/issues/1264 2021-09-23 11:09:52 +08:00
7be4541f89 调整帖子/提问详情间距 2021-09-23 10:29:24 +08:00
97e87a9f32 Fixed 从原生页面回退到Flutter页面,输入框粘贴按钮点击失效 2021-09-22 19:34:56 +08:00
2d84309f04 【光环助手V5.3.0】新社区4期-详情页布局优化(0916UI测试问题6,10) https://git.ghzs.com/pm/halo-app-issues/-/issues/1500 2021-09-22 17:05:09 +08:00
f2ed7f8b72 【光环助手V5.3.0】通用链接内容合集-数据埋点(一) https://git.ghzs.com/pm/halo-app-issues/-/issues/1474 2021-09-22 16:47:31 +08:00
c839d535d8 【光环助手V5.3.0】通用链接内容合集-客户端需求(20210918测试问题5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1473 2021-09-22 11:24:37 +08:00
623e155c75 【光环助手V5.3.0】光环前端优化汇总第三周 (4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1529 2021-09-18 17:16:36 +08:00
b20a74de00 整理下载管理类方法描述 2021-09-18 15:52:11 +08:00
090b5fe04f Added 添加页面注释 2021-09-18 15:49:57 +08:00
b7dca9b652 Fixed 搜索框长按复制粘贴文字为英文的问题
Fixed 搜索结果无数据时点击反馈时无反应的问题(应该跳转到反馈页)
Fixed 搜索关键字相同时点击搜索的逻辑问题(相同关键字时不进行搜索)
2021-09-18 15:44:50 +08:00
c9402dec4e 整理下载管理类方法描述 2021-09-18 15:39:51 +08:00
6dc097f60f Fixed 状态栏颜色问题
Fixed UI调整
2021-09-18 12:01:55 +08:00
636a826583 【光环助手V5.3.0】后台优化汇总第三周(10) https://git.ghzs.com/pm/halo-app-issues/-/issues/1525 2021-09-18 10:41:25 +08:00
5c313ab7ac Fixed 解决ToolBar后退按钮适配问题
Updated 移除Flutter Debug标记
2021-09-17 18:52:58 +08:00
4aacc425a9 简单弹窗样式整理https://git.ghzs.com/halo/android/assistant-android/-/issues/39 2021-09-17 16:28:24 +08:00
lyr
c7db544684 【光环助手V5.3.0】光环前端优化汇总第三周(2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1529 2021-09-17 16:09:21 +08:00
c7833bae11 处理游戏实体数组越界问题 2021-09-17 15:53:00 +08:00
lyr
3d777781b8 【光环助手V5.3.0】新社区4期-游戏详情页埋点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1468 2021-09-17 11:57:21 +08:00
f2501eeb3b Fixed 意见反馈Q群点击无反应
Fixed 全版本点击跳转黑屏
Fixed 意见反馈Q群被写死
Fixed 搜索无结果缺省图丢失
Updated 使用Aop的形式注入Flutter Module代码代替面向接口编程形式
2021-09-16 17:41:29 +08:00
b72f9819d7 【光环助手V5.3.0】光环前端优化汇总第三周(3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1529 2021-09-16 16:59:22 +08:00
5f134fad33 【光环助手V5.3.0】新社区4期-详情页布局优化(0916UI测试问题 2,6,7,8,9,10) https://git.ghzs.com/pm/halo-app-issues/-/issues/1500 2021-09-16 16:09:36 +08:00
21cec51fad 优化首页滑动流畅度 2021-09-16 15:19:54 +08:00
048d3aa361 【光环助手V5.3.0】光环前端优化汇总第三周(1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1529 2021-09-16 14:24:44 +08:00
lyr
8871d12fa8 微信分享图片改用FileProvider方式分享 2021-09-16 11:43:54 +08:00
lyr
67f931f9c8 修复游戏动态-分享图片过程中保存路径与分享路径不一致的问题 2021-09-16 11:15:57 +08:00
lyr
2fe9d6c3e1 修复游戏动态-分享图片过程中保存路径与分享路径不一致的问题 2021-09-16 11:05:51 +08:00
a662d5b90c Merge branch 'feature-issue1473' into dev-5.3.0 2021-09-16 10:52:56 +08:00
c30ec4bd87 【光环助手V5.3.0】通用链接内容合集-客户端需求 https://git.ghzs.com/pm/halo-app-issues/-/issues/1473 2021-09-16 10:49:48 +08:00
ee0a3a9d05 Updated 将Flutter调用Native方法的实现逻辑优化
Fixed 反馈页背景色不正确问题
2021-09-15 19:58:56 +08:00
094a8abfe2 Merge branch 'feature-v2signature_verifier' into 'dev-5.3.0'
提高 V2 签名公钥获取效率

See merge request halo/android/assistant-android!124
2021-09-15 11:36:57 +08:00
e1c39e90a9 提高 V2 签名公钥获取效率 2021-09-15 11:36:57 +08:00
aca3f2d2fc 【光环助手V5.3.0】曝光事件数据埋点优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1322 2021-09-15 10:02:02 +08:00
05d95259e2 Deleted 移除多余的build.gradle声明 2021-09-14 18:54:55 +08:00
c278359909 Fixed 解决Flutter模块加载慢的问题(库下载导致的问题)
Fixed 添加缺失的Flutter资源混淆声明
2021-09-14 18:40:15 +08:00
lyr
b5d8d40462 【光环助手V5.3.0】游戏搜索-数据埋点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1403 2021-09-14 18:25:35 +08:00
c1b7c380da 【光环助手V5.3.0】曝光事件数据埋点优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1322 2021-09-14 16:21:54 +08:00
e4f0ba0495 Merge branch 'cherry-pick-92941bcc' into 'dev'
修复新分类-精选-专题合集图片无法正常显示问题

See merge request halo/android/assistant-android!123
2021-09-14 15:53:12 +08:00
lyr
ccd4a479a9 修复新分类-精选-专题合集图片无法正常显示问题
(cherry picked from commit 92941bcc38)
2021-09-14 15:52:20 +08:00
lyr
92941bcc38 修复新分类-精选-专题合集图片无法正常显示问题 2021-09-14 15:49:50 +08:00
6b55875547 调整开服快速填写弹窗逻辑 2021-09-14 11:06:00 +08:00
a0947a84d9 Merge remote-tracking branch 'origin/dev' into dev-5.3.0 2021-09-14 10:33:47 +08:00
fca0e03180 【光环助手V5.3.0】曝光事件数据埋点优化 (4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1322 2021-09-14 10:31:28 +08:00
3dad7d8850 【光环助手V5.3.0】曝光事件数据埋点优化 20210913测试问题(2) 2021-09-13 18:46:31 +08:00
bc18301dc1 Fixed 修复正式环境下帮助与反馈接口报错问题
Added 添加阿里云镜像,加速镜像加载
Fixed Flutter方法注入的方法名错误问题
Added 将Flutter使用的资源加入混淆白名单
Added 添加Flutter模块相关的混淆规则
2021-09-13 18:37:08 +08:00
1ebe8eba4e 【光环助手V5.3.0】曝光事件数据埋点优化 (20210913测试问题 1~3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1322 2021-09-13 18:27:09 +08:00
lyr
3ec3388b08 【光环助手V5.3.0】游戏搜索-客户端功能优化(第8期)https://git.ghzs.com/pm/halo-app-issues/-/issues/1402 2021-09-13 18:22:27 +08:00
71c2e8eb6b 移除WebFragment多余代码 2021-09-13 17:49:55 +08:00
009aa9f73e ROM 信息获取支持鸿蒙 2021-09-13 14:49:19 +08:00
14e38bc738 调整开服快速填写弹窗UI 2021-09-13 11:20:27 +08:00
74ffd80b10 处理评论列表卡片不存在机型信息时版本信息显示错位的问题 2021-09-12 18:08:22 +08:00
cb7a04ff09 修复长按环境标签不能保存部分页面快捷跳转的问题 2021-09-12 17:24:49 +08:00
96640ad91e 修复长按环境标签不能保存部分页面快捷跳转的问题 2021-09-12 16:44:34 +08:00
3791dfd558 Updated 使用Fresco代替Glide加载Flutter图片 2021-09-10 18:20:34 +08:00
91017caac4 Merge remote-tracking branch 'origin/dev-5.3.0' into dev-5.3.0 2021-09-10 18:13:48 +08:00
5d8720687a 【光环助手V5.3.0】曝光事件数据埋点优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1322 2021-09-10 18:11:34 +08:00
75b1234376 Merge branch 'feature-download_btn' into dev-5.3.0 2021-09-10 16:44:28 +08:00
1e866a9eab 【光环助手V5.3.0】新社区4期-详情页布局优化(调整页面边距) https://git.ghzs.com/pm/halo-app-issues/-/issues/1500 2021-09-10 16:31:14 +08:00
80e58080c4 整理 WebFragment/WebActivity 的代码https://git.ghzs.com/halo/android/assistant-android/-/issues/36 2021-09-10 16:29:00 +08:00
394036a0d0 处理首页内存泄露问题 2021-09-10 15:53:11 +08:00
2f2355f36e 首页视频封面图改用fresco加载 2021-09-10 11:37:27 +08:00
e711e30c21 Update README.md 2021-09-09 11:45:12 +08:00
e3d32057ee 统一处理列表下载按钮文案和样式(优化) https://git.ghzs.com/halo/android/assistant-android/-/issues/10 2021-09-09 11:42:18 +08:00
e42c4e595e 【光环助手V5.3.0】埋点数据问题汇总[3(2)] https://git.ghzs.com/pm/halo-app-issues/-/issues/1369 2021-09-09 09:38:17 +08:00
73d71e5dac qa详情链接增加qa_title参数 2021-09-09 09:31:01 +08:00
d6cad14e7b Merge branch 'dev' into dev-5.3.0
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/fragment/HomeSearchToolWrapperFragment.kt
2021-09-08 20:18:15 +08:00
lyr
9beaf93595 调整 DialogFragment 的实例化代码(优化)https://git.ghzs.com/halo/android/assistant-android/-/issues/38#note_117062 2021-09-08 18:46:17 +08:00
074610a9f0 统一处理列表下载按钮文案和样式 https://git.ghzs.com/halo/android/assistant-android/-/issues/10 2021-09-08 18:04:10 +08:00
7881edaf21 Merge remote-tracking branch 'origin/dev-5.3.0' into dev-5.3.0 2021-09-08 17:05:30 +08:00
f2643308f9 【光环助手V5.3.0】游戏详情-开服相关优化(2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1469 2021-09-08 17:05:17 +08:00
1168be9a92 更新 leakCanary 和 lottie 的依赖版本 2021-09-08 16:12:03 +08:00
c34d6141bc 【光环助手V5.3.0】游戏详情-开服相关优化(1)https://git.ghzs.com/pm/halo-app-issues/-/issues/1469 2021-09-08 15:31:12 +08:00
e1f62e3a3a 去掉不必要的 armeabi 2021-09-08 14:55:20 +08:00
1d067dbaa2 【光环助手V5.3.0】Q&A管理-事件埋点(1(1)-(4)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1393 2021-09-08 10:44:17 +08:00
f1b6e742d9 Merge branch 'dev' into feature-flutter-feedback 2021-09-08 09:58:24 +08:00
149448c04c Deleted 移除QaActivity的startActivity方法(已弃用) 2021-09-08 09:57:13 +08:00
e388a60d43 Updated 修改跳转问题页的Hook为DirectUtils.directToQa和DirectUtils.directToQaCollection
Added 将DirectUtils加入app模块的proguard-rules.txt中
2021-09-08 09:56:16 +08:00
ea49ef2691 Updated 更新Flutter Module 2021-09-07 22:39:07 +08:00
741b2c23d2 Updated 更新Flutter Module 2021-09-07 18:40:16 +08:00
dca3542cec 停用游戏替换数量统计 2021-09-07 18:12:49 +08:00
lyr
4a37af4ce4 调整 DialogFragment 的实例化代码 https://git.ghzs.com/halo/android/assistant-android/-/issues/38 2021-09-07 17:31:49 +08:00
a2e907faeb 调整新游戏更新页面的隐藏逻辑 2021-09-07 15:28:07 +08:00
7e33243fbb 【光环助手V5.3.0】游戏详情-开服相关优化(2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1469 2021-09-07 15:04:00 +08:00
2b0abb1740 Added 添加可选优化编译选项 2021-09-07 12:49:17 +08:00
60e4f2a378 Fixed 解决接入Flutter模块后编译速度慢的问题,大大提升编译速度
Added 接口Host改为从app中读取
2021-09-07 12:28:52 +08:00
a4603213b9 修复新游戏更新页面其它游戏版本忽略更新无效的问题 2021-09-07 11:56:02 +08:00
da9ea61fbf 显示版本更新为 5.3.0 2021-09-07 11:08:33 +08:00
4ceef741ea 【光环助手V5.3.0】光环前端优化汇总第二周 (3, 4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1517 2021-09-07 11:06:21 +08:00
d323fc07f9 【光环助手V5.3.0】光环前端优化汇总第二周(1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1517 2021-09-06 18:19:38 +08:00
2356e175f9 【光环助手V5.3.0】光环前端优化汇总第二周(2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1517 2021-09-06 18:00:52 +08:00
7a9c0ed8f2 修复光环插件更新没有在新游戏更新页面显示的问题 2021-09-06 17:42:51 +08:00
d406cf3fcb 【光环助手V5.3.0】新社区4期-详情页分享面板权限优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1501 2021-09-06 15:16:13 +08:00
9741cac1cf Updated 提升编译速度 2021-09-06 10:55:09 +08:00
456519e06c 优化首页滑动改变背景颜色性能问题 2021-09-03 17:01:53 +08:00
bad6b495b1 Updated 提升编译速度 2021-09-03 16:53:50 +08:00
638e0c988f 【光环助手V5.3.0】新社区4期-提问帖详情页评论区权限优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1502 2021-09-03 16:02:18 +08:00
40aaabad7d 测试环境api版本改为v5d3d0 2021-09-03 15:49:11 +08:00
46cf8cfbdc 网页保存图片到图库添加存储权限检测 2021-09-03 15:32:58 +08:00
2226bcf515 调整游戏更新页面我的版本的筛选逻辑 2021-09-03 15:22:56 +08:00
27ceb7b042 Updated 提升编译速度 2021-09-03 11:24:23 +08:00
c2226f8452 Updated 提升编译速度 2021-09-03 11:21:57 +08:00
38dcdaf8e3 修复社区 tab 选中异常问题 2021-09-03 11:15:38 +08:00
2a440e91fa 修改首页点击tab切换背景异常问题 2021-09-03 10:16:02 +08:00
2cecb9a14c 修复随机生成数组的越界问题 2021-09-02 19:05:25 +08:00
241f976866 修复返回活动页面显示异常的问题 2021-09-02 16:32:02 +08:00
560c270723 添加初始化微博 SDK 异常日志 2021-09-02 12:36:47 +08:00
5159957722 【光环助手V5.3.0】Q&A管理-前端优化需求(第三期)(1(3),2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1394 2021-09-02 11:14:32 +08:00
cfb851c23e Merge branch 'dev' into feature-flutter-feedback 2021-09-02 10:17:54 +08:00
e45218de17 微调游戏详情详情信息间距 2021-09-02 09:45:04 +08:00
0ff34bd3f7 【光环助手V5.3.0】Q&A管理-前端优化需求(第三期)(1(1)(2),3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1394 2021-09-01 17:59:11 +08:00
6bc7a9f504 Merge branch 'dev' into feature-flutter-feedback 2021-09-01 17:45:25 +08:00
7ea53f305d merge 2021-09-01 17:45:15 +08:00
lyr
4a04f6bb0f 修复开服表游戏分类筛选结果为空而导致的闪退问题 2021-09-01 12:35:46 +08:00
633b7df021 升级 QQ/微信 SDK https://git.ghzs.com/halo/android/assistant-android/-/issues/37 2021-09-01 11:47:57 +08:00
4ddaccd3f4 Updated Flutter AndroidManifest声明迁移到hook模块 2021-09-01 10:50:49 +08:00
389c20b6bf 更改游戏安装引导显示逻辑 2021-09-01 10:10:58 +08:00
20149b6041 更改游戏安装引导显示逻辑 2021-08-31 20:57:16 +08:00
2f6af6c18e Updated 优化代码 2021-08-31 18:54:41 +08:00
b764a43abe Merge remote-tracking branch 'origin/dev' into dev 2021-08-31 18:08:20 +08:00
c3fb8b9c89 修复帖子详情页底部的阴影显示问题 2021-08-31 18:08:09 +08:00
d574b09dfa 完善安装引导显示逻辑 2021-08-31 17:11:13 +08:00
7fd7197909 版本升级至 5.1.2 2021-08-31 15:12:20 +08:00
58178d2871 Merge branch 'hotfix-v5.1.1-371-crash' into 'release'
处理一系列闪退

See merge request halo/android/assistant-android!122
2021-08-31 15:09:32 +08:00
880838c263 处理一系列闪退
1. 修复文本自动填充偶发的闪退
2. 修复软键盘弹起时切换页面触发的闪退
3. 修复在后台执行下载任务时偶发的闪退
4. 修复用户发表旧视频内容在新版本个人主页浏览时的闪退
5. 修复游戏详情专区返回时偶发的闪退
2021-08-31 15:06:33 +08:00
c196d5cdf5 【光环助手V5.2.0】小米等设备第三方安装引导功能-客户端(测试1、2、4,数据埋点0830测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1410 2021-08-31 14:23:37 +08:00
c370edaa72 Merge remote-tracking branch 'origin/dev-5.2.0' into dev-5.2.0 2021-08-30 21:38:14 +08:00
0640aee554 更新游戏安装引导接口 2021-08-30 21:37:06 +08:00
8a5f11e6bd 移除测试用旧游戏更新 tab 2021-08-30 21:31:43 +08:00
92b6ebcb08 更新游戏安装引导接口 2021-08-30 21:28:49 +08:00
758c331af5 【光环助手V5.2.0】新社区3期-论坛展示-社区搜索页(20200830UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1405 2021-08-30 19:12:49 +08:00
17e5c0535d Merge branch 'hotfix-v5.1.1-indicator' into 'release'
修改首页 indicator 不显示问题

See merge request halo/android/assistant-android!121
2021-08-30 18:06:01 +08:00
66fee84b49 Merge branch 'hotfix-v5.1.1-setting' into 'release'
修复"游戏下载设置页面的自动安装游戏选项和自动关注游戏选项默认值错误"问题

See merge request halo/android/assistant-android!120
2021-08-30 18:00:20 +08:00
lyr
bbe0350f2c 修复"游戏下载设置页面的自动安装游戏选项和自动关注游戏选项默认值错误"问题 2021-08-30 17:57:19 +08:00
b31fe4b94a Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-30 17:46:45 +08:00
11b414fd29 修改首页indicator不显示问题 2021-08-30 17:45:48 +08:00
1a35b5ded0 修改首页indicator不显示问题 2021-08-30 17:35:50 +08:00
4245c1511e Merge remote-tracking branch 'origin/release' into dev-5.2.0
# Conflicts:
#	dependencies.gradle
2021-08-30 17:22:45 +08:00
989c3706dd 【光环助手V5.2.0】专题推荐图标功能优化 (20210826测试问题 3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1390 2021-08-30 17:09:17 +08:00
49500768db 修复正式环境微博分享内容不显示的问题 2021-08-30 16:28:17 +08:00
65becdac85 【光环助手V5.2.0】下载管理相关优化 (0830UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1244 2021-08-30 15:49:42 +08:00
125c78fccd 【光环助手V5.2.0】光环前端优化汇总第四周 (0827测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1454 2021-08-30 15:44:14 +08:00
lyr
58c576b950 【光环助手V5.2.0】开服表相关优化(0827测试 2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1220#note_115509 2021-08-30 14:25:53 +08:00
b08aa46992 【光环助手V5.2.0】下载管理相关优化 (0830测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1244 2021-08-30 14:20:25 +08:00
c77f0cf817 完成下载管理相关优化(20210827UI测试问题 & 0827测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1244 2021-08-30 11:44:42 +08:00
bb0378c216 【光环助手V5.2.0】游戏礼包优化(第二期)(0830测试2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1325 2021-08-30 11:26:35 +08:00
f2e7a64e99 【光环助手V5.2.0】适龄等级提示(0830测试反馈2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1397 2021-08-30 10:04:59 +08:00
759cacf933 更新游戏安装引导实体类 2021-08-27 17:32:34 +08:00
lyr
0b213253ce 【光环助手V5.2.0】开服表相关优化(0827测试 1)https://git.ghzs.com/pm/halo-app-issues/-/issues/1220#note_115509 2021-08-27 16:11:56 +08:00
f0ab333892 【光环助手V5.2.0】首页轮播图显示背景色功能(20210826UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1321 2021-08-27 16:06:26 +08:00
lyr
7516db3a60 【光环助手V5.2.0】开服表相关优化(0827测试 1)https://git.ghzs.com/pm/halo-app-issues/-/issues/1220#note_115509 2021-08-27 15:54:34 +08:00
lyr
29cd798ca8 【光环助手V5.2.0】开服表相关优化(0826测试 第3、4、5、6点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1220#note_115199 2021-08-27 12:00:57 +08:00
40cb902baf Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-27 11:51:07 +08:00
15bbcf3eae 完成下载管理相关优化(0826测试 2~5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1244 2021-08-27 11:49:06 +08:00
f508e103c1 【光环助手V5.2.0】适龄等级提示(20210827UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1397 2021-08-27 11:38:38 +08:00
94fa36125d Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-27 10:41:59 +08:00
1c754a6dd0 【光环助手V5.2.0】首页轮播图显示背景色功能(20210827测试问题1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1321 2021-08-27 10:41:42 +08:00
609e4a49b8 完成光环前端优化汇总第三周(0827测试 1,2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1449 2021-08-27 09:45:18 +08:00
98710c9542 Merge remote-tracking branch 'origin/dev-5.2.0' into dev-5.2.0 2021-08-26 18:34:33 +08:00
0e2f5fdf53 【光环助手V5.2.0】浏览器安装功能优化(0826测试、0826UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1323 2021-08-26 18:34:01 +08:00
e9ed5530d5 Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-26 18:28:36 +08:00
113f1d3ed8 【光环助手V5.2.0】新社区3期-论坛展示-头像信息(20210826UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1406 2021-08-26 18:28:26 +08:00
3fc60a57b6 完成光环前端优化汇总第四周(1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1454 2021-08-26 18:18:52 +08:00
d14e09187e 完成光环前端优化汇总第三周(1) 2021-08-26 18:10:26 +08:00
bf90131841 完成开服表相关优化(0826测试第7点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1220 2021-08-26 17:22:39 +08:00
40b7a16b21 Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-26 16:26:43 +08:00
882d7273a1 【光环助手V5.2.0】首页轮播图显示背景色功能(20210826测试问题1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1321 2021-08-26 16:26:38 +08:00
6cfeddf3d4 处理首页 debug 状态闪退 2021-08-26 11:43:38 +08:00
lyr
a06e6c581d 优化开测表加载逻辑 2021-08-26 11:04:52 +08:00
bd8bda40ec 【光环助手V5.2.0】新社区3期-论坛展示-头像信息(0825 产品验收问题2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1406 2021-08-26 10:42:08 +08:00
efd81a4e0c 版本升级到 5.1.1 2021-08-26 10:22:00 +08:00
493e08ce2c Merge branch 'hotfix-v5.1.0-370-crash' into 'release'
修复 5.1.0-370 的一些闪退

See merge request halo/android/assistant-android!119
2021-08-26 10:21:23 +08:00
1906451060 修复一系列闪退问题
1. 修复因为特殊处理光遇更新判断而触发的其它下载闪退问题
2. 修复帖子视频详情页点击点赞/关注等按钮触发一键登录时的闪退问题
3. 修复下载完成点击通知栏下载完成通知偶发的闪退问题
4. 修复从首页安利墙发表新安利后点击到达评论可能触发的闪退问题
5. 修复论坛详情在页面被内存回收重建时下拉刷新的闪退问题
6. 修复游戏详情页浏览专区在页面被内存回收重建时点返回按钮偶发的闪退问题
7. 修复开测表列表不存在推荐标签时的闪退问题
2021-08-26 10:17:08 +08:00
f865e95ae1 Revert "临时简单处理光遇游戏包点击更新时会卡住的问题"
This reverts commit 86edc8b9
2021-08-25 18:23:30 +08:00
480e18b79a 完成开服表相关优化(0825测试2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1220#note_114996 2021-08-25 18:02:17 +08:00
6436bc6191 修复下载管理优化 0824测试问题 https://git.ghzs.com/pm/halo-app-issues/-/issues/1244 2021-08-25 18:00:24 +08:00
7ec7eb29e4 【光环助手V5.2.0】新社区3期-论坛展示-社区搜索页 https://git.ghzs.com/pm/halo-app-issues/-/issues/1405 2021-08-25 17:47:04 +08:00
5deb744ba3 Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-25 14:56:06 +08:00
e908939560 【光环助手V5.2.0】新社区3期-论坛展示-头像信息(0825 产品验收问题1,2,3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1406 2021-08-25 14:55:55 +08:00
e02708bb0e 【光环助手V5.2.0】浏览器安装功能优化(0825测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1323 2021-08-25 14:52:41 +08:00
4826c35a70 【光环助手V5.2.0】新社区3期-论坛展示-内容举报弹窗(0825 产品验收问题1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1421 2021-08-25 11:52:59 +08:00
c51f185438 Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-24 18:07:40 +08:00
65bd15b573 处理首页轮播图Tab切换颜色问题 2021-08-24 18:07:30 +08:00
5283254c1a Merge remote-tracking branch 'origin/dev-5.2.0' into dev-5.2.0 2021-08-24 17:41:53 +08:00
15458df982 添加UI通用组件 2021-08-24 17:41:22 +08:00
eb2228fb17 Added HaloApp添加Native方法注册入口--initFlutterDyncExtension 2021-08-24 15:15:49 +08:00
0e27e8ee3b 处理礼包详情使用说明不显示问题 2021-08-24 14:29:05 +08:00
17455efe82 应用版本更新至 5.2.0 2021-08-24 11:45:35 +08:00
e2c80cb416 Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-24 11:33:49 +08:00
a48b4db550 【光环助手V5.2.0】游戏礼包优化(第二期)(4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1325 2021-08-24 11:33:40 +08:00
1d66637b11 补充数据埋点注释 2021-08-24 10:20:07 +08:00
lyr
3e7e98d555 添加在新页面打开全屏webview的JS调用方法 2021-08-23 17:21:44 +08:00
60e542923c Updated 将hook模块集成到Flutter Module中 2021-08-23 17:13:23 +08:00
e737d16f0f 【光环助手V5.2.0】小米等设备第三方安装引导功能-数据埋点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1412 2021-08-23 16:16:22 +08:00
a04219518b Merge remote-tracking branch 'origin/dev-5.2.0' into dev-5.2.0
# Conflicts:
#	app/src/main/res/values/colors.xml
2021-08-23 15:39:20 +08:00
ce2c6bed0a 【光环助手V5.2.0】小米等设备第三方安装引导功能-客户端 https://git.ghzs.com/pm/halo-app-issues/-/issues/1410 2021-08-23 15:37:35 +08:00
84a08493e3 优化首页轮播图切换时的背景显示效果 2021-08-23 14:42:32 +08:00
3d411fa49c 优化首页轮播图显示背景色性能问题 2021-08-23 11:55:07 +08:00
c0a0c90a49 Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-23 10:58:02 +08:00
a67d41296e 【光环助手V5.2.0】适龄等级提示 https://git.ghzs.com/pm/halo-app-issues/-/issues/1397 2021-08-23 10:57:50 +08:00
25a95ddba0 Added Flutter Hook 2021-08-22 10:48:03 +08:00
fac255a27c 完成游戏更新相关 https://git.ghzs.com/pm/halo-app-issues/-/issues/1392 2021-08-21 15:27:42 +08:00
0811c8dc15 完成专题推荐图标功能优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1390 2021-08-21 15:12:04 +08:00
7537963a8e 支持url跳转视频详情 2021-08-21 14:50:33 +08:00
36f8b1de0b Merge branch 'feature-issues1244' into 'dev-5.2.0'
下载管理相关优化

See merge request halo/android/assistant-android!118
2021-08-21 10:57:45 +08:00
1d9e1bc9d8 下载管理相关优化 2021-08-21 10:57:45 +08:00
bb9fd24068 【光环助手V5.1.0】新社区2期-埋点文档(0820 产品验收问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-08-20 16:13:21 +08:00
9c044ae98b Merge branch 'dev-5.2.0' of git.ghzs.com:halo/android/assistant-android into dev-5.2.0 2021-08-20 15:25:37 +08:00
9807883d65 【光环助手V5.2.0】游戏礼包优化(第二期)(1-3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1325 2021-08-20 15:25:26 +08:00
lyr
04e410615d 开服表向上加载末尾增加开服时间 2021-08-20 11:25:42 +08:00
eda1eea2de 完成社区探索之旅(测试汇总8) https://git.ghzs.com/pm/halo-app-issues/-/issues/1285 2021-08-20 10:54:52 +08:00
lyr
c1f6ef35f2 优化开服表页面处理数据逻辑 2021-08-20 10:09:41 +08:00
lyr
b61ce1e42a 【光环助手V5.2.0】开服表相关优化(前端部分)https://git.ghzs.com/pm/halo-app-issues/-/issues/1220 2021-08-19 18:20:10 +08:00
62e60f4309 修改删除社区帖子toast文案 2021-08-19 15:50:17 +08:00
c6f544136f 测试环境api版本改为v5d2d0 2021-08-19 11:13:42 +08:00
d588315759 【光环助手V5.2.0】新社区3期-论坛展示-头像信息 https://git.ghzs.com/pm/halo-app-issues/-/issues/1406 2021-08-19 11:04:19 +08:00
b1fef73c54 【光环助手V5.1.0】新社区运营验收问题(11) https://git.ghzs.com/pm/halo-app-issues/-/issues/1442 2021-08-18 18:54:56 +08:00
c4fc31c963 【光环助手V5.1.0】新社区运营验收问题(17) https://git.ghzs.com/pm/halo-app-issues/-/issues/1442 2021-08-18 18:49:15 +08:00
85b0d0eef4 【光环助手V5.2.0】新社区3期-论坛展示-内容举报弹窗 https://git.ghzs.com/pm/halo-app-issues/-/issues/1421 2021-08-18 17:36:20 +08:00
812eb842e2 【光环助手V5.1.0】新社区运营验收问题(12) https://git.ghzs.com/pm/halo-app-issues/-/issues/1442 2021-08-18 14:43:51 +08:00
783cb95f24 对接版主删除视频评论接口 2021-08-18 11:04:14 +08:00
63b7f294c4 【光环助手V5.2.0】浏览器安装功能优化(1-3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1323 2021-08-18 10:10:48 +08:00
80c95b0f11 【光环助手V5.2.0】首页轮播图显示背景色功能 https://git.ghzs.com/pm/halo-app-issues/-/issues/1321 2021-08-17 17:23:46 +08:00
5969fa2ca5 网页跳转上传视频的论坛类型改为可选 2021-08-17 15:47:45 +08:00
0187608918 【光环助手V5.1.0】新社区运营验收问题(27) https://git.ghzs.com/pm/halo-app-issues/-/issues/1442 2021-08-17 10:57:55 +08:00
f7b155d3b4 Fixed 修复一些BUG 2021-08-17 10:36:14 +08:00
82656a7187 Deleted 移除无用的文件 2021-08-17 09:57:20 +08:00
9993824d93 Updated 将Flutter模块设为子module 2021-08-16 19:11:03 +08:00
e2fa4990bd 重构我的光环页面https://git.ghzs.com/halo/android/assistant-android/-/issues/31 2021-08-16 18:34:38 +08:00
6753d04817 Merge branch 'dev' into dev-5.2.0
# Conflicts:
#	app/build.gradle
2021-08-16 18:26:15 +08:00
9679c75f0a Added 添加自定义SearchBar 2021-08-16 16:53:28 +08:00
c203fa5b9d Updated 完成通用tabbar开发
Updated 优化项目架构
2021-08-16 16:24:40 +08:00
98531376d9 Merge remote-tracking branch 'origin/dev' into dev 2021-08-16 15:30:27 +08:00
86edc8b919 临时简单处理光遇游戏包点击更新时会卡住的问题 2021-08-16 15:30:15 +08:00
7903751d85 【光环助手V5.1.0】新社区运营验收问题(23) https://git.ghzs.com/pm/halo-app-issues/-/issues/1442 2021-08-16 14:28:35 +08:00
2620a29a2b Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-16 11:25:57 +08:00
5cc40c09dc 【光环助手V5.1.0】新社区运营验收问题(17) https://git.ghzs.com/pm/halo-app-issues/-/issues/1442 2021-08-16 11:25:46 +08:00
5c02d37852 启动事件添加应用安装来源信息 2021-08-16 11:19:04 +08:00
2e5d445d65 完成暑期好游安利大赏(0813测试汇总反馈 1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1284 2021-08-16 10:19:28 +08:00
456822f56f Added 添加通用Tabbar 2021-08-13 18:23:50 +08:00
c8bae7d89b 【光环助手V5.1.0】新社区运营验收问题(2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1442 2021-08-13 16:20:20 +08:00
a5aceb3d1f 更新微博 SDK https://git.ghzs.com/halo/android/assistant-android/-/issues/30 2021-08-13 16:13:01 +08:00
578ed5d1f1 Added 添加反馈页
Added 添加通用AppBar
Added 设置基础路由
2021-08-12 18:11:17 +08:00
3ef7343309 Merge branch 'weibo' into dev-5.2.0 2021-08-12 16:41:24 +08:00
2c98c38721 修改视频贴详情原创标签被切割 2021-08-11 23:05:33 +08:00
lyr
4f28c54591 论坛活动url增加分类id参数 2021-08-11 22:47:07 +08:00
06b5b885e9 修改视频帖详情展开按钮是否显示 2021-08-11 21:05:42 +08:00
612cc2ca9b Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-11 18:26:56 +08:00
18f7b695e5 修改发布视频帖内容来源改为必选 2021-08-11 18:26:45 +08:00
f29e2fe1de 添加简单的扩大点击区域方法 2021-08-11 18:14:56 +08:00
799c22093f 处理编译警告 2021-08-11 16:38:06 +08:00
2496c1d96e 修复全屏网页网络异常加载失败时无法返回的问题 2021-08-11 16:28:31 +08:00
8ee76af30f 优化内存占用 2021-08-11 15:53:40 +08:00
lyr
2f35442558 【光环助手V5.1.0】 0809产品测试问题(第14点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1439 2021-08-11 15:38:01 +08:00
lyr
81fa6a6233 【光环助手V5.1.0】 0809产品测试问题(第11点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1439 2021-08-11 15:10:51 +08:00
lyr
e5778d5b5f 【光环助手V5.1.0】 0809产品测试问题(第6点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1439 2021-08-10 17:39:35 +08:00
f69d607ecb Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-10 16:48:30 +08:00
79fc2e1f93 【光环助手V5.1.0】 0809产品测试问题(3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1439 2021-08-10 16:48:20 +08:00
6dfdbb9ee8 【光环助手V5.1.0】 0809产品测试问题(5)https://git.ghzs.com/pm/halo-app-issues/-/issues/1439 2021-08-10 15:55:35 +08:00
5d8f7b3f8d 模拟器游戏启动时更新金手指文件 https://git.ghzs.com/pm/halo-app-issues/-/issues/1362 2021-08-10 12:02:17 +08:00
cd4601a9c9 添加下载更新简单文件的方法 2021-08-10 12:00:04 +08:00
462a011401 提交LGLibrary 2021-08-10 09:09:59 +08:00
31d55dae14 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-09 20:03:56 +08:00
8dc9731299 【光环助手V5.1.0】新社区2期-论坛展示-提问帖详情页(0806UI测试1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1347 2021-08-09 20:03:45 +08:00
66c19c644e 【光环助手V5.1.0】 0809运营测试问题(1)https://git.ghzs.com/pm/halo-app-issues/-/issues/1438 2021-08-09 17:24:31 +08:00
2b617e2697 完成单机模拟器-金手指功能后台(0809测试反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1362 2021-08-09 16:35:24 +08:00
3a60a497e1 更换版主修改问题提示弹窗文案 2021-08-09 16:15:18 +08:00
a9337aee63 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-09 15:52:49 +08:00
c80cd47ccc 【光环助手V5.1.0】 0803产品运营测试问题(2)(8) https://git.ghzs.com/pm/halo-app-issues/-/issues/1428 2021-08-09 15:52:38 +08:00
lyr
d9c2371488 移除冗余的资源文件 https://git.ghzs.com/halo/android/assistant-android/-/issues/33 2021-08-09 15:42:15 +08:00
096d19751a 【光环助手V5.1.0】0805产品测试问题(9)https://git.ghzs.com/pm/halo-app-issues/-/issues/1434 2021-08-09 15:15:41 +08:00
ef70119090 尝试修复 Loghub 日志上报 logstore 错乱的问题 https://github.com/aliyun/aliyun-log-android-sdk/issues/68 2021-08-09 11:56:16 +08:00
95dba71bb9 添加异步登录 JS Api 2021-08-09 10:17:16 +08:00
ec37c7a6f8 【光环助手V5.1.0】 0806产品运营测试问题(7) https://git.ghzs.com/pm/halo-app-issues/-/issues/1436 2021-08-09 09:28:17 +08:00
dcc9352301 调整 Kotlin 版本 2021-08-06 14:34:43 +08:00
c509c6bb38 添加使用快捷方式启动模拟器游戏失败的日志记录 2021-08-06 12:01:23 +08:00
4784d689f8 处理内嵌网页的一些空指针异常 2021-08-06 12:00:31 +08:00
8903a075be Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-06 11:46:37 +08:00
48d6e91b0e 【光环助手V5.1.0】0805运营测试问题(4,6,8) https://git.ghzs.com/pm/halo-app-issues/-/issues/1435 2021-08-06 11:46:27 +08:00
30865239d2 【光环助手V5.1.0】 0806产品运营测试问题(3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1436 2021-08-06 11:31:09 +08:00
8b7cd92ae8 微调 chucker 编译脚本 2021-08-06 11:21:46 +08:00
69f336553e 调整 Kotlin 版本,修复 XAPK 解压在 4.4 以下设备的闪退问题 2021-08-06 11:07:10 +08:00
ed82f96ae3 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-06 10:17:22 +08:00
8f02016a76 【光环助手V5.1.0】新社区2期-论坛展示-提问帖详情页(0806UI测试1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1347 2021-08-06 10:17:12 +08:00
c06f397d12 【光环助手V5.1.0】0805产品测试问题(9,10,12)https://git.ghzs.com/pm/halo-app-issues/-/issues/1434 2021-08-06 10:08:34 +08:00
lyr
912b7280cd 【光环助手V5.1.0】0805产品测试问题(第5点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1434 2021-08-05 17:15:48 +08:00
50f7dd2c63 【光环助手V5.1.0】0805产品测试问题(3,4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1434 2021-08-05 15:49:12 +08:00
23469543c7 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-05 14:48:14 +08:00
2d3f70dd12 【光环助手V5.1.0】 0804产品运营测试问题(1)(12) https://git.ghzs.com/pm/halo-app-issues/-/issues/1430 2021-08-05 14:48:09 +08:00
lyr
f57d19e797 【光环助手V5.1.0】 0804产品运营测试问题(1)(第10点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1430#note_112113 2021-08-05 10:48:52 +08:00
lyr
8c529f0724 【光环助手V5.1.0】新社区2期-论坛展示-信息流-提问帖评论(0804UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1344#note_111919 2021-08-05 10:19:24 +08:00
lyr
1583f1957a 完成积分体系-光能中心、光能屋UI更改 https://git.ghzs.com/pm/halo-app-issues/-/issues/1300 2021-08-04 18:44:40 +08:00
lyr
676ccb133f 【光环助手V5.1.0】 0803产品运营测试问题(2)(第3点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1428 2021-08-04 15:45:31 +08:00
489b8143a1 【光环助手V5.1.0】 0804产品运营测试问题(1) (1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1430 2021-08-04 15:06:44 +08:00
c4cf3efa21 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-04 14:26:57 +08:00
871cfd638d 【光环助手V5.1.0】新社区2期-论坛展示-帖子详情页(0804UI测试1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1346 2021-08-04 14:26:47 +08:00
lyr
1f3ae1c687 【光环助手V5.1.0】 0803产品运营测试问题(1)(第23、24点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1426 2021-08-04 14:21:55 +08:00
59eb101a48 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-04 12:14:09 +08:00
b3b8b6ba29 【光环助手V5.1.0】 0803产品运营测试问题(2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1428 2021-08-04 12:14:02 +08:00
lyr
42baaa8950 【光环助手V5.1.0】 0803产品运营测试问题(2)(第3点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1428 2021-08-04 11:07:51 +08:00
lyr
61ad70d3b8 【光环助手V5.1.0】新社区2期-论坛展示-信息流-提问帖评论(0804UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1344#note_111919 2021-08-04 10:59:35 +08:00
lyr
04252e3b91 【光环助手V5.1.0】 0803产品运营测试问题(22)https://git.ghzs.com/pm/halo-app-issues/-/issues/1426 2021-08-03 18:20:41 +08:00
lyr
b40543d7b5 【光环助手V5.1.0】 0803产品运营测试问题(16)https://git.ghzs.com/pm/halo-app-issues/-/issues/1426 2021-08-03 17:30:26 +08:00
lyr
903fa49b71 【光环助手V5.1.0】 0803产品运营测试问题(13)https://git.ghzs.com/pm/halo-app-issues/-/issues/1426 2021-08-03 16:28:08 +08:00
lyr
03ae2699c6 【光环助手V5.1.0】 0803产品运营测试问题(11)https://git.ghzs.com/pm/halo-app-issues/-/issues/1426 2021-08-03 16:09:05 +08:00
8ecc4078bb 【光环助手V5.1.0】 0803产品运营测试问题(1,20,27,31) https://git.ghzs.com/pm/halo-app-issues/-/issues/1426 2021-08-03 15:59:02 +08:00
ebaf4f02f0 【光环助手V5.1.0】新社区2期-论坛展示-论坛详情-版主成员(0802UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1345 2021-08-03 11:21:03 +08:00
e85437379a 调整金手指功能数据字段 https://git.ghzs.com/pm/halo-app-issues/-/issues/1362 2021-08-02 17:20:44 +08:00
2e9642019b 微博SDK更新到11.6 2021-08-02 17:08:58 +08:00
5a77522a04 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-02 16:18:48 +08:00
e5512604fa 修改上传图片的 type 参数 2021-08-02 16:18:39 +08:00
lyr
146a46f8be 【光环助手V5.1.0】0802产品测试问题(1)https://git.ghzs.com/pm/halo-app-issues/-/issues/1423 2021-08-02 16:04:00 +08:00
91f33f06d3 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-02 15:59:00 +08:00
59da7b6ba6 【光环助手V5.1.0】新社区2期-视频帖发布页(0802UI测试1,2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1355 2021-08-02 15:58:45 +08:00
lyr
0a1ad238f8 【光环助手V5.1.0】新社区2期-论坛详情页引导(0802UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1352#note_111430 2021-08-02 15:43:24 +08:00
302e6c145c 【光环助手V5.1.0】新社区2期-论坛展示-帖子详情页(0802UI测试1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1346 2021-08-02 15:37:40 +08:00
a6bbf0dfc7 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-08-02 15:17:06 +08:00
9c3d22964c 【光环助手V5.1.0】0730产品测试问题(10,22,23,24) https://git.ghzs.com/pm/halo-app-issues/-/issues/1422 2021-08-02 15:16:56 +08:00
ab60ed8473 【光环助手V5.1.0】新社区2期-论坛展示-论坛详情-版主成员(0802UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1345 2021-08-02 14:31:07 +08:00
lyr
9a00e70cc4 【光环助手V5.1.0】0730产品测试问题(5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1422 2021-08-02 11:16:46 +08:00
lyr
35954f52c5 【光环助手V5.1.0】0730产品测试问题(1-3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1422 2021-08-02 10:58:25 +08:00
e13d80d063 【光环助手V5.1.0】0730产品测试问题(11)https://git.ghzs.com/pm/halo-app-issues/-/issues/1422 2021-08-02 10:13:56 +08:00
73ed15689d 基本完成金手指功能 https://git.ghzs.com/pm/halo-app-issues/-/issues/1362 2021-07-30 18:07:23 +08:00
lyr
65d949bade 【光环助手V5.1.0】新社区2期-推荐页引导(0729UI测试)https://git.ghzs.com/pm/halo-app-issues/-/issues/1350#note_110977 2021-07-29 18:08:01 +08:00
33d0d01051 【光环助手V5.1.0】新社区2期-帖子发布页(0729UI测试2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1354 2021-07-29 16:34:29 +08:00
9998ed0a14 【光环助手V5.1.0】新社区2期-发布页引导(帖子、提问)(0729UI测试1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1351 2021-07-29 16:15:41 +08:00
85a8a17acb Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-29 15:44:34 +08:00
4032cb8abe 【光环助手V5.1.0】新社区2期-视频帖发布页(0729UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1355 2021-07-29 15:44:18 +08:00
fc2e87063e Merge remote-tracking branch 'origin/dev' into dev 2021-07-29 14:34:37 +08:00
a63b809642 清理测试内容 2021-07-29 14:34:22 +08:00
c30048c268 正式环境接口切换到 5.0 2021-07-29 11:01:41 +08:00
956d5a39be 修复优化汇总(1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1342#note_110932 2021-07-29 09:59:51 +08:00
76fd1ab7e3 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-28 20:47:40 +08:00
2c4c954c64 【光环助手V5.1.0】新社区2期-论坛展示-信息流-审核中/审核不通过(2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1343 2021-07-28 20:47:23 +08:00
aef4da961d 正式包丢失渠道后的默认渠道改为 GH_LOST 2021-07-28 17:24:17 +08:00
lyr
31e00bb681 【光环助手V5.1.0】新社区2期-埋点文档(版规说明遗漏部分) https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-07-28 16:50:30 +08:00
369fdd24ef 调整内容及评论投诉弹窗交互 https://git.ghzs.com/pm/halo-app-issues/-/issues/1373 2021-07-28 15:28:25 +08:00
2a57994c7f Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-28 15:21:58 +08:00
6f84b14277 处理升级gsyplayer版本报错问题 2021-07-28 15:21:52 +08:00
10ed05c8ef Merge branch 'feature-upgrade_gsyplayer' into dev
# Conflicts:
#	app/build.gradle
2021-07-28 15:05:18 +08:00
lyr
799bd1042f 【光环助手V5.1.0】新社区2期-埋点文档 https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-07-28 14:07:27 +08:00
6f9acab2d2 修改版主申请审核中的字段 2021-07-28 11:29:45 +08:00
lyr
387d8eb5af 优化社区-论坛页代码 2021-07-27 18:31:10 +08:00
c813c5d5ef 暂时放弃 arm64 的 SO 2021-07-27 17:35:58 +08:00
1c6df6741f 完成光环前端优化汇总第五周(3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1388 2021-07-27 16:45:11 +08:00
b54ab5f824 支持网页将图片保存至图库中 https://git.ghzs.com/pm/halo-app-issues/-/issues/1286 2021-07-27 16:31:05 +08:00
lyr
37fdf6c18e 【光环助手V5.1.0】光环前端优化汇总第五周(4)https://git.ghzs.com/pm/halo-app-issues/-/issues/1388 2021-07-27 16:00:00 +08:00
2685de9b3e Merge remote-tracking branch 'origin/dev' into dev 2021-07-27 15:17:59 +08:00
c049100f5f webView 支持选择本地图片 2021-07-27 15:16:13 +08:00
711d1f9d65 【光环助手V5.1.0】新社区2期-论坛展示-论坛详情-版主成员https://git.ghzs.com/pm/halo-app-issues/-/issues/1345 2021-07-27 15:14:11 +08:00
5d7453afec 完成浏览论坛页面时间任务功能 https://git.ghzs.com/pm/halo-app-issues/-/issues/1285 2021-07-27 11:00:21 +08:00
e4acf466ba 版主加精问题评论更换接口 2021-07-26 14:49:45 +08:00
2d66cbd29c 【光环助手V5.1.0】新社区2期-埋点文档(分享面板) https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-07-26 10:07:10 +08:00
8786f7d500 【光环助手V5.1.0】新社区2期-论坛展示-提问帖详情页 https://git.ghzs.com/pm/halo-app-issues/-/issues/1347 2021-07-23 18:07:13 +08:00
3d40d7a819 新增默认选中论坛首页tab的 url scheme https://git.ghzs.com/pm/halo-app-issues/-/issues/1285 2021-07-22 17:50:22 +08:00
6f7862a0f2 新增默认选中论坛首页tab的 url scheme https://git.ghzs.com/pm/halo-app-issues/-/issues/1285 2021-07-22 17:37:43 +08:00
58c6211d54 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-22 17:34:02 +08:00
d10b187a1f 视频帖详情版主修改活动标签 2021-07-22 17:33:52 +08:00
lyr
1ebf34c83a 【光环助手V5.1.0】新社区2期-埋点文档(版规说明页以及处理漏传)https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-07-22 16:53:01 +08:00
01e2a3c708 1.版主修改活动标签 2.审核中、审核不通过点击图片toast提示 2021-07-22 15:08:20 +08:00
lyr
c9b97552d4 【光环助手V5.1.0】新社区2期-埋点文档(论坛详情页)https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-07-21 17:59:30 +08:00
428f39aa86 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-21 11:13:48 +08:00
5fecb723bc 【光环助手V5.1.0】新社区2期-论坛展示-帖子详情页(1(1)(3)(4),2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1346 2021-07-21 11:13:38 +08:00
0168b0d93a 【光环助手V5.1.0】新社区2期-帖子发布页(4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1354 2021-07-21 11:09:39 +08:00
895fa510fe 【光环助手V5.1.0】新社区2期-论坛展示-视频帖详情页 https://git.ghzs.com/pm/halo-app-issues/-/issues/1348 2021-07-21 11:04:00 +08:00
0aae59a1ba 恢复网页跳转旧视频流详情页的能力 2021-07-21 10:39:11 +08:00
574a2b4dc7 完成内容举报弹窗更改 https://git.ghzs.com/pm/halo-app-issues/-/issues/1373 2021-07-21 09:25:30 +08:00
acae608966 添加跳转至个人主页定位到视频分类的 url scheme https://git.ghzs.com/pm/halo-app-issues/-/issues/1284#note_107842 2021-07-20 18:29:37 +08:00
lyr
6ca6c34f92 【光环助手V5.1.0】新社区2期-埋点文档(部分)https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-07-20 17:55:13 +08:00
16724a2d2e 完成部分内容举报弹窗更改(帖子、提问帖、视频帖) https://git.ghzs.com/pm/halo-app-issues/-/issues/1373 2021-07-20 16:15:54 +08:00
8b50cc561a 补充判断用户类型的逻辑 https://git.ghzs.com/pm/halo-app-issues/-/issues/1293 2021-07-20 09:23:01 +08:00
1ec1d482c4 【光环助手V5.1.0】新社区2期-埋点文档(跳出事件埋点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-07-19 19:49:47 +08:00
869b9d507b Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-19 16:21:14 +08:00
514fe66347 【光环助手V5.1.0】新社区2期-埋点文档 https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-07-19 16:21:04 +08:00
lyr
657c91a5ef 【光环助手V5.1.0】新社区2期-论坛展示-信息流-提问帖评论 https://git.ghzs.com/pm/halo-app-issues/-/issues/1344 2021-07-19 11:29:36 +08:00
82354a1156 添加从网页跳转至发视频页面的跳转 urlScheme https://git.ghzs.com/pm/halo-app-issues/-/issues/1284 2021-07-16 18:05:40 +08:00
b7619f0c93 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-16 16:38:25 +08:00
598a3ad0b6 【光环助手V5.1.0】新社区2期-埋点文档(部分) https://git.ghzs.com/pm/halo-app-issues/-/issues/1303 2021-07-16 16:38:18 +08:00
bf0be93dc9 完成"返回活动"的小浮窗功能 https://git.ghzs.com/pm/halo-app-issues/-/issues/1284 2021-07-16 15:28:54 +08:00
lyr
90a676f778 【光环助手V5.1.0】新社区2期-论坛展示-信息流-审核中/审核不通过 https://git.ghzs.com/pm/halo-app-issues/-/issues/1343 2021-07-16 10:29:50 +08:00
lyr
a675e4bbe3 【光环助手V5.1.0】光环前端优化汇总第二周(6)https://git.ghzs.com/pm/halo-app-issues/-/issues/1342 2021-07-16 10:08:01 +08:00
5eee8c6785 更改积分"返回活动"浮窗的实现方式 2021-07-15 18:11:12 +08:00
3c54e4313c Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-15 17:08:09 +08:00
67c4b76de9 【光环助手V5.1.0】新社区2期-帖子发布页(UI部分) https://git.ghzs.com/pm/halo-app-issues/-/issues/1354 2021-07-15 17:07:59 +08:00
34fd08d06a 【光环助手V5.1.0】新社区2期-视频帖发布页(UI部分) https://git.ghzs.com/pm/halo-app-issues/-/issues/1355 2021-07-15 17:07:21 +08:00
lyr
d08b95021d 暂时隐藏社区-论坛-其他福利-万能加速器(因为跳转目的地不唯一) 2021-07-15 16:12:16 +08:00
8517a2aef1 应用启动日志上报添加包名/签名等其它信息 2021-07-14 14:57:43 +08:00
lyr
cbe90141f1 修改社区-推荐引导图错位问题 2021-07-14 14:50:10 +08:00
lyr
fd43bc9426 【光环助手V5.1.0】新社区2期-论坛详情页引导 https://git.ghzs.com/pm/halo-app-issues/-/issues/1352 2021-07-14 14:48:52 +08:00
lyr
34a143b632 【光环助手V5.1.0】新社区2期-推荐页引导 https://git.ghzs.com/pm/halo-app-issues/-/issues/1350 2021-07-14 09:39:56 +08:00
d96e02eca0 完成光环前端优化汇总第二周(1~3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1342 2021-07-13 17:52:36 +08:00
lyr
398b1ae58b 【光环助手V5.1.0】新社区2期-引导页 https://git.ghzs.com/pm/halo-app-issues/-/issues/1349 2021-07-13 14:30:59 +08:00
0749205bef 更新离线已收录游戏列表 2021-07-13 14:13:56 +08:00
54ec115fee 修复判断新老用户接口问题 2021-07-13 12:37:08 +08:00
lyr
ebe7b84dc8 【光环助手V5.1.0】个性化推荐合规相关(2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1308 2021-07-13 09:38:49 +08:00
lyr
332abe66f5 【光环助手V5.1.0】光环前端优化汇总第二周(5 优化)https://git.ghzs.com/pm/halo-app-issues/-/issues/1342 2021-07-12 14:33:31 +08:00
lyr
9dccbfbd51 【光环助手V5.1.0】光环前端优化汇总第二周(5)https://git.ghzs.com/pm/halo-app-issues/-/issues/1342 2021-07-12 14:13:22 +08:00
23a8c9e6aa 临时处理 JCenter 依赖问题 2021-07-12 11:32:41 +08:00
1e4408ac6e 【光环助手V5.1.0】新社区2期-消息中心相关优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1309 2021-07-09 16:06:33 +08:00
lyr
05ece9c999 光环助手v5.0.0-新社区后台问题汇总(20210708)(8 优化) https://git.ghzs.com/pm/halo-app-issues/-/issues/1364 2021-07-09 15:18:23 +08:00
lyr
216905e455 光环助手v5.0.0-新社区APP端问题汇总(20210708)(8) https://git.ghzs.com/pm/halo-app-issues/-/issues/1364 2021-07-09 14:27:37 +08:00
a1bd88dad8 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-09 12:41:14 +08:00
16c66c707f 【光环助手V5.1.0】新社区2期-发布页引导(帖子、提问)https://git.ghzs.com/pm/halo-app-issues/-/issues/1351 2021-07-09 12:40:56 +08:00
lyr
50cdea2b03 光环助手v5.0.0-新社区APP端问题汇总(20210707)(11) https://git.ghzs.com/pm/halo-app-issues/-/issues/1360 2021-07-09 11:12:49 +08:00
95b0fda15a 版本号更新到 5.1.0 2021-07-09 10:29:32 +08:00
9c99273f81 光环助手v5.0.0-新社区APP端问题汇总(20210707)(1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1360 2021-07-08 21:47:46 +08:00
8d9d36a5df 移除部分无用代码 2021-07-08 18:25:18 +08:00
lyr
b22d168e97 光环助手v5.0.0-新社区APP端问题汇总(20210706)(10 优化) https://git.ghzs.com/pm/halo-app-issues/-/issues/1358 2021-07-08 15:53:49 +08:00
lyr
1fee166e3b 光环助手v5.0.0-新社区APP端问题汇总(20210707)(13) https://git.ghzs.com/pm/halo-app-issues/-/issues/1360 2021-07-08 14:54:25 +08:00
lyr
7c098c29b2 光环助手v5.0.0-新社区APP端问题汇总(20210706)(10) https://git.ghzs.com/pm/halo-app-issues/-/issues/1358 2021-07-08 14:42:19 +08:00
ffc9dc46e2 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-08 11:19:41 +08:00
c491a4084c 修改选择活动标签抖动问题 2021-07-08 11:19:24 +08:00
lyr
0f076a03c5 光环助手v5.0.0-新社区APP端问题汇总(20210707)(11) https://git.ghzs.com/pm/halo-app-issues/-/issues/1360 2021-07-08 10:44:33 +08:00
3345ab2044 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-07 20:41:58 +08:00
5874bdd311 发布帖子/问题视频未上传完不能发布 2021-07-07 20:41:34 +08:00
lyr
4669211196 微调我的光环UI 2021-07-07 18:47:29 +08:00
4879e7f0aa Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-07 18:27:53 +08:00
f5283d386b 1.视频详情点赞按钮防重复点击实现限制为2s 2.修改插入视频时间显示错误问题 2021-07-07 18:27:44 +08:00
lyr
602333f923 光环助手v5.0.0-新社区APP端问题汇总(20210707)第6点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1360 2021-07-07 16:39:23 +08:00
e9810c129e 光环助手v5.0.0-新社区后台问题汇总(20210707)(4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1361 2021-07-07 15:22:56 +08:00
c503f15df9 光环助手v5.0.0-新社区APP端问题汇总(20210706)(13) https://git.ghzs.com/pm/halo-app-issues/-/issues/1358 2021-07-07 14:40:02 +08:00
cba1012bbd Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-07 11:47:39 +08:00
646493ae61 光环助手v5.0.0-新社区APP端问题汇总(20210706)(11) https://git.ghzs.com/pm/halo-app-issues/-/issues/1358 2021-07-07 11:47:30 +08:00
b649089ab0 更换发帖子/问题插入视频接口 2021-07-07 11:46:49 +08:00
lyr
e97fd9023e 光环助手v5.0.0-新社区APP端问题汇总(20210706)第2点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1358 2021-07-07 10:42:39 +08:00
478dd658ab 光环助手v5.0.0-新社区APP端问题汇总(20210706)(5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1358 2021-07-06 18:04:47 +08:00
b313feac01 Merge branch 'dev' of git.ghzs.com:halo/android/assistant-android into dev 2021-07-06 17:24:36 +08:00
c04b82549e 视频帖详情页全屏播放顶部增加标题 2021-07-06 17:24:23 +08:00
lyr
842e62f909 微调个人主页和新分类2.0的UI 2021-07-06 16:28:12 +08:00
lyr
51c6de0506 微调社区-论坛UI 2021-07-06 15:20:19 +08:00
lyr
d350f65c1f 修改活动详情测试环境地址 2021-07-05 18:36:49 +08:00
lyr
aaf8e28abc 光环助手v5.0.0-新社区APP端问题汇总(4)https://git.ghzs.com/pm/halo-app-issues/-/issues/1329 2021-07-05 18:28:07 +08:00
7cb921e969 选择活动标签接口增加location参数 2021-07-05 16:35:57 +08:00
lyr
3a4b41058d 光环助手V5.0.0-新社区展示功能(20200702UI测试问题、UI测试问题补充)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_106840 2021-07-05 15:03:28 +08:00
lyr
26308d1852 光环助手V5.0.0-新社区其他相关改动功能(0702 产品测试问题 1)https://git.ghzs.com/pm/halo-app-issues/-/issues/1254#note_106775 2021-07-05 14:24:34 +08:00
af54932309 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-07-05 11:51:03 +08:00
83799048ed 光环助手v5.0.0-新社区APP端问题汇总(2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1329 2021-07-05 11:50:54 +08:00
ce410ad2a0 更改网页 url 的地址添加来源 query 的实现 2021-07-05 09:30:55 +08:00
933c40458f 社区插入视频length字段的统一单位为秒 2021-07-05 09:24:10 +08:00
6ae7578281 光环助手V5.0.0-新社区展示功能(0702 产品测试问题1,3,4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-07-03 15:25:57 +08:00
lyr
72b804e26e 处理论坛信息流GIF图边框显示不对的问题 2021-07-02 18:03:48 +08:00
lyr
7e58cdc59e 修改社区-论坛Tab每次进入页面都会被切割的问题 2021-07-02 17:20:20 +08:00
lyr
d782ea90b6 光环助手V5.0.0-新社区展示功能(0701 产品测试问题 3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_106529 2021-07-02 15:18:49 +08:00
lyr
efffd752f5 提交漏传资源文件 2021-07-02 14:25:20 +08:00
47f3f45fe6 修复推荐优先专题游戏没有推荐信息时简介不显示大小的问题 2021-07-02 10:30:00 +08:00
b4e12e2ec3 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-07-01 21:08:15 +08:00
2d331f6294 光环助手V5.0.0-新社区展示功能(0701 产品测试问题4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-07-01 21:08:09 +08:00
lyr
feb4137f84 光环助手V5.0.0-新社区展示功能(V5.0.0-新社区展示功能-UI测试问题汇总 7 gif没有边框问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105161 2021-07-01 18:57:45 +08:00
6a2c4a2967 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-07-01 18:16:32 +08:00
68fc5532ff 1.用户回答了问题消息通知跳转新回答详情 2.删除无用导包 2021-07-01 18:16:26 +08:00
lyr
43ae479271 光环助手V5.0.0-新社区展示功能(0630 产品测试问题 5)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_106346 2021-07-01 18:12:52 +08:00
7a3ea4d939 处理版本升级时的数据库更新问题 2021-07-01 18:04:43 +08:00
lyr
1bcb343355 光环助手V5.0.0-新社区展示功能(0630 运营测试问题 4)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_106346 2021-07-01 17:54:36 +08:00
1b7a601cee 处理游戏详情点击启动状态的下载按钮的滚动问题 2021-07-01 16:26:53 +08:00
lyr
8bc9544dc2 光环助手V5.0.0-新社区展示功能(0630 运营测试问题 2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_106346 2021-07-01 16:03:13 +08:00
e586e65e44 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-07-01 15:47:38 +08:00
8096da5f50 光环助手V5.0.0-新社区展示功能(0701 产品测试问题1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-07-01 15:47:34 +08:00
91868fda15 微调专题游戏推荐语布局 2021-07-01 14:48:23 +08:00
lyr
a71e8824ce 光环助手V5.0.0-新社区展示功能(0629 产品测试问题 15-17)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_106052 2021-07-01 11:04:28 +08:00
6cbc354921 完成前端优化汇总(16) https://git.ghzs.com/pm/halo-app-issues/-/issues/1260 2021-06-30 18:14:50 +08:00
lyr
79e2077a3d 光环助手V5.0.0-新社区展示功能(0629 产品测试问题 14)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_106052 2021-06-30 18:04:55 +08:00
lyr
6ea3ed067d 光环助手V5.0.0-新社区展示功能(V5.0.0-新社区展示功能-UI测试问题汇总 7)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105805 2021-06-30 17:06:22 +08:00
lyr
84fe33becc 光环助手V5.0.0-新社区其他相关改动功能 (0629UI问题 4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1254#note_106173 2021-06-30 16:38:25 +08:00
276f53fead Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-30 16:15:06 +08:00
0789cc6fdf 光环助手V5.0.0-新社区其他相关改动功能(0625 运营测试问题2(1)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1254 2021-06-30 16:15:01 +08:00
lyr
3a563b7bd0 光环助手V5.0.0-新社区其他相关改动功能 (0628 产品测试问题 2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1254#note_105919 2021-06-30 15:55:30 +08:00
lyr
9b8ba0c3e6 光环助手V5.0.0-新社区其他相关改动功能(20210622UI测试问题、0623 产品测试问题、0625 运营测试问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1254 2021-06-30 15:38:38 +08:00
258f054161 光环助手V5.0.0-新社区展示功能(0629 运营测试问题22) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-30 15:15:19 +08:00
258c8db0f9 光环助手V5.0.0-新社区展示功能(0629 运营测试问题23,24) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-30 11:44:16 +08:00
741d0b11af Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-29 18:47:13 +08:00
9267896b50 光环助手V5.0.0-新社区展示功能(0629 运营测试问题13) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-29 18:47:03 +08:00
85c0bd69c1 调整 VolumeObserver 入参,避免内存泄漏 2021-06-29 18:45:58 +08:00
2436507b7b Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-29 17:58:06 +08:00
1b68b07e53 光环助手V5.0.0-新社区展示功能(0629 产品测试问题8,10) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-29 17:57:55 +08:00
lyr
c4ba28de1a 光环助手V5.0.0-新社区展示功能(20200629UI测试问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_106168 2021-06-29 17:26:37 +08:00
lyr
8daa55c16a 光环助手V5.0.0-新社区展示功能 (0629 产品测试问题 第4、5点) 2021-06-29 17:09:47 +08:00
lyr
5e6c6aca13 光环助手V5.0.0-新社区展示功能(V5.0.0-新社区展示功能-UI测试问题补充 第2点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105806 2021-06-29 16:31:06 +08:00
lyr
e08ab790ee 优化新分类2.0引导UI 2021-06-29 15:59:26 +08:00
lyr
a394901cb4 光环前端优化汇总(2021年5月)(20210629UI问题补充) https://git.ghzs.com/pm/halo-app-issues/-/issues/1260#note_106103 2021-06-29 15:34:12 +08:00
lyr
2aaa7f2795 优化社区-论坛Tab的UI 2021-06-29 15:07:10 +08:00
7b0d2a25c8 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-29 09:40:35 +08:00
e3f553a96f 光环助手V5.0.0-新社区展示功能(0628 产品测试问题4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-29 09:40:25 +08:00
lyr
809a25e3e2 光环助手V5.0.0-新社区展示功能(0628测试问题-热门论坛应该不展示已关注的论坛)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105293 2021-06-28 18:58:20 +08:00
lyr
88041d9b5f 优化社区-推荐Tab搜索框UI 2021-06-28 16:57:40 +08:00
lyr
a11d741f6f 修复社区推荐Tab和论坛详情在当前论坛列表为空时,发布新内容而未显示的问题 2021-06-28 16:44:06 +08:00
1283def6da 修复首页搜索栏嵌套滚动不灵敏的问题 2021-06-28 16:33:21 +08:00
9c621c31a2 光环助手V5.0.0-新社区展示功能(0621 产品测试问题8(11)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-28 15:54:50 +08:00
9e3f40723f 光环助手V5.0.0-新社区发布功能(0628 产品测试问题1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1252 2021-06-28 15:13:46 +08:00
682bb9a3e7 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-28 14:53:55 +08:00
9f2d164c70 光环助手V5.0.0-新社区展示功能(0628 产品测试问题1,2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-28 14:53:49 +08:00
lyr
bad5130047 修复社区-推荐Tab本人新发布的视频贴时间显示不对问题 2021-06-28 14:23:23 +08:00
e3f831e0ca 修复应用内网页因为地址带特殊字符而出现的加载问题 2021-06-28 11:45:04 +08:00
a1432452f5 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-28 11:31:30 +08:00
b3cc68b7c6 修改跳转至新的问题详情和回答详情 2021-06-28 11:31:25 +08:00
lyr
cc1f5a269a 修改个人主页发布Tab-切换子tab视频还在播放的问题 2021-06-28 11:27:25 +08:00
a2892a713a Merge branch 'release' into dev-5.0.0
# Conflicts:
#	dependencies.gradle
2021-06-28 11:01:59 +08:00
lyr
c342e22ce4 Merge remote-tracking branch 'origin/dev-5.0.0' into dev-5.0.0 2021-06-28 10:02:51 +08:00
lyr
57dcbab096 光环助手V5.0.0-新社区展示功能(V5.0.0-新社区展示功能-UI测试问题补充)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105806 2021-06-28 10:02:39 +08:00
5aa4c5bcbc 光环助手V5.0.0-新社区展示功能(0625 产品测试问题3,4(2)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-28 09:58:16 +08:00
lyr
039e1fc957 光环助手V5.0.0-新社区展示功能(0625 产品测试问题 第2点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105792 2021-06-25 18:55:30 +08:00
f7b2d10543 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-25 17:24:13 +08:00
38972eca76 光环助手V5.0.0-新社区发布功能(UI测试问题汇总0621AM 9) https://git.ghzs.com/pm/halo-app-issues/-/issues/1252 2021-06-25 17:24:05 +08:00
lyr
c2d853d709 【光环助手V5.0.0】提问帖相关需求(V5.0.0-新社区提问帖相关需求-UI测试问题汇总 第1点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1251#note_105291 2021-06-25 16:47:04 +08:00
lyr
239209dbf2 光环助手V5.0.0-新社区展示功能(0623 产品测试问题 第1、2、4点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105473 2021-06-25 16:05:43 +08:00
lyr
ba1f3e20d3 优化新分类2.0引导图逻辑 2021-06-25 15:02:57 +08:00
lyr
92ac62d949 光环助手V5.0.0-新社区展示功能(20210622UI测试问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105369 2021-06-25 15:00:29 +08:00
6499e3b718 修改视频贴详情用户关注按钮样式 2021-06-25 11:12:23 +08:00
5f0d2604ec Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-25 10:09:49 +08:00
5f7bb6cb49 光环助手V5.0.0-新社区发布功能(0622 产品测试问题2(2)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1252 2021-06-25 10:09:40 +08:00
lyr
7360eef244 光环助手V5.0.0-新社区展示功能(V5.0.0-新社区展示功能-UI测试问题汇总 第1-10点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105161 2021-06-25 09:27:03 +08:00
52e6feab59 修改视频帖详情游戏标签样式 2021-06-24 20:56:09 +08:00
5f44252410 视频贴详情调整视频区域高度 2021-06-24 18:35:13 +08:00
7ae3b1cafb Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-24 18:13:49 +08:00
0fb77e79fd 光环助手V5.0.0-新社区发布功能(UI测试问题补充0624PM 1,2,3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1252 2021-06-24 18:13:39 +08:00
lyr
d4ae878947 光环前端优化汇总(2021年5月)(第9-11点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1260 2021-06-24 17:58:04 +08:00
37a2e3cc0e 光环助手V5.0.0-新社区发布功能(UI测试问题汇总4,9) https://git.ghzs.com/pm/halo-app-issues/-/issues/1252 2021-06-24 17:04:21 +08:00
30595741cc Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-24 16:46:02 +08:00
11f177d572 完成视频贴详情仿bilibili交互效果 2021-06-24 16:45:51 +08:00
9e13675ca5 完成前端优化汇总(0623测试2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1260#note_105557 2021-06-24 15:14:34 +08:00
144a0641b6 完成游戏专题功能优化(20210617测试问题6) 和 20210622UI测试 2021-06-24 15:13:35 +08:00
95266f6f68 【光环助手V5.0.0】提问帖相关需求(0623测试反馈2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1251 2021-06-24 11:27:56 +08:00
9ded647c0d 光环助手V5.0.0-新社区发布功能(0623 产品测试问题1,2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1252 2021-06-24 10:57:49 +08:00
f566e4d5c3 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-24 10:40:31 +08:00
5df3efd087 光环助手V5.0.0-新社区展示功能(0623 产品测试问题5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-24 10:40:19 +08:00
98f4361bf0 Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-24 10:09:21 +08:00
000d1e020a 完成关于MOD游戏下载用户的相关限制(APP 接口修改) https://git.ghzs.com/pm/halo-app-issues/-/issues/1293 2021-06-24 10:07:58 +08:00
lyr
93431a7e37 光环助手V5.0.0-新社区展示功能(0622 产品测试问题 2、4、5)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105293 2021-06-23 17:59:34 +08:00
lyr
d54523cdb6 光环助手V5.0.0-新社区展示功能(0621 产品测试问题 0、1、2、5)https://git.ghzs.com/pm/halo-app-issues/-/issues/1253#note_105232 2021-06-23 15:59:03 +08:00
ed468b7c73 【光环助手V5.0.0】提问帖相关需求(0623测试反馈1,3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1251 2021-06-23 15:55:11 +08:00
bad6211bf5 光环助手V5.0.0-新社区发布功能 0622 产品测试问题 1,2(1)(3)(4)(5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1252 2021-06-23 14:33:27 +08:00
2743d4d0de Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-22 15:43:58 +08:00
a0f5387917 光环助手V5.0.0-新社区展示功能(0621 产品测试问题4,6,7,8(1,3,4,5,7,8,9,11)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-22 15:43:49 +08:00
1abfcfdb51 abiFilters 添加 arm64 2021-06-22 14:28:42 +08:00
ecc0a75f52 光环助手V5.0.0-新社区展示功能(UI测试问题汇总10-14) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-21 16:53:21 +08:00
c98bf26337 光环助手V5.0.0-新社区发布功能(UI测试问题汇总1,3-9) https://git.ghzs.com/pm/halo-app-issues/-/issues/1252 2021-06-21 15:44:25 +08:00
187d07d02d 完成光环前端优化汇总(5, 14, 16, 17) https://git.ghzs.com/pm/halo-app-issues/-/issues/1260 2021-06-18 17:51:59 +08:00
c47c23ad21 修复因懒加载优化而造成的下载进度更新异常问题 2021-06-18 09:46:30 +08:00
8d011ae7ef Merge branch 'hotfix-v4.9.6-337-generic_bugs' into 'release'
修复下载模拟器时会暂停其它下载任务的问题

See merge request halo/android/assistant-android!117
2021-06-17 18:38:04 +08:00
36b58383f7 版本更新至 4.9.6-338 2021-06-17 18:37:32 +08:00
e6ea1738e5 光环前端优化汇总(2021年5月)(4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1260 2021-06-17 16:32:55 +08:00
70b7689ac5 修复下载模拟器时会暂停其它下载任务的问题 2021-06-17 15:18:41 +08:00
40983ecebc 光环前端优化汇总(2021年5月)(3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1260 2021-06-17 14:41:35 +08:00
47b0a8d1ac 版本更新至 4.9.6-337 2021-06-17 10:43:33 +08:00
1ae63d3010 Merge branch 'hotfix-v4.9.6-336-recreate' into 'release'
修复首页和游戏详情页页面重建时的 tab 显示问题

See merge request halo/android/assistant-android!116
2021-06-17 10:39:51 +08:00
fbe73ce4da Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-16 18:43:48 +08:00
d46617237f 光环助手V5.0.0-新社区展示功能(社区搜索页的搜索结果增加论坛tab) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-16 18:43:43 +08:00
lyr
0894957d73 修改帖子再次编辑修改成功后的闪退问题 2021-06-16 17:58:15 +08:00
9b9777ae19 修复首页和游戏详情页页面重建时的 tab 显示问题 2021-06-16 16:18:55 +08:00
lyr
7f2145d0ef 论坛信息流视频在切换tab时暂停播放 2021-06-16 15:19:21 +08:00
lyr
acefbba6bf Merge remote-tracking branch 'origin/dev-5.0.0' into dev-5.0.0 2021-06-16 14:12:31 +08:00
lyr
660a091b7b 【光环助手5.0.0】一键登录相关优化(第1点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1294 2021-06-16 14:12:25 +08:00
103078d63e 修改图片预览页面点击查看帖子异常 2021-06-16 11:00:28 +08:00
lyr
178395f531 优化论坛信息流审核中视频的显示 2021-06-16 09:52:52 +08:00
lyr
8db213d040 【光环助手V5.0.0】提问帖相关需求(0615测试反馈 3)https://git.ghzs.com/pm/halo-app-issues/-/issues/1251#note_104578 2021-06-16 09:51:13 +08:00
lyr
5904d3c5c7 光环助手V5.0.0-新社区展示功能(前置说明 1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1253 2021-06-15 17:53:01 +08:00
1a511ebbad 【光环助手V5.0.0】提问帖相关需求 (0615测试反馈 1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1251 2021-06-15 17:09:04 +08:00
ef97e8cc6d 新社区插入视频后封面上传到oss 2021-06-15 16:07:21 +08:00
814cef6218 Merge branch 'hotfix-v4.9.6-336-crash' into 'release'
1.修复Xapk解压过程中获取解压文件大小时的闪退问题

See merge request halo/android/assistant-android!115
2021-06-15 11:55:02 +08:00
lyr
fd6c4836d4 1.修复Xapk解压过程中获取解压文件大小时的闪退问题
2.修复新分类2.0游戏列表时的空指针问题
3.修复新分类2.0已选分类列表的数组越界问题
2021-06-15 11:51:22 +08:00
9df138ed7c Merge branch 'hotfix-v4.9.6-336-install' into 'release'
特殊处理山寨机在后台开启使用浏览器安装时的安装 intent

See merge request halo/android/assistant-android!114
2021-06-15 11:02:37 +08:00
7b11b0e99a Merge branch 'dev-5.0.0' of git.ghzs.com:halo/android/assistant-android into dev-5.0.0 2021-06-11 17:47:24 +08:00
01034f093a 处理合并冲突 2021-06-11 17:45:52 +08:00
8e28766449 Merge branch 'feature-bbs' into dev-5.0.0
# Conflicts:
#	app/src/main/AndroidManifest.xml
#	app/src/main/java/com/gh/common/util/NewLogUtils.kt
#	app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt
#	app/src/main/java/com/gh/gamecenter/qa/dialog/MoreFunctionPanelDialog.kt
#	app/src/main/res/layout/fragment_home.xml
#	app/src/main/res/values/colors.xml
2021-06-11 17:34:03 +08:00
lyr
d06d0bd15c 一键登录设置每步超时时间为1.5秒 2021-06-11 17:04:31 +08:00
4fe4a33b80 光环前端优化汇总(2021年5月)(13) https://git.ghzs.com/pm/halo-app-issues/-/issues/1260 2021-06-11 14:55:10 +08:00
4a8e91bbff 对接视频帖加精 2021-06-11 10:09:13 +08:00
lyr
b1f6c7d55c 1.优化游戏详情顶部视频和论坛信息流视频的静音设置
2.修改个人主页发布记录的类型、点赞、评论、回答数据字段转化
2021-06-10 18:06:55 +08:00
lyr
727eeac52e 修改游戏详情顶部静音设置 2021-06-10 16:26:35 +08:00
fb26ec0c13 Merge branch 'feature-bbs' of git.ghzs.com:halo/android/assistant-android into feature-bbs 2021-06-10 15:45:55 +08:00
3e25619bf8 论坛修改点赞、评论、回答、收藏数据字段 2021-06-10 15:45:50 +08:00
lyr
e81fa4ff1a 论坛根据类型展示图标 2021-06-10 11:41:02 +08:00
d7d2bf2667 更换问题收藏/取消收藏接口 2021-06-10 11:16:39 +08:00
c763a0a9e6 完成选择论坛-搜索论坛功能 2021-06-10 10:28:06 +08:00
1f34f95e7c 特殊处理山寨机在后台开启使用浏览器安装时的安装 intent 2021-06-10 09:53:54 +08:00
2afb99b603 修改编辑视频帖发布按钮一直是置灰状态 2021-06-09 18:38:06 +08:00
lyr
2e09ac033b 优化视频贴类型转化 2021-06-09 18:25:27 +08:00
lyr
54747143d1 1.修改论坛详情-视频Tab无法下拉刷新问题
2.修改论坛详情-列表视频贴未显示内容问题
3.修改论坛详情-全部Tab的问答贴回答数量不对问题
2021-06-09 18:10:10 +08:00
076c98977d 1.修改问题详情评论不显示作者标签 2.修改问题详情点击顶部返回按钮无法关闭页面 2021-06-09 16:47:19 +08:00
lyr
b96104fcd9 对接社区推荐Tab的接口 2021-06-09 16:26:04 +08:00
lyr
daece9337c 修改浏览记录-帖子Item左下角对应论坛UI未显示问题 2021-06-09 14:35:13 +08:00
lyr
3547330e2a 论坛详情页-内容搜索结果增加视频帖的展示 2021-06-08 18:19:20 +08:00
4d76fb0159 Merge branch 'feature-bbs' of git.ghzs.com:halo/android/assistant-android into feature-bbs 2021-06-08 17:47:04 +08:00
f34a95b36f 1.更换提问、草稿、问题详情接口 2.对接视频帖评论接口 2021-06-08 17:46:56 +08:00
lyr
6e3cb7a196 1.论坛列表增加视频自动播放功能
2.论坛首页搜索适配视频贴展示
2021-06-08 17:39:06 +08:00
03f87c46ba 游戏更新相关接口添加版本和渠道 https://git.ghzs.com/pm/halo-app-issues/-/issues/1267 2021-06-08 17:08:02 +08:00
b052ba1635 移除无用的 activity 声明 2021-06-08 16:34:27 +08:00
d1183199cd 全局更改跳转视频详情的页面 https://git.ghzs.com/pm/halo-app-issues/-/issues/1254 2021-06-08 16:31:30 +08:00
31fed948f0 更换社区-推荐的接口 https://git.ghzs.com/pm/halo-app-issues/-/issues/1246 2021-06-08 15:54:44 +08:00
f1c5b80dc2 完成社区内容浏览日志上报 https://git.ghzs.com/pm/halo-app-issues/-/issues/1246 2021-06-08 15:51:10 +08:00
86f2aec9ca 修复社区内容分享日志上报丢失的问题 2021-06-08 15:28:26 +08:00
f826dc07c6 版本更新至 4.9.6 2021-06-08 10:23:08 +08:00
34670d08c0 Merge branch 'hotfix-v4.9.5-335-crash' into 'release'
Hotfix v4.9.5 335 crash

See merge request halo/android/assistant-android!113
2021-06-08 10:22:04 +08:00
5e5646468e 1. 捕抓分类2.0页面延迟操作造成的闪退异常
2. 修复首页滑动 tab 时偶发的闪退
3. 捕抓模拟器游戏延迟操作造成的闪退异常
4. 捕抓礼包详情页延迟操作造成的闪退异常
2021-06-08 10:22:04 +08:00
a218f13ccb Merge branch 'feature-bbs' of git.ghzs.com:halo/android/assistant-android into feature-bbs 2021-06-08 10:15:23 +08:00
1fc37571df 修改ImageUtils不能加载视频第一帧的图片 2021-06-08 10:15:12 +08:00
lyr
576f06f250 1.修改论坛详情页列表内容显示不对问题
2.修改论坛信息流左下角对应论坛图标显示不出来问题
2021-06-08 10:03:36 +08:00
3805cb52f6 优化论坛插入视频 2021-06-07 21:38:07 +08:00
lyr
f8d7377236 完成新社区-活动Tab 2021-06-07 18:45:43 +08:00
354fa13a35 优化论坛发布功能 2021-06-07 16:02:29 +08:00
3c533b896b 对接我的论坛帖子、我的收藏帖子 2021-06-05 19:18:57 +08:00
11c6618c0f Merge branch 'feature-bbs' of git.ghzs.com:halo/android/assistant-android into feature-bbs 2021-06-05 10:27:55 +08:00
898bf3e432 粗略完成新问题详情页面 2021-06-05 10:27:49 +08:00
lyr
0faf408762 修复新社区相关数据库迁移报错问题 2021-06-04 17:44:49 +08:00
lyr
1dbabe3cda 提交漏传文件 2021-06-04 16:19:07 +08:00
lyr
a107a19d95 完成社区-论坛Tab-官方论坛对接 2021-06-04 15:43:53 +08:00
lyr
58ea0bb51d 完善论坛信息流视频播放逻辑 2021-06-04 14:25:17 +08:00
557f22b23b rxPermission 更新至 androidX 版本 2021-06-03 16:59:40 +08:00
f40a192e82 调整带 chucker 打包脚本 2021-06-03 16:54:55 +08:00
84f3556275 Merge remote-tracking branch 'origin/release' into dev-5.0.0
# Conflicts:
#	dependencies.gradle
2021-06-03 16:47:45 +08:00
cddc2bff2b 添加简单的 Log 工具类 2021-06-03 16:38:58 +08:00
a0b8caa60a 完成5.0.0游戏专题功能优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1247 2021-06-03 16:38:12 +08:00
lyr
22cadc77f0 1.修改"社区-推荐Tab最近浏览列表首个Item未读红点已读但未消失"问题
2.修改首页底部导航栏动画不对应问题
3.修改论坛详情页关注按钮显示不全问题
2021-06-03 11:28:09 +08:00
28fb45f0b8 添加简单的 Log 工具类 2021-06-03 11:27:44 +08:00
3d7f8b3f41 Merge branch 'feature-bbs' of git.ghzs.com:halo/android/assistant-android into feature-bbs 2021-06-03 10:30:04 +08:00
bba326cfd9 1.收藏/取消收藏问题 2.修改我的论坛 2021-06-03 10:29:57 +08:00
lyr
f76bb7070a 优化社区-推荐Tab列表显示 2021-06-03 10:28:36 +08:00
lyr
a6a3d769bd 完成论坛详情页的视频Tab和个人主页的发布Tab的视频分类 2021-06-02 18:16:56 +08:00
ea5627b3da 区分正式包和测试包的默认渠道,避免正式包因渠道丢失而回落到测试渠道 2021-06-02 16:58:41 +08:00
d9807227ec 处理列表分割线显示异常问题 2021-06-01 09:26:26 +08:00
039203408a 版本更新至 4.9.5 2021-05-31 10:32:07 +08:00
60b325812e Merge branch 'hotfix-v4.9.4-334-crash' into 'release'
Hotfix v4.9.4 334 crash

See merge request halo/android/assistant-android!112
2021-05-31 10:29:00 +08:00
06a43f617b 处理闪退
1. 处理首页 tab 触摸时某些设备可能会闪退的问题
2. 修复游戏库刷新按钮被遮盖的问题
3. 尝试修复游戏库横向列表因恢复滚动状态而出现的闪退
4. 修复偶发的因为获取不到渠道号而触发的闪退
5. 尝试修复启动时偶发的初始化图片加载库触发的闪退
6. 修复 Android 11 首次安装 XAPK 获取权限回到页面时的闪退问题
2021-05-31 10:29:00 +08:00
5cc1cfa1a6 完成视频详情推荐列表 2021-05-29 17:17:09 +08:00
35cdd140cc Merge branch 'feature-bbs' of git.ghzs.com:halo/android/assistant-android into feature-bbs 2021-05-29 16:07:48 +08:00
87597dbd1f 完成帖子、问题发布功能 2021-05-29 16:07:33 +08:00
lyr
398f7b6642 1.完成首页和游戏详情的视频播放设置
2.完成个人主页的发布Tab(除视频分类)
2021-05-28 18:52:10 +08:00
85d3412fd8 版本更新到 4.9.4 2021-05-28 10:28:06 +08:00
71b8cbbef3 Merge branch 'hotfix-v4.9.3-333-crash' into 'release'
Hotfix v4.9.3 333 crash

See merge request halo/android/assistant-android!111
2021-05-28 10:26:50 +08:00
dfc0183a14 1. 处理包名检测弹窗上报日志的空指针闪退问题
2. 捕抓评论列表一键登录可能触发的闪退问题
3. 修复礼包详情页重建时的闪退问题
4. 修复视频流评论页页面重建时的闪退问题
2021-05-28 10:26:50 +08:00
lyr
f0ca0a2ab1 推荐页的浏览记录和论坛页的关注论坛增加未读状态 2021-05-27 15:44:01 +08:00
c9ffd4e5bd Merge branch 'feature-bbs' of git.ghzs.com:halo/android/assistant-android into feature-bbs 2021-05-26 20:45:06 +08:00
d354b07fe2 1.抽离公共评论详情页面 2.粗略完成问题详情页面UI(未对接接口) 2021-05-26 20:44:46 +08:00
lyr
71a61fdef0 粗略完成社区的推荐Tab和论坛Tab 2021-05-26 19:00:06 +08:00
156e52f619 版本升级到 4.9.3 2021-05-26 14:26:49 +08:00
252cb3825b Merge branch 'hotfix-v4.9.2-332-crash' into 'release'
Hotfix v4.9.2 332 crash

See merge request halo/android/assistant-android!110
2021-05-26 14:26:14 +08:00
2eded37321 首页社区 TAB 和首页视频 TAB 互换位置 2021-05-26 10:20:06 +08:00
075a7e4e77 处理专题详情滚到顶部空指针异常 2021-05-26 09:55:30 +08:00
0c95f911d1 捕抓插件化数据库读写异常 2021-05-26 09:43:40 +08:00
f35baf0e5b 完成[安装方式管理]新增[白名单]功能 https://git.ghzs.com/pm/halo-app-issues/-/issues/1264 2021-05-25 17:54:02 +08:00
49b74c9a37 修复包名检测弹窗的重建闪退问题 2021-05-25 14:37:31 +08:00
c4240440d1 版本更新到 4.9.2 2021-05-25 10:56:09 +08:00
e0205ec060 Merge branch 'hotfix-v4.9.1-331-crash' into 'release'
修复闪退

See merge request halo/android/assistant-android!109
2021-05-25 10:55:35 +08:00
895024aa09 1. 修复启动时初始化图片加载库可能的闪退问题
2. 修复游戏详情最新开服可能的闪退问题
3. 修复在越南/法语设备上启动会闪退的问题
2021-05-25 10:53:47 +08:00
4d64281c78 修改视频贴保存草稿功能 2021-05-24 21:20:04 +08:00
95f1692434 Merge branch 'feature-bbs' of git.ghzs.com:halo/android/assistant-android into feature-bbs 2021-05-24 15:51:12 +08:00
f1302dd1bb 完成视频详情顶部区域 2021-05-24 15:51:00 +08:00
fd946703a9 版本更新至 4.9.1 2021-05-24 15:01:38 +08:00
806935a81e Merge branch 'hotfix-v4.9.0-330-privacy' into 'release'
4.9.0 隐私变更更改

See merge request halo/android/assistant-android!108
2021-05-24 14:59:14 +08:00
feb30ff3a4 1. 去掉 SYSTEM_ALERT_WINDOW 权限声明
2. 完成 https://git.ghzs.com/pm/halo-app-issues/-/issues/1262 的第32点
3. 取消 WorkManager 自动初始化,关闭 Sentry 读取系统事件能力
2021-05-24 14:59:14 +08:00
lyr
fec34f1efa 提交遗漏资源文件 2021-05-24 10:45:18 +08:00
lyr
def3b55e51 完成光环助手V5.0.0-新社区其他相关改动功能(第七点UI) 2021-05-24 09:57:08 +08:00
4549f78ede 粗略完成发视频贴功能 2021-05-23 21:04:00 +08:00
3054b56f4a Merge branch 'feature-bbs' of git.ghzs.com:halo/android/assistant-android into feature-bbs 2021-05-20 14:13:28 +08:00
4cf5e0f2f4 论坛富文本支持插入视频功能 2021-05-20 14:13:22 +08:00
lyr
1a18c82f06 个人主页-根据个人信息内容设置背景的高度 2021-05-19 18:51:49 +08:00
lyr
b8fbb429f1 个人主页-根据个人信息内容设置背景的高度 2021-05-19 18:40:25 +08:00
lyr
005229fe8a 提交个人主页游戏tab改动遗漏部分 2021-05-19 18:31:25 +08:00
lyr
3a0bbbf3d0 完成个人主页游戏tab改动 2021-05-19 18:09:34 +08:00
4b851732c9 正式包暂不启用 AndResGuard (旧版本在新AGP上默认启用 V3 签名,新版本在蓝叠模拟器上无法运行) 2021-05-19 16:53:51 +08:00
lyr
3abf29fa75 微调登录页UI 2021-05-19 15:57:21 +08:00
lyr
4bb7d2a043 光环助手V4.7.0-积分体系(第2期)--光能中心(0519 运营反馈 去掉签到提醒)https://git.ghzs.com/pm/halo-app-issues/-/issues/1110#note_101733 2021-05-19 15:34:23 +08:00
lyr
e3d830235e 微调登录页UI 2021-05-19 14:59:00 +08:00
lyr
6425f3d50c 光环助手V4.9.0-优化登录功能(第3期)(0518 运营反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1206#note_101568 2021-05-19 11:11:47 +08:00
lyr
868e6d31b8 提交论坛详情页顶部UI遗漏部分 2021-05-18 15:31:29 +08:00
lyr
a687f8d877 完成论坛详情页顶部UI调整 2021-05-18 15:15:38 +08:00
e9d2c6573f 完成同步正式环境后测试问题汇总(22) https://git.ghzs.com/pm/halo-app-issues/-/issues/1262 2021-05-18 15:02:26 +08:00
05e36f11cf 处理视频流闪退问题 2021-05-18 14:57:36 +08:00
lyr
bc76e6eddb 光环助手V4.9.0-同步正式环境后测试问题汇总(14、16) https://git.ghzs.com/pm/halo-app-issues/-/issues/1262#note_101438 2021-05-18 11:59:50 +08:00
lyr
6de543261b 修改"邀请好友"正式环境地址 2021-05-18 09:15:19 +08:00
lyr
d9a8fa0a2d 光环助手V4.9.0-个人主页优化(第2期)(0517 运营测试反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1203#note_101240 2021-05-17 18:08:40 +08:00
lyr
51c88e8586 光环助手V4.9.0-优化登录功能(第3期)(0517 运营测试问题 1) 2021-05-17 17:10:12 +08:00
9e930f1b35 去掉游戏详情顶部区域自动隐藏时的动画 2021-05-17 15:34:15 +08:00
eb8fb191bb 修改视频流全屏后的显示错误问题 2021-05-17 14:27:37 +08:00
6653467259 完成首页顶部 tab 栏功能(20210517运营测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1215 2021-05-17 11:39:27 +08:00
9ec29ad367 修复因优化首页 tab 性能造成开服表页面的开测 tab 不显示的问题 2021-05-17 10:13:15 +08:00
406ac98616 激活数据上报里补充 oaid (若存在) 2021-05-15 15:12:52 +08:00
5832c75909 修复同步正式环境后测试问题汇总(5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1262 2021-05-14 11:36:59 +08:00
9d8681c50f 光环助手V4.8.0-视频优化(第1期)(0514 运营测试问题3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1107 2021-05-14 10:47:47 +08:00
lyr
9c28bf162e 新分类2.0页-侧边栏关闭手势滑动 2021-05-14 09:37:54 +08:00
3e86a40215 发提问改为富文本 2021-05-13 20:34:09 +08:00
061d5c19ed 微调首页轮播图上边距 2021-05-13 17:38:50 +08:00
1241207dd2 处理首页 tab 无数据时的回落问题 2021-05-13 15:59:30 +08:00
6a68839d0f 1完成选择活动弹窗UI 2.发布帖子、提问删除添加标签入口 2021-05-13 15:31:18 +08:00
2140c9eb40 Update README.md 2021-05-13 15:13:41 +08:00
lyr
702da08bc4 修复问题:在验证码登录页点击一键登录,然后授权电话权限后,无法弹起一键登录页 2021-05-12 18:58:18 +08:00
942af39b2d 大致完成选择论坛、选择本地视频、预览视频、发视频UI 2021-05-12 16:55:18 +08:00
lyr
a0331f0437 光环前端优化汇总(2021年5月)第6点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1260 2021-05-12 14:46:31 +08:00
8c885e38a1 完成4月光环前端优化汇总(6) https://git.ghzs.com/pm/halo-app-issues/-/issues/1236 2021-05-12 11:50:34 +08:00
acc6935608 正式环境 API 切换到 4.9.0 2021-05-12 11:47:56 +08:00
lyr
63798c94cf Merge branch 'dev' into dev-5.0.0
# Conflicts:
#	app/src/main/java/com/gh/common/util/QuickLoginHelper.kt
2021-05-10 17:06:12 +08:00
lyr
62a87d1c71 完善是否能进行一键登录的判断 2021-05-10 09:34:15 +08:00
lyr
2ba479d3ca 光环助手V4.9.0-优化登录功能(第3期)(0507 补充运营意见--增加一键登录说明弹窗 遗漏部分) https://git.ghzs.com/pm/halo-app-issues/-/issues/1206#note_100061 2021-05-08 17:29:56 +08:00
lyr
6c2ff6a94f 光环助手V4.9.0-优化登录功能(第3期)(0507 补充运营意见--增加一键登录说明弹窗) https://git.ghzs.com/pm/halo-app-issues/-/issues/1206#note_100061
(cherry picked from commit 3f5f3bf57c)
2021-05-08 16:15:54 +08:00
lyr
3f5f3bf57c 光环助手V4.9.0-优化登录功能(第3期)(0507 补充运营意见--增加一键登录说明弹窗) https://git.ghzs.com/pm/halo-app-issues/-/issues/1206#note_100061 2021-05-08 15:55:42 +08:00
2211f562c7 抽离发布帖子、回答公共代码 2021-05-08 15:52:41 +08:00
4d10ca0c6c Merge branch 'dev-4.9.0' into dev 2021-05-08 15:41:28 +08:00
c816fd87f4 Merge branch 'dev-4.9.0' into dev
# Conflicts:
#	app/src/main/res/layout/fragment_login.xml
2021-05-08 10:41:39 +08:00
lyr
547bfd98ac 个人主页-根据个人信息内容设置背景的高度 2021-05-07 11:02:37 +08:00
34ba85f099 修改网页链接全局添加from=ghzs参数 2021-05-06 15:17:00 +08:00
lyr
2d251ef453 调整"我的光环"和"个人主页"徽章标签的红点提示位置 2021-04-29 14:57:29 +08:00
7a0165375c 去掉视频预加载打印日志 2021-04-29 14:46:47 +08:00
lyr
d7c7fe8740 优化个人主页背景UI 2021-04-29 01:10:53 +08:00
295e783d4b Merge remote-tracking branch 'origin/dev-4.9.0' into dev-4.9.0 2021-04-28 23:56:57 +08:00
58dfad4123 调整实名认证解析 2021-04-28 23:56:47 +08:00
f31d8b51fa 修改礼包中心-关注tab游戏icon显示异常 2021-04-28 23:52:41 +08:00
lyr
01ea8b9834 光环助手V4.9.0-个人主页优化(第2期)(0427 产品测试问题 个人主页没有显示圆角问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1203 2021-04-28 22:51:31 +08:00
5152060515 调整实名认证结束时间判断 2021-04-28 22:32:42 +08:00
0a0d805e9d 完成防沉迷下载流程 https://git.ghzs.com/pm/halo-app-issues/-/issues/1218 2021-04-28 22:24:08 +08:00
51511c8be8 更换礼包是否被隐藏字段 2021-04-28 21:53:22 +08:00
4bbfa3e16e 修改推荐弹窗按钮点击范围 2021-04-28 21:50:30 +08:00
lyr
81c0c6ee09 Merge remote-tracking branch 'origin/dev-4.9.0' into dev-4.9.0 2021-04-28 20:48:38 +08:00
lyr
50b449ca64 光环助手V4.9.0-优化登录功能(第3期)(0428 产品测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1206#note_99487 2021-04-28 20:48:28 +08:00
8764412492 优化首页 tab 滑动性能 2021-04-28 20:30:31 +08:00
c1e011cae8 优化首页 tab 滑动性能 2021-04-28 20:29:36 +08:00
018f814a6b 更新渠道JAR 2021-04-28 20:01:54 +08:00
lyr
ef9cb24b61 个人主页的背景裁剪比例调整为1:1 2021-04-28 17:27:59 +08:00
245a4273de 完成光环前端优化汇总4月(1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1236 2021-04-28 16:58:23 +08:00
lyr
94c1651510 一键登录增加错误码log 2021-04-28 16:38:07 +08:00
lyr
07f55acb3a 光环助手V4.9.0-积分体系(第4期)(0428 产品测试问题 2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1204#note_99369 2021-04-28 16:34:17 +08:00
lyr
43ee3b3488 一键登录未弹出授权页增加等待弹窗,以及防止多次点击 2021-04-28 16:33:00 +08:00
32625f59e0 Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-28 16:04:05 +08:00
e1e3aa5598 光环助手V4.9.0-游戏礼包功能优化汇总(0428测试1,3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1209 2021-04-28 16:03:58 +08:00
c5ff2cb5bd Merge remote-tracking branch 'origin/dev-4.9.0' into dev-4.9.0 2021-04-28 16:02:23 +08:00
acf02c99e7 完成首页顶部Tab栏功能(20210428测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1215 2021-04-28 16:02:14 +08:00
9a00999d9e 回退test_build.sh脚本 2021-04-28 15:41:42 +08:00
lyr
4c5b602a3b 光环助手V4.9.0-个人主页优化(第2期)(0427 产品测试问题) (0428 产品测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1203 2021-04-28 15:39:24 +08:00
cbde36f3bd 完成0420测试反馈 https://git.ghzs.com/pm/halo-app-issues/-/issues/1231 2021-04-28 15:01:39 +08:00
f4b6193a6b 处理潜在的 toast 内存泄漏问题 2021-04-28 14:32:04 +08:00
85a596766d Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-28 12:03:54 +08:00
785cfecf81 光环助手V4.9.0-游戏相关优化汇总(0428测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1211 2021-04-28 12:03:41 +08:00
0c8b98084a Merge remote-tracking branch 'origin/dev-4.9.0' into dev-4.9.0 2021-04-28 12:00:05 +08:00
87a6a3a539 游戏库接口添加版本号 2021-04-28 11:59:56 +08:00
lyr
6c50082de5 光环助手V4.9.0-个人主页优化(第2期)(20210427UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1203#note_99322 2021-04-28 11:57:43 +08:00
41195ec9d4 游戏库和搜索接口添加版本号 2021-04-28 11:49:28 +08:00
e280ea008a 升级gsyVideoPlayer版本并修改预加载 2021-04-28 11:08:04 +08:00
223646cf3d 更改专题的筛选字段为 tags 2021-04-28 11:06:47 +08:00
ab4bb79a32 首页接口补充版本信息 2021-04-28 10:16:28 +08:00
lyr
50b51e2f3c 光环助手V4.9.0-个人主页优化(第2期)(20210427UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1203#note_99322 2021-04-28 09:23:03 +08:00
lyr
1fef7d51d6 修复光能中心-兑换区-分类面板展开后缺失关闭图标问题 2021-04-28 09:15:44 +08:00
lyr
6546961f81 更新一键登录错误码提示 2021-04-27 19:10:36 +08:00
lyr
75e4f32840 光环助手V4.9.0-积分体系(第4期)(分类面板问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1204#note_99323 2021-04-27 19:01:33 +08:00
lyr
a3f3c95e19 优化:一键登录页跳转验证码登录页后,再登录成功后,增加销毁一键登录页的逻辑 2021-04-27 17:43:34 +08:00
lyr
508231d547 光环助手V4.9.0-注销功能优化(第2期)(0427 产品测试问题 1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1207#note_99285 2021-04-27 17:40:44 +08:00
8649b98032 处理分类2.0在首页的显示问题 2021-04-27 17:25:57 +08:00
d35211262f 回退 AndResGuard 2021-04-27 16:37:10 +08:00
lyr
96a5838155 光环助手V4.9.0-积分体系(第4期)(ui反馈 图1)(0427 产品测试问题 1-4)https://git.ghzs.com/pm/halo-app-issues/-/issues/1204 2021-04-27 16:35:57 +08:00
fc21799288 完成首页顶部Tab栏功能(20210426测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1215 2021-04-27 16:17:25 +08:00
lyr
3e04d77d50 优化一键登录关闭授权页的逻辑 2021-04-27 15:35:15 +08:00
lyr
35f47e363a 光环助手V4.9.0-个人主页优化(第2期)(0426 产品测试问题) (0427 产品测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1203 2021-04-27 15:27:30 +08:00
lyr
019724e9c6 光环助手V4.9.0-优化登录功能(第3期)(0426 产品测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1206#note_99181 2021-04-27 14:56:57 +08:00
70f059b4de 微调礼包中心按钮UI 2021-04-27 11:59:53 +08:00
34cd63d36d Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-27 10:43:47 +08:00
033cf6b566 光环助手V4.9.0-游戏礼包功能优化汇总(0427补充1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1209 2021-04-27 10:43:38 +08:00
513fc3be1c V4.9.0推荐弹窗功能:后台通知频率设置累计次数无效 https://jira.ghzs.com/browse/HALO-68 2021-04-27 10:43:00 +08:00
fd1273a092 更新 AndResGuard 修复在高版本 AGP 默认启用 V3 签名的问题 2021-04-27 10:25:55 +08:00
lyr
27a6f14d18 修复Jira问题63( V4.9.0 光能中心后台优化:APP端,抽奖乐园和兑换商品点击进入的页面搞反了) 2021-04-26 18:01:09 +08:00
000c7978fd 完成推荐入口优化及数据埋点(20210426测试问题2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1214 2021-04-26 17:41:35 +08:00
486c8f691c 修复自定义 tab 指示器在 tab 内容变小时会变形的问题 2021-04-26 17:39:30 +08:00
16450a7f8d 完成光环前端优化汇总(4,8) https://git.ghzs.com/pm/halo-app-issues/-/issues/1236 2021-04-26 17:30:50 +08:00
438e660449 Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-26 17:15:16 +08:00
b9bf4311cf 礼包中心-最新tab接口判断分页完毕条件改为10 2021-04-26 17:14:56 +08:00
lyr
75a324747c 光环助手V4.9.0-优化登录功能(第3期)(20210425UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1206#note_99017 2021-04-26 17:10:33 +08:00
04b579cda7 完成首页顶部Tab栏功能(20210426UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1215 2021-04-26 17:04:03 +08:00
5962a8cf08 光环助手V4.9.0-游戏礼包功能优化汇总(0425测试2,3,4,5,6,10,11,12,19) https://git.ghzs.com/pm/halo-app-issues/-/issues/1209 2021-04-26 16:53:52 +08:00
ea388a8e1b Merge remote-tracking branch 'origin/dev-4.9.0' into dev-4.9.0 2021-04-26 16:20:37 +08:00
8a98d6323a 完成合规问题前端优化汇总(5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1219 2021-04-26 16:20:28 +08:00
lyr
1b67ff5d12 光环助手V4.9.0-个人主页优化(第2期)(20210426UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1203#note_99085 2021-04-26 16:13:54 +08:00
9ee0f65e02 完成推荐入口优化和数据埋点(20210426测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1214 2021-04-26 15:56:30 +08:00
557b6fee21 完成合规问题前端优化汇总(1~4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1219 2021-04-26 15:52:34 +08:00
c90d6ec0dc 完成首页顶部Tab栏功能遗漏的曝光位置命名 https://git.ghzs.com/pm/halo-app-issues/-/issues/1215 2021-04-26 11:56:54 +08:00
lyr
8109aa58c9 光环助手V4.9.0-积分体系(第4期)UI反馈 https://git.ghzs.com/pm/halo-app-issues/-/issues/1204#note_98963 2021-04-26 09:50:38 +08:00
213e079e9d 修复首页排行榜切换 tab 时标题的闪烁问题 2021-04-26 09:20:49 +08:00
40e38e50b9 修复自滚动栏目的图标变形问题 2021-04-26 09:20:38 +08:00
b70e18af96 Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-25 19:13:11 +08:00
4c91f06d94 光环助手V4.9.0-游戏礼包功能优化汇总(20210425UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1209 2021-04-25 19:13:00 +08:00
199067cf8a 完成游戏相关优化汇总(0423测试 1,2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1211 2021-04-25 18:07:41 +08:00
fa01260f0b Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-25 17:40:57 +08:00
f8dac32bd6 光环助手V4.9.0-游戏相关优化汇总(20210425UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1211 2021-04-25 17:40:40 +08:00
d5641d437c 微调首页 tab 切换样式 2021-04-25 15:09:14 +08:00
lyr
c27f62e726 优化一键登录页逻辑 2021-04-25 14:33:04 +08:00
b98d4e6ec6 完成首页顶部Tab栏功能(20200423UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1215 2021-04-25 14:14:37 +08:00
a4e67cda91 光环助手V4.9.0-游戏相关优化汇总(0423测试5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1211 2021-04-25 10:21:21 +08:00
ab3616f237 Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-23 17:34:59 +08:00
bd9032c659 光环助手V4.9.0-新增[推荐弹窗]功能(0423测试,回退代码) https://git.ghzs.com/pm/halo-app-issues/-/issues/1212 2021-04-23 17:34:50 +08:00
lyr
4ded8cbfc8 微调个人主页UI 2021-04-23 16:47:00 +08:00
5a14afa71e Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-23 16:02:42 +08:00
7736ef37e5 光环助手V4.9.0-新增[推荐弹窗]功能(0423测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1212 2021-04-23 16:02:35 +08:00
lyr
40adf1938e 提交漏传文件 2021-04-23 16:00:02 +08:00
lyr
7e1f821d7a 光环助手V4.9.0-个人主页优化(第2期)https://git.ghzs.com/pm/halo-app-issues/-/issues/1203 2021-04-23 15:42:31 +08:00
4f81996857 首页放弃 fragment 自动重建 2021-04-23 14:49:27 +08:00
328a559ef0 1.修改推荐弹窗显示规则 2.提前加载推荐弹窗数据 2021-04-23 11:42:51 +08:00
lyr
ee01512f84 光环助手V4.9.0-积分体系(第4期)(我的光环-二、收货信息) https://git.ghzs.com/pm/halo-app-issues/-/issues/1204 2021-04-22 18:41:16 +08:00
a366a87324 修复首页页面重建时选中 TAB 与重建前不一致的问题 2021-04-22 18:34:41 +08:00
3c7a1e2ae3 修复专题详情页面进入显示空白的问题 2021-04-22 18:23:08 +08:00
87c71882f5 完成光环前端优化汇总(3,5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1236 2021-04-22 18:22:44 +08:00
7fa912bc0c 首页页面重建时复用 fm 重建的底部五个 tab,避免内存泄漏 2021-04-22 17:49:50 +08:00
lyr
27dc3f73ae 一键登录页适配底部导航栏 2021-04-22 17:44:48 +08:00
be630e39cd 光环助手V4.9.0-新增[推荐弹窗]功能(UI反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1212 2021-04-22 17:06:21 +08:00
cded31298c Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-22 16:43:02 +08:00
54030fd1df 光环助手V4.9.0-包名检测弹窗优化汇总(ui反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1210 2021-04-22 16:42:51 +08:00
lyr
98c1565dfb 首页和游戏库的"猜你喜欢"专题拆分成两个接口分别获取 2021-04-22 16:42:13 +08:00
d89c2d4a70 Merge branch 'feature-issues1209' into dev-4.9.0 2021-04-22 15:28:03 +08:00
0f11f6344f 光环助手V4.9.0-游戏礼包功能优化汇总(数据埋点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1209 2021-04-22 15:27:11 +08:00
a25f265bd3 光环助手V4.9.0-游戏礼包功能优化汇总 https://git.ghzs.com/pm/halo-app-issues/-/issues/1209 2021-04-22 14:15:12 +08:00
68adc0ff23 首页页面重建时复用旧 fragment 2021-04-22 11:58:35 +08:00
ab5aa01ec5 避免首页第一个 tab 被默认选中 2021-04-22 11:58:07 +08:00
lyr
71e5f798d9 1.恢复首页的猜你喜欢专题
2.板块展示猜你喜欢专题增加是否为游戏库判断
2021-04-22 10:29:06 +08:00
2572c53305 修复首页 tab 快速滚动文字可能出现大小不一的问题 2021-04-21 18:29:19 +08:00
lyr
64b5ca8efa 首页去掉智能推荐专题(只在游戏库页展示) 2021-04-21 18:09:50 +08:00
b5ef73517f 完成游戏相关优化(3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1211 2021-04-21 17:53:24 +08:00
lyr
feb2f68778 完成 "推荐算法优化——猜你喜欢专题 第4(1)点" https://git.ghzs.com/pm/halo-app-issues/-/issues/1224 2021-04-21 16:45:57 +08:00
lyr
f0a6e79418 调整光能中心和光能屋UI 2021-04-21 16:43:36 +08:00
lyr
78699cc0e8 修复Jira问题48(V4.9.0-优化登录功能(第3期):无法打开登录界面) 2021-04-21 16:39:59 +08:00
96805537f4 基本完成首页顶部Tab栏功能 https://git.ghzs.com/pm/halo-app-issues/-/issues/1215 2021-04-21 10:19:50 +08:00
13c4be2ab0 处理 proguard 语法问题 2021-04-21 10:09:27 +08:00
lyr
c2e5e8adbc 光环助手V4.9.0-积分体系(第4期)(光能中心和光能屋UI改动) 2021-04-20 18:56:05 +08:00
c5c9a3f4d2 放弃所有 activity 重建的 config 2021-04-20 17:34:28 +08:00
8bd2fa9b3a 避免 MIUI 夜间模式切换时重建页面 2021-04-20 17:07:53 +08:00
lyr
4bd8fc4e51 1.优化光能任务悬浮图标显示逻辑
2.修复未登录状态下在光能中心登录后,刷新任务列表后列表可以无限加载问题
2021-04-19 19:02:23 +08:00
lyr
5b26165aaa 微调默认Toast样式 2021-04-19 18:55:45 +08:00
lyr
1bb4c1cc2c 光环助手V4.9.0-优化登录功能(第3期)https://git.ghzs.com/pm/halo-app-issues/-/issues/1206 2021-04-19 18:53:21 +08:00
d38b347eb8 Merge branch 'feature-issues1215' into 'dev-4.9.0'
Feature issues1215

See merge request halo/android/assistant-android!107
2021-04-19 18:15:13 +08:00
feaf2d0bfc 完成粗糙的首页顶部Tab栏功能(细节带完善) https://git.ghzs.com/pm/halo-app-issues/-/issues/1225 2021-04-19 18:15:13 +08:00
210dcdc698 设置app支持x86架构 2021-04-19 15:31:00 +08:00
fec291156a 【光环助手】论坛相关bug汇总(0413bug反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1223 2021-04-19 11:43:03 +08:00
62bb23abc9 光环后台需求汇总(2021年4月第1周)(25) https://git.ghzs.com/pm/halo-app-issues/-/issues/1193 2021-04-19 11:41:22 +08:00
19be9e1842 支持获取上一个页面的名称 2021-04-16 17:00:31 +08:00
lyr
a5cfd147b4 微调登录页和光能中心UI 2021-04-16 16:53:37 +08:00
lyr
f15d572785 微调登录页和光能中心UI 2021-04-16 16:53:13 +08:00
5e99e8b032 光环助手V4.9.0-新增[推荐弹窗]功能(数据埋点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1212 2021-04-16 15:26:53 +08:00
af39b82da1 Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-16 11:22:19 +08:00
ba3a4ede11 光环后台需求汇总(2021年4月第1周)(17) https://git.ghzs.com/pm/halo-app-issues/-/issues/1193 2021-04-16 11:20:40 +08:00
db591d0249 完成推荐入口优化及数据埋点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1214 2021-04-16 10:25:01 +08:00
lyr
1370261b87 Merge remote-tracking branch 'origin/dev-4.9.0' into dev-4.9.0 2021-04-15 15:34:36 +08:00
lyr
3824de4719 微调登录页UI 2021-04-15 15:34:09 +08:00
lyr
6ee26fb401 微调登录页UI 2021-04-15 15:33:45 +08:00
865fe2729f Merge branch 'feature-issues1212' into dev-4.9.0 2021-04-15 15:28:20 +08:00
85c556c593 光环助手V4.9.0-新增[推荐弹窗]功能 https://git.ghzs.com/pm/halo-app-issues/-/issues/1212 2021-04-15 15:27:02 +08:00
86681b8ab1 修改包名检测弹窗进度条兼容性问题 2021-04-14 20:38:41 +08:00
5f2ce22506 完成游戏相关优化汇总(1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1211 2021-04-14 16:41:53 +08:00
dafa85a791 光环助手V4.9.0-包名检测弹窗优化汇总 https://git.ghzs.com/pm/halo-app-issues/-/issues/1210 2021-04-14 11:18:21 +08:00
lyr
9cc3a29b5a 处理登录页面底部适配问题(有些手机在有导航栏情况下位置不够) 2021-04-13 18:35:34 +08:00
lyr
d2e8a67971 处理登录页面底部适配问题(有些手机在有导航栏情况下位置不够) 2021-04-13 18:30:56 +08:00
1bd3168add 1.修改关注视频流内容重叠问题
2.修改关注视频流刷新时上传缓存视频id
2021-04-13 15:58:43 +08:00
81d81882e0 Merge branch 'dev-4.9.0' of git.ghzs.com:halo/android/assistant-android into dev-4.9.0 2021-04-13 12:01:14 +08:00
3f4e4f1a52 光环助手V4.9.0-包名检测弹窗优化汇总(自定义进度条) https://git.ghzs.com/pm/halo-app-issues/-/issues/1210 2021-04-13 12:00:50 +08:00
3845e1f3ee 完成预约事件曝光位置上报优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1221 2021-04-12 18:09:06 +08:00
6d2ae4dca5 版本号更新至 4.9.0 2021-04-12 17:31:08 +08:00
e2efa26ac0 Merge branch 'dev' into dev-4.9.0 2021-04-12 17:24:57 +08:00
70e12ebd08 光环助手V4.9.0-游戏相关优化汇总(4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1211 2021-04-12 11:13:33 +08:00
91fc511fe6 光环助手V4.9.0-新增[推荐弹窗]功能(UI部分) https://git.ghzs.com/pm/halo-app-issues/-/issues/1212 2021-04-12 09:11:36 +08:00
lyr
c5530ba307 完成组件库(第1期)测试问题(2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1162#note_96797 2021-04-09 10:38:03 +08:00
67cbd9b641 完成组件库(第1期)测试问题(3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1162 2021-04-09 09:45:31 +08:00
6735047e67 完成组件库(第1期)测试问题(1,4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1162 2021-04-08 17:50:18 +08:00
9993bca582 处理UI组件库遗漏的细节部分(2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1162 2021-04-08 15:06:16 +08:00
07258b08af 临时处理 mapping_id 写入包文件失败的问题 https://github.com/getsentry/sentry-android-gradle-plugin/issues/37 2021-04-08 10:14:34 +08:00
lyr
f8bd7787f6 更新 Loghub SDK (https://git.ghzs.com/halo/assistant-android/-/issues/28) 2021-04-07 18:05:55 +08:00
b6a3ef5faa [ 光环助手 V4.9 - 游戏顶部视频 ] 光环助手APP,游戏详情页顶部视频全屏播放优化(https://git.ghzs.com/pm/halo-app-issues/-/issues/1213) 2021-04-07 15:28:08 +08:00
lyr
730151f6ba 补全新分类2.0列表曝光遗漏步骤 2021-04-06 17:51:56 +08:00
532b98e002 修复进入游戏详情页时快速点击 tab 栏可能触发闪退的问题 2021-04-06 10:51:37 +08:00
lyr
202a26b09c 光环助手V4.8.0-光环助手UI组件库(第1期)(9) https://git.ghzs.com/pm/halo-app-issues/-/issues/1162 2021-04-01 14:17:28 +08:00
lyr
fe1821884a 光环助手V4.8.0-光环助手UI组件库(第1期)(6,8) https://git.ghzs.com/pm/halo-app-issues/-/issues/1162 2021-04-01 11:52:00 +08:00
eb1605cc0a 调整搜索热门标签/历史搜索区域的高度,避免在 mumu 模拟器上被裁切 2021-03-31 17:34:11 +08:00
08ad5c3455 模拟器支持 FBN 类型 2021-03-31 17:13:21 +08:00
0774525de6 修复游戏详情预览图过于模糊的问题 2021-03-31 16:01:03 +08:00
b69ebc8122 完成游戏搜索功能优化(20210331测试问题 2,3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1173 2021-03-31 15:20:42 +08:00
lyr
49f31da303 光环助手V4.8.0-新分类功能2.0(前端)(20210330测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1171#note_95153 2021-03-31 14:50:55 +08:00
66568b09d5 完成开测表功能0331补充 https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-31 14:13:01 +08:00
57a944f954 取消限制历史搜索/热门标签文字长度限制 https://git.ghzs.com/pm/halo-app-issues/-/issues/1173 2021-03-31 12:00:31 +08:00
1fb8a60b2b 正式环境切换到 4.8.0 2021-03-31 09:34:46 +08:00
489a57a379 完成游戏功能搜索优化(20210330需求补充) https://git.ghzs.com/pm/halo-app-issues/-/issues/1173 2021-03-31 09:17:16 +08:00
0aa02c186c 恢复因为压缩影响质量的新版本提示图标 2021-03-30 14:59:25 +08:00
lyr
fd463ec1e3 光环助手V4.8.0-新分类功能2.0(前端)(20210330修改) https://git.ghzs.com/pm/halo-app-issues/-/issues/1171#note_95001 2021-03-30 14:54:43 +08:00
lyr
0c16ae5f3f 解决邀请好友过程中无法保存海报的问题 2021-03-30 14:40:37 +08:00
76cca46015 修复开测表测试问题 https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-29 22:55:39 +08:00
748cacce3f Merge branch 'dev' of git.ghzs.com:halo/assistant-android into dev 2021-03-29 22:47:23 +08:00
b47985d4ff 修改游戏搜索热门搜索图标 2021-03-29 22:47:20 +08:00
lyr
9e41bd2846 光环助手V4.8.0-新分类功能2.0(前端)(20210329测试问题 5) 2021-03-29 22:32:11 +08:00
0e4b18fc5d 修复开测表手动选择日期时与自动滚动时的冲突问题 2021-03-29 22:05:50 +08:00
lyr
5594a03cee 1.修复Jira HALO-46 问题;
2.光环助手V4.8.0-新分类功能2.0(前端)(20210329测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1171#note_94892
2021-03-29 21:59:01 +08:00
lyr
59ece3be49 光环助手V4.7.0-积分体系(第2期)--个人主页(头像挂件页面相关优化-UI测试内容2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1112#note_94854 2021-03-29 21:22:16 +08:00
a7f77076a5 Merge remote-tracking branch 'origin/dev' into dev 2021-03-29 21:04:14 +08:00
6526d5b3ce 完成开测表功能(0329测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-29 21:04:07 +08:00
3a2f877d0c Merge branch 'dev' of git.ghzs.com:halo/assistant-android into dev 2021-03-29 21:00:51 +08:00
0d344e66a1 光环助手V4.8.0-游戏弹窗功能优化(0329测试) https://jira.ghzs.com/browse/HALO-1 2021-03-29 21:00:47 +08:00
d3de323c06 完成开测表功能(0329测试2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-29 20:54:34 +08:00
721d5acc1d 完成开测表功能0329测试 https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-29 18:33:15 +08:00
7069744191 完成隐私权限相关问题 https://git.ghzs.com/pm/halo-app-issues/-/issues/1192 2021-03-29 17:59:55 +08:00
lyr
b1f56d5dcd 提交遗漏资源文件 2021-03-29 17:42:07 +08:00
lyr
5aaa5bd076 光环助手V4.8.0-新分类功能2.0(前端)(20210329测试问题 1)、 (20210329UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1171#note_94764 2021-03-29 17:41:41 +08:00
lyr
7e74dee0eb 1.光环助手V4.7.0-积分体系(第2期)--光能中心(0329 产品验收问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1110#note_94783
2.光环助手V4.7.0-积分体系(第2期)--邀请好友(0329 产品验收回归)https://git.ghzs.com/pm/halo-app-issues/-/issues/1114#note_94794
2021-03-29 15:59:05 +08:00
45b8f7f82f 修复使用浏览器安装判断不准确的问题 2021-03-29 15:55:42 +08:00
7c9b8732e2 光环助手V4.8.0-游戏搜索功能优化(第7期)(0329UI补充调整) https://git.ghzs.com/pm/halo-app-issues/-/issues/1173 2021-03-29 15:24:08 +08:00
86ae96253b 去掉视频流引导动画 2021-03-29 15:11:39 +08:00
9dcc0b5587 Merge branch 'dev' of git.ghzs.com:halo/assistant-android into dev 2021-03-29 15:05:16 +08:00
9ceba793e8 修改搜索框背景 2021-03-29 15:05:13 +08:00
175cc55b75 修复开测表的备注信息上报问题 https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-29 15:03:37 +08:00
5486d1803f Merge branch 'dev' of git.ghzs.com:halo/assistant-android into dev 2021-03-29 14:51:32 +08:00
cb885f8b66 光环助手V4.8.0-游戏弹窗功能优化(0323测试2,3,4) https://jira.ghzs.com/browse/HALO-1 2021-03-29 14:51:27 +08:00
ab9f5cf7d8 完成光环助手UI组件库的2 https://git.ghzs.com/pm/halo-app-issues/-/issues/1162 2021-03-29 14:40:22 +08:00
7f4fafc637 Merge remote-tracking branch 'origin/dev' into dev 2021-03-29 12:01:17 +08:00
acccd2330d 修复游戏预览图过于模糊的问题 2021-03-29 12:01:00 +08:00
lyr
2745147e73 光环助手V4.7.0-积分体系(第2期)--邀请好友(0329 产品验收问题 1)https://git.ghzs.com/pm/halo-app-issues/-/issues/1114#note_94755 2021-03-29 12:00:56 +08:00
8fb0e3feaf 曝光数据添加区分浏览器安装字段,修复开测日志上报异常 2021-03-29 12:00:38 +08:00
lyr
335fa8ba39 1.调整新分类2.0UI;
2.修复新分类2.0若干显示bug
2021-03-29 11:47:52 +08:00
c739074057 修复通用列表分页刷新时偶发的闪退问题,捕抓首页游戏视频偶发的数组越界异常 2021-03-29 11:05:24 +08:00
a2569cf876 处理部分 4.7.4 遗留的空指针异常和数组越界异常 2021-03-29 10:39:11 +08:00
a81b0a1603 修复开测表游戏下载任务被删除缺没有及时更新的问题 2021-03-29 09:33:37 +08:00
lyr
76c20e4b82 修复新分类页面对象未初始化问题 2021-03-26 18:40:18 +08:00
lyr
4144cc2c4f 光环助手V4.7.0-积分体系(第2期)--光能中心(调整UI间距)https://git.ghzs.com/pm/halo-app-issues/-/issues/1110#note_94623 2021-03-26 18:24:23 +08:00
5465ff7731 Merge remote-tracking branch 'origin/dev' into dev 2021-03-26 18:05:32 +08:00
fc6dedb320 修复开测表游戏显示游戏标签时无法进行筛选的问题 2021-03-26 18:05:26 +08:00
lyr
a76b98f20c 1.光环助手V4.8.0-积分体系(第3期)--光能中心(0326 产品测试问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1146#note_94597
2.光环助手V4.7.0-积分体系(第2期)--邀请好友(0326 产品验收问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1114#note_94513
2021-03-26 17:59:07 +08:00
lyr
f05c0324fa 光环助手V4.8.0-新分类功能2.0(前端)(20210325UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1171#note_94296 2021-03-26 17:44:06 +08:00
606eb30d9f 修改图片上传超时时间20s,重试次数2次 2021-03-26 16:59:30 +08:00
aa41da022d 光环助手V4.8.0-多版本下载面板优化(第二期)(UI测试问题-5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-26 15:33:21 +08:00
b62d2c1b9e Merge branch 'dev' of git.ghzs.com:halo/assistant-android into dev 2021-03-26 15:24:26 +08:00
ba21543800 修改qa搜索icon 2021-03-26 15:24:21 +08:00
6f5b832a68 调整 R8 配置 2021-03-26 15:20:30 +08:00
eb4bbb9efa Merge remote-tracking branch 'origin/dev' into dev 2021-03-26 15:16:40 +08:00
233f91d2b9 修改热门搜索标签图片 2021-03-26 15:14:26 +08:00
1c51b2fe41 Merge branch 'release' into dev
# Conflicts:
#	dependencies.gradle
2021-03-26 15:09:26 +08:00
5123d7ff11 Merge branch 'dev-4.8.0' into dev
# Conflicts:
#	app/build.gradle
#	app/src/main/java/com/gh/common/util/PackageUtils.java
#	app/src/main/java/com/gh/gamecenter/catalog/CatalogFragment.kt
2021-03-26 15:01:57 +08:00
c20e06f2eb Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-26 14:55:51 +08:00
df55caa1f8 光环助手V4.8.0-游戏搜索功能优化(第7期)(20210326UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1173 2021-03-26 14:55:48 +08:00
lyr
61bdac3aa2 光环前端优化汇总(2021年2月)(UI测试问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1154#note_94518 2021-03-26 14:47:15 +08:00
d56dc53b06 完成开测表功能(0326AM UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-26 14:38:44 +08:00
18c02ad9c3 Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-26 14:25:17 +08:00
8a262532e1 光环助手V4.8.0-多版本下载面板优化(第二期)(0326AM) https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-26 14:25:13 +08:00
lyr
876d920251 光环助手V4.7.0-积分体系(第2期)--个人主页(头像挂件页面相关优化-UI内容 4)https://git.ghzs.com/pm/halo-app-issues/-/issues/1112#note_94511 2021-03-26 11:42:38 +08:00
1bad70a83f Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-26 10:44:46 +08:00
c04a1a5802 光环助手V4.8.0-Q&A管理优化需求(第二期)(0322测试3,6) https://jira.ghzs.com/browse/HALO-2 2021-03-26 10:44:41 +08:00
lyr
ea8c47a6d6 光环助手V4.8.0-积分体系(第3期)--光能中心(0325 产品测试问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1146#note_94377 2021-03-26 09:16:33 +08:00
53f3f48c4d 修复开测表(0325测试 4~7) https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-25 20:56:10 +08:00
lyr
706df0c22f 光环助手V4.8.0-新分类功能2.0(前端)20210325测试问题 第2点 2021-03-25 18:41:44 +08:00
lyr
74cee421f9 光环助手V4.8.0-新分类功能2.0(前端)20210325测试问题 https://git.ghzs.com/pm/halo-app-issues/-/issues/1171#note_94292 2021-03-25 18:05:48 +08:00
lyr
4b08fa56da 光环助手V4.7.0-积分体系(第2期)--消息文案梳理(新增 win_order_detail 中奖订单详情 (中奖订单详情)) https://git.ghzs.com/pm/halo-app-issues/-/issues/1113#note_94198 2021-03-25 15:50:53 +08:00
522f664f30 光环前端优化汇总(2021年2月)(0325补充1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-25 15:18:00 +08:00
87a92055a7 光环助手V4.8.0-模拟器游戏优化汇总(0325测试2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1159 2021-03-25 14:29:38 +08:00
f23aa496ae 关闭 testOnly,避免部分 vivo 设备装不了 debug 包 2021-03-25 11:33:07 +08:00
65d7322546 修复部分 vivo 设备上无法显示游戏图标圆角的问题 2021-03-25 11:32:24 +08:00
d9178f8538 调整浏览器安装提示文案 https://git.ghzs.com/pm/halo-app-issues/-/issues/1132 2021-03-25 11:18:31 +08:00
lyr
5de471d89a Merge remote-tracking branch 'origin/dev-4.8.0' into dev-4.8.0 2021-03-25 11:14:28 +08:00
lyr
63cc104e9f 光环助手V4.7.0-积分体系(第2期)--个人主页(头像挂件页面相关优化-UI内容)https://git.ghzs.com/pm/halo-app-issues/-/issues/1112#note_92945 2021-03-25 11:14:14 +08:00
f06ba9bf45 修复 XAPK 原文件后缀为 .apk.apk 时无法使用浏览器下载的问题 2021-03-25 11:11:31 +08:00
lyr
682d5a2cd4 增加判断网络状态的JS调用方法 2021-03-25 11:06:14 +08:00
76ce4e2f04 Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-25 10:15:25 +08:00
54221cc976 编辑帖子插入图片成功后取消滚动到底部位置 2021-03-25 10:15:22 +08:00
79ae36c51f 修复浏览器安装端口在部分 vivo 手机被占用的问题 2021-03-24 18:33:45 +08:00
lyr
335d6787a7 意见反馈页的反馈提交都需要先登录 2021-03-24 17:21:12 +08:00
lyr
2bf9c1e4d7 提交闪退类型反馈不需要登录 2021-03-24 16:21:33 +08:00
lyr
133635c495 光环助手V4.7.0-积分体系(第2期)--光能中心(0324 ui反馈)https://git.ghzs.com/pm/halo-app-issues/-/issues/1110#note_94065 2021-03-24 15:40:00 +08:00
2aaf6d8a9c 修复开测表测试问题(0324测试 3,4,5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-24 15:26:20 +08:00
f119f6751a Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-24 15:05:11 +08:00
18f964c167 光环助手V4.8.0-视频优化(第1期)(0324 产品验收问题1,2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1107 2021-03-24 15:05:07 +08:00
lyr
369275225e 光环助手V4.8.0-新分类功能2.0(前端)https://git.ghzs.com/pm/halo-app-issues/-/issues/1171 2021-03-24 14:23:22 +08:00
d80daf104f Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-24 10:08:16 +08:00
71c697d596 1.修改专区热门回答图片被裁剪的问题
2.修改游戏搜索求功能标签显示问题
2021-03-24 10:08:07 +08:00
lyr
169814d6a9 光环助手V4.7.0-积分体系(第2期)--邀请好友(V4.7.0-积分体系(第2期)--邀请好友-UI测试问题-4、0319 产品验收问题 第1点) 2021-03-23 18:36:20 +08:00
lyr
52cffde739 正式发布环境隐藏个人等级入口 2021-03-23 18:11:23 +08:00
lyr
11f84b69ac 正式发布环境隐藏光能签到入口、邀请码输入框、上报光能任务 2021-03-23 18:10:36 +08:00
2c3e03bd0f 完成2月光环前端优化(12) https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-23 16:57:31 +08:00
264e103395 修复预约列表曝光下载数据没有上报的问题 2021-03-23 16:48:54 +08:00
7f4d3ffe3e 完成开测表的数据埋点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-23 16:36:19 +08:00
79b7a15f7d 增加获取 activity 栈中顶部倒数第二个元素的方法 2021-03-23 16:27:00 +08:00
638dd4ad1d 对接上传图片新错误码 https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-23 14:48:51 +08:00
lyr
04f58e036b 光环助手V4.7.0-积分体系(第2期)--光能中心(0322 产品验收问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1110 2021-03-23 14:31:07 +08:00
6624868bfe Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-23 11:43:30 +08:00
2ff83b8cc5 光环助手V4.8.0-多版本下载面板优化(第二期)(UI测试问题-4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-23 11:43:26 +08:00
lyr
cab412ab70 优化插入日程和删除日程流程 2021-03-23 11:32:11 +08:00
1a83e64f3a 完成插件跳转意见反馈的相关需求 https://git.ghzs.com/pm/halo-app-issues/-/issues/1160 2021-03-23 10:40:47 +08:00
lyr
be76fb0526 消息推送新增"兑换商品"链接类型 2021-03-23 10:28:21 +08:00
lyr
5cc25482a9 1.消息推送新增链接类型;
2.积分体系埋点补充邀请好友结果埋点
2021-03-23 10:21:53 +08:00
c683e6786c Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-22 17:01:04 +08:00
5f182eeddb 光环前端优化汇总(2021年2月)(0322补充13) https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-22 17:01:01 +08:00
3e0979fabb 完成2月光环前端优化(3,8) https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-22 16:20:51 +08:00
lyr
13685ec605 光能助手V4.8.0-积分体系(第3期)--光能屋(0317 产品验收测试 第1点)https://git.ghzs.com/pm/halo-app-issues/-/issues/1147 2021-03-22 16:04:20 +08:00
4eac5ff61c Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-22 15:36:28 +08:00
98f0cf5fc0 光环助手V4.8.0-Q&A管理优化需求(第二期)(20210319UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1156 2021-03-22 15:36:24 +08:00
lyr
cb345f49eb 光环前端优化汇总(2021年2月)第5、11点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-22 15:26:20 +08:00
ef95be60f1 修改多版本下载错位问题 2021-03-22 14:46:33 +08:00
a85cfa47e2 光环前端优化汇总(2021年2月)(0320补充1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-22 14:42:47 +08:00
66123b0ae8 为 Application 异步初始化 Fresco 超时兜底 2021-03-22 10:37:07 +08:00
cdb660b884 Gradle Transform 切换到 Kotlin 实现 2021-03-19 16:27:24 +08:00
026e4f71de Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-19 16:20:56 +08:00
01ecde0425 光环助手V4.8.0-模拟器游戏优化汇总(0319测试1-5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1159 2021-03-19 16:20:52 +08:00
lyr
f748fcbd48 光环助手V4.7.0-积分体系(第2期)--邀请好友 (0318 产品验收问题 第3点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1114 2021-03-19 15:11:25 +08:00
65464eed3d 修复使用浏览器安装询问弹窗总是弹起的问题 2021-03-19 11:42:07 +08:00
6a5d8e915c 完成数据统计需求(曝光位置补充) https://git.ghzs.com/pm/halo-app-issues/-/issues/1174 2021-03-19 09:33:22 +08:00
5fde455bcd Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-19 09:18:25 +08:00
e1e257b1d8 光环助手V4.8.0-模拟器游戏优化汇总(ui测试反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1159 2021-03-19 09:18:21 +08:00
7a87f8dc14 Merge branch 'feature-issues1134' into 'dev-4.8.0'
Feature issues1134

See merge request halo/assistant-android!106
2021-03-18 18:15:25 +08:00
3fe2b8ffcd 基本完成开测表功能 https://git.ghzs.com/pm/halo-app-issues/-/issues/1134 2021-03-18 18:15:25 +08:00
565b7b2c38 修改编辑帖子删除图片后无法点击发布按钮 2021-03-18 14:50:32 +08:00
b3bf9d862f 光环助手V4.8.0-多版本下载面板优化(第二期)(UI测试问题-3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-18 11:18:52 +08:00
c6f5ef64d5 光环助手V4.8.0-视频优化(第1期)(UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1107 2021-03-18 10:13:24 +08:00
95b21b5bb5 光环助手V4.8.0-多版本下载面板优化(第二期)(UI测试问题-2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-17 18:21:27 +08:00
0da331d109 Merge branches 'dev-4.8.0' and 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-17 16:08:18 +08:00
8c1f8833b1 光环前端优化汇总(2021年2月)(9) https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-17 16:08:11 +08:00
e53cd6dede 处理 R8 混淆造成的微信分享问题 2021-03-17 15:27:42 +08:00
fa27e172e4 Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-17 15:22:33 +08:00
544f5102ea 光环助手V4.8.0-游戏搜索功能优化(第7期)(4,5,6) https://git.ghzs.com/pm/halo-app-issues/-/issues/1173 2021-03-17 15:22:28 +08:00
lyr
5d6134f0dd 光环助手V4.8.0-积分体系(第3期https://git.ghzs.com/pm/halo-app-issues/-/issues/1146)--光能中心(0315 产品测试问题) 2021-03-17 14:12:09 +08:00
e0b951e043 Merge remote-tracking branch 'origin/dev-4.8.0' into dev-4.8.0 2021-03-17 11:18:59 +08:00
f2476c84c4 完成浏览器安装(0317补充) https://git.ghzs.com/pm/halo-app-issues/-/issues/1132 2021-03-17 11:18:51 +08:00
c186c32d47 包名检测弹窗进度条降低更新频率,防止卡顿 2021-03-17 09:45:46 +08:00
lyr
194f30650e 修改兑换商品地址错误导致web无法正常返回问题 2021-03-16 16:49:06 +08:00
a475b176b4 光环助手V4.8.0-模拟器游戏优化汇总(ui测试反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1159 2021-03-16 15:27:26 +08:00
73cac4d39d 修改视频关注tab下拉刷新一直加载问题 2021-03-16 14:42:44 +08:00
93d0f30352 光环助手V4.8.0-多版本下载面板优化(第二期)(UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-16 10:41:25 +08:00
98d30d1183 Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0
# Conflicts:
#	app/src/main/java/com/gh/common/util/EntranceUtils.java
2021-03-16 09:12:42 +08:00
b1d178f8df 光环前端优化汇总(2021年2月)(4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-16 09:11:45 +08:00
lyr
0550df7039 光环助手V4.8.0-积分体系(第3期)--我的光环(0315 产品测试问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1145 2021-03-15 16:37:57 +08:00
lyr
13c7b8ff1d 1.补充积分体系web入口地址;
2.增加客服跳转类型
2021-03-12 18:29:59 +08:00
d7b7633ffe 调整游戏详情提示文案 2021-03-12 12:00:19 +08:00
5e536db94e 修复使用浏览器下载功能在山寨机上的适配问题 2021-03-12 11:50:33 +08:00
55d8b6a866 Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-11 17:54:57 +08:00
a2a8610083 光环助手V4.8.0-光环助手UI组件库(第1期)(7) https://git.ghzs.com/pm/halo-app-issues/-/issues/1162 2021-03-11 17:54:53 +08:00
lyr
8d9f0adebe 修改web跳转头像挂件页方法,使用分类id来定位tab 2021-03-11 15:02:50 +08:00
lyr
e386994e4d 完成积分体系第3期:
1.光环助手V4.8.0-积分体系(第3期)--光能中心 pm/halo-app-issues#1146
2.光环助手V4.8.0-积分体系(第3期)--我的光环 一、光能明细 1、文案修改 pm/halo-app-issues#1145
3.光能助手V4.8.0-积分体系(第3期)--光能屋 四、光能明细,以及增加兑换商品、抽奖乐园入口
4.光能助手V4.8.0-积分体系埋点(第1期)- 安卓端埋点 pm/halo-app-issues#1149
5.增加web上报埋点、跳转头像挂件页的JS调用方法
2021-03-11 10:45:45 +08:00
fc5f1e9830 Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-11 10:25:45 +08:00
fd17eaea00 光环助手V4.8.0-光环助手UI组件库(第1期)(4,5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1162 2021-03-11 10:25:11 +08:00
8a65d6dd85 关闭测试 mapping 上传 2021-03-11 09:09:41 +08:00
8d3c609ad0 getIndentifier 调用的资源添加到 AndResGuard 白名单 2021-03-11 09:08:54 +08:00
2e71e11a09 删除无用依赖 2021-03-11 09:07:18 +08:00
lyr
b9c17bcdb8 正式发布环境隐藏个人等级入口 2021-03-10 18:53:59 +08:00
55bb1a1873 Merge branch 'feature-issues1156' into dev-4.8.0 2021-03-10 14:47:21 +08:00
54601bc083 光环助手V4.8.0-Q&A管理优化需求(第二期)https://git.ghzs.com/pm/halo-app-issues/-/issues/1156 2021-03-10 14:45:36 +08:00
df2bb9c020 完成浏览器安装(数据埋点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1132 2021-03-09 17:54:06 +08:00
0bf297d094 Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-09 15:03:27 +08:00
db8a2a06aa 光环助手V4.8.0-多版本下载面板优化(第二期)(UI相关补充0309AM) https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-09 15:03:23 +08:00
44a9db7294 使用滴滴的SP优化和系统异常捕抓等插件,将插件整体搬迁至 gradle init 文件中提高开发编译速度 2021-03-09 14:45:25 +08:00
7db48b6923 Merge branch 'feature-issues1158' into dev-4.8.0 2021-03-09 11:08:12 +08:00
0a8f2d51db 光环助手V4.8.0-游戏弹窗功能优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1158 2021-03-09 11:06:20 +08:00
b06d2a479a 版本更新至 4.7.4 2021-03-09 10:56:25 +08:00
d56bd0078e Merge branch 'hotfix-4.7.3-293_crash' into 'release'
修复闪退

See merge request halo/assistant-android!105
2021-03-09 10:55:22 +08:00
7b87aadd86 修复首页列表对比差异时偶发的数组越界闪退 2021-03-08 17:26:02 +08:00
8f2da187f2 Revert "主 SP 迁移到 MMKV",原因是存储空间不足时有各种奇怪的问题 2021-03-08 15:50:44 +08:00
8291caa5e3 主 SP 迁移到 MMKV 2021-03-08 15:15:04 +08:00
e30ec540bd Merge branch 'feature-issues1157' into dev-4.8.0 2021-03-08 10:02:51 +08:00
3c4da21bf6 光环助手V4.8.0-多版本下载面板优化(第二期)(埋点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-08 10:02:00 +08:00
lyr
800260b6a4 光环前端优化汇总(2021年2月)第1、2、6、7点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1154 2021-03-05 18:23:51 +08:00
lyr
ddea202f85 Merge remote-tracking branch 'origin/dev-4.8.0' into dev-4.8.0 2021-03-05 18:17:40 +08:00
lyr
b3a786ee22 光环助手V4.8.0-xapk解压过程助手卡顿问题 https://git.ghzs.com/pm/halo-app-issues/-/issues/1155 2021-03-05 18:17:21 +08:00
332e24b874 jenkins 打包测试 mapping 上传 2021-03-05 18:16:12 +08:00
5413ebfba4 更改活跃统计的上报的 logstore https://git.ghzs.com/pm/halo-app-issues/-/issues/1115 2021-03-05 18:08:44 +08:00
7ead1c89f3 Merge branch 'dev-4.8.0' of git.ghzs.com:halo/assistant-android into dev-4.8.0 2021-03-05 17:34:13 +08:00
03300a41f7 缺省渠道改为 GH_TEST2 2021-03-05 17:33:35 +08:00
2d8698e070 缺省渠道改为 GH_TEST2 2021-03-05 17:32:48 +08:00
078b1a18a0 Merge branch 'feature-issues1159' into dev-4.8.0
# Conflicts:
#	app/src/main/java/com/gh/common/constant/Constants.java
#	app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt
2021-03-05 16:57:42 +08:00
de1e3ba7a7 Merge branch 'feature-issues1107' into dev-4.8.0
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/MainActivity.java
2021-03-05 16:54:39 +08:00
a9275c83d2 光环助手V4.8.0-视频优化(第1期)https://git.ghzs.com/pm/halo-app-issues/-/issues/1107 2021-03-05 16:52:21 +08:00
02894879e3 Merge branch 'hotfix-v4.7.2-292-crash' into 'release'
修复闪退

See merge request halo/assistant-android!104
2021-03-05 15:01:14 +08:00
56a202ae5c 版本更新至 4.7.3 2021-03-05 14:48:30 +08:00
013969a73a 修复闪退
1. 捕抓首页刷新列表时偶发的数组越界闪退
2. 提高线程池并发数量,避免安装了大量游戏的设备检查更新不及时
3. 捕抓插件化时因获取不到包名而出现的闪退
2021-03-05 14:45:46 +08:00
1a5a4ba149 完成UI组件化-常规弹窗 https://git.ghzs.com/pm/halo-app-issues/-/issues/1162 2021-03-04 14:56:23 +08:00
9bdae33655 更新大图查看库 2021-03-04 09:59:34 +08:00
be1184583b Merge branch 'feature-browser_install' into dev-4.8.0
# Conflicts:
#	app/src/main/java/com/gh/common/constant/Constants.java
2021-03-03 18:32:05 +08:00
68ee926897 基本完成使用浏览器下载功能,埋点细节待补充 https://git.ghzs.com/pm/halo-app-issues/-/issues/1132 2021-03-03 18:30:14 +08:00
4d0db8cbcc Merge branch 'dev-4.8.0' into feature-issues1159 2021-03-03 14:42:57 +08:00
59e4b6e063 光环助手V4.8.0-多版本下载面板优化(第二期)https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-03 14:35:36 +08:00
e74cf92033 版本更新至 4.7.2 2021-03-03 11:31:29 +08:00
811b1bbfce 修复下载完成时可能出现多个完成事件的问题 2021-03-03 10:41:02 +08:00
00c25d0d47 缺省渠道改为 test2 2021-03-03 10:39:52 +08:00
66b4b4b9f0 缺省渠道改为 test2 2021-03-03 10:38:39 +08:00
4bab47d2a6 Merge branch 'hotfix-v4.7.1-291-generic_fixes' into 'release'
Hotfix v4.7.1 291 generic fixes

See merge request halo/assistant-android!102
2021-03-03 10:06:02 +08:00
2c9567aa61 修复文章详情点击图片会产生位移的问题 2021-03-03 09:59:45 +08:00
97598dc7ec 修复下载完成时可能出现多个完成事件的问题 2021-03-03 09:58:37 +08:00
4771c79fa9 版本调整为 4.7.1 2021-03-02 15:23:29 +08:00
3458a5d7f3 Merge branch 'hotfix-v4.7.0-290_crash_and_mapping' into 'release'
Hotfix v4.7.0 290 crash and mapping

See merge request halo/assistant-android!101
2021-03-02 15:22:43 +08:00
5bc7c333d8 捕抓 vivo 6.0 以下设备获取不到部分 apk 信息时的异常 2021-03-02 15:17:57 +08:00
c7a24555a2 "关闭 R8",因未知情况 sentry 没收到包里的 mapping id 2021-03-02 15:07:33 +08:00
e19a678699 处理 fresco 版本冲突 2021-03-02 15:04:53 +08:00
795af0528f 调整 jenkins 打包脚本 2021-03-02 10:56:20 +08:00
d0b4ea8ec2 修复 base64 图片保存被覆盖问题 https://git.ghzs.com/pm/web-issues/-/issues/123 2021-03-02 10:02:08 +08:00
45861dff61 光环助手V4.8.0-模拟器游戏优化汇总 https://git.ghzs.com/pm/halo-app-issues/-/issues/1159 2021-03-02 09:21:33 +08:00
5f41463fc3 启用插件内联 access 2021-03-01 16:04:23 +08:00
89cca6dbfd 更新编译脚本 2021-03-01 15:35:06 +08:00
e43c0efdcb 版本号更改为 4.8.0 2021-03-01 15:34:40 +08:00
2dbd635b8e Merge branch 'feature-shrink_size' into 'dev-4.8.0'
引入微信的资源优化和头条的 dex 优化插件

See merge request halo/assistant-android!100
2021-03-01 15:20:07 +08:00
728d4fd8e1 引入微信的资源优化和头条的 dex 优化插件 2021-03-01 15:19:17 +08:00
48b5c7efc1 光环助手V4.8.0-多版本下载面板优化(第二期)https://git.ghzs.com/pm/halo-app-issues/-/issues/1157 2021-03-01 10:05:35 +08:00
278dcc33be Merge remote-tracking branch 'origin/release' into dev
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/catalog/CatalogFragment.kt
#	app/src/main/java/com/gh/gamecenter/catalog/SubCatalogFragment.kt
2021-02-27 10:58:57 +08:00
87be3bed61 Merge branch 'hotfix-v4.6.1-271-generic_crash' into 'release'
Hotfix v4.6.1 271 generic crash

See merge request halo/assistant-android!98
2021-02-27 10:42:34 +08:00
078b102152 Update .gitmodules 2021-02-27 10:32:08 +08:00
4f6969a70a 完成粗糙的使用浏览器下载功能,接口与UI细节待补充 https://git.ghzs.com/pm/halo-app-issues/-/issues/1132 2021-02-26 16:48:16 +08:00
lyr
29140b6c0b 添加日程前增加是否已经添加判断 2021-02-26 16:34:53 +08:00
lyr
11bd9bed95 任务管理 - 【前端】任务列表,新增常驻任务类型,UI沿用日常任务 https://git.ghzs.com/pm/halo-app-issues/-/issues/1121#note_87359 2021-02-26 11:45:01 +08:00
997b5676dc 修改数据库升级错误 2021-02-26 09:46:22 +08:00
lyr
9b8755e035 光环助手V4.7.0-积分体系(第2期)--个人主页 - 0224产品测试问题-2(1) 2021-02-26 09:22:24 +08:00
85e97bc64d 修改包名检测弹窗按钮热区大小 2021-02-25 15:39:59 +08:00
0ea7c81ce9 光环助手V4.8.0-模拟器游戏优化汇总 https://git.ghzs.com/pm/halo-app-issues/-/issues/1159 2021-02-25 15:27:09 +08:00
951ac06948 Merge branch 'dev' of git.ghzs.com:halo/assistant-android into dev 2021-02-25 15:20:30 +08:00
92cdb6fdbb 修复低于 vivo 低于 5.1.1 版本系统的设备获取大文件APK包名会 ANR 的问题 2021-02-25 15:20:20 +08:00
lyr
cb0dd1d082 正式发布环境隐藏光能签到入口、邀请码输入框、上报光能任务 2021-02-25 15:18:06 +08:00
276655a8ec 更新打包脚本,仅正式包上传 mapping 2021-02-24 18:15:43 +08:00
df8b612188 恢复 R8 2021-02-24 18:01:30 +08:00
a550305947 Merge branch 'feature-tracker' into 'dev-4.8.0'
Merge feature tracker

See merge request halo/assistant-android!97
2021-02-24 11:49:45 +08:00
3af4dd5494 完成页面/应用可见上报功能 https://git.ghzs.com/pm/halo-app-issues/-/issues/1115 2021-02-24 11:49:45 +08:00
4d413eb1f2 关闭 R8 (Sentry 服务端暂未支持 mapping 自动上传) 2021-02-24 09:34:20 +08:00
d496ab0283 Merge branch 'release' into 'dev'
Merge hotfix changes

See merge request halo/assistant-android!96
2021-02-23 16:08:58 +08:00
b519ff6aac Merge branch 'dev-4.7.0' into 'dev'
Merge 4.7.0 changes

See merge request halo/assistant-android!95
2021-02-23 16:05:09 +08:00
8c05d2be8a 修复 5.1.1 系统的 vivo 设备安装大文件的 ANR 问题 2021-02-23 10:41:55 +08:00
23dd89198b 修复 5.1.1 系统的 vivo 设备安装大文件的 ANR 问题 2021-02-22 18:41:41 +08:00
6569ab2d33 修改模拟器不上传记录问题 2021-02-22 16:42:32 +08:00
1bead6a756 Merge branch 'hotfix-v4.6.1-271-crash' into 'release'
修改Sentry上一些闪退问题

See merge request halo/assistant-android!94
2021-02-08 16:14:13 +08:00
c0df3af298 尝试替换ConnectionPool类中的线程池,避免OutOfMemoryError: pthread_create failed 2021-02-08 09:52:08 +08:00
lyr
267363f46d 1.修复oppo手机无法启动服务问题;
2.修复新分类页面对象未初始化问题;
3.修复新分类页下载通知包名为空问题;
4.修复新分类中子分类列表为空问题;
5.修复问题反馈页游标越界问题;
6.修复个人信息编辑页获取菜单为空问题
2021-02-07 14:40:37 +08:00
44cf54aee6 1.修改WebView闪退问题
2.修改已安装列表更新数据时闪退问题
3.修改包名检测弹窗弹出闪退问题
2021-02-07 10:17:20 +08:00
lyr
322d7117f8 完成积分体系第2期 2021-02-05 17:54:31 +08:00
c8684f837a 修复闪退问题
1. 修复首页游戏库数据库更新闪退问题
2. 修复部分设备获取下载列表时的闪退问题
3. 修复重复发送设备应用列表的问题
2021-02-05 17:40:56 +08:00
9e5ecf1520 尝试解决TransactionTooLargeException异常 2021-02-05 17:03:14 +08:00
2df94dddc5 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-05 10:49:37 +08:00
1731980e88 升级fresco版本至2.4.0 2021-02-05 10:49:17 +08:00
f789f0cb73 正式环境接口改为 4.7.0 2021-02-04 20:57:44 +08:00
d043a89f3e 修复在部分设备上启动广告会闪烁的问题 2021-02-04 20:41:46 +08:00
4ab0f066df 修复在部分设备上首页广告消失过早的问题 2021-02-04 20:31:57 +08:00
096679029b Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-04 20:20:35 +08:00
2634228d21 光环助手V4.7.0-首页游戏功能强化(视频自动播放)(20210204测试问题3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1122 2021-02-04 20:20:14 +08:00
a33784221d 完成光环前端优化汇总(0203测试:2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1138 2021-02-04 20:05:34 +08:00
2ef7216bda 光环助手V4.7.0-首页游戏功能强化(视频自动播放)(20210204测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1122 2021-02-04 19:22:22 +08:00
2554fab389 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-04 18:25:49 +08:00
a4e3121489 【光环助手V_4.7.0】论坛交互优化(0204测试补充3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-04 18:25:27 +08:00
8dfde8ddd0 修復同包名遊戲安裝完成時可能誤刪錯誤遊戲的問題 2021-02-04 18:17:25 +08:00
63403c7c29 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-04 17:18:17 +08:00
aa9269aecc 【光环助手V_4.7.0】论坛交互优化(0202PM UI补充3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-04 17:17:57 +08:00
489e7105bb 添加 mapping 上传配置 (测试暂未通过) 2021-02-04 16:18:16 +08:00
8dbc407503 修复启动弹窗先于首页出现的问题 2021-02-04 16:08:56 +08:00
3e032fa540 修复 gh_version 异常造成的闪退 2021-02-04 16:07:51 +08:00
3df381b255 处理帖子是纯文字不会滚动到评论位置 2021-02-04 15:20:29 +08:00
7c59181bc6 提交LGLibrary 2021-02-04 11:59:27 +08:00
9244a65371 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-04 11:52:49 +08:00
a7b8b678f7 【光环助手V_4.7.0】论坛交互优化(0204AM补充2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-04 11:52:31 +08:00
9877d4d51e 优化包名检测弹窗弹出速度 2021-02-04 11:44:15 +08:00
32b4570738 修复下载游戏历史版本 游戏 ID 异常的问题 2021-02-04 11:04:45 +08:00
lyr
af3fdb3cfb 光环助手V4.7.0-新分类精选页功能优化_20210203测试问题_第4、5点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1123#note_89121 2021-02-04 10:47:28 +08:00
5ce992ee63 【光环助手V_4.7.0】论坛交互优化(0204AM补充1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-04 10:22:04 +08:00
ba17019428 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-04 10:00:45 +08:00
f77087907f 修改帖子详情定位到评论位置错位问题 2021-02-04 10:00:16 +08:00
3080f59ef6 Merge remote-tracking branch 'origin/dev-4.7.0' into dev-4.7.0 2021-02-04 09:52:03 +08:00
74b1f388e2 修复大图不能放大的问题 2021-02-04 09:51:53 +08:00
dcbc2fe352 还原自滚动专题优化 2021-02-04 09:37:56 +08:00
b892c58c52 【光环助手V_4.7.0】论坛交互优化(0203PM补充) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-04 09:36:21 +08:00
0a455c7b09 修改跳转游戏详情评论tab位置错误 2021-02-03 18:17:36 +08:00
7a254c4609 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-03 17:39:01 +08:00
4f08a4b9d2 光环助手V4.7.0-首页游戏功能强化(视频自动播放)(曝光) https://git.ghzs.com/pm/halo-app-issues/-/issues/1122 2021-02-03 17:29:35 +08:00
75670b7801 完成启动图功能强化(0203测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1131 2021-02-03 17:05:19 +08:00
af386f6bdc 解决禅道bug 226,229 2021-02-03 15:19:41 +08:00
ff813d8784 【光环助手V_4.7.0】论坛交互优化(0202测试补充3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-03 15:05:32 +08:00
dba87fe09c 【光环助手V_4.7.0】论坛交互优化(0202测试补充3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-03 15:02:33 +08:00
cf13003c2a 【光环助手V_4.7.0】论坛交互优化(0202PMUI补充:1,2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-03 14:26:27 +08:00
7fe337c557 【光环助手V_4.7.0】论坛交互优化(0202测试补充1,2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-03 11:32:53 +08:00
1902ed29c1 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-02 18:28:09 +08:00
a67927e9e7 修改包名检测弹窗显示逻辑 2021-02-02 18:27:51 +08:00
33b6835ae6 完成启动图功能强化(0202测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1131 2021-02-02 18:22:42 +08:00
1ca6a2c795 修复游戏下载红点更新问题 2021-02-02 17:36:35 +08:00
372230092a 去掉自滚动栏目的焦点 2021-02-02 17:11:54 +08:00
2ee1db1074 修复镜像游戏在已安装显示成 null 的问题 2021-02-02 17:11:16 +08:00
caabf416bb Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-02 17:01:50 +08:00
d33d0e98c9 光环助手V4.7.0-首页游戏功能强化(视频自动播放)(20210202测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1122 2021-02-02 17:01:30 +08:00
a4a029f31e 完成启动图功能强化(数据埋点) https://git.ghzs.com/pm/halo-app-issues/-/issues/1131 2021-02-02 16:49:48 +08:00
lyr
3b8d34f8c3 解决禅道问题221(【UI优化】在我的光环,界面上下滑动昵称重叠的问题) 2021-02-02 14:43:23 +08:00
2368e268bf 【光环助手V_4.7.0】论坛交互优化(0201测试反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-02 14:15:22 +08:00
6390198899 修改点击安装包解析错误弹窗的确定按钮没有删除安装包 2021-02-02 09:25:32 +08:00
4a6aef4caa javassit动态修改DiskLruCache#trimToSize 2021-02-01 23:04:43 +08:00
91529f51a3 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-01 18:54:18 +08:00
57096b2b08 首页滑动视频不跳转进度 2021-02-01 18:53:54 +08:00
40f1f57844 完成光环前端优化汇总(8,9,10,11) https://git.ghzs.com/pm/halo-app-issues/-/issues/1138 2021-02-01 18:42:36 +08:00
b9da7fbcb8 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-01 16:14:26 +08:00
7138177df2 光环前端优化汇总(2021年1月)(5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1138 2021-02-01 16:13:55 +08:00
aa4cf291dc Merge remote-tracking branch 'origin/dev-4.7.0' into dev-4.7.0 2021-02-01 16:03:34 +08:00
8f4c1651a3 Merge branch 'release' into dev-4.7.0
# Conflicts:
#	app/src/main/java/com/gh/common/exposure/ExposureManager.kt
#	app/src/main/java/com/gh/common/loghub/LoghubUtils.kt
#	app/src/main/java/com/gh/common/videolog/VideoRecordUtils.kt
#	app/src/main/java/com/gh/download/DownloadManager.java
#	app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java
#	app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GameDetailMoreDialog.kt
#	app/src/main/java/com/halo/assistant/HaloApp.java
#	dependencies.gradle
#	libraries/LGLibrary
2021-02-01 15:50:53 +08:00
30a6cfd7d9 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-01 15:45:42 +08:00
c1abb977bf 【光环助手V_4.7.0】论坛交互优化(UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-01 15:45:23 +08:00
fef633e9d8 缺省渠道改为 TEST 2021-02-01 14:53:38 +08:00
5207b5675c 光环助手V4.7.0-首页游戏功能强化(视频自动播放)(20200129UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1122 2021-02-01 09:44:48 +08:00
b7059abcee Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-02-01 09:21:50 +08:00
45a84fc45c 【光环助手V_4.7.0】论坛交互优化(0128测试反馈) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-02-01 09:21:22 +08:00
cf96b00036 无网络不使用启动广告 2021-02-01 09:20:37 +08:00
49dacc472d 更新 okhttp 修复 bio==null 闪退 2021-02-01 09:19:34 +08:00
72d069ad7e 提高首页图集的滚动流畅度 2021-01-31 18:19:22 +08:00
2f49e05891 完成专题合集首页图片优化(20200129UI测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1124 2021-01-31 14:16:07 +08:00
fd2d277470 启用 R8 2021-01-29 18:51:11 +08:00
fc52694fdc webview 支持视频带声音自动播放 2021-01-29 15:51:35 +08:00
7123b3d59a 【光环助手V_4.7.0】论坛交互优化(UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-01-29 15:43:42 +08:00
7684c247bf Merge branch 'hotfix-v4.6.0-270-install_observer' into 'release'
修复下载完成状态通知问题

See merge request halo/assistant-android!92
2021-01-29 12:35:59 +08:00
f2b9d26e8a 修复下载完成状态通知问题 2021-01-29 12:29:22 +08:00
6d5d407aa8 【光环助手V_4.7.0】论坛交互优化(UI测试问题1-5) https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-01-29 10:06:05 +08:00
338de605ec 版本增加至 4.6.1 2021-01-28 18:24:54 +08:00
53930b0257 修改帖子详情底部布局 2021-01-28 18:02:15 +08:00
34d5e2cc29 光环助手V4.7.0-外部应用跳转光环助手功能优化(UI测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1130 2021-01-28 16:47:38 +08:00
591a694bdf Merge branch 'hotfix-v4.6.0-270-generic_crash' into 'release'
Hotfix v4.6.0 270 generic crash

See merge request halo/assistant-android!91
2021-01-28 16:25:02 +08:00
9fd9a4ebcc 捕抓日志上报数据库因为磁盘空间不足引起的闪退 2021-01-28 16:23:58 +08:00
f2712c3db7 将接收到安装完成事件后的操作从 DownloadService 移至 DownloadManger 2021-01-28 16:22:01 +08:00
61c2c7b218 Merge branch 'hotfix-v4.6.0-270-generic_crash' into 'release'
修复 4.6.0 的闪退

See merge request halo/assistant-android!90
2021-01-28 15:44:26 +08:00
8a54c47d9e 修复闪退问题
1. 捕抓个别 vivo 设备初始化下载证书时拿不到文件的闪退
2. 捕抓 ViewPager 和 ScrollView 在部分设备上多指操作的闪退
3. 捕抓接收商店应用跳转时链接格式不支持造成的闪退
4. 修复光环应用内更新弹窗关闭弹窗后偶发的闪退
5. 修复游戏评分列表数据更新时偶发的闪退
6. 修复下载管理已安装列表更新排序时偶发的闪退
7. 捕抓搜索历史数据库/日志上报数据库因为磁盘空间不足引起的闪退
8. 捕抓内存回收对象时因为系统缺陷导致的超时闪退
2021-01-28 15:44:26 +08:00
7f60a575a4 草稿箱恢复显示回答草稿 2021-01-28 15:16:13 +08:00
eb2dd7c6b8 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-01-28 14:45:39 +08:00
ae8433d8bd 修改首页游戏遮罩 2021-01-28 14:45:14 +08:00
7ec4ba6582 Merge branch 'hotfix-v4.6.0-270-crash' into 'release'
修改sentry上的一些闪退问题

See merge request halo/assistant-android!89
2021-01-28 14:19:11 +08:00
190434a855 完成存储权限弹窗优化(0127测试) https://git.ghzs.com/pm/halo-app-issues/-/issues/1128 2021-01-28 09:50:57 +08:00
4b82e40eb4 修复启动页在 MIUI 上的显示问题 2021-01-27 18:13:42 +08:00
d8e858ddb8 统一 toast 管理 2021-01-27 18:11:11 +08:00
9b8c8f328d 修改禅道bug 204、206、208 2021-01-27 17:47:12 +08:00
lyr
bebdbe64cd Merge remote-tracking branch 'origin/hotfix-v4.6.0-270-crash' into hotfix-v4.6.0-270-crash
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java
#	app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java
2021-01-27 17:36:34 +08:00
lyr
a0555d6ffc 1.修复由于游戏获取Apk为空导致的闪退问题;
2.修复回答编辑-上传图片时,图片路径返回为空导致的闪退问题;
3.修复绑定手机冲突时手机位数不够11位导致的闪退问题;
4.修复微博分享时icon为空导致的闪退问题;
5.修复关于页面-检查更新,更新信息返回后执行刷新页面操作,但页面已经销毁导致的闪退问题;
6.修复WebFragment(网页)下载跳转到自带浏览器,但页面还未添加到Activity导致的闪退问题
2021-01-27 17:31:46 +08:00
d6674efe4a 光环助手V4.7.0-外部应用跳转光环助手功能优化(修改数据上报) https://git.ghzs.com/pm/halo-app-issues/-/issues/1130 2021-01-27 16:09:25 +08:00
20235c6908 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-01-27 15:55:43 +08:00
bc155d580c 光环助手V4.7.0-外部应用跳转光环助手功能优化(修改数据上报) https://git.ghzs.com/pm/halo-app-issues/-/issues/1130 2021-01-27 15:55:14 +08:00
9cf852b490 1.修改视频流闪退问题
2.修改游戏详情顶部视频闪退问题
3.修改上报闪退日志闪退问题
4.修改游戏详情点击下载按钮闪退问题
5.修改我的预约页面数组越界问题
6.修改发布提问选择图片闪退问题
7.修改用户主页视频tab下拉刷新过程中滑动页面闪退问题
8.修改点击下载按钮数组越界问题
9.修改游戏详情即将被销毁点击更多操作弹窗闪退问题
10.修改Activity被销毁关闭下载模拟器弹窗闪退问题
11.修改Activity被销毁关闭游戏标签弹窗闪退问题
12.修改视频流下载游戏闪退问题
13.修改游戏详情点击分享闪退问题
14.修改分享微博闪退问题
15.修改图片预览闪退问题
2021-01-27 15:39:06 +08:00
f32bc837b4 Merge branch 'feature-issues1129' into 'dev-4.7.0'
完成更新推送弹窗新增官网下载地址 https://git.ghzs.com/pm/halo-app-issues/-/issues/1129

See merge request halo/assistant-android!88
2021-01-27 11:32:11 +08:00
36efcdb75a 完成更新推送弹窗新增官网下载地址 https://git.ghzs.com/pm/halo-app-issues/-/issues/1129 2021-01-27 11:31:26 +08:00
a232ef9d03 Merge branch 'hotfix-v4.6.0-270-gid' into 'release'
修复应用重建时 gid 为空的问题

See merge request halo/assistant-android!87
2021-01-27 10:37:19 +08:00
05b90bd5b4 修复应用重建时 gid 为空的问题 2021-01-26 17:41:25 +08:00
bc382e6f31 完成禅道bug 200、202 2021-01-26 17:04:15 +08:00
116d71bb9c Merge branch 'feature-issues1130' into 'dev-4.7.0'
Feature issues1130

See merge request halo/assistant-android!86
2021-01-26 16:17:29 +08:00
2aadb78301 Feature issues1130 2021-01-26 16:17:29 +08:00
lyr
22801846e4 Merge remote-tracking branch 'origin/dev-4.7.0' into dev-4.7.0 2021-01-26 15:31:44 +08:00
lyr
f9f6886250 优化模拟器卸载操作 2021-01-26 15:31:34 +08:00
30c8d4db02 Merge branch 'dev-4.7.0' of git.ghzs.com:halo/assistant-android into dev-4.7.0 2021-01-26 15:28:30 +08:00
08a5ea100e 光环前端优化汇总(2021年1月)(3,7) https://git.ghzs.com/pm/halo-app-issues/-/issues/1138 2021-01-26 15:28:12 +08:00
db33ed0d0d 还原进程限制代码 2021-01-26 12:00:49 +08:00
fd424b0204 将接收到安装完成事件后的操作从 DownloadService 移至 DownloadManger 2021-01-26 11:54:20 +08:00
lyr
c1bf0a628f 光环前端优化汇总(2021年1月)第1、2点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1138 2021-01-26 11:25:42 +08:00
086bf75314 复用下载线程 2021-01-25 18:24:53 +08:00
af31fdc562 Merge branch 'feature-issues1124' into 'dev-4.7.0'
完成专题合集首页图片优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1124

See merge request halo/assistant-android!85
2021-01-25 17:12:49 +08:00
99e0a2e0a2 完成专题合集首页图片优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1124 2021-01-25 17:11:56 +08:00
069d0db00e 删除无用资源和代码 2021-01-25 16:48:43 +08:00
68f1343c93 Merge branch 'feature-startup_ad' into 'dev-4.7.0'
Feature startup ad

See merge request halo/assistant-android!84
2021-01-25 12:01:28 +08:00
fbe25c9099 完成启动图功能强化 (附带冷启动速度优化) https://git.ghzs.com/pm/halo-app-issues/-/issues/1131 2021-01-25 12:01:28 +08:00
9b893bcb42 Merge branch 'feature-issues1122' into 'dev-4.7.0'
Feature issues1122

See merge request halo/assistant-android!83
2021-01-25 09:45:15 +08:00
5182d4cd8d 光环助手V4.7.0-首页游戏功能强化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1122 2021-01-25 09:45:15 +08:00
lyr
cce077de96 光环助手V4.7.0-新分类精选页功能优化 二、前端功能-第3点 pm/halo-app-issues#1123 2021-01-21 10:01:28 +08:00
lyr
03092a0ec1 光环助手V4.7.0-新分类精选页功能优化 二、前端功能-第3点 pm/halo-app-issues#1123 (漏传部分) 2021-01-21 10:01:28 +08:00
lyr
4906ecc06b 光环助手V4.7.0-新分类精选页功能优化 二、前端功能-第3点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1123#note_86465 2021-01-21 10:01:27 +08:00
lyr
7a831ce646 光环助手V4.7.0-新分类精选页功能优化 二(1、2)https://git.ghzs.com/pm/halo-app-issues/-/issues/1123 2021-01-21 10:01:27 +08:00
290a26c4e2 完善权限跳转逻辑 2021-01-20 14:21:59 +08:00
571080b1e5 Merge branch 'feature-issues1128' into 'dev-4.7.0'
Feature issues1128

See merge request halo/assistant-android!81
2021-01-20 11:36:18 +08:00
d9567138ee 完成存储权限弹窗优化(权限应用场景跳转地址暂缺) pm/halo-app-issues#1128 2021-01-20 11:36:18 +08:00
4a31f74dcb Merge branch 'hotfix-v4.6.0-270-generic_crash' into 'release'
修复一些闪退

See merge request halo/assistant-android!80
2021-01-20 11:25:11 +08:00
79cf96b161 Merge branch 'hotfix-v4.6.0-270-crash' into 'release'
1.处理个人主页由于个人信息未初始化导致的闪退;2.处理绑定手机由于ServiceId未初始化导致的闪退

See merge request halo/assistant-android!79
2021-01-20 11:23:30 +08:00
7fdd4dbf04 修复一些闪退
1. 修复部分设备获取 ROM 信息时的闪退
2. 修复启动时预约游戏弹窗页面重建时的闪退
2021-01-20 11:22:28 +08:00
lyr
8eeeb5de60 1.处理个人主页由于个人信息未初始化导致的闪退;2.处理绑定手机由于ServiceId未初始化导致的闪退 2021-01-20 10:34:19 +08:00
150109cef4 修复镜像游戏的包 id 与原游戏 id 不一时出现的按钮状态不变更问题 2021-01-19 17:10:18 +08:00
7e7cc38d6d 优化全局图片加载 2021-01-19 17:04:14 +08:00
b3df30680e 更新头条推广SDK 2021-01-19 14:56:00 +08:00
f73048d3a5 Merge branch 'release' into dev-4.7.0
# Conflicts:
#	app/src/main/java/com/gh/common/exposure/ExposureManager.kt
#	app/src/main/java/com/gh/common/videolog/VideoRecordUtils.kt
#	app/src/main/res/drawable-nodpi/splash_01.webp
2021-01-19 12:02:39 +08:00
c540c14e1c Merge branch 'hotfix-v4.6.0-270-install_status' into 'release'
修复已安装的应用下载按钮状态更新不及时的问题

See merge request halo/assistant-android!77
2021-01-18 09:21:50 +08:00
f216bf4097 Merge branch 'feature-bbs' into dev-4.7.0 2021-01-18 09:13:45 +08:00
a42bcbd160 增加问题草稿功能 2021-01-15 16:30:06 +08:00
bc6786b21e 修复已安装的应用下载按钮状态更新不及时的问题 2021-01-15 11:51:28 +08:00
47e357143c 资源图片批量转webp,删掉部分废弃代码和文件 2021-01-14 17:05:14 +08:00
74eb8ad0e8 Merge branch 'feature-reduce_memory_usage' into 'dev-4.7.0'
优化线程使用

See merge request halo/assistant-android!75
2021-01-13 17:24:18 +08:00
d2fc927ffb 优化线程管理,减少闲置线程数量 2021-01-13 17:24:18 +08:00
db4b049591 Add new gdt account 2021-01-13 15:56:57 +08:00
lyr
86db2b5688 优化模拟器游戏列表加载 2021-01-13 14:46:14 +08:00
baa1c9f9e5 Merge branch 'dev-4.7.0' into feature-bbs 2021-01-13 11:38:03 +08:00
be3a3e82af 修改游戏详情预约闪退问题 2021-01-13 11:34:12 +08:00
120ea26455 编辑帖子/回答上传图片取消加载弹窗,改为占位图 2021-01-13 11:22:40 +08:00
fc476ca889 Merge remote-tracking branch 'origin/dev' into dev 2021-01-13 09:11:59 +08:00
fc36ce6a03 更换启动引导图 https://git.ghzs.com/pm/halo-app-issues/-/issues/1136 2021-01-13 09:11:49 +08:00
0a1d330c2f 修复自动搜索页面的下载按钮复用问题 2021-01-12 15:32:53 +08:00
lyr
e5ec42576c 光环助手V4.7.0-积分体系(第2期)--积分第1期优化 第3点 https://git.ghzs.com/pm/halo-app-issues/-/issues/1127 2021-01-12 14:35:32 +08:00
lyr
b57f74a411 修改非全屏WebFragment标题栏被状态栏遮盖的问题 2021-01-12 12:00:12 +08:00
cb3884ea2e 【光环助手V_4.7.0】论坛交互优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1135 2021-01-12 10:02:30 +08:00
lyr
0cb3184e35 解决禅道问题179(【光能】光能数值的显示问题) 2021-01-11 16:39:09 +08:00
lyr
76c5009fbc 1.修复模拟器游戏页-全选删除整个列表之后由于数组越界导致的闪退问题;2.修改模拟器列表初次加载卡顿问题 2021-01-11 10:13:30 +08:00
lyr
312ec153f1 修复更新版本后模拟器游戏记录被清空问题 2021-01-08 18:39:12 +08:00
1ef79df4c5 Merge branch 'release' into 'dev'
Fix crash

See merge request halo/assistant-android!74
2021-01-08 11:11:08 +08:00
d7a809f8a6 Merge branch 'hotfix-v4.5.4-254-database' into 'release'
捕抓数据库满了的时候的异常

See merge request halo/assistant-android!73
2021-01-08 11:10:42 +08:00
ebadeeb873 捕抓数据库满了的时候的异常 2021-01-08 11:08:14 +08:00
55155ee8ae Merge branch 'release' into 'dev'
捕抓部分 SqliteFullException

See merge request halo/assistant-android!72
2021-01-08 10:26:40 +08:00
be98a6b6d6 Merge branch 'hotfix-v4.5.4-254-database' into 'release'
捕抓视频日志数据库满了的时候的异常

See merge request halo/assistant-android!71
2021-01-08 10:04:22 +08:00
e2f396f8c7 捕抓视频日志数据库满了的时候的异常 2021-01-08 10:03:26 +08:00
2a8024368a 优化通用列表对比实现,提高性能 2021-01-07 16:16:46 +08:00
0cd025b42d 更新依赖 2021-01-07 16:11:40 +08:00
lyr
d6adda78c4 修复禅道问题182(【模拟器游戏】模拟器游戏显示问题) 2021-01-07 11:56:54 +08:00
99708d7801 Merge branch 'dev-4.6.0' into 'dev'
Feature 4.6.0

See merge request halo/assistant-android!70
2021-01-07 10:00:38 +08:00
584986a9d5 Merge branch 'release' into dev-4.6.0
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/game/columncollection/detail/ColumnCollectionDetailActivity.kt
2021-01-07 09:55:42 +08:00
507da05841 Merge remote-tracking branch 'origin/hotfix-v4.5.4-254-crash' into release
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/simulatorgame/SimulatorGameListFragment.kt
2021-01-07 09:52:22 +08:00
72a8fe4764 将下载文件夹的名字从 gh-download 改成 gh-files,避免被华为手机管家清理 2021-01-07 09:30:30 +08:00
lyr
f9f23f6324 WebFragment和光能屋-顶部栏适配小米型号手机 2021-01-06 18:31:38 +08:00
e2964f93c7 完成曝光数据统计优化(20210106测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1087 2021-01-06 18:04:30 +08:00
cb2a9a3ca0 修改模拟器游戏下载完成后数据上传错误 2021-01-06 17:43:38 +08:00
lyr
ea68941bb9 修改模拟器列表页由于复用产生的错误点击问题 2021-01-06 14:58:15 +08:00
lyr
b598d331d4 修复光能任务列表的空指针错误 2021-01-06 14:33:41 +08:00
lyr
d7b876bfed 1.修复未安装QQ情况下分享图片闪退问题;2.修复缺少专题ID时进入专题合集页面闪退问题;3.修复由于"Fragment未添加到Activity时"进入个人主页闪退问题;4.修复文章编辑页-上传图片时,由于返回的文件路径为空导致创建图片文件失败的闪退问题;5.修复模拟器游戏页由于数组越界导致的闪退问题;6.修复进入WebFragment(即网页)时,由于获取参数为空导致的闪退问题 2021-01-06 10:53:00 +08:00
lyr
6aca60080a 修复光能中心底部和透明导航栏重叠问题 2021-01-06 10:22:07 +08:00
59d76688b9 优化全局预览图->大图的显示 2021-01-06 09:53:03 +08:00
8e5e677228 完成曝光数据统计优化(20201230测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1087 2021-01-05 17:41:00 +08:00
dd1bfcaddd 正式接口切换到 4.6.0,测试接口更改 host 2021-01-05 15:47:02 +08:00
f4c66e1ab7 Merge branch 'hotfix-4.5.4-crash' into 'release'
修改sentry闪退问题

See merge request halo/assistant-android!66
2021-01-05 15:44:44 +08:00
6ebdf6e42a 1.修改选择头像闪退问题
2.修改视频评论闪退问题
3.修改模拟游戏列表闪退问题
4.尝试修改5.0系统手机找不到vector资源文件问题
5.修改用户信息修改页面闪退问题
2021-01-05 15:44:44 +08:00
4c01dd442b Merge branch 'hotfix-v4.5.4-254-generic_crash' into release
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/category/CategoryDirectoryFragment.kt
2021-01-05 15:17:57 +08:00
ac226e3301 修复闪退
1. 修复旧分类页偶发的空指针闪退
2. 修复多进程判断偶发的空指针闪退
3. 捕抓调用关闭 WebView 安全浏览 API 闪退异常
4. 捕抓通用列表刷新时多线程读写造成的数组越界
2021-01-05 15:14:34 +08:00
lyr
569f1b8cf1 微调"光能中心"UI 2021-01-05 09:38:17 +08:00
lyr
46f5da88a6 光环助手V4.6.0-积分体系(第1期)--光能屋 20201230UI测试 https://git.ghzs.com/pm/halo-app-issues/-/issues/1062#note_83290 和 光环助手V4.6.0-新增[光能中心-订单管理] 1231-补充1 https://git.ghzs.com/pm/halo-app-issues/-/issues/1061#note_83483 2021-01-04 18:36:10 +08:00
f5b876b018 Merge branch 'hotfix-v4.5.4-254-generic_crash' into 'release'
修复闪退

See merge request halo/assistant-android!63
2021-01-04 18:12:34 +08:00
c5df856023 修复闪退
1. 修复部分机器获取 rom 名字时的闪退
2. 修复下载管理偶发的闪退
3. 修复上报安装应用列表偶发的闪退
4. 修复回答详情数据异常时点击收藏的闪退
2021-01-04 18:05:38 +08:00
lyr
4f775847dc 还原"我的光环"页面,点击右上角便签可进入新的"我的光环"页面 2021-01-04 14:35:23 +08:00
lyr
f53710fdf5 光环助手V4.6.0-新增[光能中心-任务管理] 1230测试 https://git.ghzs.com/pm/halo-app-issues/-/issues/1063#note_83291 2021-01-04 11:26:16 +08:00
80c56def08 Merge branch 'release' into 'dev-4.6.0'
Fix crash

See merge request halo/assistant-android!62
2020-12-31 18:19:27 +08:00
a1d88d999e Merge branch 'hotfix-v4.5.4-254-intent_crash' into 'release'
捕抓跳转外部浏览器 intent 异常

See merge request halo/assistant-android!61
2020-12-31 18:18:52 +08:00
fbc6f6adaa Merge branch 'hotfix-4.5.4-crash' into 'release'
修改sentry闪退问题

See merge request halo/assistant-android!59
2020-12-31 18:17:28 +08:00
e7c55b2467 捕抓跳转外部浏览器 intent 异常 2020-12-31 18:15:50 +08:00
2c45bb1da9 1.处理更换头像挂件闪退问题
2.添加游戏投稿选择文件失败toast提示
2020-12-31 18:09:51 +08:00
173825dc74 Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-31 09:15:54 +08:00
a63e28809b 修改禅道问题65 2020-12-31 09:15:26 +08:00
0eb8cb6e66 修复卸载应用时下载安装按钮状态变更可能不及时的问题 2020-12-30 21:22:18 +08:00
e1514e2b25 Merge branch 'release' into dev-4.6.0 2020-12-30 18:15:47 +08:00
bef0da821b 去掉下载管理-已安装列表的多线程读写 2020-12-30 18:14:53 +08:00
54741729f3 Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-30 18:09:00 +08:00
e2640c22f8 修改论坛信息流图片计数标签显示规则 2020-12-30 18:08:38 +08:00
2f16d5ba99 修复游戏详情页提示弹窗的弹出异常 2020-12-30 17:48:56 +08:00
1d5301f887 修复我的关注页的取消关注列表更新问题,修复在部分设备上的游戏详情页触摸切换tab不灵敏问题 2020-12-30 17:24:52 +08:00
cc09c702f7 Merge branch 'release' into dev-4.6.0 2020-12-30 16:50:43 +08:00
6b2a88766e 修复下载管理-已安装列表的闪退问题 2020-12-30 16:49:48 +08:00
lyr
0eb629fe67 1.修复漏上报"下载游戏"、"玩游戏"、"分享游戏详情"光能任务的问题;2.前端取消上报"注册"和"登录"光能任务 2020-12-30 15:29:56 +08:00
44c398c9fb Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-30 15:17:32 +08:00
96122c5919 【光环助手V4.6.0】论坛发布流程优化(1229测试反馈2) https://git.ghzs.com/pm/halo-app-issues/-/issues/1086 2020-12-30 15:17:13 +08:00
bd4c438036 修复前端测试汇总(20201229测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1098 2020-12-30 15:04:38 +08:00
adc8648f5a 完成曝光数据统计优化(20201229测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1087 2020-12-30 11:34:05 +08:00
8eb3922a33 【光环助手V4.6.0】论坛发布流程优化(201230-UI测试问题汇总) https://git.ghzs.com/pm/halo-app-issues/-/issues/1086 2020-12-30 11:03:59 +08:00
30743bb015 Merge remote-tracking branch 'origin/release' into dev-4.6.0
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/servers/add/AddKaiFuActivity.kt
#	app/src/main/java/com/gh/gamecenter/servers/patch/PatchKaifuActivity.kt
#	app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt
#	dependencies.gradle
#	libraries/LGLibrary
2020-12-30 10:38:11 +08:00
853f51ad0e Merge branch 'hotfix-v4.5.4-254-generic_crash' into 'release'
处理闪退

See merge request halo/assistant-android!57
2020-12-30 10:30:15 +08:00
763aad99ee 1. 修复视频编辑封面页偶发的初始化异常闪退
2. 修复我的游戏评论数据变更时的数组越界闪退
3. 修复部分设备跳转查看应用使用情况时的闪退
2020-12-30 10:28:03 +08:00
2ed2317b02 Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-29 19:47:39 +08:00
0663f3eb2b 【光环助手V4.6.0】论坛发布流程优化(1229测试反馈1,2,3,5,6) https://git.ghzs.com/pm/halo-app-issues/-/issues/1086 2020-12-29 19:47:20 +08:00
11a2eeae7a 修复帖子评论详情父评论点赞不同步的问题 2020-12-29 18:21:40 +08:00
lyr
8c2619bb22 Merge remote-tracking branch 'origin/dev-4.6.0' into dev-4.6.0 2020-12-29 17:13:07 +08:00
lyr
46320fe07d 光环助手V4.6.0-积分体系(第1期)--光能中心 20201229UI测试-图1/2 https://git.ghzs.com/pm/halo-app-issues/-/issues/1065#note_82979 和 光能助手V4.6.0-积分体系(第1期)-- 我的光环优化 20201229UI测试 https://git.ghzs.com/pm/halo-app-issues/-/issues/1066#note_82978 2020-12-29 17:12:54 +08:00
1ee933b115 Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-29 17:12:51 +08:00
1d9152ca1a 完成禅道问题56,66 2020-12-29 17:12:34 +08:00
lyr
81ebf21bb9 光环前端优化汇总(2020年12月)20201229补充分类精选页问题 https://git.ghzs.com/pm/halo-app-issues/-/issues/1098#note_82895 2020-12-29 16:17:15 +08:00
dd4bf98f28 补充记录曝光位置页面 https://git.ghzs.com/pm/halo-app-issues/-/issues/1087 2020-12-29 15:59:15 +08:00
ba3a06da43 完成光环前端优化汇总(20201226测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1098 2020-12-29 15:12:53 +08:00
6fe096383c 更新依赖库 2020-12-29 15:10:32 +08:00
d16f99958f 【光环助手V4.6.0】论坛发布流程优化(201226-UI测试问题汇总2-4) https://git.ghzs.com/pm/halo-app-issues/-/issues/1086 2020-12-29 15:05:19 +08:00
5fa3aa42dc Merge remote-tracking branch 'origin/hotfix-4.5.4-254-crash' into release
# Conflicts:
#	libraries/LGLibrary
2020-12-29 14:20:50 +08:00
lyr
f4f28a2daa 解决禅道问题139(【光能中心】兑换区--“前往光能屋查看更多”悬浮窗出现机制) 2020-12-29 12:55:56 +08:00
3c1cd14bdc Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-29 11:52:47 +08:00
6dcc251312 光环助手V4.6.0-游戏预约功能(第三期)(1226测试1) https://git.ghzs.com/pm/halo-app-issues/-/issues/1082 2020-12-29 11:52:29 +08:00
f692aa4bff 修复曝光数据统计优化(20201228测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1087 2020-12-29 11:14:44 +08:00
7cde55ebe0 1.修改webview页面闪退问题
2.修改已安装列表闪退问题
3.修改通知权限弹窗闪退问题
4.修改Activity已关闭后web页面延迟alert而导致的闪退问题
5.修改点击视频流更多按钮闪退问题
6.修改AppUncaughtHandler捕获异常后关闭所有Activity闪退问题
7.修改一些数组越界问题
2020-12-29 10:43:35 +08:00
lyr
94eba08af4 解决禅道问题127(【光能中心】商品分类重复显示问题)、135(【光能屋】滑动界面,光能屋模块的背景问题)、139(【光能中心】兑换区--“前往光能屋查看更多”悬浮窗出现机制) 2020-12-29 10:18:14 +08:00
2bf207661c 补充安全隐患排查的更改 https://git.ghzs.com/pm/halo-app-issues/-/issues/1093 2020-12-29 10:03:21 +08:00
2fff7f60c2 完成前端优化汇总(20201225测试问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1098 2020-12-28 17:51:28 +08:00
lyr
1b3c93ebb5 解决禅道问题133(【手机登录】多次点击第三方登录会弹出多个登录界面)、135(【光能屋】滑动界面,光能屋模块的背景问题) 2020-12-28 17:13:06 +08:00
lyr
5b529b044e 光环助手V4.6.0-积分体系(第1期)--光能中心(2020-12-28 产品测试APP端问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1065#note_82696 和 光环助手V4.6.0-积分体系(第1期)--光能屋(2020-12-28 产品测试APP端问题)https://git.ghzs.com/pm/halo-app-issues/-/issues/1062#note_82698 2020-12-28 16:10:39 +08:00
91f417f479 Merge branch 'hotfix-v4.5.4-254-generic_crash' into 'release'
处理简单闪退

See merge request halo/assistant-android!55
2020-12-28 16:03:56 +08:00
fc0bf595bd 1. 修复偶发的点击安装按钮空指针闪退
2. 修复停留在微信登录页面时下载完成触发的闪退
3. 修复游戏详情页面自定义栏目展开按钮在部分设备上的数组越界闪退
4. 修复分类详情列表页面偶发的空指针闪退
5. 修复游戏管理游戏下载页面的数组越界闪退
6. 修复游戏评论回复页面偶发的空指针闪退
7. 修复通用评论页(视频、答案和文章)列表偶发的空指针闪退
8. 修复问题详情页面偶发的空指针闪退
9. 修复历史修改版本页面偶发的空指针闪退
10. 修复新增开服页面偶发的空指针闪退
11. 修复修改开服页面偶发的空指针闪退
12. 修复视频合集页面偶发的空指针闪退
13. 修复上传视频页面偶发的空指针闪退
14. 修复全局页面点返回键偶发的闪退
15. 修复反馈页面偶发的空指针闪退
16. 修复微博分享页面偶发的空指针闪退
17. 修复游戏新闻搜索页面偶发的空指针闪退
18. 修复全局下载进度更新偶发的闪退
2020-12-28 15:58:32 +08:00
lyr
c0f6499577 光环助手V4.6.0-积分体系(第1期)--光能中心 20201225UI测试 https://git.ghzs.com/pm/halo-app-issues/-/issues/1065#note_82546 和 光环助手V4.6.0-积分体系(第1期)--光能屋 20201225UI测试 https://git.ghzs.com/pm/halo-app-issues/-/issues/1062#note_82549 2020-12-28 14:32:12 +08:00
b9bef384f1 还原正常安装 Intent 2020-12-28 11:37:02 +08:00
58bfae2fdb 【光环助手V4.6.0】论坛首页信息流UI展示规则优化(201228-UI测试问题汇总) https://git.ghzs.com/pm/halo-app-issues/-/issues/1052 2020-12-28 11:04:40 +08:00
d2c2fff884 Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-28 09:46:23 +08:00
ab178c47b5 【光环助手V4.6.0】论坛发布流程优化(遗留UI问题) https://git.ghzs.com/pm/halo-app-issues/-/issues/1086 2020-12-28 09:46:04 +08:00
40be004376 适配登录错误码 https://git.ghzs.com/pm/halo-app-issues/-/issues/1095 2020-12-27 11:57:09 +08:00
0b501c9ce1 下载管理"安装/继续下载"补充权限申请 2020-12-27 10:56:12 +08:00
cff82379f5 升级版本至 4.5.4 2020-12-26 19:08:25 +08:00
825503bd58 Merge branch 'hotfix-v4.5.3-253-multidex' into 'release'
处理分 dex 问题

See merge request halo/assistant-android!54
2020-12-26 19:05:58 +08:00
77a715a4bd 处理分 dex 问题 2020-12-26 19:01:04 +08:00
78b233c506 预览长图默认显示顶部区域 2020-12-26 15:31:08 +08:00
a6e799bb9a 【光环助手V4.6.0】论坛首页信息流UI展示规则优化(201225-UI测试问题汇总3) https://git.ghzs.com/pm/halo-app-issues/-/issues/1052 2020-12-26 14:41:54 +08:00
b65992099a Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-26 14:09:35 +08:00
3d1a5f52bf debug环境开启严格模式 2020-12-26 14:09:15 +08:00
82d0d5745c 【光环助手V4.6.0】论坛发布流程优化(201226-UI测试问题汇总) https://git.ghzs.com/pm/halo-app-issues/-/issues/1086 2020-12-26 14:07:47 +08:00
fe7968cb32 Merge branch 'feature-issues1087' into 'dev-4.6.0'
https://git.ghzs.com/pm/halo-app-issues/-/issues/1087

See merge request halo/assistant-android!53
2020-12-26 11:49:59 +08:00
94c503af74 完成部分曝光统计优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1087 2020-12-26 11:49:59 +08:00
bdd9815ffc Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-25 17:31:41 +08:00
693acceca8 光环助手V4.6.0-游戏预约功能(第三期)(201222-UI测试问题汇总) https://git.ghzs.com/pm/halo-app-issues/-/issues/1082 2020-12-25 17:31:23 +08:00
lyr
90971bc299 Merge remote-tracking branch 'origin/dev-4.6.0' into dev-4.6.0 2020-12-25 16:45:07 +08:00
lyr
e5b3613348 光能助手V4.6.0-积分体系(第1期)-- 我的光环优化 - 20201225UI测试 https://git.ghzs.com/pm/halo-app-issues/-/issues/1066#note_82491 2020-12-25 16:44:52 +08:00
652ca8f69c 1.修改帖子图片计数标签 2.修改帖子提交按钮 2020-12-25 16:43:07 +08:00
f15e351c1e Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-25 16:21:02 +08:00
47c81c3dac 【光环助手V4.6.0】论坛首页信息流UI展示规则优化(201225-UI测试问题汇总) https://git.ghzs.com/pm/halo-app-issues/-/issues/1052 2020-12-25 16:20:32 +08:00
7453a61e4f Merge remote-tracking branch 'origin/dev-4.6.0' into dev-4.6.0 2020-12-25 15:57:42 +08:00
911f6397e8 处理合并冲突 2020-12-25 15:54:52 +08:00
lyr
8d21a4f774 修复光能模块若干bug 2020-12-25 15:53:02 +08:00
991c54b680 Merge remote-tracking branch 'origin/release' into dev-4.6.0
# Conflicts:
#	app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt
#	dependencies.gradle
2020-12-25 15:47:51 +08:00
48dcb5089b Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-25 15:40:31 +08:00
461efe7101 【光环助手V4.6.0】论坛发布流程优化(201224-UI测试问题汇总) https://git.ghzs.com/pm/halo-app-issues/-/issues/1086 2020-12-25 15:40:13 +08:00
lyr
0735161a20 光环前端优化汇总(2020年12月)7/8 https://git.ghzs.com/pm/halo-app-issues/-/issues/1098 2020-12-24 16:53:44 +08:00
093c1e2b15 【光环助手V4.6.0】论坛首页信息流UI展示规则优化(1224需求说明) https://git.ghzs.com/pm/halo-app-issues/-/issues/1052 2020-12-24 16:36:01 +08:00
7d0e02c899 Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-24 16:08:22 +08:00
8294913f04 【光环助手V4.6.0】论坛发布流程优化201223-UI测试问题汇总1-9 https://git.ghzs.com/pm/halo-app-issues/-/issues/1086 2020-12-24 16:07:56 +08:00
lyr
e811c4f90b 增加web页跳转光能屋的JS调用方法;优化光能模块 2020-12-24 11:27:38 +08:00
lyr
ff6c4c2de9 光能值最多显示9999+ 2020-12-24 09:23:02 +08:00
lyr
136761d2f7 光能模块web页的url增加"from=ghzs",以此标志是从助手跳转 2020-12-23 18:18:17 +08:00
9374fc5264 将部分数据库操作移动到工作线程 2020-12-23 18:11:27 +08:00
lyr
324aaa5056 统一修改光能模块命名 2020-12-23 18:03:51 +08:00
f22afbd819 修复横向专题推荐图标复用问题 2020-12-23 17:47:22 +08:00
e149231cb2 完成对上报 IMEI 和 ANDROID_ID 的简单转码 https://git.ghzs.com/pm/halo-app-issues/-/issues/1093 2020-12-23 17:12:23 +08:00
lyr
9c8155ddf8 1.添加跳转光能中心的JS调用方法;2.客服通知增加"订单中心"和"光能记录"类型 2020-12-23 17:07:23 +08:00
dd95419a36 Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-23 15:03:49 +08:00
870b10dd13 【光环助手V4.6.0】论坛首页信息流UI展示规则优化(201222-UI测试问题汇总1-7) https://git.ghzs.com/pm/halo-app-issues/-/issues/1052 2020-12-23 15:02:53 +08:00
lyr
637b426649 优化光能模块 2020-12-23 14:13:54 +08:00
lyr
fdbb16b45f 修复光能模块若干bug 2020-12-23 10:11:25 +08:00
lyr
29bc098dcf Merge branch 'feature-guangneng' into dev-4.6.0 2020-12-22 18:05:24 +08:00
lyr
b2433cf13a 光环助手V4.6.0-积分体系(第1期)--光能中心(首页部分)https://git.ghzs.com/pm/halo-app-issues/-/issues/1065 和 光环助手V4.6.0-积分体系(第1期)--光能屋(首页部分)https://git.ghzs.com/pm/halo-app-issues/-/issues/1062 2020-12-22 17:15:32 +08:00
e908e23bb2 sentry 事件别名去掉编译时间 2020-12-22 17:02:07 +08:00
1a4dc827b5 Merge branch 'dev-4.6.0' of git.ghzs.com:halo/assistant-android into dev-4.6.0 2020-12-22 16:27:31 +08:00
9fd5e65fa2 添加测试用打包脚本 2020-12-22 16:25:56 +08:00
5405dcd30e 更新 compileSDK版本至30 2020-12-22 16:08:40 +08:00
5c35f7fe5d 完成镜像游戏上报标记字段 https://git.ghzs.com/pm/halo-app-issues/-/issues/1085 2020-12-22 14:54:46 +08:00
fc907a398f 完成光环前端优化汇总(12月)(1,2,4,6) https://git.ghzs.com/pm/halo-app-issues/-/issues/1098 2020-12-22 11:02:50 +08:00
1b8dc6eba0 优化ImageContainerView 2020-12-22 10:26:38 +08:00
c17a36c866 修改大家都在玩分割线不显示问题 2020-12-21 18:31:48 +08:00
a29cf832f1 修复详情页大家都在玩推荐图标显示问题 2020-12-21 18:05:53 +08:00
c9a628a5e9 修改提问、发帖子论坛图标不显示问题 2020-12-21 17:45:07 +08:00
4002f138bb Merge branch 'feature-issues1082' into dev-4.6.0 2020-12-21 15:09:15 +08:00
48fdb38902 光环助手V4.6.0-游戏预约功能(第三期)https://git.ghzs.com/pm/halo-app-issues/-/issues/1082 2020-12-21 15:07:53 +08:00
38a3120ea1 添加应用内游戏详情url拦截 https://git.ghzs.com/pm/halo-app-issues/-/issues/1103 2020-12-21 14:33:55 +08:00
c0e370dfd2 修复横向专题的热门推荐图标显示问题 2020-12-21 14:31:31 +08:00
80a2e4f336 修复点击预览图片position错误问题 2020-12-17 17:24:19 +08:00
9f5940c6f6 【光环助手V4.6.0】论坛首页信息流UI展示规则优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1052 2020-12-17 16:33:14 +08:00
d01fda44b3 版本号改为 4.6.0 2020-12-15 09:44:59 +08:00
2020033bc0 测试环境API版本改为v4d6d0 2020-12-11 09:29:34 +08:00
dc2c8e590c Merge branch 'feature-bbs_publish' into dev-4.6.0 2020-12-11 09:19:20 +08:00
b115db51e9 【光环助手V4.6.0】论坛发布流程优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1086 2020-12-10 18:22:54 +08:00
lyr
7d194c7078 光能助手V4.6.0-积分体系(第1期)-- 我的光环优化 https://git.ghzs.com/pm/halo-app-issues/-/issues/1066 2020-12-08 10:31:13 +08:00
4439 changed files with 155743 additions and 93813 deletions

1
.gitignore vendored
View File

@ -7,5 +7,6 @@ local.properties
captures/
build/
release-app/
test-app/
scripts/apk-channel/
app/src/test/java/com/gh/gamecenter

44
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,44 @@
stages:
- analysis
- sendmail
## 代码检查
sonarqube_analysis:
tags:
- offline-test
stage: analysis
image: sonarsource/sonar-scanner-cli:latest
dependencies: [] #禁止传递来的artifact
script:
## 获取项目的一级组和二级组和项目名作为projectKey例如projectKey=platform-backend-eci-monitor
- group=`echo $CI_PROJECT_PATH | sed 's#/#-#g'`
- sonar-scanner
-Dsonar.host.url=http://sonarqube-server.sonarqube:9000/
-Dsonar.login=be43de7264ce4c4766eb0c020373c3e74e6df257
-Dsonar.jacoco.reportPaths=target/jacoco.exec
-Dsonar.projectKey=$group
-Dsonar.projectName=$CI_PROJECT_PATH
-Dsonar.sourceEncoding=UTF-8
-Dsonar.exclusions=**/vendor/**,**/errcode/**
-Dsonar.gitlab.project_id=$CI_PROJECT_ID
-Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
-Dsonar.gitlab.ci_merge_request_iid=$CI_MERGE_REQUEST_IID
-Dsonar.gitlab.merge_request_discussion=true
-Dsonar.java.binaries=. # 如果不使用Maven或Gradle进行分析则必须手动提供测试二进制文件
only:
- dev
## 发送简易检测结果报告
send_sonar_report:
tags:
- offline-test
stage: sendmail
image: hub.shanqu.cc/library/docker:latest
dependencies: [] #禁止传递来的artifact
script:
- group=`echo $CI_PROJECT_PATH | sed 's#/#-#g'`
- docker login -u "${HARBOR_REGISTRY_USERNAME}" -p "${HARBOR_REGISTRY_PASSWORD}" "${HARBOR_REGISTRY}"
- docker run -e PROJECTKEY=$group -e EMAIL=$GITLAB_USER_EMAIL --name send-email --rm hub.shanqu.cc/platform/send-sonar-report:latest
only:
- dev

5
.gitmodules vendored
View File

@ -1,4 +1,7 @@
[submodule "libraries/LGLibrary"]
path = libraries/LGLibrary
url = git@gitlab.ghzs.com:android/common-library.git
url = git@git.shanqu.cc:android/common-library.git
branch = master
[submodule "assistant_flutter"]
path = assistant_flutter
url = git@git.shanqu.cc:halo/android/flutter-module.git

View File

@ -1,69 +1,65 @@
# 光环助手Android客户端
### APK打包配置
### 概述
* 使用[ApkChannelPackage](https://github.com/ltlovezh/ApkChannelPackage)的方案
* 打包命令,视情况使用:
光环助手Android客户端目前使用 Kotlin 作为主要开发语言,以 MVVM 作为参考架构模式进行开发
> 打包Tinker基准包`./scripts/tinker_release_base.sh`
### 约束
> 以Tinker基准包打渠道包`./scripts/tinker_release_channel.sh`
为编写易读易维护且较健壮的代码,可参考以下约束
> 以Tinker基准包打补丁包`./scripts/tinker_release_patch.sh`
1. 尽量将逻辑代码放置于 ViewModel 中View 中只执行 UI 操作
2. 尽量使 View 在被销毁之后仍能恢复状态,处理方式可参考 [保存界面状态](https://developer.android.com/topic/libraries/architecture/saving-states)
3. 尽量参考原有文件结构及命名规范,即以 大模块 - 小模块 的形式生成包关系
4. 遵循最小改动原则,在提交代码前务必先检查变动的代码,尽量以可控的变动规模来构成一个 commit ,以便日后追踪问题
5. 代码规范可参考 [AOSP Java 风格](https://source.android.com/setup/contribute/code-style)
6. 尽量使用 Kotlin 来写新文件
7. 尽量不要使用 DataBinding
8. Commit 前请确保不带入非项目必须文件,可手动修改 [.gitignore](https://stackoverflow.com/questions/8527597/how-do-i-ignore-files-in-a-directory-in-git) 文件忽略
9. 优先使用 ViewBinding 获取 View 对象
10. No AsyncTask!
### 混淆配置
### 公用部分
* 配置文件Android默认配置+proguard-rules.txt等
* 参考libraries下每个项目独立的配置文件`proguard-project.txt`
本项目使用 LiveData 实现了一个简单通用的基础列表分页功能,具体可见 `ListFragment`, `ListViewModel` 等类,理想情况下只需少量代码即可新建一个简单分页列表
### apk大小优化
### 首次拉取项目代码
* 限制resConfig资源集
* 开启ShrinkResources
* 开启混淆使用minifyEnabled(仅在release开启
* pngquant对png压缩、png/jpg->webp(未尝试)
`git clone -b dev git@git.shanqu.cc:halo/android/assistant-android.git --recursive`
### git 版本管理
本项目使用简化版的 git flow 来管理分支,细节请看 [光环安卓简单 git 规范](https://git.ghzs.com/halo/android/assistant-android/-/wikis/%E5%85%89%E7%8E%AF%E5%AE%89%E5%8D%93%E7%AE%80%E5%8D%95-git-%E8%A7%84%E8%8C%83)
### API 环境配置
本项目使用 Build Variants 来切换 API 环境
* internal 为测试环境
* publish 为正式环境
### 图片资源配置
* 新增图片资源时,默认只添加最高规格的 xxxhdpi 文件
* 新增图片资源时,需要将其转换为 .webp 格式 (包括含透明图层的图片默认质量为90%) (转换后体积变大的文件除外)
### 第三方appkey等配置
* 修改`gradle.properties`文件将各种key填入其中实现统一管理
* 通过gradle文件内的resValue/buildConfigField/manifestPlaceHolder方式实现编译期间修改具体情况请参考``./build.gradle````./app/build.gradle``配置
* 修改 `gradle.properties` 文件将各种key填入其中实现统一管理
* 通过 gradle 文件内的 resValue/buildConfigField/manifestPlaceHolder 方式实现编译期间修改,具体情况请参考 ``./build.gradle````./app/build.gradle`` 配置
### 拉取代码步骤
### 混淆配置
1. 拉取主项目代码: `git clone -b dev git@gitlab.ghzhushou.com:halo/assistant-android.git`
2. 初始化公用类库: `bash ./scripts/submodules_init.sh`
* 本项目使用了微信的 [AndResGuard](https://github.com/shwenzhang/AndResGuard) 作为资源混淆压缩方案,新增需要使用 `getIdentifier` 获取的资源文件时需要添加至白名单
* 本项目默认使用 R8 作为混淆工具,往 proguard-rules.txt 添加 proguard 新配置项时请检查可用性(如语法等)
### submodule管理方式(只拉取master)
### APK打包配置
* 提交代码需要cd到submodule文件夹去做修改
* 更新远端代码,`bash ./scripts/submodules_update.sh`
> 打内部测试包:`./scripts/test_build.sh`
> 打邮件测试包:`./scripts/jenkins_build.sh`
### TODO
* GSON 序列化用统一一个, GsonUtil fromJson
* CleanApkAdapter 转化字符串size工具函数 比如SpeedUtils
* getString 解决 字符串hardcode问题
* ~~Adapter 里面clicklistener 用接口传参将点击操作委托给controller~~
* ~~Adapter ViewHolder的功能部分重写到ViewHolder类本身~~
* ~~activity 统一入口未完成(外部入口相关)去除多余activity使用统一toolbar~~
* ~~release / debug compile不同的类库不需要再做什么开关~~
* ~~Toolbar分离有图形按钮/没有图形按钮~~
### TODO Since 3.1
- 解决 Utils 工具类引发的内存泄漏问题
- 把原有 EventBus 的消息 Type 统一到一个文件内
- 将实现细节从 View(Fragment、Activity) 剥离并以 MVVM 结构改造
- ~~将 ListViewModel 所对应的 ListRepository 合并到 ListViewModel 中~~
- 依照光环助手界面功能以大模块 - 小模块的方式去修改包结构,包内文件建议以包名摘要作为前缀
- ~~使用 RxJava 的 Debounce 和 Map 操作优化搜索触发机制 参考资料:[1](https://proandroiddev.com/building-an-autocompleting-edittext-using-rxjava-f69c5c3f5a40),[2](https://medium.com/@kurtisnusbaum/rxandroid-basics-part-2-6e877af352)~~
- ~~把 ListViewModel 的数据结构类型转换方式换为抽象方法,让继承的类实现,避免出现无响应的问题~~
- ~~rxjava2 如果接口返回为空 会发生异常:java.lang.NullPointerException: Null is not a valid element (答案编辑) 解决方法->com.gh.gamecenter.retrofit.Response~~
- constraintLayout 1.1.2 导致布局出现异常(问题编辑标签选择弹窗)
- 搞清楚 GameManager 的用途,看能不能去掉
- 重构一下 MainActivity
* 把原有 EventBus 的消息 Type 统一一个文件内
* 将实现细节从 View(Fragment、Activity) 剥离并以 MVVM 结构改造
* 重构 MainActivity

View File

@ -1,27 +1,17 @@
// This comment exists for a reason, do not delete
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' // kotlin
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlin-kapt'
// apkChannelPackage
apply plugin: 'channel'
apply plugin: 'AndResGuard'
import groovy.xml.XmlUtil
//apply from: 'tinker-support.gradle'
android {
androidExtensions {
experimental = true
}
dataBinding {
enabled = true
}
viewBinding {
enabled = true
buildFeatures {
viewBinding true
dataBinding true
}
compileOptions {
@ -36,10 +26,25 @@ android {
dexOptions {
// jumboMode = true
javaMaxHeapSize "4g"
preDexLibraries true
maxProcessCount 8
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
kapt {
useBuildCache = true
javacOptions {
// 增加注解处理器的最大错误次数,默认为 100
option("-Xmaxerrs", 500)
}
}
defaultConfig {
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
javaCompileOptions {
annotationProcessorOptions {
@ -48,7 +53,12 @@ android {
}
ndk {
abiFilters "armeabi-v7a"
// 如果不添加 `arm64` 调用系统的 PackageManager 的方法读取安装包信息的时候会出现 native 层闪退,草
// 添加了 `arm64` 以后部分 5.0 的设备会报用错 so 的问题,
// couldn't find DSO to load: libimagepipeline.so caused by: dlopen failed: "/data/data/com.gh.gamecenter/lib-main/libimagepipeline.so" is 64-bit instead of 32-bit result: 0
// 以 OPPO R7PLUS 为例,明明设备是骁龙 615ARMv8-64 bit 的设备却不支持 arm64 的 abi限制了只使用 java 后还是报错,只有 5.05.1 设备无法复现 : (
// 惊了
abiFilters "armeabi-v7a", "arm64-v8a", "x86"
}
renderscriptTargetApi 18
@ -68,29 +78,21 @@ android {
/**
* All third-party appid/appkey
*/
buildConfigField "String", "API_HOST", "\"${API_HOST}\""
buildConfigField "String", "NEW_API_HOST", "\"${NEW_API_HOST}\""
buildConfigField "String", "WECHAT_APPID", "\"${WECHAT_APPID}\""
buildConfigField "String", "WECHAT_SECRET", "\"${WECHAT_SECRET}\""
buildConfigField "String", "TENCENT_APPID", "\"${TENCENT_APPID}\""
buildConfigField "String", "WEIBO_APPKEY", "\"${WEIBO_APPKEY}\""
buildConfigField "String", "MTA_APPKEY", "\"${MTA_APPKEY}\""
buildConfigField "String", "TD_APPID", "\"${TD_APPID}\""
buildConfigField "String", "LETO_APPID", "\"${LETO_APPID}\""
buildConfigField "String", "TTAD_APPID", "\"${TTAD_APPID}\""
buildConfigField "String", "DOUYIN_CLIENTKEY", "\"${DOUYIN_CLIENTKEY}\""
buildConfigField "String", "DOUYIN_CLIENTSECRET", "\"${DOUYIN_CLIENTSECRET}\""
buildConfigField "String", "MIPUSH_APPID", "\"${MIPUSH_APPID}\""
buildConfigField "String", "MIPUSH_APPKEY", "\"${MIPUSH_APPKEY}\""
buildConfigField "String", "MEIZUPUSH_APPID", "\"${MEIZUPUSH_APPID}\""
buildConfigField "String", "MEIZUPUSH_APPKEY", "\"${MEIZUPUSH_APPKEY}\""
resValue "string", "huawei_push_appid", "appid=${HUAWEI_PUSH_APPID}"
buildConfigField "String", "QUICK_LOGIN_APPID", "\"${QUICK_LOGIN_APPID}\""
buildConfigField "String", "QUICK_LOGIN_APPKEY", "\"${QUICK_LOGIN_APPKEY}\""
/**
* Build Time 供区分 jenkins 打包时间用
* IS_NIGHT_MODE_ON 供区分夜间模式功能是否启用
*/
buildConfigField "long", "BUILD_TIME", "0"
buildConfigField "boolean", "IS_NIGHT_MODE_ON", "true"
}
// gradle 2.2以上默认同时启用v1和v2优先用于Android N
@ -131,6 +133,15 @@ android {
}
}
// Ignore useless variant
variantFilter { variant ->
def names = variant.flavors*.name
def isDebugType = variant.buildType.name == "debug"
if ((names.contains("tea")) && isDebugType) {
setIgnore(true)
}
}
flavorDimensions("env")
sourceSets {
@ -143,78 +154,40 @@ android {
tea {
java.srcDirs = ['src/main/java', 'src/tea/java']
}
gdt {
java.srcDirs = ['src/main/java', 'src/gdt/java']
}
}
productFlavors {
// publish release host
publish {
dimension "env"
buildConfigField "String", "API_HOST", "\"${API_HOST}\""
buildConfigField "String", "SENSITIVE_API_HOST", "\"${SENSITIVE_API_HOST}\""
buildConfigField "String", "UMENG_APPKEY", "\"${UMENG_APPKEY}\""
buildConfigField "String", "UMENG_MESSAGE_SECRET", "\"${UMENG_MESSAGE_SECRET}\""
buildConfigField "String", "BUGLY_APPID", "\"${BUGLY_APPID}\""
}
// internal test dev host
internal {
dimension "env"
versionNameSuffix "-debug"
buildConfigField "String", "API_HOST", "\"${DEV_API_HOST}\""
buildConfigField "String", "DEV_API_HOST", "\"${DEV_API_HOST}\""
buildConfigField "String", "NEW_DEV_API_HOST", "\"${NEW_DEV_API_HOST}\""
}
buildConfigField "String", "SENSITIVE_API_HOST", "\"${DEV_API_HOST}\""
// publish release host˛
publish {
dimension "env"
buildConfigField "String", "UMENG_APPKEY", "\"${DEV_UMENG_APPKEY}\""
buildConfigField "String", "UMENG_MESSAGE_SECRET", "\"${DEV_UMENG_MESSAGE_SECRET}\""
buildConfigField "String", "BUGLY_APPID", "\"${DEV_BUGLY_APPID}\""
buildConfigField "String", "DEV_API_HOST", "\"${API_HOST}\""
buildConfigField "String", "NEW_DEV_API_HOST", "\"${NEW_API_HOST}\""
}
tea {
dimension "env"
buildConfigField "String", "API_HOST", "\"${API_HOST}\""
buildConfigField "String", "DEV_API_HOST", "\"${API_HOST}\""
buildConfigField "String", "NEW_DEV_API_HOST", "\"${NEW_API_HOST}\""
buildConfigField "String", "SENSITIVE_API_HOST", "\"${SENSITIVE_API_HOST}\""
buildConfigField "String", "UMENG_APPKEY", "\"${UMENG_APPKEY}\""
buildConfigField "String", "UMENG_MESSAGE_SECRET", "\"${UMENG_MESSAGE_SECRET}\""
buildConfigField "String", "BUGLY_APPID", "\"${BUGLY_APPID}\""
}
gdt {
dimension "env"
buildConfigField "String", "API_HOST", "\"${API_HOST}\""
buildConfigField "String", "SENSITIVE_API_HOST", "\"${SENSITIVE_API_HOST}\""
buildConfigField "String", "UMENG_APPKEY", "\"${UMENG_APPKEY}\""
buildConfigField "String", "UMENG_MESSAGE_SECRET", "\"${UMENG_MESSAGE_SECRET}\""
buildConfigField "String", "BUGLY_APPID", "\"${BUGLY_APPID}\""
manifestPlaceholders.put("APPLOG_SCHEME", "rangersapplog.byAx6uYt".toLowerCase())
}
}
}
// apkChannelPackage
channel {
//多渠道包的输出目录默认为new File(project.buildDir,"channel")
baseOutputDir = new File(project.buildDir, "channel")
//多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}
apkNameFormat = '${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}'
}
rebuildChannel {
// baseDebugApk = 已有Debug APK
// baseReleaseApk = 已有Release APK
// //默认为new File(project.buildDir, "rebuildChannel/debug")
// debugOutputDir = Debug渠道包输出目录
// //默认为new File(project.buildDir, "rebuildChannel/release")
// releaseOutputDir = Release渠道包输出目录
lintOptions {
// For flutter release build, see https://github.com/flutter/flutter/issues/58247
checkReleaseBuilds false
}
}
repositories {
@ -226,19 +199,17 @@ repositories {
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
gdtImplementation fileTree(include: ['*.jar', '*.aar'], dir: 'src/gdt/libs')
testImplementation 'junit:junit:4.12'
debugImplementation "com.squareup.leakcanary:leakcanary-android:${leakcanary}"
debugImplementation "com.facebook.stetho:stetho:${stetho}"
debugImplementation "com.facebook.stetho:stetho-okhttp3:${stetho}"
debugImplementation "com.squareup.okhttp3:logging-interceptor:${okHttp}"
debugImplementation "com.gu.android:toolargetool:${toolargetool}"
debugImplementation "com.github.nichbar:WhatTheStack:$whatTheStack"
// debugImplementation "com.gu.android:toolargetool:${toolargetool}" // 需要使用调试时才启用
debugImplementation "com.github.nichbar:WhatTheStack:${whatTheStack}"
debugImplementation "io.github.didi.dokit:dokitx:${dokit}"
implementation "androidx.core:core:${core}"
implementation "androidx.fragment:fragment:${fragment}"
implementation "androidx.core:core-ktx:${core}"
implementation "androidx.fragment:fragment-ktx:${fragment}"
implementation "androidx.multidex:multidex:${multiDex}"
implementation "androidx.appcompat:appcompat:${appCompat}"
implementation "androidx.cardview:cardview:${cardView}"
@ -248,10 +219,12 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifeCycle"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifeCycle"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifeCycle"
implementation "androidx.lifecycle:lifecycle-extensions:$lifeCycleExtensions"
implementation "androidx.room:room-runtime:${room}"
implementation "androidx.room:room-rxjava2:${room}"
implementation "androidx.core:core-ktx:${ktx}"
implementation "androidx.viewpager2:viewpager2:${viewpager2}"
implementation "androidx.webkit:webkit:${webkit}"
kapt "androidx.room:room-compiler:${room}"
implementation "com.google.android.material:material:${material}"
@ -259,8 +232,10 @@ dependencies {
implementation "com.kyleduo.switchbutton:library:${switchButton}"
implementation "com.facebook.fresco:fresco:${fresco}"
implementation "com.facebook.fresco:animated-gif:${fresco}"
implementation "com.facebook.fresco:animated-gif-lite:${fresco}"
implementation "com.facebook.fresco:animated-drawable:${fresco}"
implementation "com.facebook.fresco:animated-webp:${fresco}"
implementation "com.facebook.fresco:webpsupport:${fresco}"
implementation "com.squareup.okhttp3:okhttp:${okHttp}"
@ -273,8 +248,6 @@ dependencies {
implementation "com.j256.ormlite:ormlite-android:${ormlite}"
implementation "com.j256.ormlite:ormlite-core:${ormlite}"
implementation "com.jakewharton:butterknife:${butterKnife}"
kapt "com.jakewharton:butterknife-compiler:${butterKnife}"
implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlin_version}"
implementation "org.greenrobot:eventbus:${eventbus}"
@ -289,11 +262,6 @@ dependencies {
implementation "com.daimajia.swipelayout:library:${swipeLayout}"
implementation "com.sina.weibo.sdk:core:${weiboSDK}"
// bugly with tinker support
// implementation "com.tencent.bugly:crashreport_upgrade:${buglyTinkerSupport}"
implementation "com.google.android:flexbox:${flexbox}"
implementation "pub.devrel:easypermissions:${easypermissions}"
@ -313,51 +281,64 @@ dependencies {
implementation "com.squareup.picasso:picasso:${picasso}"
// for video streaming
implementation("com.shuyu:gsyVideoPlayer-java:$gsyVideo", {
implementation("com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-java:$gsyVideo", {
exclude module: "gsyvideoplayer-androidvideocache"
exclude group: "tv.danmaku.ijk.media"
})
implementation "com.shuyu:GSYVideoPlayer-exo2:$gsyVideo"
implementation "com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-exo_player2:$gsyVideo"
implementation "android.arch.work:work-runtime:${workManager}"
implementation "androidx.work:work-runtime:${workManager}"
implementation "com.llew.huawei:verifier:${verifier}"
implementation "com.github.tbruyelle:rxpermissions:${rxPermissions}"
implementation "com.ethanhua:skeleton:${skeleton}"
implementation "io.supercharge:shimmerlayout:${shimmerlayout}"
implementation "com.lg:skeleton:${skeleton}"
implementation "com.tencent.mm.opensdk:wechat-sdk-android-without-mta:${mta}"
implementation "com.walkud.rom.checker:RomChecker:${romChecker}"
implementation "com.github.nichbar:AndroidRomChecker:${romChecker}"
debugImplementation "com.github.nichbar.chucker:library:$chucker"
releaseImplementation "com.github.nichbar.chucker:library-no-op:$chucker"
teaImplementation "com.bytedance.applog:RangersAppLog-Lite-cn:$bytedanceApplog"
// implementation "com.bytedance.ies.ugc.aweme:opensdk-china-external:$bytedanceAweme"
// implementation "com.bytedance.ies.ugc.aweme:opensdk-common:$bytedanceAweme"
debugImplementation "com.github.nichbar.chucker:library:${chucker}"
releaseImplementation "com.github.nichbar.chucker:library-no-op:${chucker}"
teaImplementation "com.bytedance.applog:RangersAppLog-Lite-cn:${bytedanceApplog}"
implementation "com.aliyun.dpa:oss-android-sdk:${oss}"
implementation "com.airbnb.android:lottie:$lottie"
implementation "com.airbnb.android:lottie:${lottie}"
implementation "net.lingala.zip4j:zip4j:${zip4j}"
implementation "io.sentry:sentry-android:$sentry"
implementation "io.sentry:sentry-android:4.3.0"
implementation("com.github.piasy:BigImageViewer:$bigImageViewer", {
implementation("com.github.piasy:BigImageViewer:${bigImageViewer}", {
exclude group: 'com.squareup.okhttp3'
exclude group: 'androidx.swiperefreshlayout'
exclude group: 'com.github.bumptech.glide'
exclude group: 'com.facebook.fresco'
})
implementation "com.github.PhilJay:MPAndroidChart:${chart}"
implementation "com.lahm.library:easy-protector-release:${easyProtector}"
implementation "com.github.hsiafan:apk-parser:${apkParser}"
implementation "org.nanohttpd:nanohttpd:${nanohttpd}"
implementation "com.aliyun.openservices:aliyun-log-android-sdk:${aliyunLog}"
implementation "com.lg:easyfloat:${easyFloat}"
implementation "io.github.florent37:shapeofview:${shapeOfView}"
implementation "io.github.sinaweibosdk:core:${weiboSDK}"
implementation "com.lg:apksig:${apksig}"
implementation "com.lg:gid:${gid}"
implementation "com.louiscad.splitties:splitties-fun-pack-android-base-with-views-dsl:${splitties}"
compileOnly "com.github.axen1314.lancet:lancet-base:${lancet_version}"
implementation project(':libraries:LGLibrary')
// implementation project(':libraries:MTA')
implementation project(':libraries:QQShare')
// implementation project(':libraries:TalkingData')
// implementation project(':libraries:UmengPush')
// implementation project(':libraries:WechatShare')
// implementation project(':libraries:im')
implementation project(':libraries:Matisse')
}
File propFile = file('sign.properties')
@ -417,6 +398,120 @@ if (propFile.exists()) {
// }.each { t -> t.dependsOn generateMetaJson }
//}
andResGuard {
mappingFile = null
use7zip = true
useSign = true
// 打开这个开关会keep住所有资源的原始路径只混淆资源的名字
keepRoot = false
// 设置这个值会把arsc name列混淆成相同的名字减少string常量池的大小
fixedResName = "arg"
// 打开这个开关会合并所有哈希值相同的资源,但请不要过度依赖这个功能去除去冗余资源
mergeDuplicatedRes = true
whiteList = [
"R.drawable.icon",
"R.drawable.ic_bar_back",
"R.drawable.toolbar_search_icon",
"R.drawable.bg_notification_answer_style_1",
"R.drawable.bg_notification_answer_style_2",
"R.drawable.bg_notification_article_style_1",
"R.drawable.bg_notification_article_style_2",
"R.drawable.bg_notification_feedback_style_1",
"R.drawable.bg_notification_feedback_style_2",
"R.drawable.bg_notification_gift_style_1",
"R.drawable.bg_notification_gift_style_2",
"R.drawable.bg_notification_login_style_1",
"R.drawable.bg_notification_login_style_2",
"R.drawable.bg_notification_question_style_1",
"R.drawable.bg_notification_question_style_2",
"R.drawable.bg_notification_rating_style_1",
"R.drawable.bg_notification_rating_style_2",
"R.drawable.bg_notification_reserve_game_style_1",
"R.drawable.bg_notification_reserve_game_style_2",
"R.drawable.bg_notification_video_style_1",
"R.drawable.bg_notification_video_style_2",
"R.drawable.ic_search_no_1",
"R.drawable.ic_search_no_2",
"R.drawable.ic_search_no_3",
"R.drawable.ic_search_no_4",
"R.drawable.ic_search_no_5",
"R.drawable.ic_search_no_6",
"R.drawable.ic_search_no_7",
"R.drawable.ic_search_no_8",
"R.drawable.ic_search_no_9",
"R.drawable.ic_search_no_10",
"R.drawable.ic_search_no_11",
"R.drawable.ic_search_no_12",
"R.drawable.ic_search_no_13",
"R.drawable.ic_search_no_14",
"R.drawable.ic_search_no_15",
"R.drawable.ic_search_no_16",
"R.drawable.ic_search_no_17",
"R.drawable.ic_search_no_18",
"R.drawable.ic_search_no_19",
"R.drawable.ic_search_no_20",
"R.drawable.ic_recommend_activity",
"R.drawable.ic_recommend_discount",
"R.drawable.ic_recommend_function",
"R.drawable.ic_recommend_gift",
"R.drawable.ic_recommend_role",
"R.drawable.login_btn_bg",
"R.drawable.ic_quick_login_check",
"R.drawable.ic_quick_login_uncheck",
"R.anim.anim_auth_in",
"R.anim.anim_auth_out",
"R.id.download_speed",
"R.id.download_percentage",
"R.id.comment",
"R.id.vote",
"R.id.watermark_hint",
"R.id.watermark_sb",
"R.id.bottomShareIv",
"R.id.bottomShareTv",
"R.id.recommendStarPref",
"R.id.recommendStar",
"R.drawable.help_search_delete",
"R.drawable.suggest_type_normal",
"R.drawable.suggest_type_crash",
"R.drawable.suggest_type_game_question",
"R.drawable.suggest_type_game_collect",
"R.drawable.suggest_type_function_suggest",
"R.drawable.suggest_type_article_collect",
"R.drawable.suggest_type_copyright",
"R.drawable.help_result_empty",
"R.drawable.news_comment_detail_read",
"R.drawable.news_comment_detail_comment",
"R.drawable.news_comment_detail_share",
"R.drawable.ic_libao",
"R.drawable.ic_link",
"R.drawable.concern_message_icon",
"R.drawable.reuse_blank_hint",
"R.drawable.ic_concern",
"R.drawable.concern_down",
"R.drawable.concern_up",
"R.drawable.ic_libao_more",
"R.drawable.ic_libao_delete",
"R.drawable.ic_dialog_close",
"R.drawable.occupy2",
"R.drawable.kc_checkbox_unselect",
"R.drawable.kc_checkbox_select",
"R.drawable.ic_type_unselect",
"R.drawable.ic_type_selected",
"R.drawable.suggest_add_pic_icon",
"R.drawable.icon_pic_add",
"R.drawable.ask_search_input_delete",
"R.drawable.suggest_pic_delete"
]
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.2.20'
}
}
project.afterEvaluate {
def variants = null
@ -448,36 +543,46 @@ project.afterEvaluate {
if (manifestFile == null || !manifestFile.exists()) {
return
}
String[] configChanges = [
"density",
"fontScale",
"keyboard",
"keyboardHidden",
"layoutDirection",
"locale",
"mcc",
"mnc",
"navigation",
"orientation",
"screenLayout",
"screenSize",
"smallestScreenSize",
"touchscreen",
"uiMode"]
def parser = new XmlSlurper(false, true)
def manifest = parser.parse(manifestFile)
def app = manifest.'application'[0]
app.'activity'.each { act ->
String value = act.attributes()['android:configChanges']
if (value == null || value.isEmpty()) {
value = "keyboardHidden|orientation|screenSize|screenLayout|density|fontScale|locale"
if (value == null) value = ""
configChanges.eachWithIndex { config, index ->
if (index != configChanges.length - 1) {
value += config + "|"
} else {
value += config
}
}
act.attributes()['androidconfigChanges'] = value
} else {
String[] valueSplit = value.split("\\|")
if (!valueSplit.contains("keyboardHidden")) {
value += "|keyboardHidden"
}
if (!valueSplit.contains("orientation")) {
value += "|orientation"
}
if (!valueSplit.contains("screenSize")) {
value += "|screenSize"
}
if (!valueSplit.contains("screenLayout")) {
value += "|screenLayout"
}
if (!valueSplit.contains("density")) {
value += "|density"
}
if (!valueSplit.contains("fontScale")) {
value += "|fontScale"
}
if (!valueSplit.contains("locale")) {
value += "|locale"
println configChanges
configChanges.eachWithIndex { config, index ->
if (!valueSplit.contains(config)) {
value += ("|" + config)
}
}
act.attributes()['android:configChanges'] = value
}
@ -490,4 +595,4 @@ project.afterEvaluate {
}
}
}
}
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,266 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in C:\Android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
#--------- remove logs start ----------------
-assumenosideeffects class com.lightgame.config.CommonDebug {
private static String getLogTag(...);
private static String getMethodName();
public static void logMethodName(...);
public static void logParams(...);
public static void logFields(...);
public static void logMethodWithParams(...);
}
#-assumenosideeffects class com.lightgame.config.CommonDebug {*;}
#-dontoptimize
#--------- remove logs end ----------------
-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod
-dontwarn InnerClasses
# OrmLite uses reflection
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
-dontwarn com.j256.**
#okhttp3
-dontwarn com.squareup.okhttp3.**
-dontwarn okio.**
-keep class com.squareup.okhttp3.** { *;}
# stetho
-keep class com.facebook.stetho.** { *; }
-dontwarn com.facebook.stetho.**
# Retrofit 2.2
# Platform calls Class.forName on types which do not exist on Android to determine platform.
-dontnote retrofit2.Platform
# Platform used when running on Java 8 VMs. Will not be used at runtime.
-dontwarn retrofit2.Platform$Java8
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain declared checked exceptions for use by a Proxy instance.
-keepattributes Exceptions
# Retrofit 2.X
## https://square.github.io/retrofit/ ##
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
}
# rxjava
-keep class rx.schedulers.Schedulers {
public static <methods>;
}
-keep class rx.schedulers.ImmediateScheduler {
public <methods>;
}
-keep class rx.schedulers.TestScheduler {
public <methods>;
}
-keep class rx.schedulers.Schedulers {
public static ** test();
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
long producerNode;
long consumerNode;
}
-dontwarn rx.internal.util.**
## AutoScrollViewPager
-keep class cn.trinea.android.** { *; }
-keepclassmembers class cn.trinea.android.** { *; }
-dontwarn cn.trinea.android.**
## butterknife
# Retain generated class which implement Unbinder.
#-keep public class * implements butterknife.Unbinder { public <init>(**, android.view.View); }
#
## Prevent obfuscation of types which use ButterKnife annotations since the simple name
## is used to reflectively look up the generated ViewBinding.
#-keep class butterknife.*
#-keepclasseswithmembernames class * { @butterknife.* <methods>; }
#-keepclasseswithmembernames class * { @butterknife.* <fields>; }
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector { *; }
-keepnames class * { @butterknife.InjectView *;}
-dontwarn butterknife.Views$InjectViewProcessor
-dontwarn com.gc.materialdesign.views.**
# eventbus
-keepattributes *Annotation*
-keepclassmembers class ** {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
# weiboSdk
-keep class com.sina.weibo.sdk.** { *; }
-dontwarn android.webkit.WebView
-dontwarn android.webkit.WebViewClient
# app models
-keep class com.gh.common.view.** {*;}
-keep class com.gh.gamecenter.db.info.** {*;}
-keep class com.gh.gamecenter.entity.** {*;}
-keep class com.gh.gamecenter.qa.entity.** {*;}
-keep class com.gh.gamecenter.retrofit.** {*;}
-keep class com.gh.gamecenter.eventbus.** {*;}
-keep class com.gh.gamecenter.video.detail.** {*;}
-keep class * extends rx.Subscriber
#---------------------------------webview------------------------------------
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView, java.lang.String);
}
#----------------------------------------------------------------------------
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keepclassmembers enum * { *; }
##---------------End: proguard configuration for Gson ----------
# ------ bugly ---------
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
# easypermission
-keepclassmembers class * {
@pub.devrel.easypermissions.AfterPermissionGranted <methods>;
}
# 重命名文件为SourceFile再配合mapping符号表可以拿到真实的类名
-renamesourcefileattribute SourceFile
# 保留源文件行号
-keepattributes SourceFile,LineNumberTable
-ignorewarnings
-keep @androidx.annotation.Keep class *
-keepclassmembers class ** {
@androidx.annotation.Keep *;
}
-keep class com.gh.loghub.** { *; }
### greenDAO 3
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
-keep class org.greenrobot.greendao.** { *; }
# If you do not use SQLCipher:
-dontwarn org.greenrobot.greendao.database.**
# If you do not use RxJava:
-dontwarn rx.**
-dontwarn org.greenrobot.greendao.rx.**
-dontwarn org.greenrobot.greendao.**
### fastJson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.** { *; }
-keepattributes Signature
-keepattributes Annotation
### AndroidX
-keep class androidx.core.app.CoreComponentFactory { *; }
#阿里云上传
-keep class com.alibaba.sdk.android.oss.** { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**
#视频相关
-keep class com.shuyu.gsyvideoplayer.video.** { *; }
-dontwarn com.shuyu.gsyvideoplayer.video.**
-keep class com.shuyu.gsyvideoplayer.video.base.** { *; }
-dontwarn com.shuyu.gsyvideoplayer.video.base.**
-keep class com.shuyu.gsyvideoplayer.utils.** { *; }
-dontwarn com.shuyu.gsyvideoplayer.utils.**
-keep class tv.danmaku.ijk.** { *; }
-dontwarn tv.danmaku.ijk.**
-keep public class * extends android.view.View{
*** get*();
void set*(***);
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
}
#穿山甲
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.* {*;}
-keep class com.gyf.immersionbar.* {*;}
-dontwarn com.gyf.immersionbar.**
-keep class com.taobao.securityjni.**{*;}
-keep class com.taobao.wireless.security.**{*;}
-keep class com.ut.secbody.**{*;}
-keep class com.taobao.dp.**{*;}
-keep class com.alibaba.wireless.security.**{*;}
-keep class com.alibaba.sdk.android.**{*;}
-keep class com.ut.**{*;}
-keep class com.ta.**{*;}
-keep class com.gh.gamecenter.TeaHelper { *; }

View File

@ -1,20 +1,3 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in C:\Android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
#--------- remove logs start ----------------
-assumenosideeffects class com.lightgame.config.CommonDebug {
@ -26,126 +9,69 @@
public static void logMethodWithParams(...);
}
#-assumenosideeffects class com.lightgame.config.CommonDebug {*;}
#-dontoptimize
-assumenosideeffects class com.lightgame.utils.Utils {
public static void log(...);
}
#--------- remove logs end ----------------
-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod
-dontwarn InnerClasses
#--------- remove useless mtahelper class --------
-assumenosideeffects class com.gh.common.util.MtaHelper {
public static void onEvent(...);
public static void onEventWithTime(...);
public static void onEventWithBasicDeviceInfo(...);
}
#--------- remove useless mta class end ----
# OrmLite uses reflection
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
# TODO Dicard sourceFile in final release build but remain in internal build.
-renamesourcefileattribute SourceFile
# Keep Attribute
-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod,SourceFile,LineNumberTable
# OrmLite
-keep class com.j256.*
-keepclassmembers class com.j256.* { *; }
-keep enum com.j256.*
-keepclassmembers enum com.j256.* { *; }
-keep interface com.j256.*
-keepclassmembers interface com.j256.* { *; }
-dontwarn com.j256.**
#okhttp3
-dontwarn com.squareup.okhttp3.**
-dontwarn okio.**
-keep class com.squareup.okhttp3.** { *;}
# stetho
-keep class com.facebook.stetho.** { *; }
-dontwarn com.facebook.stetho.**
# Retrofit 2.2
# Platform calls Class.forName on types which do not exist on Android to determine platform.
-dontnote retrofit2.Platform
# Platform used when running on Java 8 VMs. Will not be used at runtime.
-dontwarn retrofit2.Platform$Java8
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain declared checked exceptions for use by a Proxy instance.
-keepattributes Exceptions
# Retrofit 2.X
## https://square.github.io/retrofit/ ##
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
}
# rxjava
-keep class rx.schedulers.Schedulers {
public static <methods>;
}
-keep class rx.schedulers.ImmediateScheduler {
public <methods>;
}
-keep class rx.schedulers.TestScheduler {
public <methods>;
}
-keep class rx.schedulers.Schedulers {
public static ** test();
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
long producerNode;
long consumerNode;
}
-dontwarn rx.internal.util.**
## AutoScrollViewPager
-keep class cn.trinea.android.** { *; }
-keepclassmembers class cn.trinea.android.** { *; }
### AutoScrollViewPager
-keep class cn.trinea.android.* { *; }
-keepclassmembers class cn.trinea.android.* { *; }
-dontwarn cn.trinea.android.**
## butterknife
# Retain generated class which implement Unbinder.
#-keep public class * implements butterknife.Unbinder { public <init>(**, android.view.View); }
#
## Prevent obfuscation of types which use ButterKnife annotations since the simple name
## is used to reflectively look up the generated ViewBinding.
#-keep class butterknife.*
#-keepclasseswithmembernames class * { @butterknife.* <methods>; }
#-keepclasseswithmembernames class * { @butterknife.* <fields>; }
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector { *; }
-keepnames class * { @butterknife.InjectView *;}
-dontwarn butterknife.Views$InjectViewProcessor
-dontwarn com.gc.materialdesign.views.**
# eventbus
-keepattributes *Annotation*
-keepclassmembers class ** {
### eventbus
-keepclassmembers class * {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
### Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
# weiboSdk
### weiboSdk
-keep class com.sina.weibo.sdk.** { *; }
-dontwarn android.webkit.WebView
-dontwarn android.webkit.WebViewClient
# app models
-keep class com.gh.common.view.** {*;}
-keep class com.gh.gamecenter.db.info.** {*;}
-keep class com.gh.gamecenter.entity.** {*;}
-keep class com.gh.gamecenter.qa.entity.** {*;}
-keep class com.gh.gamecenter.retrofit.** {*;}
-keep class com.gh.gamecenter.eventbus.** {*;}
-keep class * extends rx.Subscriber
### wechatSdk
### TODO 这里用 com.tencent.*{*;} 不起效?但其它地方可以?
-keep class com.tencent.**{*;}
#---------------------------------webview------------------------------------
### app models
-keep class com.gh.common.view.* {*;}
-keep class com.gh.gamecenter.db.info.* {*;}
-keep class com.gh.gamecenter.entity.* {*;}
-keep class com.gh.gamecenter.qa.entity.* {*;}
-keep class com.gh.gamecenter.retrofit.* {*;}
-keep class com.gh.gamecenter.eventbus.* {*;}
-keep class com.gh.gamecenter.video.detail.* {*;}
-keep class com.gh.gamecenter.home.gamecollection.* {*;}
###
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
public boolean *(android.webkit.WebView, java.lang.String);
@ -153,93 +79,34 @@
-keepclassmembers class * extends android.webkit.WebViewClient {
public void *(android.webkit.WebView, java.lang.String);
}
#----------------------------------------------------------------------------
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keepclassmembers enum * { *; }
##---------------End: proguard configuration for Gson ----------
# ------ bugly ---------
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
# easypermission
### easypermission
-keepclassmembers class * {
@pub.devrel.easypermissions.AfterPermissionGranted <methods>;
}
# 重命名文件为SourceFile再配合mapping符号表可以拿到真实的类名
-renamesourcefileattribute SourceFile
# 保留源文件行号
-keepattributes SourceFile,LineNumberTable
# TODO What's this ?
-ignorewarnings
### Keep Annotation
-keep @androidx.annotation.Keep class *
-keepclassmembers class ** {
-keepclassmembers class * {
@androidx.annotation.Keep *;
}
-keep class com.gh.loghub.** { *; }
### greenDAO 3
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
-keep class org.greenrobot.greendao.** { *; }
# If you do not use SQLCipher:
-dontwarn org.greenrobot.greendao.database.**
# If you do not use RxJava:
-dontwarn rx.**
-dontwarn org.greenrobot.greendao.rx.**
-dontwarn org.greenrobot.greendao.**
### fastJson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.** { *; }
-keepattributes Signature
-keepattributes Annotation
### 广点通
-dontwarn com.qq.gdt.action.**
-keep class com.qq.gdt.action.** {*;}
### AndroidX
-keep class androidx.core.app.CoreComponentFactory { *; }
#阿里云上传
-keep class com.alibaba.sdk.android.oss.** { *; }
### 阿里云上传
-keep class com.alibaba.sdk.android.oss.* { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**
#视频相关
-keep class com.shuyu.gsyvideoplayer.video.** { *; }
### 视频相关
-keep class com.shuyu.gsyvideoplayer.video.* { *; }
-dontwarn com.shuyu.gsyvideoplayer.video.**
-keep class com.shuyu.gsyvideoplayer.video.base.** { *; }
-keep class com.shuyu.gsyvideoplayer.video.base.* { *; }
-dontwarn com.shuyu.gsyvideoplayer.video.base.**
-keep class com.shuyu.gsyvideoplayer.utils.** { *; }
-keep class com.shuyu.gsyvideoplayer.utils.* { *; }
-dontwarn com.shuyu.gsyvideoplayer.utils.**
-keep class tv.danmaku.ijk.** { *; }
-keep class tv.danmaku.ijk.* { *; }
-dontwarn tv.danmaku.ijk.**
-keep public class * extends android.view.View{
*** get*();
@ -249,23 +116,42 @@
public <init>(android.content.Context, android.util.AttributeSet, int);
}
#穿山甲
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.* {*;}
-keep class com.alibaba.sdk.android.*{*;}
-keep class com.ut.*{*;}
-keep class com.ta.*{*;}
-keep class com.gyf.immersionbar.* {*;}
-dontwarn com.gyf.immersionbar.**
### TEA
-keep class com.gh.gamecenter.TeaHelper { *; }
-keep class com.taobao.securityjni.**{*;}
-keep class com.taobao.wireless.security.**{*;}
-keep class com.ut.secbody.**{*;}
-keep class com.taobao.dp.**{*;}
-keep class com.alibaba.wireless.security.**{*;}
### 阿里云日志
-keep class com.aliyun.sls.android.producer.* { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }
-keep class com.alibaba.sdk.android.**{*;}
-keep class com.ut.**{*;}
-keep class com.ta.**{*;}
### 中国移动一键登录
-dontwarn com.cmic.sso.sdk.**
-keep class com.cmic.sso.sdk.* { *; }
### EasyFloat
-keep class com.lzf.easyfloat.* {*;}
### 避免 WebChromeClient 被混淆
-keepclassmembers class * extends android.webkit.WebChromeClient{
public void openFileChooser(...);
}
### emoji4j
-keep class emoji4j.* {*;}
### dokit
-keep class com.didichuxing.** {*;}
# Flutter模块
-keep class com.gh.common.util.DirectUtils {
public static void directToQa(...);
public static void directToQaCollection(...);
public static void directToGift(...);
public static void directToConcernInfo(...);
public static void directToFeedback(...);
public static void directToSuggestion(...);
}
-keep class com.gh.gamecenter.GdtHelper { *; }
-keep class com.gh.gamecenter.TeaHelper { *; }

View File

@ -2,8 +2,6 @@ package com.gh.gamecenter;
import android.app.Application;
import com.facebook.stetho.Stetho;
import com.facebook.stetho.okhttp3.StethoInterceptor;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
@ -17,9 +15,6 @@ import okhttp3.logging.HttpLoggingInterceptor;
public class Injection {
public static boolean appInit(Application application) {
// init stetho
Stetho.initializeWithDefaults(application);
// 监控Bundle大小,预防溢出(需要调试的时候再开启吧!)
// TooLargeTool.startLogging(application);
return true;
@ -30,7 +25,6 @@ public class Injection {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addNetworkInterceptor(interceptor);
builder.addNetworkInterceptor(new StethoInterceptor());
return builder;
}

View File

@ -1,75 +0,0 @@
package com.gh.gamecenter
import android.app.Application
import android.text.TextUtils
import android.util.Log
import com.gh.common.util.ToastUtils
import com.lightgame.utils.Utils
import com.qq.gdt.action.GDTAction
import org.json.JSONObject
/**
* 广点通辅助类 [https://gitlab.ghzhushou.com/pm/halo-app-issues/issues/403]
*
* 更换帐号 [https://gitlab.ghzs.com/pm/yunying/issues/893]
*/
object GdtHelper {
const val NETWORK_TYPE = "NETWORK_TYPE"
const val PAGE_TYPE = "PAGE_TYPE"
const val CONTENT_TYPE = "CONTENT_TYPE"
const val CONTENT_ID = "CONTENT_ID"
const val KEYWORD = "KEYWORD"
const val GAME_ID = "GAME_ID"
const val SCORE = "SCORE"
const val PLATFORM = "PLATFORM"
@JvmStatic
fun init(application: Application, channel: String) {
if (shouldUseGdtHelper()) {
if (channel == "GH_728") {
GDTAction.init(application, "1111012969", "9d3d9da5b0948a317c03d08f14d445dc")
} else if (channel == "GH_729") {
GDTAction.init(application, "1111013063", "f53dabf458a356b101d99fc4069eb7f1")
} else {
GDTAction.init(application, "1110680399", "f5ddaafbf520d7d7385499232a408d0a")
}
}
Utils.log("init GdtHelper")
}
// fun logAction(type: String) {
// if (shouldUseGdtHelper()) {
// GDTAction.logAction(type)
// Utils.log("GDT", type)
// }
// }
@JvmStatic
fun logAction(type: String, vararg kv: String?) {
try {
val actionParam = JSONObject()
for (i in kv.indices) {
if (i % 2 != 0) {
val key = kv[i - 1]
val value = kv[i]
if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) {
actionParam.put(key, value)
}
}
}
Utils.log("GDT", "$type + [${kv.joinToString(" , ")}]")
GDTAction.logAction(type, actionParam)
} catch (e: Exception) {
e.printStackTrace()
}
}
// TODO 确认开启的渠道条件
private fun shouldUseGdtHelper(): Boolean {
return true
//
// val channel = HaloApp.getInstance().channel
// return !(TextUtils.isEmpty(channel) || channel.contains("GDT".toLowerCase(Locale.CHINA)))
}
}

View File

@ -21,22 +21,20 @@
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 允许应用程序改变Wi-Fi连接状态 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 允许应用程序打开系统窗口,显示其他应用程序 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 创建快捷方式的权限 -->
<!-- 允许应用程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!-- 允许应用程序快捷方式 -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<!-- 前台服务权限-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
<!-- bugly with tinker -->
<!-- <uses-permission android:name="android.permission.READ_LOGS" />-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!--可选,穿山甲提供“获取地理位置权限”和“不给予地理位置权限,开发者传入地理位置参数”两种方式上报用户位置,两种方式均可不选,添加位置权限或参数将帮助投放定位广告-->
<!--请注意:无论通过何种方式提供给穿山甲用户地理位置,均需向用户声明地理位置权限将应用于穿山甲广告投放,穿山甲不强制获取地理位置信息-->
<!--<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />-->
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<!-- 如果有视频相关的广告且使用textureView播放请务必添加否则黑屏 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
@ -47,9 +45,11 @@
com.shuyu.gsyvideoplayer.armv7a,
com.shuyu.gsyvideoplayer.x86,
com.shuyu.gsy.base,
shuyu.com.androidvideocache,
com.google.android.exoplayer2,
tv.danmaku.ijk.media.exo2,
pl.droidsonroids.gif" />
pl.droidsonroids.gif,
com.lzf.easyfloat" />
<!-- 去掉 SDK 一些流氓权限 -->
<uses-permission
@ -70,16 +70,21 @@
android:icon="@mipmap/logo"
android:label="@string/app_name"
android:largeHeap="true"
android:networkSecurityConfig="@xml/network_security_config"
android:resizeableActivity="true"
android:theme="@style/AppCompatTheme.APP"
tools:replace="android:allowBackup"
tools:replace="android:name,android:allowBackup"
tools:targetApi="n">
<meta-data
android:name="io.sentry.auto-init"
android:value="false" />
<!--android:launchMode = "singleTask"-->
<!-- 不让 sentry 读取系统事件 -->
<meta-data
android:name="io.sentry.breadcrumbs.system-events"
android:value="false" />
<activity
android:name="com.gh.gamecenter.SplashScreenActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
@ -106,7 +111,6 @@
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<!--android:theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen" 退出时屏幕抖动 -->
<activity
android:name="com.gh.gamecenter.ImageViewerActivity"
android:theme="@style/Theme.Transparent" />
@ -162,6 +166,10 @@
<activity
android:name="com.gh.gamecenter.WebActivity"
android:screenOrientation="portrait"/>
<activity
android:name="com.gh.gamecenter.SingletonWebActivity"
android:screenOrientation="portrait" />
<activity
@ -236,11 +244,6 @@
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize" />
<activity
android:name="com.gh.gamecenter.ToolBoxActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" />
<activity
android:name="com.gh.gamecenter.WeiBoShareActivity"
android:screenOrientation="portrait"
@ -280,18 +283,10 @@
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" />
<activity
android:name="com.gh.gamecenter.qa.search.AskSearchActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.answer.fold.AnswerFoldActivity"
android:screenOrientation="portrait" />
@ -312,14 +307,6 @@
android:name="com.gh.gamecenter.MessageKeFuActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.select.CommunitiesSelectActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.subject.CommunitySubjectActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.MessageInviteActivity"
android:screenOrientation="portrait" />
@ -336,10 +323,6 @@
android:name="com.gh.gamecenter.qa.myqa.MyAskActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.column.order.AskTabOrderActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.questions.edit.QuestionEditActivity"
android:screenOrientation="portrait" />
@ -361,10 +344,6 @@
android:name="com.gh.gamecenter.amway.AmwayActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.NetworkDiagnosisActivity"
android:screenOrientation="portrait" />
@ -410,14 +389,6 @@
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible" />
<activity
android:name="com.gh.gamecenter.qa.questions.edit.manager.HistoryDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.questions.edit.manager.HistoryActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.editor.InsertAnswerWrapperActivity"
android:screenOrientation="portrait" />
@ -451,10 +422,6 @@
android:name="com.gh.gamecenter.tag.TagsActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.article.SimpleArticleListActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.video.videomanager.VideoManagerActivity"
android:screenOrientation="portrait" />
@ -469,7 +436,7 @@
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.editor.VideoActivity"
android:name="com.gh.gamecenter.qa.editor.LocalMediaActivity"
android:screenOrientation="portrait" />
<activity
@ -503,7 +470,11 @@
<activity
android:name="com.gh.gamecenter.qa.comment.CommentActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.Transparent"
android:windowSoftInputMode="adjustNothing" />
<activity
android:name=".qa.dialog.ChooseForumActivity"
android:theme="@style/Theme.Transparent"
android:windowSoftInputMode="adjustNothing" />
@ -546,10 +517,6 @@
android:name=".forum.select.ForumSelectActivity"
android:screenOrientation="portrait" />
<activity
android:name=".forum.follow.ForumMyFollowActivity"
android:screenOrientation="portrait" />
<activity
android:name=".forum.detail.ForumDetailActivity"
android:screenOrientation="portrait" />
@ -558,6 +525,10 @@
android:name=".forum.moderator.ModeratorListActivity"
android:screenOrientation="portrait" />
<activity
android:name=".forum.moderator.ApplyModeratorActivity"
android:screenOrientation="portrait" />
<activity
android:name=".video.label.VideoLabelActivity"
android:screenOrientation="portrait" />
@ -579,10 +550,6 @@
android:screenOrientation="portrait"
android:theme="@style/TransparentStatusBarAndNavigationBar" />
<activity
android:name=".personalhome.excellentcomments.ExcellentCommentsActivity"
android:screenOrientation="portrait" />
<activity
android:name=".simulatorgame.SimulatorGameActivity"
android:screenOrientation="portrait" />
@ -603,6 +570,99 @@
android:name=".forum.search.ForumOrUserSearchActivity"
android:screenOrientation="portrait" />
<activity
android:name=".energy.EnergyCenterActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<activity
android:name=".energy.EnergyHouseActivity"
android:screenOrientation="portrait" />
<activity
android:name=".personal.NewPersonalActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.questions.draft.QuestionDraftActivity"
android:screenOrientation="portrait" />
<activity
android:name=".servers.GameServerTestActivity"
android:screenOrientation="portrait" />
<activity
android:name=".category2.CategoryV2Activity"
android:screenOrientation="portrait" />
<activity
android:name=".personal.DeliveryInfoActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.editor.PreviewVideoActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.video.publish.VideoPublishActivity"
android:screenOrientation="portrait" />
<activity
android:name=".setting.GameDownloadSettingActivity"
android:screenOrientation="portrait" />
<activity
android:name=".setting.VideoSettingActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.video.detail.ForumVideoDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name=".video.videomanager.VideoDraftActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.questions.newdetail.NewQuestionDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.editor.FullScreenVideoActivity"
android:theme="@style/AppFullScreenTheme" />
<activity
android:name=".forum.list.ForumListActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.answer.detail.SimpleAnswerDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name=".game.commoncollection.detail.CommonCollectionDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name=".gamecollection.detail.GameCollectionDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name=".gamecollection.detail.GameCollectionPosterActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Dialog" />
<activity
android:name=".home.skip.PackageSkipActivity"
android:screenOrientation="portrait" />
<!-- &lt;!&ndash; 使用小米/华为推送弹窗功能提高推送成功率&ndash;&gt;-->
<!-- <activity-->
<!-- android:name="com.gh.gamecenter.PushProxyActivity"-->
@ -611,6 +671,7 @@
<!-- android:theme="@android:style/Theme.Translucent" />-->
<activity
android:exported="true"
android:name="com.gh.gamecenter.SkipActivity"
android:theme="@style/Theme.AppCompat.Light.Fullscreen.Transparent">
<intent-filter>
@ -630,12 +691,56 @@
</intent-filter>
</activity>
<activity
android:name="com.gh.gamecenter.teenagermode.TeenagerModeActivity"
android:screenOrientation="portrait" />
<activity
android:name=".gamecollection.publish.GameCollectionEditActivity"
android:screenOrientation="portrait" />
<activity
android:name=".gamecollection.choose.ChooseGamesActivity"
android:screenOrientation="portrait" />
<activity
android:name=".gamecollection.choose.AddGamesActivity"
android:screenOrientation="portrait" />
<activity
android:name=".gamecollection.mine.MyGameCollectionActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.gamecollection.square.GameCollectionSquareActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.gamecollection.tag.GameCollectionTagSelectActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.editor.InsertGameCollectionWrapperActivity"
android:screenOrientation="portrait" />
<activity
android:name=".qa.editor.InsertVideoWrapperActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.toolbox.ToolBoxBlockActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.gh.gamecenter.qa.subject.CommunitySubjectActivity"
android:screenOrientation="portrait" />
<activity
android:name="${applicationId}.wxapi.WXEntryActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
<!-- <activity-->
@ -654,6 +759,24 @@
android:resource="@xml/provider_paths" />
</provider>
<provider
android:name="com.gh.gamecenter.provider.GhContentProvider"
android:authorities="${applicationId}.provider"
android:enabled="true"
android:exported="true"/>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<!-- If you are using androidx.startup to initialize other components -->
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
<receiver
android:name="com.gh.gamecenter.receiver.DownloadReceiver"
android:exported="false">
@ -677,48 +800,6 @@
</intent-filter>
</receiver>
<!-- <receiver android:name="com.gh.gamecenter.receiver.UmengMessageReceiver">-->
<!-- <intent-filter>-->
<!-- <action android:name="com.gh.gamecenter.UMENG" />-->
<!-- </intent-filter>-->
<!-- </receiver>-->
<!-- &lt;!&ndash;魅族push应用定义消息receiver声明 &ndash;&gt;-->
<!-- <receiver android:name="com.gh.gamecenter.receiver.UmengMeizuPushReceiver">-->
<!-- <intent-filter>-->
<!-- &lt;!&ndash; 接收push消息 &ndash;&gt;-->
<!-- <action android:name="com.meizu.flyme.push.intent.MESSAGE" />-->
<!-- &lt;!&ndash; 接收register消息 &ndash;&gt;-->
<!-- <action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />-->
<!-- &lt;!&ndash; 接收unregister消息&ndash;&gt;-->
<!-- <action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" />-->
<!-- &lt;!&ndash; 兼容低版本Flyme3推送服务配置 &ndash;&gt;-->
<!-- <action android:name="com.meizu.c2dm.intent.REGISTRATION" />-->
<!-- <action android:name="com.meizu.c2dm.intent.RECEIVE" />-->
<!-- <category android:name="${applicationId}" />-->
<!-- </intent-filter>-->
<!-- </receiver>-->
<!-- <receiver-->
<!-- android:name="com.gh.common.im.ImReceiver"-->
<!-- android:enabled="true">-->
<!-- <intent-filter android:priority="2147483647">-->
<!-- <action android:name="com.gh.im" />-->
<!-- <action android:name="action_finish" />-->
<!-- </intent-filter>-->
<!-- </receiver>-->
<!-- <meta-data-->
<!-- android:name="com.huawei.hms.client.appid"-->
<!-- android:value="@string/huawei_push_appid" />-->
<!-- <service-->
<!-- android:name="com.gh.base.GHUmengNotificationService"-->
<!-- android:permission="android.permission.BIND_JOB_SERVICE" />-->
<!--<service android:name = "com.gh.gamecenter.statistics.AppStaticService" />-->
<!-- 梦工厂配置 开始 -->
<!--<meta-data
android:name="MGC_APPID"

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"v":"5.6.9","fr":60,"ip":0,"op":76,"w":90,"h":90,"nm":"loading","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":2,"ty":4,"nm":"圆环1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[45,45,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"d":1,"ty":"el","s":{"a":0,"k":[63,63],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.75],"y":[0.833]},"o":{"x":[0.25],"y":[0.167]},"t":28,"s":[0]},{"t":76,"s":[96]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.75],"y":[0.833]},"o":{"x":[0.25],"y":[0.167]},"t":0,"s":[4]},{"t":48,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.75],"y":[0.712]},"o":{"x":[0.25],"y":[0.288]},"t":0,"s":[-7.2]},{"t":76,"s":[367.2]}],"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.141176477075,0.588235318661,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":76,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"圆环2","sr":1,"ks":{"o":{"a":0,"k":40,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[45,45,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"d":1,"ty":"el","s":{"a":0,"k":[63,63],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.75],"y":[0.861]},"o":{"x":[0.25],"y":[0.139]},"t":36,"s":[0]},{"t":76,"s":[96]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.75],"y":[0.806]},"o":{"x":[0.25],"y":[0.194]},"t":0,"s":[4]},{"t":56,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.75],"y":[0.712]},"o":{"x":[0.25],"y":[0.288]},"t":0,"s":[-7.2]},{"t":76,"s":[367.2]}],"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.141176477075,0.588235318661,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":76,"st":0,"bm":0}],"markers":[{"tm":-5940,"cm":"S:[false]","dr":0},{"tm":0.740234375,"cm":"FOCUSED -- TO SELECTION","dr":0}]}

View File

@ -0,0 +1 @@
{"v":"5.6.9","fr":60,"ip":0,"op":36,"w":120,"h":66,"nm":"开关动画-关闭","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"按钮手柄","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.667,"y":0},"t":0,"s":[87,33,0],"to":[7.682,0,0],"ti":[-13.443,0,0]},{"i":{"x":0.333,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[31,33,0],"to":[2.306,0,0],"ti":[-1.318,0,0]},{"t":24,"s":[33,33,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[16,16],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"指示器-on","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.667],"y":[0]},"t":0,"s":[100]},{"t":18,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[33,33,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.667,0.667],"y":[0,0]},"t":0,"s":[6.5,6.5]},{"t":18,"s":[4.5,4.5]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.966666666667,0.966666666667,0.966666666667,0.420000005762],"ix":3},"o":{"a":0,"k":40,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"指示器-off","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[87,33,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.667,0.667],"y":[0,0]},"t":0,"s":[1.5,4]},{"t":18,"s":[1.5,6]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0.75,"ix":4},"nm":"矩形路径 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":90,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.667],"y":[0]},"t":0,"s":[0]},{"t":18,"s":[100]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"矩形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"按钮背景","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[60,33,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sy":[{"c":{"a":0,"k":[0,0,0,1],"ix":2},"o":{"a":0,"k":5,"ix":3},"a":{"a":0,"k":120,"ix":5},"s":{"a":0,"k":1,"ix":8},"d":{"a":0,"k":0,"ix":6},"ch":{"a":0,"k":100,"ix":7},"bm":{"a":0,"k":5,"ix":1},"no":{"a":0,"k":0,"ix":9},"ty":2,"nm":"内阴影"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[40,22],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12,"ix":4},"nm":"矩形路径 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.667],"y":[0]},"t":0,"s":[0.141176477075,0.588235318661,1,1]},{"t":18,"s":[0.933333337307,0.933333337307,0.933333337307,1]}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"filling","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.118,0.006],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"矩形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0}],"markers":[]}

View File

@ -0,0 +1 @@
{"v":"5.6.9","fr":60,"ip":0,"op":36,"w":120,"h":66,"nm":"开关动画-打开","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"按钮手柄","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.667,"y":0},"t":0,"s":[33,33,0],"to":[7.682,0,0],"ti":[-13.443,0,0]},{"i":{"x":0.333,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[89,33,0],"to":[2.306,0,0],"ti":[-1.318,0,0]},{"t":24,"s":[87,33,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[16,16],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"指示器-on","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.667],"y":[0]},"t":0,"s":[0]},{"t":18,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[33,33,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.667,0.667],"y":[0,0]},"t":0,"s":[4.5,4.5]},{"t":18,"s":[6.5,6.5]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.966666666667,0.966666666667,0.966666666667,0.420000005762],"ix":3},"o":{"a":0,"k":40,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"指示器-off","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[87,33,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.667,0.667],"y":[0,0]},"t":0,"s":[1.5,6]},{"t":18,"s":[1.5,4]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0.75,"ix":4},"nm":"矩形路径 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":5,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":90,"ix":6},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.667],"y":[0]},"t":0,"s":[100]},{"t":18,"s":[0]}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"矩形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"按钮背景","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[60,33,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sy":[{"c":{"a":0,"k":[0,0,0,1],"ix":2},"o":{"a":0,"k":5,"ix":3},"a":{"a":0,"k":120,"ix":5},"s":{"a":0,"k":1,"ix":8},"d":{"a":0,"k":0,"ix":6},"ch":{"a":0,"k":100,"ix":7},"bm":{"a":0,"k":5,"ix":1},"no":{"a":0,"k":0,"ix":9},"ty":2,"nm":"内阴影"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[40,22],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12,"ix":4},"nm":"矩形路径 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.667],"y":[0]},"t":0,"s":[0.933332979679,0.933332979679,0.933332979679,1]},{"t":18,"s":[0.141176477075,0.588235318661,1,1]}],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"filling","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.118,0.006],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"矩形","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0}],"markers":[]}

File diff suppressed because it is too large Load Diff

View File

@ -1,758 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>隐私政策</title>
<style>
* {
margin: 0;
padding: 0;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.page {
padding: 0 10px;
}
.date p {
margin-bottom: 6px;
}
p {
font-family: "SourceHanSansSC-regular" !important;
color: #101010;
font-size: 14px;
font-weight: normal;
margin-bottom: 6px;
word-break: break-all;
}
b {
font-weight: 700;
font-size: 14px;
}
.points {
margin: 14px 0;
}
.points p {
margin-bottom: 6px;
}
.introduce p {
margin-bottom: 6px;
}
.content p b {
margin: 6px 0;
display: block;
}
.link-text {
color: rgb(19, 131, 235);
cursor: pointer;
}
.link-text a {
color: rgb(19, 131, 235);
cursor: pointer;
text-decoration: none;
}
.left-indent {
margin-left: 20px;
}
.page-title {
font-weight: bold;
font-size: 16px;
text-align: center;
margin: 20px 0 10px 0;
}
.red-style {
color: red;
}
.bold-font {
font-weight: bold;
}
span.bold {
font-weight: bold;
}
.link-text {
color: #005ad0;
text-decoration: underline;
}
</style>
</head>
<body>
<div class="page">
<div class="page-title">欢迎您使用光环助手!</div>
<div class="introduce">
<p>
为了向您提供游戏预约、论坛互动交流等相关服务,受制于手机系统限制,我们会申请您的设备信息权限;
</p>
<p>为了让您正常使用游戏下载和论坛功能,我们会申请您的储存权限;</p>
<p>以下为完整《隐私权限政策》</p>
<p>
光环助手(简称“我们”)深知个人信息对您的重要性,我们将依据《中华人民共和国网络安全法》、《信息安全技术
个人信息安全规范》GB/T
35273-2017以及其他相关法律法规和技术规范收集和使用您的个人信息以帮助我们向您提供更优质的产品和/或服务,
保护您的个人信息及隐私安全。我们制定本“隐私指引”并特别提示:希望您在使用光环助手及相关服务前仔细阅读并理解本隐私政策,以便做出适当的选择。
</p>
<p>
下文将帮您详细了解我们如何收集、使用、存储、传输、共享、转让(如适用)与保护个人信息;帮您了解查询、访问、删除、更正、撤回授权个人信息的方式。其中,
<b>
有关您个人信息权益的条款重要内容我们已用加粗形式提示,请特别关注。
</b>
</p>
</div>
<div class="points">
<p><b>1.我们处理个人信息的法律依据</b></p>
<p><b>2.我们如何共享、转让、公开披露个人信息</b></p>
<p><b>3.我们如何收集和使用个人信息</b></p>
<p><b>4.我们如何存储个人信息</b></p>
<p><b>5.我们如何保护个人信息的安全</b></p>
<p><b>6.管理您的个人信息</b></p>
<p><b>7.未成年人使用条款</b></p>
<p><b>8.隐私政策的修订和通知</b></p>
<p><b>9.联系我们</b></p>
</div>
<div class="content">
<p><b>1.我们处理个人信息的法律依据</b></p>
<p>
如果您是中华人民共和国大陆地区的用户,我们将依据《中华人民共和国网络安全法》、《信息安全技术
个人信息安全规范》GB/T
35273-2017以及其他相关法律法规收集和使用您的个人信息为您提供产品或服务。
</p>
<p>
我们通常只会在征得您同意的情况下收集您的个人信息。
在某些情况下,我们可能还会基于法律义务或者履行合同之必需向您收集个人信息,或者可能需要个人信息来保护您的重要利益或其他人的利益。
</p>
<p><b>2.我们如何共享、转让、公开披露个人信息</b></p>
<p class="title margintop"><b>2.1第三方SDK接入说明</b></p>
<p>
为保障光环助手App相关功能的实现与应用安全稳定的运行我们会接入由第三方提供的软件开发包SDK实现相关功能。
<br />
我们会对合作方获取有关信息的软件工具开发包SDK进行严格的安全检测并与授权合作伙伴约定严格的数据保护措施令其按照我们的委托目的、服务说明、本隐私权政策以及其他任何相关的保密和安全措施来处理个人信息。
<br />
<span class="red-style">
下方为整个光环助手
<span class="bold">所有版本</span>
内接入的所有信息收集类第三方SDK的权限说明因隐私政策会因光环助手版本迭代而新接入SDK或停止合作部分SDK方便照顾
<span class="bold">所有版本</span>
的用户查看自己SDK第三方权限说明。
<br />
我们对涉及用户信息使用的SDK相关情况进行了逐项列举具体如下
</span>
</p>
<p class="margintop red-style bold-font"><b>1数据统计类</b></p>
<p>1.头条推广</p>
<p>
SDK官网
<span class="link-text">
https://ad.oceanengine.com/openapi/index.html
</span>
</p>
<p>SDK包名com.bytedance</p>
<p>企业主体:北京有竹居网络技术有限公司</p>
<p>使用目的:用于广告流量统计相关服务</p>
<p>
收集信息类型设备品牌、型号、软件系统相关信息、安卓oaid、无线网SSID名称、WiFi路由器MAC地址、设备MAC地址、IMEI、地理位置
</p>
<p>
隐私政策链接:
<span class="link-text">
https://ad.oceanengine.com/openapi/register/protocol.html?rid=vo25p8sfqde
</span>
</p>
<p>2.talkingdata统计</p>
<p>
SDK官网
<span class="link-text">http://www.talkingdata.com/</span>
</p>
<p>SDK包名com.tendcloud</p>
<p>企业主体:北京腾云天下科技有限公司</p>
<p>使用目的:用于统计数据和效果分析,以便为用户提供更好的服务</p>
<p>收集信息类型:设备信息、网络信息、位置信息、应用信息</p>
<p>
隐私政策链接:
<span class="link-text">
http://www.talkingdata.com/privacy.jsp?languagetype=zh_cn
</span>
</p>
<p>3.腾讯MTA</p>
<p>
SDK官网
<span class="link-text">https://mta.qq.com/mta/</span>
</p>
<p>SDK包名com.tencent</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的:用于统计数据和效果分析</p>
<p>
收集信息类型Mac地址、唯一设备识别码IMEI、android
ID、IDFA、OPENUDID、GUID/SIM卡IMSI信息、地理位置信息
</p>
<p>
隐私政策链接:
<span class="link-text">
https://mta.qq.com/mta/ctr_index/protocol_v2/
</span>
</p>
<p>4.腾讯广点通</p>
<p>
SDK官网
<span class="link-text">https://developers.e.qq.com/</span>
</p>
<p>SDK包名com.tencent</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的:用于广告流量统计相关服务</p>
<p>
收集信息类型:
个人常用设备信息IMEI、AndroidID、位置信息IP地址、软件版本号
</p>
<p>
隐私政策链接:
<span class="link-text">https://e.qq.com/optout.html</span>
</p>
<p class="margintop red-style bold-font"><b>2社交登录类</b></p>
<p>5.微信登录分享</p>
<p>
SDK官网
<span class="link-text">https://open.weixin.qq.com/</span>
</p>
<p>SDK包名com.tencent.mm.opensdk</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的:用于支持微信登录、分享</p>
<p>
收集信息类型个人常用设备信息MAC地址、IMEI、AndroidID、硬件型号、操作系统类型、软件信息软件版本号、浏览器类型、IP地址、服务日志信息、通讯日志信息
</p>
<p>
隐私政策链接:
<span class="link-text">https://privacy.tencent.com/</span>
</p>
<p>6.QQ登录分享</p>
<p>
SDK官网
<span class="link-text">https://connect.qq.com/</span>
</p>
<p>SDK包名com.tentcent</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的用于支持QQ登录、分享</p>
<p>
收集信息类型个人常用设备信息MAC地址、IMEI、AndroidID、IMSI、ICCID、序列号、设备型号、操作系统版本、软件信息软件版本号、浏览器类型、网络信息、IP地址、服务日志信息、通讯日志信息 
</p>
<p>
隐私政策链接:
<span class="link-text">
https://wiki.connect.qq.com/qq互联sdk隐私保护声明
</span>
</p>
<p>7.微博登录分享</p>
<p>
SDK官网
<span class="link-text">http://open.weibo.com/authentication</span>
</p>
<p>SDK包名com.sina.weibo.sdk</p>
<p>企业主体:北京微梦创科网络技术有限公司</p>
<p>使用目的:用于支持微博登录、分享</p>
<p>
收集信息类型个人常用设备信息MAC地址、IMEI、AndroidID、IMSI、ICCID、序列号、网络信息、应用列表硬件型号、操作系统类型、软件信息软件版本号、浏览器类型、IP地址、服务日志信息、通讯日志信息
</p>
<p>
隐私政策链接:
<span class="link-text">https://open.weibo.com/wiki/开发者协议</span>
</p>
<p>8.头条抖音登录</p>
<p>
SDK官网
<span class="link-text">https://open.douyin.com/platform</span>
</p>
<p>SDK包名com.bytedance.sdk</p>
<p>企业主体:北京字节跳动科技有限公司</p>
<p>使用目的:用于支持抖音登录</p>
<p>
收集信息类型个人常用设备信息MAC地址、IMEI、AndroidID、硬件型号、操作系统类型、软件信息软件版本号、浏览器类型、IP地址、服务日志信息、通讯日志信息
</p>
<p>
隐私政策链接:
<span class="link-text">
https://www.douyin.com/agreements/?id=6773901168964798477
</span>
</p>
<p class="margintop red-style bold-font"><b>3推送通知类</b></p>
<p>9.友盟推送</p>
<p>
SDK官网
<span class="link-text">https://www.umeng.com/push</span>
</p>
<p>SDK包名com.umeng</p>
<p>企业主体:北京友盟网络科技有限公司</p>
<p>使用目的:用于游戏相关信息的提醒通知</p>
<p>
收集信息类型Mac地址、唯一设备识别码IMEI、android
ID、IDFA、OPENUDID、GUID/SIM卡IMSI信息、地理位置信息
</p>
<p>
隐私政策链接:
<span class="link-text">
https://www.umeng.com/page/policy?spm=a213m0.14063960.0.0.7f626e72hx3nnv
</span>
</p>
<p class="margintop red-style bold-font"><b>4其他功能类</b></p>
<p>10.阿里云反爬虫</p>
<p>
SDK官网
<span class="link-text">https://www.aliyun.com/product/antibot</span>
</p>
<p>SDK包名com.alibaba.wireless</p>
<p>企业主体:阿里巴巴网络技术有限公司</p>
<p>使用目的为APP提供网络应用安全防护</p>
<p>
收集信息类型设备相关信息例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息、设备所在位置相关信息例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息
</p>
<p>
隐私政策链接:
<span class="link-text">
http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr
</span>
</p>
<p>11.腾讯bugly</p>
<p>
SDK官网
<span class="link-text">https://bugly.qq.com/v2/</span>
</p>
<p>SDK包名com.tencent.bugly</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的APP异常上报</p>
<p>
收集信息类型:设备及应用信息。如:设备名称、设备识别符、硬件型号、操作系统版本、应用程序版本
</p>
<p>
隐私政策链接:
<span class="link-text">https://bugly.qq.com/v2/contract</span>
</p>
<p>12.阿里云文件上传</p>
<p>
SDK官网
<span class="link-text">https://www.alibabacloud.com/zh</span>
</p>
<p>SDK包名com.alibaba.sdk.android</p>
<p>SDK包名com.alibaba.sdk.android</p>
<p>企业主体:阿里巴巴网络技术有限公司</p>
<p>使用目的:用于支持用户上传视频等相关内容</p>
<p>
收集信息类型设备相关信息例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息、设备所在位置相关信息例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息
</p>
<p>
隐私政策链接:
<span class="link-text">
http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr
</span>
</p>
<p>13.阿里云日志上传</p>
<p>
SDK官网
<span class="link-text">https://www.alibabacloud.com/zh</span>
</p>
<p>SDK包名com.aliyun.sls.android.sdk</p>
<p>企业主体:阿里巴巴网络技术有限公司</p>
<p>
使用目的:通过网络日志分析这些信息以便更及时响应您的帮助请求,以及用于改进服务
</p>
<p>
收集信息类型设备相关信息例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息、设备所在位置相关信息例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息
</p>
<p>
隐私政策链接:
<span class="link-text">
http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr
</span>
</p>
<p>14.容联七陌</p>
<p>
SDK官网
<span class="link-text">https://www.7moor.com/developer</span>
</p>
<p>SDK包名com.m7.imkfsdk</p>
<p>企业主体:北京七陌科技有限公司</p>
<p>使用目的:用于提供对应在线客服功能</p>
<p>
收集信息类型:设备相关信息(设备名称、设备型号、硬件序列号、操作系统和应用程序版本及类型、语言设置、分辨率、移动终端随机存储内存、摄像头/相册、通讯录权限等)
</p>
<p>
隐私政策链接:
<span class="link-text">
http://m.7moor.com/72/57/p5077783560e807/
</span>
</p>
<p><b>2.2 共享您的个人信息</b></p>
<p>
1我们不会与任何公司、组织和个人共享您的个人信息但以下情况除外
</p>
<p>
2事先获得您的明确授权或同意
获得您的明确同意后,我们会与其他方共享您的个人信息;
</p>
<p>
3在法定情形下的共享
根据适用的法律法规、法律程序、政府的强制命令或司法裁定而需共享您的个人信息;
</p>
<p>
4在法律要求或允许的范围内为了保护光环助手及其用户或社会公众的利益、财产或安全免遭损害而有必要提供您的个人信息给第三方
</p>
<p>
5与我们的关联公司共享
您的个人信息可能会在我们的关联公司之间共享。我们会对共享的个人信息进行匿名化处理,且这种共享受本指引所声明目的的约束。关联公司如要改变个人信息的处理目的,将再次征求您的授权同意。
</p>
<p><b>2.3转让</b></p>
<p>
1我们不会转让您的个人信息给任何其他第三方除非征得您的明确同意。
</p>
<p>
2随着我们业务的持续发展我们将有可能进行合并、收购、资产转让您的个人信息有可能因此而被转移。在发生前述变更时我们将按照法律法规及不低于本隐私政策所载明的安全标准要求继受方保护您的个人信息否则我们将要求继受方重新征得您的授权同意。
</p>
<p><b>2.4披露</b></p>
<p>
1我们不会公开披露您的信息除非遵循国家法律法规规定或者获得您的同意。我们公开披露您的个人信息会采用符合行业内标准的安全保护措施。
</p>
<p>
2基于法律、法律程序、诉讼或政府主管部门强制性要求的情况下我们可能会向有权机关披露您的个人信息。但我们保证在上述情况发生时我们会要求披露请求方必须出具与之相应的有效法律文件并对被披露的信息采取符合法律和业界标准的安全防护措施。
</p>
<p>
3对违规账号、欺诈行为进行处罚公告时我们会披露相关账号的信息。
</p>
<p><b>2.5依法豁免征得同意共享、转让、公开披露的个人信息</b></p>
<p>
请您理解,在下列情形中,根据法律法规及国家标准,我们共享、转让、公开披露您的个人信息无需征得您的授权同意:
</p>
<p>1与国家安全、国防安全直接相关的</p>
<p>2与公共安全、公共卫生、重大公共利益直接相关的</p>
<p>3与犯罪侦查、起诉、审判和判决执行等直接相关的</p>
<p>
4出于维护您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的
</p>
<p>5您自行向社会公众公开的个人信息</p>
<p>
6从合法公开披露的信息中收集个人信息的如合法的新闻报道、政府信息公开等渠道。
</p>
<p><b>3.我们如何收集和使用个人信息</b></p>
<p>
我们会遵循正当、合法、必要的原则,出于本指引所述的以下目的,收集和使用您在使用服务过程中主动提供或因使用产品或服务而产生的个人信息。
</p>
<p>
我们收集和使用的您的个人信息类型包括两种:第一种:我们产品或服务的核心业务功能所必需的信息:此类信息为产品或服务正常运行的必备信息,您须授权我们收集。如您拒绝提供,您将无法正常使用我们的功能,以"仅浏览(游客身份)"
的状态体验;第二种:我们产品或服务的附加业务功能可能需要收集的信息:此信息为非核心业务功能所需的信息,您可以选择是否授权我们收集。如您拒绝提供,将导致附加业务功能无法实现或无法达到我们拟达到的效果,但不影响您对核心业务功能的正常使用。
</p>
<p>
如果我们要将您的个人信息用于本指引未载明的其它用途,或基于特定目的将收集而来的信息用于其他目的,我们将以合理的方式向您告知,并在使用前再次征得您的同意。
</p>
<p><b>3.1实现产品或服务的基本功能</b></p>
<p>
1手机管理和内容资源下载功能。为实现手机管理及手机内容资源下载的基本功能我们会通过手机系统的公用接口收集经过MD5算法加密的国际移动设备身份码IMEI和网络设备地址MAC以及手机型号、手机系统版本号、系统编号、系统ID号、屏幕分辨率、上网类型、手机中软件的名称、版本号、版本名、包名、软件使用时间和频率、软件崩溃信息、设备和软件相关的信息。这些信息是提供服务所必须收集的基础信息如您拒绝提供上述权限将可能导致您无法使用我们的服务。
</p>
<p>
2软件升级管理功能。为实现手机软件下载、安装、升级、卸载软件管理功能在您使用产品时我们会采集您手机中已安装软件的软件名称、版本号、版本名、软件包名信息并上传到我们的服务器进行软件版本比对。发现有更新的版本我们会提示您升级相应的软件。上述软件信息为实现此功能所必需不涉及您个人身份敏感信息。
</p>
<p>
3过滤无法使用的软件功能。为了过滤您手机无法使用的软件我们会收集您手机的手机型号、手机系统版本号、系统版本号、屏幕分辨率信息并依据这些信息排除您手机无法使用的软件以保证您在光环助手下载的软件都可安装使用。
</p>
<p><b>3.2关于获取手机设备信息的说明</b></p>
<p>
1为方便区分每个用户的个人信息等本软件需获取用户的手机设备信息用于游戏主动预约、论坛互动交流后进行推送等用户相关的行为
</p>
<p>
2为了保障软件与服务的安全运行我们会收集您的硬件型号、操作系统版本号、国际移动设备识别码、唯一设备标识符、网络设备硬件地址、IP
地址、WLAN接入点、蓝牙、基站、软件版本号、网络接入方式、类型、状态、网络质量数据、操作、使用、服务日志。
</p>
<p>
3为了预防恶意程序及安全运营所必需我们会收集安装的应用信息或正在运行的进程信息、应用程序的总体运行、使用情况与频率、应用崩溃情况、总体安装使用情况、性能数据、应用来源。
</p>
<p>
4我们可能使用您的账户信息、设备信息、服务日志信息以及我们关联公司、合作方在获得您授权或依法可以共享的信息用于判断账户安全、进行身份验证、检测及防范安全事件。
</p>
<p>5具体会发生获取手机设备信息场景如下说明</p>
<p class="left-indent">
1 首次启动光环助手
<b></b>
2 游戏列表/游戏详情/资讯文章详情/搜索结果页-预约功能
<b></b>
3 礼包中心/礼包详情-领取功能
<b></b>
4 评论详情-发送评论功能
<b></b>
5 回答/问题详情-我来回答功能
<b></b>
6 问答首页-提问功能
<b></b>
7 个人主页-发文章功能
<b></b>
8 帖子草稿/我的草稿-编辑功能
<b></b>
9 游戏投稿功能
<b></b>
10视频投稿-上传视频功能
<b></b>
11游戏详情-关注游戏功能
</p>
<p><b>3.3帮助您成为我们的在线用户</b></p>
<p>1注册账号/登录账号</p>
<p>
a.当您注册、登录我们相关服务时,您可以通过手机号创建账号,并且您可以完善相关的网络身份识别信息(头像、昵称、密码),收集这些信息是为了帮助您完成注册。您还可以根据自身需求选择填写性别、生日、地区及个人介绍来完善您的信息。
</p>
<p>
b.您也可以使用第三方账号登录并使用,您将授权我们获取您在第三方平台注册的公开信息(头像、昵称以及您授权的其他信息),用于与光环助手账号绑定,使您可以直接登录并使用本产品和相关服务。
</p>
<p>2认证用户</p>
<p>
a.在您使用身份认证的功能或服务时,根据相关法律法规,您可能需要提供您的真实身份信息(真实姓名、身份证号码、电话号码)以完成实名验证。
</p>
<p>
b.这些信息属于个人敏感信息,您可以拒绝提供,但您将可能无法获得相关服务,但不影响其他功能与服务的正常使用。
</p>
<p><b>3.4搜索</b></p>
<p>
1您使用“光环助手”的搜索服务时我们会收集您的搜索关键字信息、日志记录。
</p>
<p>
2为了提供高效的搜索服务部分前述信息会暂时存储在您的本地存储设备之中并可向您展示搜索结果内容、搜索历史记录。
</p>
<p><b>3.5预约游戏</b></p>
<p>
当您使用游戏预约、游戏开测提醒功能时,您可以根据需要是否填写手机号。如您拒绝提供,仅会使您无法接收该预约游戏的短信快速提醒功能,但并不影响您正常使用产品与服务的其他。
</p>
<p><b>3.6游戏时长统计</b></p>
<p>
您可以授权我们使用应用使用记录访问权限,我们会获取您使用某款游戏应用的使用时长,以便于提供游戏时长展示服务以及对应的大数据统计分析。
</p>
<p><b>3.7信息发布功能</b></p>
<p>
1注册成为光环用户后可在光环平台上发布提问、帖子、视频并对别人的提问作出回答或邀请其他用户回答您还可以对别人的回答、帖子和视频的评论作出回复、赞同、感谢。
</p>
<p>
2上述功能基于相册图片库/视频库)的图片/视频访问及上传的附加服务,我们会请求您授权相机、照片、麦克风权限,您可以使用该功能上传您的照片/图片/视频,以实现发布照片/图片/视频的功能、与其他用户进行照片/图片分享等功能。如您拒绝提供该权限和内容的,仅会使您无法使用该功能,但并不影响您正常使用产品与/或服务的其他功能。
</p>
<p>
3您发布内容、评论、提问或回答时我们将收集您发布的信息并展示您的昵称、头像、发布内容。
</p>
<p>
4用户因使用我们的产品或者服务而被我们收集的信息例如其他用户发布的信息中可能含有您的部分信息在评论、留言、发布图文、音视频中涉及到与您相关的信息
</p>
<p><b>3.8浏览、关注与收藏功能</b></p>
<p>1您可浏览的内容包括问答、评论、专栏、文章。</p>
<p>
2在浏览的过程中您还可以关注您感兴趣的用户、专栏、问题、收藏并收藏上述内容。
</p>
<p>
3为此
我们可能会收集您使用时的设备信息,如设备型号、唯一设备标识符、操作系统、分辨率、电信运营商等软硬件信息。
我们还可能收集您的浏览器类型,以此来为您提供信息展示的最优方案。
</p>
<p>
4此外在您使用浏览和收藏功能的过程中我们会自动收集您使用的详细情况并作为有关的
网络日志保存,包括但不限于您输入的搜索关键词信息和点击的链接。
</p>
<p>
5您浏览和发布的内容及评论信息您上传的图片信息、您的交易信息、您使用的语言、访问的日期和时间、及您请求的网页记录、操作系统、软件版本号、登录
IP 信息。
</p>
<p>
6在此过程中
我们会收集您的浏览记录,浏览记录包括您浏览的问答、主页、文章、专栏,
您可以自主删除浏览记录。
</p>
<p><b>3.9互动交流</b></p>
<p>
1您主动关注您感兴趣的账号、内容、视频并与之进行互动进行浏览、评论、收藏、点赞或分享内容时我们会收集您关注的账号并向您展示您关注账号发布内容。
</p>
<p>
2您使用推荐通讯录好友功能时我们会请求通讯录权限并将通讯录中的信息进行高强度加密算法处理后用于向您推荐通信录中的好友。通讯录信息属于个人敏感信息拒绝提供该信息仅会使您无法使用上述功能但不影响您正常使用“光环助手”及相关服务的其他功能。
</p>
<p><b>3.10收集、使用个人信息目的变更</b></p>
<p>
1请您了解随着我们业务的发展可能会对“光环助手”的功能和提供的服务有所调整变化。
</p>
<p>
2原则上当新功能或服务与我们当前提供的功能或服务相关时收集与使用的个人信息将与原处理目的具有直接或合理关联。
</p>
<p>
3在与原处理目的无直接或合理关联的场景下我们收集、使用您的个人信息会再次进行告知并征得您的同意。
</p>
<p><b>3.11依法豁免征得同意收集和使用的个人信息</b></p>
<p>
请您理解,在下列情形中,根据法律法规及相关国家标准,我们收集和使用您的个人信息无需征得您的授权同意:
</p>
<p>1与国家安全、国防安全直接相关的</p>
<p>2与公共安全、公共卫生、重大公共利益直接相关的</p>
<p>3与犯罪侦查、起诉、审判和判决执行等直接相关的</p>
<p>
4出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到本人同意的
</p>
<p>5所收集的您的个人信息是您自行向社会公众公开的</p>
<p>
6从合法公开披露的信息中收集的您的个人信息的如合法的新闻报道、政府信息公开等渠道
</p>
<p>7根据您的要求签订或履行合同所必需的</p>
<p>
8用于维护软件及相关服务的安全稳定运行所必需的例如发现、处置软件及相关服务的故障
</p>
<p>9为合法的新闻报道所必需的</p>
<p>
10学术研究机构基于公共利益开展统计或学术研究所必要且对外提供学术研究或描述的结果时对结果中所包含的个人信息进行去标识化处理的。
</p>
<p>11法律法规规定的其他情形。</p>
<p>
特别提示您注意,如信息无法单独或结合其他信息识别到您的个人身份,其不属于法律意义上您的个人信息;当您的信息可以单独或结合其他信息识别到您的个人身份时或我们将无法与任何特定个人信息建立联系的数据与其他您的个人信息结合使用时,这些信息在结合使用期间,将作为您的个人信息按照本隐私政策处理与保护。
</p>
<p><b>4.我们如何存储个人信息</b></p>
<p><b>4.1 存储地点</b></p>
<p>
1我们依照法律法规的规定将在境内运营过程中收集和产生的您的个人信息存储于中华人民共和国境内。
</p>
<p>
2目前我们不会将上述信息传输至境外如果我们向境外传输我们将会遵循相关国家规定或者征求您的同意。
</p>
<p><b>4.2存储期限</b></p>
<p>
1我们仅在为提供“光环助手”及服务之目的所必需的期间内保留您的个人信息您发布的信息、评论、点赞及相关信息在您未撤回、删除或未注销账号期间我们会保留相关信息。
</p>
<p>
2超出必要期限后我们将对您的个人信息进行删除或匿名化处理但法律法规另有规定的除外。
</p>
<p><b>5.我们如何保护个人信息的安全</b></p>
<p>
1我们非常重视您个人信息的安全将努力采取合理的安全措施包括技术方面和管理方面来保护您的个人信息防止您提供的个人信息被不当使用或未经授权的情况下被访问、公开披露、使用、修改、损坏、丢失或泄漏。
</p>
<p>
2我们会使用不低于行业同行的加密技术、匿名化处理及相关合理可行的手段保护您的个人信息并使用安全保护机制防止您的个人信息遭到恶意攻击。
</p>
<p>
3我们会建立专门的安全部门、安全管理制度、数据安全流程保障您的个人信息安全。我们采取严格的数据使用和访问制度确保只有授权人员才可访问您的个人信息并适时对数据和技术进行安全审计。
</p>
<p>
4尽管已经采取了上述合理有效措施并已经遵守了相关法律规定要求的标准但请您理解由于技术的限制以及可能存在的各种恶意手段在互联网行业即便竭尽所能加强安全措施也不可能始终保证信息百分之百的安全我们将尽力确保您提供给我们的个人信息的安全性。
</p>
<p>
5您知悉并理解您接入我们的服务所用的系统和通讯网络有可能因我们可控范围外的因素而出现问题。因此我们强烈建议您采取积极措施保护个人信息的安全包括但不限于使用复杂密码、定期修改密码、不将自己的账号密码及相关个人信息透露给他人。
</p>
<p>
6我们会制定应急处理预案并在发生用户信息安全事件时立即启动应急预案努力阻止这些安全事件的影响和后果扩大。一旦发生用户信息安全事件泄露、丢失我们将按照法律法规的要求及时向您告知安全事件的基本情况和可能的影响、我们已经采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施。我们将及时将事件相关情况以推送通知、邮件、信函、短信及相关形式告知您难以逐一告知时我们会采取合理、有效的方式发布公告。同时我们还将按照相关监管部门要求上报用户信息安全事件的处置情况。
</p>
<p>
7您一旦离开“光环助手”及相关服务浏览或使用其他网站、服务及内容资源我们将没有能力和直接义务保护您在光环助手及相关服务之外的软件、网站提交的任何个人信息无论您登录、浏览或使用上述软件、网站是否基于“光环助手”的链接或引导。
</p>
<p><b>6.管理您的个人信息</b></p>
<p>
我们非常重视您对个人信息的管理,并尽全力保护您的隐私,对于您个人信息的查询、访问、修改、删除、撤回同意授权、注销账号、投诉举报以及设置隐私功能的相关权利,以使您有能力保障您的隐私和信息安全。
</p>
<p><b>6.1 访问、删除、更正您的个人信息</b></p>
<p>1访问个人账号信息</p>
<p>a. 您可以查询、访问您的头像、用户名、简介、性别、生日、地区</p>
<p>b.您可以在光环助手的“个人中心”中进行查询、访问。</p>
<p>2查询访问、更正、取消您关注账号、查询访问粉丝、访客信息</p>
<p>a.进入“关注”在关注列表中查询、访问、取消关注您关注的账号。</p>
<p>
3查询访问、更改、删除您的收藏、点赞、浏览记录、阅读历史记录、搜索历史历史记录
</p>
<p>
a.点击“我的”—点击“我的收藏”、
“我的点赞”、或“浏览历史”进入查询访问、删除;
</p>
<p>b.点击搜索栏—删除搜索“历史记录”</p>
<p>c.您可以通过点击“系统设置”—点击“清理缓存”。</p>
<p>4投诉举报</p>
<p>a.您可按照我们公示的制度进行投诉或举报。</p>
<p>
b.如果您认为您的个人信息权利可能受到侵害,或者发现侵害个人信息权利的线索(例如:认为我们收集您的个人信息违反法律规定或者双方约定),“我的”—“基础功能”—“用户反馈”,进入用户反馈界面与我们联系。
</p>
<p>c.我们核查后会及时反馈您的投诉与举报。</p>
<p>5访问隐私政策</p>
<p>
a.您可以在注册页面,或者在登录个人账号“设置”—“关于”查看本隐私政策的全部内容
</p>
<p>
b.请您了解,本隐私政策中所述的“光环助手”及相关服务可能会根据您所使用的手机型号、系统版本、软件应用程序版本、移动客户端等因素而有所不同。最终的产品和服务以您所使用的“光环助手”软件及相关服务为准。
</p>
<p>6停止运营向您告知</p>
<p>
a.如我们停止运营,我们将及时停止收集您个人信息的活动,将停止运营的通知以逐一送达或公告的形式通知您,并对所持有的您的个人信息进行删除或匿名化处理。
</p>
<p><b>6.2 注销您的个人账号</b></p>
<p>
如需要注销个人账户,可前往光环助手,我的光环> 设置 > 账号与安全
账号安全中心
注销账号,进行注销操作。请您注意,如果您选择注销光环助手账户,那么您的光环助手账号将不可被使用且相关账号信息将被删除,包括所发布的所有内容,包括:提问、回答、社区文章、评论、关注的人等均会被清空;您将无法再通过光环助手账号登录光环助手的服务(但不会影响您使用无需账号登录即可使用的服务和功能)
</p>
<p>
当您注销账户后除法律法规要求我们保存相关信息的情况外我们将停止为您提供相应的产品或服务并在60个工作日内删除或匿名化您的个人信息。
</p>
<p><b>7.未成年人条款</b></p>
<p>
a.若您是未满18周岁的未成年人在使用“光环助手”及相关服务前应在您的父母或其他监护人监护、指导下共同阅读并同意本隐私政策。
</p>
<p>
b.我们根据国家相关法律法规的规定保护未成年人的个人信息,只会在法律允许、父母或其他监护人明确同意或保护未成年人所必要的情况下收集、使用、储存、共享、转让或披露未成年人的个人信息;如果我们发现在未事先获得可证实的父母同意的情况下收集了未成年人的个人信息,则会设法尽快删除相关信息。
</p>
<p>
c.若您是未成年人的监护人,当您对您所监护的未成年人的个人信息有相关疑问时,请通过公司本隐私政策公示的联系方式与我们联系。
</p>
<p><b>8.隐私政策的修订和通知</b></p>
<p>
1为了给您提供更好的服务光环助手及相关服务将不时更新与变化我们会适时对本隐私政策进行修订这些修订构成本隐私政策的一部分并具有等同于本隐私政策的效力未经您明确同意我们不会削减您依据当前生效的本隐私政策所应享受的权利。
</p>
<p>
2本隐私政策更新后我们会在光环助手发出更新版本并在更新后的条款生效前通过公告或其他适当的方式提醒您更新的内容以便您及时了解本隐私政策的最新版本。
</p>
<p><b>9.联系我们</b></p>
<p>
如果您对我们的隐私政策及对您个人信息的处理有任何疑问、意见、建议、或投诉,请通过以下方式与我们联系
</p>
<p>广州加兔网络科技有限公司</p>
<p>注册地址广州市番禺区市桥街丹山村青云一街2号229房</p>
<p>在线客服QQ350473523</p>
<p>信息保护事务联系电话020-85526920</p>
<p>在一般情况下我们会在15个工作日内对您的请求予以答复</p>
</div>
</div>
</body>
</html>

View File

@ -280,12 +280,8 @@ RE.replaceAllDfImage = function(imgRuleFlag, gifRuleFlag) {
i--;
} else {
if(img.src.indexOf(".gif") > 0) {
if(gifRuleFlag.indexOf(",default") > 0) {
img.style.cssText = "max-width: 100%; display:block; margin:8px auto; height: auto;"
img.src = img.src.split("?")[0] + gifRuleFlag
}
img.src = img.src.split("?")[0] + gifRuleFlag
} else {
img.style.cssText = "max-width: 100%; display:block; margin:8px auto; height: auto;"
img.src = img.src.split("?")[0] + imgRuleFlag
}
}
@ -301,7 +297,7 @@ RE.hideShowBigPic = function() {
var img = imgs[i];
var imageClassName = img.className;
if (imageClassName == "image-link" || img.className == "poster") continue;
if(img.src.indexOf(",thumbnail") > 0 && img.src.indexOf(".gif") == -1) {
if (img.src.indexOf(".gif") == -1) {
j++;
}
}
@ -327,7 +323,6 @@ RE.replaceDfImageByUrl = function(imgUrl, imgRuleFlag, gifRuleFlag) {
var imageClassName = img.className;
if (imageClassName == "image-link" || img.className == "poster") continue;
if (img.src.indexOf(imgUrl) != -1) {
img.style.cssText = "max-width: 100%; display:block; margin:8px auto; height: auto;"
if(img.src.indexOf(".gif") > 0) {
img.src = img.src.split("?")[0] + gifRuleFlag
} else {

View File

@ -1,493 +0,0 @@
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>光环助手软件许可及服务协议</title>
</head>
<style>
* {
margin: 0;
padding: 0;
font-size: 14px;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
body {
margin: 10px;
}
.top {
margin-left: 0;
margin-right: 0;
padding: 10px 0 10px 0;
}
.title {
font-weight: 700;
}
p {
font-size: 14px;
word-break: break-all;
}
.bold {
font-weight: 700;
}
.margintop {
margin-top: 10px;
}
.left-indent {
margin-left: 20px;
}
.red-style {
color: red;
}
.bold-font {
font-weight: bold;
}
span.bold {
font-weight: bold;
}
.link-text {
color: #005ad0;
text-decoration: underline;
}
</style>
<body>
<h3 class="top">光环助手软件许可及服务协议</h3>
<h5 class="title">首部及导言</h5>
<p>欢迎使用光环助手软件许可及服务</p>
<p>
各位用户在使用光环助手前,请您务必审慎阅读、并充分理解本协议中的各项条款,
<span class="bold">
特别是免除或者限制责任的条款,以及开通或使用某项服务的单独协议,并选择接受或不接受。
</span>
除非您已阅读并接受本协议所有条款,否则您无权下载、安装或使用本软件及相关服务。您的下载、安装、使用、登录等行为即视为您已阅读并同意上述协议的约束。
</p>
<p>如果您未满18周岁请在法定监护人的陪同下阅读本协议及其他上述协议。</p>
<h5 class="title margintop">一、权利声明</h5>
<p>
“光环助手”的一切知识产权,以及与“光环助手”相关的所有信息内容,包括但不限于:文字表述及其组合、图标、图饰、图像、图表、色彩、界面设计、版面框架、有关数据、附加程序、印刷材料或电子文档等均为光环助手所有,受著作权法和国际著作权条约以及其他知识产权法律法规的保护。
</p>
<h5 class="title margintop">二、软件使用规范</h5>
<p>
2.1
本软件是基于Android安卓系统手机、平板电脑(PAD)等设备开发的一款软件,提供注册登录、手机游戏管理、游戏推荐、文章阅读等功能
</p>
<p>2.2 软件的下载、安装和使用</p>
<p>
本软件为免费软件,用户可以非商业性、无限制数量地从光环授权的渠道下载、安装及使用本软件。
</p>
<p>
<span class="bold">
如果您从未经光环授权的第三方获取本软件或与本软件名称相同的安装程序,光环无法保证该软件能够正常使用,并对因此给您造成的损失不予负责。
</span>
</p>
<p>2.3 软件的复制、分发和传播</p>
<p>
本产品以学习、研究交流为目的。用户可以非商业性、无限制数量地复制、分发和传播本软件产品。但必须保证每一份复制、分发和传播都是完整和真实的,
包括所有有关本软件产品的软件、电子文档, 版权和商标,亦包括本协议。
</p>
<p>2.4 软件的更新</p>
<p>
为了改善用户体验、完善服务内容,光环将不断努力开发新的服务,并为您不时提供软件更新(这些更新可能会采取软件替换、修改、功能强化、版本升级等形式)。为了保证本软件及服务的安全性和功能的一致性,光环有权不经向您特别通知而对软件进行更新,或者对软件的部分功能效果进行改变或限制。本软件新版本发布后,旧版本的软件可能无法使用。光环不保证旧版本软件继续可用及相应的客户服务,请您随时核对并下载最新版本。
</p>
<h5 class="title margintop">三、用户使用须知</h5>
<p>3.1 您理解并同意:</p>
<p>
为了向您提供有效的服务,本软件会利用您移动通讯终端的处理器和带宽等资源。本软件使用过程中可能产生数据流量的费用,用户需自行向运营商了解相关资费信息,并自行承担相关费用.
</p>
<p>3.2 您理解并同意:</p>
<p>
由本软件进行收录、推荐并提供下载、升级服务的第三方软件,由第三方享有一切合法权利,光环并不能识别用户利用本软件下载、安装的第三方软件是否有合法来源。
<span class="bold">
因第三方软件引发的任何纠纷,由该第三方负责解决,光环不承担任何责任。
</span>
同时光环不对第三方软件或技术提供客服支持,若用户需要获取支持,请与该软件或技术提供商联系,若您为有关软件的权利人,不愿本软件为您的软件提供用户下载、安装、使用的服务,也可按本协议约定的联系方式联系我们,我们将会积极配合进行处理。
</p>
<p>3.3 您理解并同意:</p>
<p>
<span class="bold">
如果因您不正当使用本软件造成了不良影响,或因使用本软件造成的包括但不限于数据异常等问题,均由使用者自行承担,光环团队不对任意类型的使用结果承担责任;
</span>
</p>
<p>3.4 您理解并同意:</p>
<p>
本软件不含任何破坏用户移动通讯设备数据和获取用户隐私信息的恶意代码,不会泄露用户的个人信息和隐私;
</p>
<p>3.5 您理解并同意:</p>
<p>
<span class="bold">
对于包括但不限于互联网网络故障、计算机故障、手机故障或病毒、信息损坏或丢失、计算机系统问题,或其它任何基于不可抗力原因而产生的损失,光环团队不承担任何责任。
</span>
</p>
<p>3.6 您理解并同意:</p>
<p>光环发布、收录的文章均不代表光环立场。</p>
<p>3.7 您理解并同意:</p>
<p>
为实现软件包括但不限于集中展示、下载、安装、卸载等游戏管理功能以及文章优先推荐功能,本软件会检测用户手机中已安装游戏的包名、版本号、版本名、游戏名称信息。除征得用户明确同意和法律明确规定外,光环不会向第三方泄露任何的用户信息
</p>
<p>3.8 您理解并同意:</p>
<p>
用户应在遵守法律及本协议的前提下使用本软件。用户无权实施包括但不限于下列行为:
</p>
3.8.1 不得删除或者改变本软件上的所有权利管理电子信息
<br />
3.8.2 不得故意避开或者破坏著作权人为保护本软件著作权而采取的技术措施;
<br />
3.8.3 用户不得利用本软件误导、欺骗他人;
<br />
3.8.4
违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行;
<br />
3.8.5 未经允许,进入计算机信息网络或者使用计算机信息网络资源;
<br />
3.8.6 未经允许,对计算机信息网络功能进行删除、修改或者增加;
<br />
3.8.7
未经允许,对计算机信息网络中存储、处理或者传输的数据和应用程序进行删除、修改或者增加;
<br />
3.8.8 破坏本软件系统或网站的正常运行,故意传播计算机病毒等破坏性程序;
<br />
3.8.9 其他任何危害计算机信息网络安全的行为。
<br />
<p>3.9 您理解并同意:</p>
<p>
本软件经过详细的测试,但不能保证与所有的软硬件系统完全兼容,不能保证本软件完全没有错误。如果出现不兼容及软件错误的情况,用户可通过各反馈途径将情况告知光环团队,获得技术支持。如果无法解决兼容性问题,用户可以删除本软件。
</p>
<h5 class="title margintop">四、争议解决处理</h5>
<p>
本《协议》的解释、效力及纠纷的解决,适用于中华人民共和国法律。若用户和光环助手之间发生任何纠纷或争议,首先应友好协商解决,协商不成的,用户在此完全同意将纠纷或争议提交光环助手所在地法院管辖
</p>
<p class="title margintop"><b>五、第三方SDK接入说明</b></p>
<p>
为保障光环助手App相关功能的实现与应用安全稳定的运行我们会接入由第三方提供的软件开发包SDK实现相关功能。
<br />
我们会对合作方获取有关信息的软件工具开发包SDK进行严格的安全检测并与授权合作伙伴约定严格的数据保护措施令其按照我们的委托目的、服务说明、本隐私权政策以及其他任何相关的保密和安全措施来处理个人信息。
<br />
<span class="red-style">
下方为整个光环助手
<span class="bold">所有版本</span>
内接入的所有信息收集类第三方SDK的权限说明因隐私政策会因光环助手版本迭代而新接入SDK或停止合作部分SDK方便照顾
<span class="bold">所有版本</span>
的用户查看自己SDK第三方权限说明。
<br />
我们对涉及用户信息使用的SDK相关情况进行了逐项列举具体如下
</span>
</p>
<p class="margintop red-style bold-font"><b>1数据统计类</b></p>
<p>1.头条推广</p>
<p>
SDK官网
<span class="link-text">
https://ad.oceanengine.com/openapi/index.html
</span>
</p>
<p>SDK包名com.bytedance</p>
<p>企业主体:北京有竹居网络技术有限公司</p>
<p>使用目的:用于广告流量统计相关服务</p>
<p>
收集信息类型设备品牌、型号、软件系统相关信息、安卓oaid、无线网SSID名称、WiFi路由器MAC地址、设备MAC地址、IMEI、地理位置
</p>
<p>
隐私政策链接:
<span class="link-text">
https://ad.oceanengine.com/openapi/register/protocol.html?rid=vo25p8sfqde
</span>
</p>
<p>2.talkingdata统计</p>
<p>
SDK官网
<span class="link-text">http://www.talkingdata.com/</span>
</p>
<p>SDK包名com.tendcloud</p>
<p>企业主体:北京腾云天下科技有限公司</p>
<p>使用目的:用于统计数据和效果分析,以便为用户提供更好的服务</p>
<p>收集信息类型:设备信息、网络信息、位置信息、应用信息</p>
<p>
隐私政策链接:
<span class="link-text">
http://www.talkingdata.com/privacy.jsp?languagetype=zh_cn
</span>
</p>
<p>3.腾讯MTA</p>
<p>
SDK官网
<span class="link-text">https://mta.qq.com/mta/</span>
</p>
<p>SDK包名com.tencent</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的:用于统计数据和效果分析</p>
<p>
收集信息类型Mac地址、唯一设备识别码IMEI、android
ID、IDFA、OPENUDID、GUID/SIM卡IMSI信息、地理位置信息
</p>
<p>
隐私政策链接:
<span class="link-text">
https://mta.qq.com/mta/ctr_index/protocol_v2/
</span>
</p>
<p>4.腾讯广点通</p>
<p>
SDK官网
<span class="link-text">https://developers.e.qq.com/</span>
</p>
<p>SDK包名com.tencent</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的:用于广告流量统计相关服务</p>
<p>
收集信息类型:
个人常用设备信息IMEI、AndroidID、位置信息IP地址、软件版本号
</p>
<p>
隐私政策链接:
<span class="link-text">https://e.qq.com/optout.html</span>
</p>
<p class="margintop red-style bold-font"><b>2社交登录类</b></p>
<p>5.微信登录分享</p>
<p>
SDK官网
<span class="link-text">https://open.weixin.qq.com/</span>
</p>
<p>SDK包名com.tencent.mm.opensdk</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的:用于支持微信登录、分享</p>
<p>
收集信息类型个人常用设备信息MAC地址、IMEI、AndroidID、硬件型号、操作系统类型、软件信息软件版本号、浏览器类型、IP地址、服务日志信息、通讯日志信息
</p>
<p>
隐私政策链接:
<span class="link-text">https://privacy.tencent.com/</span>
</p>
<p>6.QQ登录分享</p>
<p>
SDK官网
<span class="link-text">https://connect.qq.com/</span>
</p>
<p>SDK包名com.tentcent</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的用于支持QQ登录、分享</p>
<p>
收集信息类型个人常用设备信息MAC地址、IMEI、AndroidID、IMSI、ICCID、序列号、设备型号、操作系统版本、软件信息软件版本号、浏览器类型、网络信息、IP地址、服务日志信息、通讯日志信息 
</p>
<p>
隐私政策链接:
<span class="link-text">
https://wiki.connect.qq.com/qq互联sdk隐私保护声明
</span>
</p>
<p>7.微博登录分享</p>
<p>
SDK官网
<span class="link-text">http://open.weibo.com/authentication</span>
</p>
<p>SDK包名com.sina.weibo.sdk</p>
<p>企业主体:北京微梦创科网络技术有限公司</p>
<p>使用目的:用于支持微博登录、分享</p>
<p>
收集信息类型个人常用设备信息MAC地址、IMEI、AndroidID、IMSI、ICCID、序列号、网络信息、应用列表硬件型号、操作系统类型、软件信息软件版本号、浏览器类型、IP地址、服务日志信息、通讯日志信息
</p>
<p>
隐私政策链接:
<span class="link-text">https://open.weibo.com/wiki/开发者协议</span>
</p>
<p>8.头条抖音登录</p>
<p>
SDK官网
<span class="link-text">https://open.douyin.com/platform</span>
</p>
<p>SDK包名com.bytedance.sdk</p>
<p>企业主体:北京字节跳动科技有限公司</p>
<p>使用目的:用于支持抖音登录</p>
<p>
收集信息类型个人常用设备信息MAC地址、IMEI、AndroidID、硬件型号、操作系统类型、软件信息软件版本号、浏览器类型、IP地址、服务日志信息、通讯日志信息
</p>
<p>
隐私政策链接:
<span class="link-text">
https://www.douyin.com/agreements/?id=6773901168964798477
</span>
</p>
<p class="margintop red-style bold-font"><b>3推送通知类</b></p>
<p>9.友盟推送</p>
<p>
SDK官网
<span class="link-text">https://www.umeng.com/push</span>
</p>
<p>SDK包名com.umeng</p>
<p>企业主体:北京友盟网络科技有限公司</p>
<p>使用目的:用于游戏相关信息的提醒通知</p>
<p>
收集信息类型Mac地址、唯一设备识别码IMEI、android
ID、IDFA、OPENUDID、GUID/SIM卡IMSI信息、地理位置信息
</p>
<p>
隐私政策链接:
<span class="link-text">
https://www.umeng.com/page/policy?spm=a213m0.14063960.0.0.7f626e72hx3nnv
</span>
</p>
<p class="margintop red-style bold-font"><b>4其他功能类</b></p>
<p>10.阿里云反爬虫</p>
<p>
SDK官网
<span class="link-text">https://www.aliyun.com/product/antibot</span>
</p>
<p>SDK包名com.alibaba.wireless</p>
<p>企业主体:阿里巴巴网络技术有限公司</p>
<p>使用目的为APP提供网络应用安全防护</p>
<p>
收集信息类型设备相关信息例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息、设备所在位置相关信息例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息
</p>
<p>
隐私政策链接:
<span class="link-text">
http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr
</span>
</p>
<p>11.腾讯bugly</p>
<p>
SDK官网
<span class="link-text">https://bugly.qq.com/v2/</span>
</p>
<p>SDK包名com.tencent.bugly</p>
<p>企业主体:深圳市腾讯计算机系统有限公司</p>
<p>使用目的APP异常上报</p>
<p>
收集信息类型:设备及应用信息。如:设备名称、设备识别符、硬件型号、操作系统版本、应用程序版本
</p>
<p>
隐私政策链接:
<span class="link-text">https://bugly.qq.com/v2/contract</span>
</p>
<p>12.阿里云文件上传</p>
<p>
SDK官网
<span class="link-text">https://www.alibabacloud.com/zh</span>
</p>
<p>SDK包名com.alibaba.sdk.android</p>
<p>SDK包名com.alibaba.sdk.android</p>
<p>企业主体:阿里巴巴网络技术有限公司</p>
<p>使用目的:用于支持用户上传视频等相关内容</p>
<p>
收集信息类型设备相关信息例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息、设备所在位置相关信息例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息
</p>
<p>
隐私政策链接:
<span class="link-text">
http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr
</span>
</p>
<p>13.阿里云日志上传</p>
<p>
SDK官网
<span class="link-text">https://www.alibabacloud.com/zh</span>
</p>
<p>SDK包名com.aliyun.sls.android.sdk</p>
<p>企业主体:阿里巴巴网络技术有限公司</p>
<p>
使用目的:通过网络日志分析这些信息以便更及时响应您的帮助请求,以及用于改进服务
</p>
<p>
收集信息类型设备相关信息例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息、设备所在位置相关信息例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息
</p>
<p>
隐私政策链接:
<span class="link-text">
http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr
</span>
</p>
<p>14.容联七陌</p>
<p>
SDK官网
<span class="link-text">https://www.7moor.com/developer</span>
</p>
<p>SDK包名com.m7.imkfsdk</p>
<p>企业主体:北京七陌科技有限公司</p>
<p>使用目的:用于提供对应在线客服功能</p>
<p>
收集信息类型:设备相关信息(设备名称、设备型号、硬件序列号、操作系统和应用程序版本及类型、语言设置、分辨率、移动终端随机存储内存、摄像头/相册、通讯录权限等)
</p>
<p>
隐私政策链接:
<span class="link-text">http://m.7moor.com/72/57/p5077783560e807/</span>
</p>
<h5 class="title margintop">六、关于获取手机设备信息的说明</h5>
<div>
1为方便区分每个用户的个人信息等本软件需获取用户的手机设备信息用于游戏主动预约、论坛互动交流后进行推送等用户相关的行为
<br />
2为了保障软件与服务的安全运行我们会收集您的硬件型号、操作系统版本号、国际移动设备识别码、唯一设备标识符、网络设备硬件地址、IP
地址、WLAN接入点、蓝牙、基站、软件版本号、网络接入方式、类型、状态、网络质量数据、操作、使用、服务日志。
<br />
3为了预防恶意程序及安全运营所必需我们会收集安装的应用信息或正在运行的进程信息、应用程序的总体运行、使用情况与频率、应用崩溃情况、总体安装使用情况、性能数据、应用来源。
<br />
4我们可能使用您的账户信息、设备信息、服务日志信息以及我们关联公司、合作方在获得您授权或依法可以共享的信息用于判断账户安全、进行身份验证、检测及防范安全事件。
<br />
5具体会发生获取手机设备信息场景如下说明
<br />
<p class="left-indent">
1) 首次启动光环助手
<br />
2) 游戏列表/游戏详情/资讯文章详情/搜索结果页-预约功能
<br />
3) 礼包中心/礼包详情-领取功能
<br />
4) 评论详情-发送评论功能
<br />
5) 回答/问题详情-我来回答功能
<br />
6) 问答首页-提问功能
<br />
7) 个人主页-发文章功能
<br />
8) 帖子草稿/我的草稿-编辑功能
<br />
9) 游戏投稿功能
<br />
10) 视频投稿-上传视频功能
<br />
11) 游戏详情-关注游戏功能
</p>
</div>
<h5 class="title margintop">七、其他</h5>
<p>
7.1
本协议所有条款的标题仅为阅读方便,本身并无实际涵义,不能作为本协议涵义解释的依据。
<br />
7.2
如果本协议中的任何条款无论因何种原因完全或部分无效或不具有执行力,或违反任何适用的法律,则该条款被视为删除,但本协议的其余条款仍应有效并且有约束力。
<br />
7.3
光环有权随时根据有关法律、法规的变化以及公司经营状况和经营策略的调整等修改本协议。修改后的协议会在软件设置内发布。
当发生有关争议时,以最新的协议文本为准。如果不同意改动的内容,用户可以自行删除本软件。如果用户继续使用本软件,则视为您接受本协议的变动。
<br />
<span class="bold">
7.4 光环在法律允许的最大范围内对本协议拥有解释权与修改权。
</span>
</p>
</body>
</html>

View File

@ -0,0 +1,58 @@
package androidx.swiperefreshlayout.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
public class ViewPagerSwipeRefreshLayout extends SwipeRefreshLayout {
private float startY;
private float startX;
// 记录viewPager是否拖拽的标记
private boolean mIsVpDragger;
private final int mTouchSlop;
public ViewPagerSwipeRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// 记录手指按下的位置
startY = ev.getY();
startX = ev.getX();
// 初始化标记
mIsVpDragger = false;
break;
case MotionEvent.ACTION_MOVE:
// 如果viewpager正在拖拽中那么不拦截它的事件直接return false
if(mIsVpDragger) {
return false;
}
// 获取当前手指位置
float endY = ev.getY();
float endX = ev.getX();
float distanceX = Math.abs(endX - startX);
float distanceY = Math.abs(endY - startY);
// 如果X轴位移大于Y轴位移那么将事件交给viewPager处理。
if(distanceX > mTouchSlop && distanceX > distanceY) {
mIsVpDragger = true;
return false;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// 初始化标记
mIsVpDragger = false;
break;
}
// 如果是Y轴位移大于X轴事件交给swipeRefreshLayout处理。
return super.onInterceptTouchEvent(ev);
}
}

View File

@ -5,6 +5,7 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Looper;
import android.preference.PreferenceManager;
import android.util.Log;
@ -25,8 +26,9 @@ import java.lang.Thread.UncaughtExceptionHandler;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.concurrent.TimeoutException;
import io.sentry.core.Sentry;
import io.sentry.Sentry;
public class AppUncaughtHandler implements UncaughtExceptionHandler {
@ -38,22 +40,26 @@ public class AppUncaughtHandler implements UncaughtExceptionHandler {
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
new Thread(new Runnable() {
@Override
public void run() {
public void uncaughtException(Thread t, Throwable e) {
if (("FinalizerWatchdogDaemon").equals(t.getName())
&& e instanceof TimeoutException) {
// ignore timeoutException
// detail can be found in this didi tech blog post https://mp.weixin.qq.com/s?__biz=MzU1ODEzNjI2NA==&mid=2247487185&idx=2&sn=cf2d9e10053f625bde0f61d246f14870&source=41#wechat_redirect
} else {
new Thread(() -> {
Looper.prepare();
Utils.toast(mContext.getApplicationContext(), "\"光环助手\"发生错误");
Looper.loop();
}
});
saveLocalLog(mContext, ex);
Sentry.captureException(ex);
restart(mContext);
});
saveLocalLog(mContext, e);
restart(mContext);
Sentry.captureException(e);
}
}
public static void restart(final Context context) {
// S450 这机器会无限重启循环 : (
if ("S450".equals(Build.MODEL)) return;
// 防止重复奔溃导致助手一直重启20秒内不做处理
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);

View File

@ -1,6 +1,9 @@
package com.gh.base;
import static com.gh.common.util.EntranceUtils.KEY_ENTRANCE;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
@ -8,10 +11,13 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcel;
import android.os.TransactionTooLargeException;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
@ -19,18 +25,27 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.content.ContextCompat;
import androidx.core.view.LayoutInflaterCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import com.gh.base.fragment.BaseFragment;
import com.gh.common.constant.Constants;
import com.gh.common.tracker.IBusiness;
import com.gh.common.util.DialogHelper;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.EntranceUtils;
import com.gh.common.util.EnvHelper;
import com.gh.common.util.ExtensionsKt;
import com.gh.common.util.MtaHelper;
import com.gh.common.util.NetworkUtils;
import com.gh.common.util.NightModeUtils;
import com.gh.common.util.PackageFlavorHelper;
import com.gh.common.util.PackageInstaller;
import com.gh.common.util.QuickLoginHelper;
import com.gh.common.util.RunningUtils;
import com.gh.common.util.SPUtils;
import com.gh.common.util.ShareUtils;
@ -55,28 +70,32 @@ import org.json.JSONObject;
import java.lang.ref.WeakReference;
import java.util.List;
import butterknife.ButterKnife;
import kotlin.Pair;
import pub.devrel.easypermissions.EasyPermissions;
import static com.gh.common.util.EntranceUtils.KEY_ENTRANCE;
/**
* 只提供基础的服务(EventBus/ButterKnife/Share/GlobalDialog/Permissions)
* 只提供基础的服务(EventBus/Share/GlobalDialog/Permissions)
* <p>
* 需要工具栏的页面请继承{@link ToolBarActivity}
*/
public abstract class BaseActivity extends BaseAppCompatActivity implements EasyPermissions.PermissionCallbacks {
public abstract class BaseActivity extends BaseAppCompatActivity implements EasyPermissions.PermissionCallbacks, IBusiness {
// global dialog key
public final static String DOWNLOAD_HIJACK = "hijack";
public final static String LOGIN_EXCEPTION = "loginException";
public final static String PLUGGABLE = "plugin";
public final static String SIGNATURE_CONFLICT = "signature_conflict";
public final static int ID_ROOT_INDICATOR = 999;
public final static int ID_NIGHT_INDICATOR = 998;
public final int MAX_BUNDLE_SIZE = 300;
@NonNull
protected String mEntrance;
private boolean mIsExistLogoutDialog;
protected boolean mNightMode;
public long startPageTime = 0;
protected final Handler mBaseHandler = new BaseHandler(this);
@ -115,9 +134,13 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
@Override
protected void onCreate(Bundle savedInstanceState) {
if (PackageFlavorHelper.IS_TEST_FLAVOR && isAutoResetViewBackgroundEnabled()) {
LayoutInflaterCompat.setFactory2(getLayoutInflater(), new CustomLayoutInflaterFactory(this));
}
super.onCreate(savedInstanceState);
if (useEventBus()) EventBus.getDefault().register(this);
if (useButterKnife()) ButterKnife.bind(this);
mEntrance = getIntent().getStringExtra(KEY_ENTRANCE);
if (TextUtils.isEmpty(mEntrance)) {
mEntrance = Constants.ENTRANCE_UNKNOWN;
@ -127,28 +150,46 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
Utils.log("ACTIVITY_ENTRANCE -> " + mEntrance);
}
disableAutofill();
if (savedInstanceState != null) {
String xapkUnzipActivity = SPUtils.getString(Constants.SP_XAPK_UNZIP_ACTIVITY);
String xapkUrl = SPUtils.getString(Constants.SP_XAPK_URL);
Utils.log("页面重建了--" + xapkUnzipActivity + "--" + xapkUrl);
if (this.getClass().getName().equals(SplashScreenActivity.class.getName())) {
if (this.getClass().isAssignableFrom(SplashScreenActivity.class)) {
SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "");
SPUtils.setString(Constants.SP_XAPK_URL, "");
return;
}
if (this.getClass().getName().equals(xapkUnzipActivity) && !TextUtils.isEmpty(xapkUrl)) {
DownloadEntity downloadEntity = DownloadManager.getInstance(this).getDownloadEntityByUrl(xapkUrl);
PackageInstaller.install(this, downloadEntity, false);
SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "");
SPUtils.setString(Constants.SP_XAPK_URL, "");
DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntityByUrl(xapkUrl);
if (downloadEntity != null) {
PackageInstaller.install(this, downloadEntity, false);
SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "");
SPUtils.setString(Constants.SP_XAPK_URL, "");
}
}
}
mNightMode = NightModeUtils.INSTANCE.isNightMode(this);
}
@Override
protected void onResume() {
super.onResume();
startPageTime = System.currentTimeMillis();
if (BuildConfig.IS_NIGHT_MODE_ON
&& !NightModeUtils.INSTANCE.getSystemMode()
&& mNightMode != NightModeUtils.INSTANCE.isNightMode(this)) {
onNightModeChange();
}
}
@SuppressWarnings("ConstantConditions")
@Override
public void setContentView(View view) {
if (BuildConfig.DEBUG || BuildConfig.BUILD_TIME != 0) {
if (!(this instanceof SplashScreenActivity) && PackageFlavorHelper.IS_TEST_FLAVOR) {
view = getRootViewWithEnvIndicator(view);
}
super.setContentView(view);
@ -188,6 +229,15 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
}
}
/**
* 关闭 editText 自动填充帐号 (我们也用不上),开启的时候有小概率出发 TimeoutException
*/
private void disableAutofill() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
getWindow().getDecorView().setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
}
}
private View getRootViewWithEnvIndicator(View view) {
RelativeLayout screenRootView = new RelativeLayout(this);
screenRootView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
@ -196,9 +246,9 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
TextView tv = new TextView(this);
String envText = "正式环境";
tv.setBackground(ContextCompat.getDrawable(this, R.color.theme));
if (BuildConfig.FLAVOR.equals("internal")) {
if (EnvHelper.isDevEnv()) {
envText = "测试环境";
tv.setBackground(ContextCompat.getDrawable(this, R.color.red));
tv.setBackground(ContextCompat.getDrawable(this, R.color.theme_red));
}
tv.setText(envText);
tv.setGravity(Gravity.CENTER);
@ -206,6 +256,7 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
tv.measure(0, 0);
tv.setAlpha(0.15F);
tv.setId(ID_ROOT_INDICATOR);
int height = tv.getMeasuredHeight();
int width = tv.getMeasuredWidth();
tv.setPadding(DisplayUtils.dip2px(20), 0, DisplayUtils.dip2px(20), 0);
@ -223,6 +274,9 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
screenRootView.addView(view);
screenRootView.addView(ll);
if (BuildConfig.IS_NIGHT_MODE_ON) {
screenRootView.addView(getNightModeIndicatorView());
}
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) ll.getLayoutParams();
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
@ -230,6 +284,80 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
return screenRootView;
}
private View getNightModeIndicatorView() {
LinearLayout ll = new LinearLayout(this);
TextView tv = new TextView(this);
String envText = NightModeUtils.INSTANCE.isNightMode(this) ? "夜间模式" : "日间模式";
tv.setBackground(ContextCompat.getDrawable(this, R.color.theme));
tv.setText(envText);
tv.setGravity(Gravity.CENTER);
tv.setTextColor(Color.WHITE);
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
tv.measure(0, 0);
tv.setAlpha(NightModeUtils.INSTANCE.isNightMode(this) ? 0.8F : 0.15F);
tv.setId(ID_NIGHT_INDICATOR);
int height = tv.getMeasuredHeight();
int width = tv.getMeasuredWidth();
tv.setPadding(DisplayUtils.dip2px(20), 0, DisplayUtils.dip2px(20), 0);
ll.setTranslationX(DisplayUtils.dip2px(-20));
ll.setRotation(-45);
ll.addView(tv);
ll.setPadding(0, (width - height) / 2, 0, (width - height) / 2);
if (PackageFlavorHelper.IS_TEST_FLAVOR) {
tv.setOnClickListener(v -> {
//切换深色模式
String mode;
String positive;
String negative;
if (NightModeUtils.INSTANCE.getSystemMode()) {
mode = "跟随系统模式";
positive = "普通模式";
negative = "深色模式";
} else if (NightModeUtils.INSTANCE.getNightMode()) {
mode = "深色模式";
positive = "跟随系统模式";
negative = "普通模式";
} else {
mode = "普通模式";
positive = "跟随系统模式";
negative = "深色模式";
}
DialogHelper.showCenterDialog(this, "选择模式", "当前为 " + mode, positive, negative, () -> {
if (NightModeUtils.INSTANCE.getSystemMode()) {
NightModeUtils.INSTANCE.setNightMode(false);
NightModeUtils.INSTANCE.setSystemMode(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
} else {
NightModeUtils.INSTANCE.setSystemMode(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
}
}
NightModeUtils.INSTANCE.initNightMode();
}, () -> {
if (NightModeUtils.INSTANCE.getSystemMode()) {
NightModeUtils.INSTANCE.setNightMode(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
} else {
boolean nightMode = NightModeUtils.INSTANCE.getNightMode();
NightModeUtils.INSTANCE.setNightMode(!NightModeUtils.INSTANCE.getNightMode());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getDelegate().setLocalNightMode(nightMode ? AppCompatDelegate.MODE_NIGHT_NO : AppCompatDelegate.MODE_NIGHT_YES);
}
}
NightModeUtils.INSTANCE.setSystemMode(false);
NightModeUtils.INSTANCE.initNightMode();
});
});
}
return ll;
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(final EBShowDialog showDialog) {
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)
@ -237,12 +365,18 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
if (DOWNLOAD_HIJACK.equals(showDialog.getType())) {
DialogUtils.showQqSessionDialog(this);// 建议用户联系客服
} else if (PLUGGABLE.equals(showDialog.getType())) {
DialogUtils.showPluginDialog(this, () -> {
DialogHelper.showPluginDialog(this, () -> {
if (FileUtils.isEmptyFile(showDialog.getPath())) {
toast(R.string.install_failure_hint);
} else {
PackageInstaller.uninstall(BaseActivity.this, showDialog.getPath());
}
return null;
});
} else if (SIGNATURE_CONFLICT.equals(showDialog.getType())) {
DialogHelper.showSignatureConflictDialog(this, () -> {
PackageInstaller.uninstall(BaseActivity.this, showDialog.getPath());
return null;
});
} else if (LOGIN_EXCEPTION.equals(showDialog.getType())) {
if (mIsExistLogoutDialog) return;
@ -251,12 +385,19 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
JSONObject object = new JSONObject(showDialog.getPath());
JSONObject device = object.getJSONObject("device");
String model = device.getString("model");
DialogUtils.showAlertDialog(this, "你的账号已在另外一台设备登录"
DialogHelper.showCenterDialog(this, "你的账号已在另外一台设备登录"
, StringUtils.buildString("", model, "")
, "知道了", "重新登录"
, null
, () -> startActivity(LoginActivity.getIntent(BaseActivity.this,
"你的账号已在另外一台设备登录多设备-重新登录"))
, () -> {
}
, () -> {
if (SPUtils.getBoolean(Constants.SP_HAS_GET_PHONE_INFO) || NetworkUtils.isOpenMobileData(BaseActivity.this)) {
QuickLoginHelper.startLogin(BaseActivity.this, "你的账号已在另外一台设备登录多设备-重新登录");
} else {
startActivity(LoginActivity.getIntent(BaseActivity.this,
"你的账号已在另外一台设备登录多设备-重新登录"));
}
}
);
mBaseHandler.postDelayed(() -> mIsExistLogoutDialog = false, 5000);
} catch (Exception e) {
@ -269,6 +410,7 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
@Override
protected void onPause() {
super.onPause();
if (isFinishing()) {
onFinish();
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
@ -279,11 +421,6 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
}
}
@Override
protected void onResume() {
super.onResume();
}
/**
* 此回调可用于确认当前 activity 已经执行了 finish() 方法并处于 isFinishing 状态
*/
@ -345,10 +482,6 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
return true;
}
protected boolean useButterKnife() {
return true;
}
@Override
public Resources getResources() {
Resources resources = super.getResources();
@ -359,4 +492,138 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
}
return resources;
}
/**
* ActivityThread每次调用onSaveInstanceState时outState大小都会累加最终会导致{@link TransactionTooLargeException}异常
* 解决方案判断每次获取到的outState大小当达到300k时手动clear掉
*/
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if (preventRecreateFragmentByFragmentManager()) {
outState = discardFragmentFromSaveInstanceState(outState);
}
long bundleSize = getBundleSize(outState);
if (bundleSize > MAX_BUNDLE_SIZE * 1024) {
outState.clear();
}
}
/**
* 是否停用 Activity 重建时 FragmentManager 根据 saveState 自动重建保存的 Fragment 的功能
*/
protected boolean preventRecreateFragmentByFragmentManager() {
return false;
}
private Bundle discardFragmentFromSaveInstanceState(Bundle outState) {
if (outState != null) {
outState.remove("android:support:fragments");
}
return outState;
}
private long getBundleSize(Bundle bundle) {
long dataSize;
Parcel obtain = Parcel.obtain();
try {
obtain.writeBundle(bundle);
dataSize = obtain.dataSize();
} finally {
obtain.recycle();
}
return dataSize;
}
@Override
public Pair<String, String> getBusinessId() {
return null;
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
onNightModeChange();
}
protected void onNightModeChange() {
if (BuildConfig.IS_NIGHT_MODE_ON) {
mNightMode = NightModeUtils.INSTANCE.isNightMode(this);
TextView tv = findViewById(ID_NIGHT_INDICATOR);
if (tv != null) {
tv.setText(NightModeUtils.INSTANCE.isNightMode(this) ? "夜间模式" : "日间模式");
tv.setAlpha(NightModeUtils.INSTANCE.isNightMode(this) ? 0.8F : 0.15F);
}
if (isAutoResetViewBackgroundEnabled()) {
updateStaticViewBackground(getWindow().getDecorView());
}
}
}
protected boolean isAutoResetViewBackgroundEnabled() {
return false;
}
/**
* 自动重置部分 view 的背景颜色/资源
*
* @param view 父 view
*/
private void updateStaticViewBackground(View view) {
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View child = ((ViewGroup) view).getChildAt(i);
updateStaticViewBackground(child);
}
}
String backgroundString = (String) view.getTag(CustomLayoutInflaterFactory.TAG_BACKGROUND_ID);
String textColorString = (String) view.getTag(CustomLayoutInflaterFactory.TAG_TEXT_COLOR_ID);
if (backgroundString != null) {
if (backgroundString.startsWith("#")) return;
int backgroundId = Integer.parseInt(
backgroundString
.replace("@", "")
.replace("?", "")
);
if (backgroundId != 0) {
try {
TypedValue value = new TypedValue();
getResources().getValue(backgroundId, value, true);
if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
view.setBackgroundColor(ExtensionsKt.toColor(backgroundId, this));
} else {
view.setBackground(ExtensionsKt.toDrawable(backgroundId, this));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
if (textColorString != null && view instanceof TextView) {
if (textColorString.startsWith("#")) return;
int textColorId = Integer.parseInt(
textColorString
.replace("@", "")
.replace("?", "")
);
if (textColorId != 0) {
try {
final ColorStateList colorStateList = ContextCompat.getColorStateList(this, textColorId);
((TextView) view).setTextColor(colorStateList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

View File

@ -15,9 +15,9 @@ import java.util.ArrayList;
import java.util.List;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import butterknife.BindView;
/**
* Created by khy on 15/03/18.
@ -27,12 +27,10 @@ public abstract class BaseActivity_TabLayout extends ToolBarActivity implements
public static final String PAGE_INDEX = "PAGE_INDEX";
@BindView(R.id.activity_tab_layout)
protected TabLayout mTabLayout;
@BindView(R.id.activity_view_pager)
protected NoScrollableViewPager mViewPager;
@BindView(R.id.activity_tab_indicator)
protected TabIndicatorView mTabIndicatorView;
protected View mDividerLineView;
protected List<Fragment> mFragmentsList;
@ -71,6 +69,12 @@ public abstract class BaseActivity_TabLayout extends ToolBarActivity implements
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTabLayout = findViewById(R.id.activity_tab_layout);
mViewPager = findViewById(R.id.activity_view_pager);
mTabIndicatorView = findViewById(R.id.activity_tab_indicator);
mDividerLineView = findViewById(R.id.dividerLine);
if (getIntent() != null) mCheckedIndex = getIntent().getIntExtra(PAGE_INDEX, 0);
mTabTitleList = new ArrayList<>();
initTabTitleList(mTabTitleList);
@ -95,7 +99,7 @@ public abstract class BaseActivity_TabLayout extends ToolBarActivity implements
String tabTitle = tab.getText() != null ? tab.getText().toString() : "";
View tabView = provideTabView(i, tabTitle);
if (tabView == null)
tabView = BaseFragment_TabLayout.createDefaultTabCustomView(tabTitle);
tabView = BaseFragment_TabLayout.createDefaultTabCustomView(this, tabTitle);
tab.setCustomView(tabView);
}
@ -130,4 +134,22 @@ public abstract class BaseActivity_TabLayout extends ToolBarActivity implements
public void onPageScrollStateChanged(int state) {
}
@Override
protected void onNightModeChange() {
super.onNightModeChange();
View container = findViewById(R.id.activity_tab_container);
if (container != null) {
container.setBackgroundColor(ContextCompat.getColor(this, R.color.background_white));
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
TabLayout.Tab tab = mTabLayout.getTabAt(i);
if (tab != null) {
BaseFragment_TabLayout.updateTabStyle(tab, tab.isSelected());
}
}
}
if (mDividerLineView != null) {
mDividerLineView.setBackgroundColor(ContextCompat.getColor(this, R.color.divider));
}
}
}

View File

@ -3,8 +3,6 @@ package com.gh.base;
import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
import butterknife.ButterKnife;
/**
* 目前仅提供butterknife bind方法
*
@ -20,7 +18,6 @@ public abstract class BaseRecyclerViewHolder<T> extends RecyclerView.ViewHolder
public BaseRecyclerViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
/**

View File

@ -1,5 +1,6 @@
package com.gh.base
import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.app.Activity
import android.content.ClipboardManager
@ -9,213 +10,580 @@ import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.webkit.JavascriptInterface
import android.widget.CheckBox
import android.widget.FrameLayout
import android.widget.TextView
import butterknife.OnClick
import com.gh.common.util.DialogUtils
import com.gh.common.util.MtaHelper
import androidx.lifecycle.Observer
import com.gh.common.AppExecutor
import com.gh.common.runOnIoThread
import com.gh.common.util.*
import com.gh.common.view.RichEditor
import com.gh.gamecenter.CropImageActivity
import com.gh.gamecenter.R
import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.entity.MyVideoEntity
import com.gh.gamecenter.qa.answer.edit.AnswerEditActivity
import com.gh.gamecenter.qa.editor.GameActivity
import com.gh.gamecenter.qa.editor.InsertAnswerWrapperActivity
import com.gh.gamecenter.qa.editor.InsertArticleWrapperActivity
import com.gh.gamecenter.qa.editor.VideoActivity
import com.gh.gamecenter.entity.*
import com.gh.gamecenter.qa.editor.*
import com.gh.gamecenter.qa.entity.AnswerEntity
import com.gh.gamecenter.qa.entity.ArticleEntity
import com.gh.gamecenter.qa.entity.EditorInsertEntity
import com.gh.gamecenter.video.poster.PosterEditActivity
import com.gh.gamecenter.video.upload.UploadManager
import com.google.gson.JsonObject
import com.halo.assistant.HaloApp
import com.lightgame.utils.Util_System_Keyboard
import com.lightgame.utils.Utils
import com.lightgame.view.CheckableImageView
import kotterknife.bindView
import io.reactivex.disposables.Disposable
import org.json.JSONArray
import org.json.JSONObject
import java.io.File
abstract class BaseRichEditorActivity : ToolBarActivity() {
abstract class BaseRichEditorActivity<VM : BaseRichEditorViewModel> : ToolBarActivity(),
KeyboardHeightObserver, UploadVideoListener {
val mRichEditor by bindView<RichEditor>(R.id.rich_editor)
val mDraftBtn by bindView<TextView>(R.id.draft_btn)
lateinit var mRichEditor: RichEditor
private val mEditorTextNumTv by bindView<TextView>(R.id.editorTextNumTv)
private val mEditorFont by bindView<CheckableImageView>(R.id.editor_font)
private val mEditorLink by bindView<CheckableImageView>(R.id.editor_link)
private val mEditorParagraph by bindView<CheckableImageView>(R.id.editor_paragraph)
private val mEditorFontBold by bindView<CheckableImageView>(R.id.editor_font_bold)
private val mEditorFontItalic by bindView<CheckableImageView>(R.id.editor_font_italic)
private val mEditorFontStrikeThrough by bindView<CheckableImageView>(R.id.editor_font_strikethrough)
private val mEditorParagraphH1 by bindView<CheckableImageView>(R.id.editor_paragraph_h1)
private val mEditorParagraphH2 by bindView<CheckableImageView>(R.id.editor_paragraph_h2)
private val mEditorParagraphH3 by bindView<CheckableImageView>(R.id.editor_paragraph_h3)
private val mEditorParagraphH4 by bindView<CheckableImageView>(R.id.editor_paragraph_h4)
private val mEditorParagraphQuote by bindView<CheckableImageView>(R.id.editor_paragraph_quote)
private val mEditorFontContainer by bindView<View>(R.id.editor_font_container)
private val mEditorParagraphContainer by bindView<View>(R.id.editor_paragraph_container)
private val mEditorLinkContainer by bindView<View>(R.id.editor_link_container)
private val mEditorInsertDetail by bindView<View>(R.id.editor_insert_detail)
private lateinit var mEditorTextNumTv: TextView
private lateinit var mEditorFont: CheckableImageView
private lateinit var mEditorLink: CheckableImageView
private lateinit var mEditorFontBold: CheckableImageView
private lateinit var mEditorFontItalic: CheckableImageView
private lateinit var mEditorFontStrikeThrough: CheckableImageView
private lateinit var mEditorFontUnderline: CheckableImageView
private lateinit var mEditorParagraphH1: CheckableImageView
private lateinit var mEditorParagraphH2: CheckableImageView
private lateinit var mEditorParagraphH3: CheckableImageView
private lateinit var mEditorParagraphH4: CheckableImageView
private lateinit var mEditorParagraphQuote: CheckableImageView
private lateinit var mEditorFontContainer: View
private lateinit var mEditorParagraphContainer: View
private lateinit var mEditorLinkContainer: View
private lateinit var mEditorInsertDetailContainer: View
private lateinit var mTagsContainer: FrameLayout
private lateinit var mUploadVideoGuideContainer: View
protected lateinit var mOriginalCb: CheckBox
private lateinit var mOriginalTipsContainer: View
private lateinit var mOriginalTipsClose: TextView
private var mCurrentParagraphStyle = ""
private var mIsExtendedKeyboardShow = false
private var mAgreePostPic: Boolean = false
private var mGuideDisposable: Disposable? = null
protected lateinit var mViewModel: VM
protected var mIsKeyBoardShow = false
private var mKeyboardHeightProvider: KeyboardHeightProvider? = null
private var mMaxUploadVideoGuideCount = 2
val FILE_HOST = "file:///"
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
DialogUtils.fixWebViewKeyboardNotWorking(this)
if (resultCode != Activity.RESULT_OK) return
var insertData: EditorInsertEntity? = null
val insertData: EditorInsertEntity?
when (requestCode) {
INSERT_ANSWER_CODE -> {
val answer = data?.getParcelableExtra<AnswerEntity>(AnswerEntity::class.java.simpleName)
if (answer != null) insertData = EditorInsertEntity.transform(answer)
val answer =
data?.getParcelableExtra<AnswerEntity>(AnswerEntity::class.java.simpleName)
if (answer != null) {
mRichEditor.focusEditor()
insertData = EditorInsertEntity.transform(answer)
mRichEditor.insertCustomStyleLink(insertData)
}
}
INSERT_ARTICLE_CODE -> {
val article = data?.getParcelableExtra<ArticleEntity>(ArticleEntity::class.java.simpleName)
if (article != null) insertData = EditorInsertEntity.transform(article)
val article =
data?.getParcelableExtra<ArticleEntity>(ArticleEntity::class.java.simpleName)
if (article != null) {
mRichEditor.focusEditor()
insertData = EditorInsertEntity.transform(article)
mRichEditor.insertCustomStyleLink(insertData)
}
}
INSERT_GAME_CODE -> {
val game = data?.getParcelableExtra<GameEntity>(GameEntity::class.java.simpleName)
if (game != null) insertData = EditorInsertEntity.transform(game)
if (game != null) {
mRichEditor.focusEditor()
insertData = EditorInsertEntity.transform(game)
mRichEditor.insertCustomStyleLink(insertData)
}
}
VideoActivity.INSERT_VIDEO_CODE -> {
val video = data?.getParcelableExtra<MyVideoEntity>(MyVideoEntity::class.java.simpleName)
if (video != null) mRichEditor.insertCustomVideo(video)
return
INSERT_GAME_COLLECTION_CODE -> {
val gameCollectionEntity = data?.getParcelableExtra<GamesCollectionEntity>(GamesCollectionEntity::class.java.simpleName)
if (gameCollectionEntity != null) {
mRichEditor.focusEditor()
insertData = EditorInsertEntity.transform(gameCollectionEntity)
mRichEditor.insertCustomStyleLink(insertData)
}
}
REQUEST_CODE_IMAGE -> {
if (data != null) mViewModel.uploadPic(data)
}
INSERT_MEDIA_VIDEO_CODE -> {
val localVideoList = data?.getParcelableArrayListExtra<LocalVideoEntity>(LocalVideoEntity::class.java.name) ?: arrayListOf()
if (localVideoList.isNotEmpty()) {
mRichEditor.focusEditor()
uploadVideo(localVideoList)
}
}
REQUEST_CODE_IMAGE_CROP -> {
val imagePath = data?.getStringExtra(CropImageActivity.RESULT_CLIP_PATH)
if (!imagePath.isNullOrEmpty()) {
mViewModel.uploadPoster(imagePath)
}
}
INSERT_VIDEO_CODE -> {
val videoEntity = data?.getParcelableExtra<MyVideoEntity>(MyVideoEntity::class.java.simpleName)
if (videoEntity != null) {
mRichEditor.focusEditor()
insertData = EditorInsertEntity.transform(videoEntity)
mRichEditor.insertCustomStyleLink(insertData)
}
}
}
mRichEditor.insertCustomStyleLink(insertData)
closeExtendedKeyboard()
AppExecutor.uiExecutor.executeWithDelay(Runnable {
Util_System_Keyboard.showSoftKeyboard(this)
}, 100)
}
@SuppressLint("AddJavascriptInterface")
private fun uploadVideo(localVideoList: ArrayList<LocalVideoEntity>) {
mViewModel.localVideoList.addAll(localVideoList)
runOnIoThread {
localVideoList.forEach {
if (it.poster.startsWith("http")) {
runOnUiThread {
mRichEditor.focusEditor()
mRichEditor.insertPlaceholderVideo(it.id, it.poster)
}
} else {
val videoThumbnail = BitmapUtils.getVideoThumbnail(it.filePath)
val filePath = "${cacheDir.absolutePath}${File.separator}${it.id}.webp"
BitmapUtils.saveBitmap(videoThumbnail, filePath)
it.poster = filePath
runOnUiThread {
mRichEditor.focusEditor()
mRichEditor.insertPlaceholderVideo(it.id, "$FILE_HOST${it.poster}")
}
}
}
mViewModel.uploadVideo()
}
}
private fun findView() {
mRichEditor = findViewById(R.id.rich_editor)
mEditorTextNumTv = findViewById(R.id.editorTextNumTv)
mEditorFont = findViewById(R.id.editor_font)
mEditorLink = findViewById(R.id.editor_link)
mEditorFontBold = findViewById(R.id.editor_font_bold)
mEditorFontItalic = findViewById(R.id.editor_font_italic)
mEditorFontStrikeThrough = findViewById(R.id.editor_font_strikethrough)
mEditorFontUnderline = findViewById(R.id.editor_font_underline)
mEditorParagraphH1 = findViewById(R.id.editor_paragraph_h1)
mEditorParagraphH2 = findViewById(R.id.editor_paragraph_h2)
mEditorParagraphH3 = findViewById(R.id.editor_paragraph_h3)
mEditorParagraphH4 = findViewById(R.id.editor_paragraph_h4)
mEditorParagraphQuote = findViewById(R.id.editor_paragraph_quote)
mEditorFontContainer = findViewById(R.id.editor_font_container)
mEditorParagraphContainer = findViewById(R.id.editor_paragraph_container)
mEditorLinkContainer = findViewById(R.id.editor_link_container)
mEditorInsertDetailContainer = findViewById(R.id.editor_insert_detail_container)
mTagsContainer = findViewById(R.id.tagsContainer)
mUploadVideoGuideContainer = findViewById(R.id.uploadVideoGuideContainer)
mOriginalCb = findViewById(R.id.originalCb)
mOriginalTipsContainer = findViewById(R.id.originalTipsContainer)
mOriginalTipsClose = findViewById(R.id.originalTipsClose)
}
@SuppressLint("AddJavascriptInterface", "ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mRichEditor.setPadding(20, 15, 20, 15)
findView()
onRichClick()
mViewModel = provideViewModel()
mViewModel.setUploadVideoListener(this)
mKeyboardHeightProvider = KeyboardHeightProvider(this)
mRichEditor.post { mKeyboardHeightProvider?.start() }
// 防止个别手机在Js里无法获取粘贴内容
mRichEditor.addJavascriptInterface(OnPasteListener(), "onPasteListener")
mRichEditor.addJavascriptInterface(OnCursorChangeListener(), "OnCursorChangeListener")
mRichEditor.addJavascriptInterface(OnEditorTextChangeListener(), "OnEditorTextChangeListener")
mRichEditor.addJavascriptInterface(
OnEditorTextChangeListener(),
"OnEditorTextChangeListener"
)
mRichEditor.addJavascriptInterface(OnVideoListener(), "onVideoListener")
mRichEditor.addJavascriptInterface(
OnQuoteCountChangeListener(),
"OnQuoteCountChangeListener"
)
mRichEditor.setInputEnabled(true)
mRichEditor.setPadding(16, 12, 16, 12)
mDraftBtn.text = if (this is AnswerEditActivity) {
"回答草稿"
} else "帖子草稿"
mRichEditor.setOnTouchListener { _, _ ->
if (mIsExtendedKeyboardShow) {
closeExtendedKeyboard()
Util_System_Keyboard.showSoftKeyboard(this)
//是否消费事件根据mRichEditor是否含有焦点决定mRichEditor没有焦点则不消费事件
mRichEditor.hasFocus()
} else false
}
mOriginalCb.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
mOriginalTipsContainer.alpha = 0f
mOriginalTipsContainer.visibility = View.VISIBLE
ObjectAnimator.ofFloat(mOriginalTipsContainer, "alpha", 0f, 1f).setDuration(200).start()
}
}
observeData()
}
@OnClick(R.id.editor_image, R.id.editor_font, R.id.editor_link, R.id.editor_paragraph,
R.id.editor_font_bold, R.id.editor_font_italic, R.id.editor_font_strikethrough,
R.id.editor_paragraph_h1, R.id.editor_paragraph_h2, R.id.editor_paragraph_h3,
R.id.editor_paragraph_h4, R.id.editor_font_container, R.id.editor_paragraph_container,
R.id.editor_paragraph_quote, R.id.editor_link_answer, R.id.editor_link_article,
R.id.editor_link_game, R.id.editor_link_video)
fun onRichClick(view: View) {
when (view.id) {
R.id.editor_font -> {
mEditorFont.isChecked = !mEditorFont.isChecked
mEditorParagraph.isChecked = false
mEditorLink.isChecked = false
mEditorFontContainer.visibility = if (mEditorFont.isChecked) View.VISIBLE else View.GONE
mEditorParagraphContainer.visibility = if (!mEditorFont.isChecked) View.VISIBLE else View.GONE
mEditorLinkContainer.visibility = if (!mEditorFont.isChecked) View.VISIBLE else View.GONE
mEditorInsertDetail.visibility = mEditorFontContainer.visibility
private fun observeData() {
mViewModel.chooseImagesUpload.observe(this, Observer {
mRichEditor.focusEditor()
for (key in it.keys) {
mRichEditor.insertPlaceholderImage(key)
}
R.id.editor_paragraph -> {
mEditorParagraph.isChecked = !mEditorParagraph.isChecked
mEditorFont.isChecked = false
mEditorLink.isChecked = false
mEditorParagraphContainer.visibility = if (mEditorParagraph.isChecked) View.VISIBLE else View.GONE
mEditorFontContainer.visibility = if (!mEditorParagraph.isChecked) View.VISIBLE else View.GONE
mEditorLinkContainer.visibility = if (!mEditorParagraph.isChecked) View.VISIBLE else View.GONE
mEditorInsertDetail.visibility = mEditorParagraphContainer.visibility
})
mViewModel.chooseImagesUploadSuccess.observe(this, Observer {
val jsonArray = JSONArray()
for (key in it.keys) {
val jsonObject = JSONObject()
jsonObject.put("id", key)
jsonObject.put("url", it[key])
jsonArray.put(jsonObject)
}
R.id.editor_link -> {
mEditorLink.isChecked = !mEditorLink.isChecked
mEditorFont.isChecked = false
mEditorParagraph.isChecked = false
mEditorLinkContainer.visibility = if (mEditorLink.isChecked) View.VISIBLE else View.GONE
mEditorParagraphContainer.visibility = if (!mEditorLink.isChecked) View.VISIBLE else View.GONE
mEditorFontContainer.visibility = if (!mEditorLink.isChecked) View.VISIBLE else View.GONE
mEditorInsertDetail.visibility = mEditorLinkContainer.visibility
}
R.id.editor_font_bold -> {
mEditorFontBold.isChecked = !mEditorFontBold.isChecked
mRichEditor.setBold()
if (mEditorFontBold.isChecked) {
MtaHelper.onEvent(mtaEventName(), "文字样式", "文字样式-加粗")
}
}
R.id.editor_font_italic -> {
mEditorFontItalic.isChecked = !mEditorFontItalic.isChecked
mRichEditor.setItalic()
if (mEditorFontItalic.isChecked) {
MtaHelper.onEvent(mtaEventName(), "文字样式", "文字样式-斜体")
}
}
R.id.editor_font_strikethrough -> {
mEditorFontStrikeThrough.isChecked = !mEditorFontStrikeThrough.isChecked
mRichEditor.setStrikeThrough()
mRichEditor.replacePlaceholderImage(jsonArray.toString())
})
}
if (mEditorFontStrikeThrough.isChecked) {
MtaHelper.onEvent(mtaEventName(), "文字样式", "文字样式-删除线")
override fun onKeyboardHeightChanged(height: Int, orientation: Int) {
mIsKeyBoardShow = height > 0
if (height > 0) {
closeExtendedKeyboard()
}
}
fun closeExtendedKeyboard() {
mEditorInsertDetailContainer.visibility = View.GONE
mEditorFont.isChecked = false
mEditorLink.isChecked = false
mIsExtendedKeyboardShow = false
}
protected fun controlEditorInsertContainerEnabled(isEnabled: Boolean) {
mEditorFont.isEnabled = isEnabled
}
private fun onRichClick() {
mEditorFont.setOnClickListener {
controlEditorFontContainer()
}
mEditorLink.setOnClickListener {
controlEditorLinkContainer()
}
mEditorFontBold.setOnClickListener {
mEditorFontBold.isChecked = !mEditorFontBold.isChecked
mRichEditor.setBold()
if (mEditorFontBold.isChecked) {
MtaHelper.onEvent(mtaEventName(), "文字样式", "文字样式-加粗")
}
}
mEditorFontItalic.setOnClickListener {
mEditorFontItalic.isChecked = !mEditorFontItalic.isChecked
mRichEditor.setItalic()
if (mEditorFontItalic.isChecked) {
MtaHelper.onEvent(mtaEventName(), "文字样式", "文字样式-斜体")
}
}
mEditorFontStrikeThrough.setOnClickListener {
mEditorFontStrikeThrough.isChecked = !mEditorFontStrikeThrough.isChecked
mRichEditor.setStrikeThrough()
if (mEditorFontStrikeThrough.isChecked) {
MtaHelper.onEvent(mtaEventName(), "文字样式", "文字样式-删除线")
}
}
mEditorFontUnderline.setOnClickListener {
mEditorFontUnderline.isChecked = !mEditorFontUnderline.isChecked
mRichEditor.setUnderline()
if (mEditorFontUnderline.isChecked) {
MtaHelper.onEvent(mtaEventName(), "文字样式", "文字样式-下滑线")
}
}
mEditorParagraphH1.setOnClickListener {
if (mEditorParagraphH1.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-1级标题")
mRichEditor.setHeading(1)
}
mEditorParagraphH1.isChecked = !mEditorParagraphH1.isChecked
}
mEditorParagraphH2.setOnClickListener {
if (mEditorParagraphH2.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-2级标题")
mRichEditor.setHeading(2)
}
mEditorParagraphH2.isChecked = !mEditorParagraphH2.isChecked
}
mEditorParagraphH3.setOnClickListener {
if (mEditorParagraphH3.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-3级标题")
mRichEditor.setHeading(3)
}
mEditorParagraphH3.isChecked = !mEditorParagraphH3.isChecked
}
mEditorParagraphH4.setOnClickListener {
if (mEditorParagraphH4.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-4级标题")
mRichEditor.setHeading(4)
}
mEditorParagraphH4.isChecked = !mEditorParagraphH4.isChecked
}
mEditorParagraphQuote.setOnClickListener {
if (mEditorParagraphQuote.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-引用")
mRichEditor.setBlockquote()
}
mEditorParagraphQuote.isChecked = !mEditorParagraphQuote.isChecked
}
findViewById<View>(R.id.editor_link_answer).setOnClickListener {
MtaHelper.onEvent(mtaEventName(), "插入链接", "插入链接-回答")
startActivityForResult(
InsertAnswerWrapperActivity.getIntent(this),
INSERT_ANSWER_CODE
)
}
findViewById<View>(R.id.editor_link_article).setOnClickListener {
MtaHelper.onEvent(mtaEventName(), "插入链接", "插入链接-文章")
startActivityForResult(
InsertArticleWrapperActivity.getIntent(this),
INSERT_ARTICLE_CODE
)
}
findViewById<View>(R.id.editor_link_game).setOnClickListener {
MtaHelper.onEvent(mtaEventName(), "插入链接", "插入链接-游戏")
startActivityForResult(
GameActivity.getIntent(this, GameActivity.INSERT_GAME_TITLE),
INSERT_GAME_CODE
)
}
findViewById<View>(R.id.editor_link_video).setOnClickListener {
startActivityForResult(
InsertVideoWrapperActivity.getIntent(this),
INSERT_VIDEO_CODE
)
}
findViewById<View>(R.id.editor_link_game_collection).setOnClickListener {
startActivityForResult(
InsertGameCollectionWrapperActivity.getIntent(this),
INSERT_GAME_COLLECTION_CODE
)
}
findViewById<View>(R.id.editor_video).setOnClickListener {
chooseVideo()
}
findViewById<View>(R.id.editor_image).setOnClickListener {
if (!mAgreePostPic && !NetworkUtils.isWifiOr4GOr3GConnected(this)) {
mAgreePostPic = true
DialogHelper.showDialog(
this,
"警告",
"当前使用移动网络,上传图片会消耗手机流量",
"我知道了", "", { chooseImage() },
extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true)
)
return@setOnClickListener
}
chooseImage()
NewLogUtils.logChooseMedia(
"view_media",
if (mtaEventName() == "提问帖") "提问帖" else "帖子",
"图片"
)
}
findViewById<View>(R.id.uploadVideoGuideClose).setOnClickListener {
hideUploadVideoGuide()
if (mGuideDisposable != null && !mGuideDisposable!!.isDisposed) {
mGuideDisposable!!.dispose()
mGuideDisposable = null
}
}
findViewById<View>(R.id.originalTipsClose).setOnClickListener {
val animator = ObjectAnimator.ofFloat(mOriginalTipsContainer, "alpha", 1f, 0f).setDuration(200)
animator.doOnEnd {
mOriginalTipsContainer.visibility = View.GONE
}
animator.start()
}
}
private fun chooseVideo() {
MtaHelper.onEvent(mtaEventName(), "插入链接", "插入链接-视频")
val videoCount = mViewModel.quoteCountEntity.videoCount
if (videoCount >= MAX_MEDIA_COUNT) {
toast(R.string.answer_edit_max_video_hint)
return
}
try {
PermissionHelper.checkStoragePermissionBeforeAction(this,
object : EmptyCallback {
override fun onCallback() {
val maxChooseCount = if (videoCount + 3 <= MAX_MEDIA_COUNT) 3 else MAX_MEDIA_COUNT - videoCount
startActivityForResult(
LocalMediaActivity.getIntent(
this@BaseRichEditorActivity,
LocalMediaActivity.ChooseType.VIDEO,
maxChooseCount,
if (mtaEventName() == "提问帖") "发提问帖" else "发帖子"
), INSERT_MEDIA_VIDEO_CODE
)
NewLogUtils.logChooseMedia(
"view_media",
if (mtaEventName() == "提问帖") "提问帖" else "帖子",
"视频"
)
}
})
} catch (e: Exception) {
toast(R.string.media_image_hint)
e.printStackTrace()
}
}
private fun chooseImage() {
MtaHelper.onEvent(mtaEventName(), "插入图片", "插入图片")
val imageCount = mViewModel.quoteCountEntity.imageCount
if (imageCount >= MAX_MEDIA_COUNT) {
toast(R.string.answer_edit_max_img_hint)
return
}
try {
PermissionHelper.checkStoragePermissionBeforeAction(this, object : EmptyCallback {
override fun onCallback() {
val maxChooseCount = if (imageCount + 10 <= MAX_MEDIA_COUNT) 10 else MAX_MEDIA_COUNT - imageCount
val intent = LocalMediaActivity.getIntent(
this@BaseRichEditorActivity,
LocalMediaActivity.ChooseType.IMAGE,
maxChooseCount,
if (mtaEventName() == "提问帖") "发提问帖" else "发帖子"
)
startActivityForResult(intent, REQUEST_CODE_IMAGE)
}
})
} catch (e: Exception) {
toast(R.string.media_image_hint)
e.printStackTrace()
}
}
private fun controlEditorFontContainer() {
mEditorFont.isChecked = !mEditorFont.isChecked
mEditorLink.isChecked = false
val isShouldDelay = if (mEditorFont.isChecked) {
Util_System_Keyboard.hideSoftKeyboard(this)
true
} else {
Util_System_Keyboard.showSoftKeyboard(this)
false
}
mEditorInsertDetailContainer.postDelayed({
mEditorInsertDetailContainer.visibility =
if (mEditorFont.isChecked) View.VISIBLE else View.GONE
mEditorFontContainer.visibility = if (mEditorFont.isChecked) View.VISIBLE else View.GONE
mEditorParagraphContainer.visibility =
if (mEditorFont.isChecked) View.VISIBLE else View.GONE
mEditorLinkContainer.visibility = View.GONE
mTagsContainer.visibility = View.GONE
mIsExtendedKeyboardShow = mEditorFont.isChecked
}, if (isShouldDelay) 200 else 0L)
}
private fun controlEditorLinkContainer() {
mEditorLink.isChecked = !mEditorLink.isChecked
mEditorFont.isChecked = false
val isShouldDelay = if (mEditorLink.isChecked) {
Util_System_Keyboard.hideSoftKeyboard(this)
true
} else {
Util_System_Keyboard.showSoftKeyboard(this)
false
}
mEditorInsertDetailContainer.postDelayed({
mEditorInsertDetailContainer.visibility =
if (mEditorLink.isChecked) View.VISIBLE else View.GONE
mEditorLinkContainer.visibility = if (mEditorLink.isChecked) View.VISIBLE else View.GONE
mEditorFontContainer.visibility = View.GONE
mEditorParagraphContainer.visibility = View.GONE
mTagsContainer.visibility = View.GONE
mIsExtendedKeyboardShow = mEditorLink.isChecked
}, if (isShouldDelay) 200 else 0L)
}
override fun handleBackPressed(): Boolean {
if (mIsExtendedKeyboardShow) {
closeExtendedKeyboard()
return true
}
return super.handleBackPressed()
}
override fun onResume() {
super.onResume()
mKeyboardHeightProvider?.setKeyboardHeightObserver(this)
}
override fun onPause() {
super.onPause()
mKeyboardHeightProvider?.setKeyboardHeightObserver(null)
}
//视频上传功能引导
fun showUploadVideoGuide() {
mUploadVideoGuideContainer.postDelayed({
val count = SPUtils.getInt(getVideoGuideKey(), 0)
if (count >= mMaxUploadVideoGuideCount) return@postDelayed
mUploadVideoGuideContainer.alpha = 0f
mUploadVideoGuideContainer.visibility = View.VISIBLE
mUploadVideoGuideContainer.animate().alpha(1f).setDuration(200).start()
mGuideDisposable = countDownTimer(3) { finish, _ ->
if (finish) {
hideUploadVideoGuide()
}
}
R.id.editor_paragraph_h1 -> {
if (mEditorParagraphH1.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-1级标题")
mRichEditor.setHeading(1)
}
mEditorParagraphH1.isChecked = !mEditorParagraphH1.isChecked
}
R.id.editor_paragraph_h2 -> {
if (mEditorParagraphH2.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-2级标题")
mRichEditor.setHeading(2)
}
mEditorParagraphH2.isChecked = !mEditorParagraphH2.isChecked
}
R.id.editor_paragraph_h3 -> {
if (mEditorParagraphH3.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-3级标题")
mRichEditor.setHeading(3)
}
mEditorParagraphH3.isChecked = !mEditorParagraphH3.isChecked
}
R.id.editor_paragraph_h4 -> {
if (mEditorParagraphH4.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-4级标题")
mRichEditor.setHeading(4)
}
mEditorParagraphH4.isChecked = !mEditorParagraphH4.isChecked
}
R.id.editor_paragraph_quote -> {
if (mEditorParagraphQuote.isChecked) {
mRichEditor.formatBlock()
} else {
MtaHelper.onEvent(mtaEventName(), "段落样式", "段落样式-引用")
mRichEditor.setBlockquote()
}
mEditorParagraphQuote.isChecked = !mEditorParagraphQuote.isChecked
}
R.id.editor_link_answer -> {
MtaHelper.onEvent(mtaEventName(), "插入链接", "插入链接-回答")
startActivityForResult(InsertAnswerWrapperActivity.getIntent(this), INSERT_ANSWER_CODE)
}
R.id.editor_link_article -> {
MtaHelper.onEvent(mtaEventName(), "插入链接", "插入链接-文章")
startActivityForResult(InsertArticleWrapperActivity.getIntent(this), INSERT_ARTICLE_CODE)
}
R.id.editor_link_game -> {
MtaHelper.onEvent(mtaEventName(), "插入链接", "插入链接-游戏")
startActivityForResult(GameActivity.getIntent(this, GameActivity.INSERT_GAME_TITLE), INSERT_GAME_CODE)
}
R.id.editor_link_video -> {
MtaHelper.onEvent(mtaEventName(), "插入链接", "插入链接-视频")
startActivityForResult(VideoActivity.getIntent(this), VideoActivity.INSERT_VIDEO_CODE)
}
SPUtils.setInt(getVideoGuideKey(), count + 1)
}, 1000)
}
fun hideUploadVideoGuide() {
val animate = mUploadVideoGuideContainer.animate().alpha(0f).setDuration(200)
animate.doOnEnd {
mUploadVideoGuideContainer.visibility = View.GONE
}
animate.start()
}
override fun onDestroy() {
super.onDestroy()
mKeyboardHeightProvider?.close()
val path = mViewModel.currentUploadingVideo?.filePath
if (path != null && UploadManager.isUploading(path)) {
UploadManager.cancelTask(path)
}
if (mGuideDisposable != null && !mGuideDisposable!!.isDisposed) {
mGuideDisposable!!.dispose()
mGuideDisposable = null
}
}
@ -237,6 +605,7 @@ abstract class BaseRichEditorActivity : ToolBarActivity() {
mEditorFontBold.isChecked = elements.contains(ELEMENT_NAME_BOLD)
mEditorFontItalic.isChecked = elements.contains(ELEMENT_NAME_ITALIC)
mEditorFontStrikeThrough.isChecked = elements.contains(ELEMENT_NAME_STRIKE)
mEditorFontUnderline.isChecked = elements.contains(ELEMENT_NAME_UNDERLINE)
mEditorParagraphH1.isChecked = elements.contains(ELEMENT_PARAGRAPH_H1)
mEditorParagraphH2.isChecked = elements.contains(ELEMENT_PARAGRAPH_H2)
mEditorParagraphH3.isChecked = elements.contains(ELEMENT_PARAGRAPH_H3)
@ -250,11 +619,12 @@ abstract class BaseRichEditorActivity : ToolBarActivity() {
@JavascriptInterface
fun onPaste() {
val clipboard =
HaloApp.getInstance().application.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
HaloApp.getInstance().application.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipText = clipboard.text.toString()
if (!TextUtils.isEmpty(clipText)) {
// 替换换行符号否则 插入失败
val text = clipText.replace("[ ]".toRegex(), "&nbsp;").replace("[\r\n]".toRegex(), "<br/>")
val text = clipText.replace("[ ]".toRegex(), "&nbsp;")
.replace("[\r\n]".toRegex(), "<br/>")
mBaseHandler.post { mRichEditor.insertHtml(text) }
}
}
@ -264,16 +634,112 @@ abstract class BaseRichEditorActivity : ToolBarActivity() {
@JavascriptInterface
fun onTextChange(count: Int) {
val num = if (count > MAX_INPUT_TEXT_NUM) MAX_INPUT_TEXT_NUM - count else count
mEditorTextNumTv.text = num.toString()
mEditorTextNumTv.post {
mEditorTextNumTv.text = num.toString()
mViewModel.quoteCountEntity.textCount = num
}
}
}
private inner class OnQuoteCountChangeListener {
@JavascriptInterface
fun onQuoteCountChange(
imageCount: Int,
articleCount: Int,
answerCount: Int,
videoCount: Int,
gameCount: Int
) {
mEditorTextNumTv.post {
mViewModel.quoteCountEntity.apply {
this.imageCount = imageCount
this.articleCount = articleCount
this.answerCount = answerCount
this.videoCount = videoCount
this.gameCount = gameCount
}
}
}
}
private inner class OnVideoListener {
@JavascriptInterface
fun showDeleteDialog(id: String) {
DialogHelper.showDialog(this@BaseRichEditorActivity, "提示", "确定删除吗?", "确定", "取消", {
runOnUiThread {
mRichEditor.delPlaceholderVideo(id)
mViewModel.deleteVideo(id)
}
})
}
@JavascriptInterface
fun updatePoster(id: String, videoId: String, url: String) {
mViewModel.id = id
mViewModel.videoId = videoId
val videoEntity = VideoEntity(url = url)
val intent =
PosterEditActivity.getIntentByVideo(this@BaseRichEditorActivity, videoEntity)
startActivityForResult(intent, REQUEST_CODE_IMAGE_CROP)
}
@JavascriptInterface
fun deleteUploadingVideo(id: String) {
mViewModel.deleteVideo(id)
}
@JavascriptInterface
fun reUploadVideo(id: String) {
val video = mViewModel.uploadVideoErrorList.find { it.id == id }
if (video != null) {
mViewModel.localVideoList.add(video)
mViewModel.uploadVideoErrorList.remove(video)
mViewModel.uploadVideo()
}
}
}
override fun insertPlaceholderVideo(id: String, poster: String) {
mRichEditor.insertPlaceholderVideo(id, poster)
}
override fun updateVideoProgress(id: String, progress: String) {
mRichEditor.updateVideoProgress(id, progress)
}
override fun videoUploadFinished(id: String, url: String, msg: JsonObject) {
try {
val obj = JSONObject()
obj.put("poster", msg.get("poster").asString)
obj.put("url", msg.get("url").asString)
obj.put("duration", RichEditor.formatVideoDuration(msg.get("length").asLong))
obj.put("id", msg.get("_id").asString)
obj.put("status", "pending")
mRichEditor.videoUploadFinished(id, url, obj.toString())
} catch (e: java.lang.Exception) {
e.printStackTrace()
}
}
override fun changePoster(id: String, poster: String) {
mRichEditor.changePoster(id, poster)
}
override fun videoUploadFailed(id: String) {
mRichEditor.videoUploadFailed(id)
}
open fun getSelectedLabel(): Int = 0
open fun onActivityDialogResult(requestCode: Int, resultCode: Int, data: Intent?) {}
abstract fun mtaEventName(): String
abstract fun provideViewModel(): VM
abstract fun getVideoGuideKey(): String
companion object {
const val ELEMENT_NAME_BOLD = " b "
const val ELEMENT_NAME_ITALIC = " i "
const val ELEMENT_NAME_STRIKE = " strike "
const val ELEMENT_NAME_UNDERLINE = " u "
const val ELEMENT_PARAGRAPH_H1 = " h1 "
const val ELEMENT_PARAGRAPH_H2 = " h2 "
const val ELEMENT_PARAGRAPH_H3 = " h3 "
@ -283,6 +749,13 @@ abstract class BaseRichEditorActivity : ToolBarActivity() {
const val INSERT_ANSWER_CODE = 411
const val INSERT_ARTICLE_CODE = 412
const val INSERT_GAME_CODE = 413
const val INSERT_GAME_COLLECTION_CODE = 414
const val INSERT_VIDEO_CODE = 415
const val MAX_INPUT_TEXT_NUM = 10000
const val MAX_MEDIA_COUNT = 20
const val REQUEST_CODE_IMAGE = 120
const val INSERT_MEDIA_VIDEO_CODE = 121
const val REQUEST_CODE_IMAGE_CROP = 122
}
}

View File

@ -0,0 +1,444 @@
package com.gh.base
import android.app.Application
import android.content.Intent
import android.graphics.Bitmap
import android.media.ThumbnailUtils
import android.provider.MediaStore
import android.text.TextUtils
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.MutableLiveData
import com.gh.base.fragment.WaitingDialogFragment
import com.gh.common.runOnUiThread
import com.gh.common.util.*
import com.gh.gamecenter.R
import com.gh.gamecenter.entity.ErrorEntity
import com.gh.gamecenter.entity.LocalVideoEntity
import com.gh.gamecenter.entity.QuoteCountEntity
import com.gh.gamecenter.qa.BbsType
import com.gh.gamecenter.retrofit.Response
import com.gh.gamecenter.retrofit.RetrofitManager
import com.gh.gamecenter.retrofit.service.ApiService
import com.gh.gamecenter.video.upload.OnUploadListener
import com.gh.gamecenter.video.upload.UploadManager
import com.google.gson.JsonObject
import com.lightgame.utils.Utils
import com.zhihu.matisse.Matisse
import com.zhihu.matisse.internal.utils.PathUtils
import io.reactivex.disposables.Disposable
import okhttp3.ResponseBody
import retrofit2.HttpException
import java.io.File
import java.io.FileOutputStream
import java.util.*
import kotlin.collections.HashMap
import kotlin.collections.LinkedHashMap
import kotlin.collections.List
import kotlin.collections.Map
import kotlin.collections.find
import kotlin.collections.forEach
import kotlin.collections.set
abstract class BaseRichEditorViewModel(application: Application) : AndroidViewModel(application) {
val mApi: ApiService = RetrofitManager.getInstance().api
val processDialog = MediatorLiveData<WaitingDialogFragment.WaitingDialogData>()
val uploadingImage = ArrayList<LinkedHashMap<String, String>>()
val chooseImagesUpload = MutableLiveData<LinkedHashMap<String, String>>()
val chooseImagesUploadSuccess = MutableLiveData<LinkedHashMap<String, String>>()
var uploadImageSubscription: Disposable? = null
val mapImages = HashMap<String, String>()
val localVideoList = ArrayList<LocalVideoEntity>()
val uploadVideoErrorList = ArrayList<LocalVideoEntity>()
var currentUploadingVideo: LocalVideoEntity? = null
var type: String = "" //游戏论坛game_bbs 官方论坛official_bbs
private var mUploadVideoListener: UploadVideoListener? = null
val TITLE_MIN_LENGTH = 6
val MIN_TEXT_LENGTH = 6
val MAX_TEXT_LENGTH = 10000
val FILE_HOST = "file:///"
var id = ""//视频标记
var videoId = ""//更改封面视频id
val quoteCountEntity = QuoteCountEntity()//数据上报用
fun setUploadVideoListener(uploadVideoListener: UploadVideoListener) {
this.mUploadVideoListener = uploadVideoListener
}
//检查图片是否符合规则并上传图片
fun uploadPic(data: Intent) {
val uris = Matisse.obtainResult(data)
val pictureList = ArrayList<String>()
for (uri in uris) {
val picturePath = PathUtils.getPath(getApplication(), uri)
if (picturePath != null) {
if (File(picturePath).length() > ImageUtils.getUploadFileMaxSize()) {
val count = ImageUtils.getUploadFileMaxSize() / 1024 / 1024
val application: Application = getApplication()
Utils.toast(
getApplication(),
application.getString(R.string.pic_max_hint, count)
)
continue
}
Utils.log("picturePath = $picturePath")
pictureList.add(picturePath)
} else {
Utils.log("picturePath is null")
}
}
if (pictureList.size == 0) return
val imageType = when (getRichType()) {
RichType.ARTICLE -> UploadImageUtils.UploadType.community_article
RichType.QUESTION -> UploadImageUtils.UploadType.question
else -> UploadImageUtils.UploadType.poster
}
uploadImageSubscription = UploadImageUtils.compressAndUploadImageList(
imageType,
pictureList,
false,
object : UploadImageUtils.OnUploadImageListListener {
override fun onProgress(total: Long, progress: Long) {}
override fun onCompressSuccess(imageUrls: List<String>) {
val chooseImageMd5Map = LinkedHashMap<String, String>()
imageUrls.forEach {
chooseImageMd5Map[MD5Utils.getUrlMD5(it)] = ""
}
uploadingImage.add(chooseImageMd5Map)
chooseImagesUpload.postValue(chooseImageMd5Map)
}
override fun onSingleSuccess(imageUrl: Map<String, String>) {
val map = LinkedHashMap<String, String>()
for (key in imageUrl.keys) {
map[MD5Utils.getUrlMD5(key)] = FILE_HOST + key.decodeURI()
mapImages[TextUtils.htmlEncode(key).decodeURI()] = imageUrl[key] ?: ""
}
chooseImagesUploadSuccess.postValue(map)
}
override fun onSuccess(
imageUrl: LinkedHashMap<String, String>,
errorMap: Map<String, Exception>
) {
val uploadMap = uploadingImage.find {
it.containsKey(
MD5Utils.getUrlMD5(
imageUrl.entries.iterator().next().key
)
)
}
uploadMap?.let {
uploadingImage.remove(uploadMap)
}
val errorSize = pictureList.size - imageUrl.size
if (errorSize > 0) {
val map = LinkedHashMap<String, String>()
for (key in errorMap.keys) {
map[MD5Utils.getUrlMD5(key)] = ""
}
//value为空会删除PlaceholderImage
chooseImagesUploadSuccess.postValue(map)
for (error in errorMap.values) {
if (error is HttpException && error.code() == 403) {
Utils.toast(getApplication(), errorSize.toString() + "张违规图片上传失败")
return
}
}
Utils.toast(getApplication(), errorSize.toString() + "张图片上传失败")
}
}
override fun onError(errorMap: Map<String, Exception>) {
val errorSize = errorMap.size
if (errorSize > 0) {
val map = LinkedHashMap<String, String>()
for (key in errorMap.keys) {
map[MD5Utils.getUrlMD5(key)] = ""
}
//value为空会删除PlaceholderImage
chooseImagesUploadSuccess.postValue(map)
}
for (error in errorMap.values) {
if (error is HttpException && error.code() == 403) {
val e = error.response()?.errorBody()?.string()?.toObject<ErrorEntity>()
if (e != null && e.code == 403017) {
Utils.toast(
getApplication(),
errorSize.toString() + "张图片的宽或高超过限制,请裁剪后上传"
)
} else {
Utils.toast(getApplication(), errorSize.toString() + "张违规图片上传失败")
}
return
}
}
if (errorSize == 1) {
Utils.toast(getApplication(), "图片上传失败")
} else {
Utils.toast(getApplication(), errorSize.toString() + "张图片上传失败")
}
}
})
}
fun uploadPoster(picturePath: String) {
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("封面上传中...", true))
uploadImageSubscription =
UploadImageUtils.compressAndUploadImage(UploadImageUtils.UploadType.poster,
picturePath,
false,
object : UploadImageUtils.OnUploadImageListener {
override fun onSuccess(imageUrl: String) {
patchVideoPoster(imageUrl)
}
override fun onError(e: Throwable?) {
handleUploadPosterResult(true)
}
override fun onProgress(total: Long, progress: Long) {
}
})
}
private fun patchVideoPoster(poster: String) {
if (id.isEmpty() || videoId.isEmpty()) return
val map = hashMapOf("poster" to poster, "type" to getVideoType())
mApi.patchInsertVideo(videoId, map.toRequestBody())
.compose(observableToMain())
.subscribe(object : Response<ResponseBody>() {
override fun onResponse(response: ResponseBody?) {
super.onResponse(response)
mUploadVideoListener?.changePoster(id, poster)
handleUploadPosterResult(false)
}
override fun onFailure(e: HttpException?) {
super.onFailure(e)
handleUploadPosterResult(true)
}
})
}
private fun handleUploadPosterResult(isFailure: Boolean = false) {
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("封面上传中...", false))
if (isFailure) {
ToastUtils.showToast("封面更改失败")
}
id = ""
videoId = ""
}
fun deleteVideo(id: String) {
if (localVideoList.isNotEmpty()) {
val video = localVideoList.find { it.id == id }
if (video != null) {
if (UploadManager.isUploading(video.filePath)) {
UploadManager.cancelTask(video.filePath)
}
localVideoList.remove(video)
}
}
if (uploadVideoErrorList.isNotEmpty()) {
val video = uploadVideoErrorList.find { it.id == id }
if (video != null) {
uploadVideoErrorList.remove(video)
}
}
if (currentUploadingVideo?.id == id) {
currentUploadingVideo = null
uploadVideo()
}
}
fun uploadVideo() {
if (currentUploadingVideo != null) return
if (localVideoList.isEmpty()) return
currentUploadingVideo = localVideoList[0]
UploadManager.createUploadTask(currentUploadingVideo?.filePath
?: "", object : OnUploadListener {
override fun onProgressChanged(
uploadFilePath: String,
currentSize: Long,
totalSize: Long,
speed: Long
) {
runOnUiThread {
val percent = (currentSize * 100 / totalSize.toFloat()).roundTo(1)
currentUploadingVideo?.id?.let {
mUploadVideoListener?.updateVideoProgress(it, percent.toString())
}
}
}
override fun onUploadSuccess(uploadFilePath: String, url: String) {
if (currentUploadingVideo != null) {
postVideoPosterAndInfo(uploadFilePath, url)
}
}
override fun onUploadFailure(uploadFilePath: String, errorMsg: String) {
uploadVideoFailure()
}
})
}
private fun postVideoPosterAndInfo(uploadFilePath: String, url: String) {
val localVideoPoster =
getApplication<Application>().cacheDir.absolutePath + File.separator + System.currentTimeMillis() + ".jpg"
try {
val bmp = ThumbnailUtils.createVideoThumbnail(
uploadFilePath,
MediaStore.Images.Thumbnails.MINI_KIND
)
// bmp 可能为空
FileOutputStream(localVideoPoster).use { out ->
bmp?.compress(Bitmap.CompressFormat.PNG, 100, out)
}
} catch (e: java.lang.Exception) {
e.printStackTrace()
ToastUtils.showToast("视频封面操作失败")
uploadVideoFailure()
return
}
uploadImageSubscription =
UploadImageUtils.compressAndUploadImage(UploadImageUtils.UploadType.poster,
localVideoPoster,
false,
object : UploadImageUtils.OnUploadImageListener {
override fun onSuccess(imageUrl: String) {
postVideoInfo(url, imageUrl)
}
override fun onError(e: Throwable?) {
uploadVideoFailure()
}
override fun onProgress(total: Long, progress: Long) {
}
})
}
private fun postVideoInfo(url: String, poster: String) {
val map = HashMap<String, Any>().apply {
put("poster", poster)
put("url", url)
put("format", currentUploadingVideo?.format ?: "")
put("size", currentUploadingVideo?.size ?: 0)
put("length", (currentUploadingVideo?.duration ?: 0) / 1000)
put("type", getVideoType())
}
val requestBody = map.toRequestBody()
mApi.insertVideo(requestBody)
.compose(observableToMain())
.subscribe(object : Response<JsonObject>() {
override fun onResponse(response: JsonObject?) {
super.onResponse(response)
if (response != null) {
uploadVideoSuccess(poster, url, response)
}
}
override fun onFailure(e: HttpException?) {
super.onFailure(e)
uploadVideoFailure()
}
})
}
private fun uploadVideoSuccess(poster: String, url: String, data: JsonObject) {
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("封面上传中...", false))
currentUploadingVideo?.let {
mUploadVideoListener?.changePoster(it.id, poster)
mUploadVideoListener?.videoUploadFinished(it.id, url, data)
UploadManager.cancelTask(it.filePath)
localVideoList.remove(it)
}
currentUploadingVideo = null
uploadVideo()
}
private fun uploadVideoFailure() {
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("封面上传中...", false))
currentUploadingVideo?.let {
runOnUiThread {
mUploadVideoListener?.videoUploadFailed(it.id)
}
uploadVideoErrorList.add(it)
localVideoList.remove(it)
UploadManager.cancelTask(it.filePath)
}
currentUploadingVideo = null
uploadVideo()
}
fun checkIsAllUploadedAndToast(): Boolean {
if (localVideoList.isNotEmpty() || uploadVideoErrorList.isNotEmpty()) {
ToastUtils.showToast("视频未上传完成,视频内容保存失败")
return false
}
return true
}
private fun getVideoType(): String {
return when (type) {
BbsType.GAME_BBS.value -> {
when (getRichType()) {
RichType.ARTICLE -> BbsType.GAME_BBS_ARTICLE_INSERT.value
RichType.QUESTION -> BbsType.GAME_BBS_QUESTION_INSERT.value
else -> ""
}
}
BbsType.OFFICIAL_BBS.value -> {
when (getRichType()) {
RichType.ARTICLE -> BbsType.OFFICIAL_BBS_ARTICLE_INSERT.value
RichType.QUESTION -> BbsType.OFFICIAL_BBS_QUESTION_INSERT.value
else -> ""
}
}
else -> ""
}
}
abstract fun getRichType(): RichType
}
interface UploadVideoListener {
/**
* 插入视频占位图
*/
fun insertPlaceholderVideo(id: String, poster: String)
/**
* 更新视频进度条
*/
fun updateVideoProgress(id: String, progress: String)
/**
* 上传视频完成
*/
fun videoUploadFinished(id: String, url: String, msg: JsonObject)
/**
* 更换封面图
*/
fun changePoster(id: String, poster: String)
/**
* 上传失败
*/
fun videoUploadFailed(id: String)
}
enum class RichType {
ARTICLE,
QUESTION,
ANSWER
}

View File

@ -0,0 +1,93 @@
package com.gh.base
import android.content.Context
import android.content.SharedPreferences
import com.gh.common.util.SPUtils
import com.halo.assistant.HaloApp
/**
* 用 SP 实现的简单列表持久化结构
*/
abstract class BaseSimpleDao {
// 使用独有的 SP 文件
private val mSp: SharedPreferences by lazy {
HaloApp.getInstance().application.getSharedPreferences("SimpleDao", Context.MODE_PRIVATE)
}
fun add(key: String) {
val originString = SPUtils.getString(mSp, getSPKey())
if (originString.isEmpty()) {
// Insert keyword only for the very first time.
SPUtils.setString(mSp, getSPKey(), key)
} else {
getAll()?.let {
if (getMaxSize() != -1 && it.size > getMaxSize()) {
it.removeAt(it.size - 1)
}
// Move keyword to the very front if it exists.
if (it.contains(key)) {
it.remove(key)
}
it.add(0, key)
val builder = StringBuilder()
for ((index, k) in it.withIndex()) {
builder.append(k)
if (index != it.size - 1) {
builder.append(DIVIDER_KEY)
}
}
SPUtils.setString(mSp, getSPKey(), builder.toString())
}
}
}
fun delete(key: String) {
val originString = SPUtils.getString(mSp, getSPKey())
if (originString.isEmpty()) {
// do nothing
} else {
getAll()?.let {
if (it.contains(key)) {
it.remove(key)
}
val builder = StringBuilder()
for ((index, k) in it.withIndex()) {
builder.append(k)
if (index != it.size - 1) {
builder.append(DIVIDER_KEY)
}
}
SPUtils.setString(mSp, getSPKey(), builder.toString())
}
}
}
fun getAll(): ArrayList<String>? {
val list = SPUtils.getString(mSp, getSPKey()).split(DIVIDER_KEY)
return if (list.size == 1 && list[0].isEmpty()) null else ArrayList(list)
}
fun getRawString(): String = SPUtils.getString(mSp, getSPKey())
fun contains(key: String): Boolean {
return getAll()?.contains(key) == true
}
fun deleteAll() {
SPUtils.setString(mSp, getSPKey(), "")
}
open fun getMaxSize(): Int = -1
abstract fun getSPKey(): String
companion object {
private const val DIVIDER_KEY = "<-||->"
}
}

View File

@ -0,0 +1,53 @@
package com.gh.base
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.gh.gamecenter.R
class CustomLayoutInflaterFactory(
private val mAppCompatActivity: AppCompatActivity
) : LayoutInflater.Factory2 {
override fun onCreateView(
parent: View?,
name: String,
context: Context,
attrs: AttributeSet
): View? {
val view: View?
try {
view = mAppCompatActivity.delegate.createView(parent, name, context, attrs)
?: mAppCompatActivity.onCreateView(parent, name, context, attrs)
?: mAppCompatActivity.layoutInflater.createView(name, null, attrs)
} catch (e: Exception) {
return null
}
val n = attrs.attributeCount
for (i in 0 until n) {
val attributeName = attrs.getAttributeName(i).toString()
if (attributeName.contains("background")) {
view?.setTag(TAG_BACKGROUND_ID, attrs.getAttributeValue(i))
} else if (attributeName.contains("textColor")) {
view?.setTag(TAG_TEXT_COLOR_ID, attrs.getAttributeValue(i))
}
}
return view
}
override fun onCreateView(name: String, context: Context, attrs: AttributeSet): View? {
return mAppCompatActivity.onCreateView(name, context, attrs)
}
companion object {
const val TAG_BACKGROUND_ID = R.string.background_id
const val TAG_TEXT_COLOR_ID = R.string.text_color_id
}
}

View File

@ -1,77 +0,0 @@
package com.gh.base;
import android.app.Activity;
import android.app.Application.ActivityLifecycleCallbacks;
import android.os.Bundle;
import com.gh.common.notifier.Notifier;
import com.gh.common.util.DataUtils;
import com.gh.download.DownloadManager;
import com.halo.assistant.HaloApp;
import com.lightgame.utils.AppManager;
/**
* 1、写点针对生命周期的统计代码
* 2、写点通用的逻辑
* 3、接口解耦
*
* @author CsHeng
* @Date 09/05/2017
* @Time 6:22 PM
*/
public class GHActivityLifecycleCallbacksImpl implements ActivityLifecycleCallbacks {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
AppManager.getInstance().addActivity(activity);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
CurrentActivityHolder.getActivitySet().add(activity);
if (HaloApp.isUserAcceptPrivacyPolicy(activity)) {
DataUtils.onResume(activity);
//FIXME 这里应该只是部分Activity需要
try {
// 初始化gameMap
DownloadManager.getInstance(activity).initGameMap();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onActivityPaused(Activity activity) {
CurrentActivityHolder.getActivitySet().remove(activity);
if (HaloApp.isUserAcceptPrivacyPolicy(activity)) {
DataUtils.onPause(activity);
}
}
@Override
public void onActivityStopped(Activity activity) {
Notifier.hide();
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
if (activity.isFinishing()) {
AppManager.getInstance().finishActivity(activity);
}
}
}

View File

@ -0,0 +1,17 @@
package com.gh.base
import java.util.concurrent.ThreadFactory
import java.util.concurrent.atomic.AtomicInteger
class GHThreadFactory(threadNamePrefix: String) : ThreadFactory {
private val THREAD_NAME_STEM = "${threadNamePrefix}_%d"
private val mThreadId = AtomicInteger(0)
override fun newThread(r: Runnable?): Thread {
val t = Thread(r)
t.name = String.format(THREAD_NAME_STEM, mThreadId.getAndIncrement())
return t
}
}

View File

@ -174,7 +174,7 @@
// jsonObject.put("type", type)
// val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString())
//
// RetrofitManager.getInstance(application).api.postMessageRead(UserManager.getInstance().userId, data?.id, body)
// RetrofitManager.getInstance().api.postMessageRead(UserManager.getInstance().userId, data?.id, body)
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe(object : Response<ResponseBody>() {

View File

@ -0,0 +1,97 @@
package com.gh.base
import android.app.Activity
import android.app.Application
import android.os.Bundle
import com.gh.common.notifier.Notifier
import com.gh.common.util.DataUtils
import com.gh.common.util.FloatingBackViewManager
import com.gh.download.DownloadManager
import com.gh.gamecenter.MainActivity
import com.gh.gamecenter.SplashScreenActivity
import com.gh.gamecenter.energy.EnergyCenterActivity
import com.gh.gamecenter.forum.detail.ForumDetailActivity
import com.gh.gamecenter.forum.list.ForumListActivity
import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity
import com.gh.gamecenter.qa.questions.newdetail.NewQuestionDetailActivity
import com.gh.gamecenter.qa.video.detail.ForumVideoDetailActivity
import com.halo.assistant.HaloApp
import com.lightgame.utils.AppManager
class GlobalActivityLifecycleObserver : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
AppManager.getInstance().addActivity(activity)
}
override fun onActivityStarted(activity: Activity) {
}
override fun onActivityResumed(activity: Activity) {
CurrentActivityHolder.activitySet.add(activity)
// 判断是否需要显示或隐藏返回小浮窗
if (FloatingBackViewManager.getType().isNotEmpty()) {
if (activity is EnergyCenterActivity
&& FloatingBackViewManager.getType() == FloatingBackViewManager.TYPE_TASK
) {
FloatingBackViewManager.disableBackView()
} else if (!shouldShowActivityBackView(activity)
&& FloatingBackViewManager.getType() == FloatingBackViewManager.TYPE_ACTIVITY
) {
FloatingBackViewManager.disableBackView()
} else {
FloatingBackViewManager.showBackView(activity)
}
}
if (HaloApp.isUserAcceptPrivacyPolicy(activity)) {
DataUtils.onResume(activity)
// FIXME 这里应该只是部分Activity需要
try {
// 初始化gameMap
if (activity !is SplashScreenActivity) {
DownloadManager.getInstance().initGameMap()
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
private fun shouldShowActivityBackView(activity: Activity): Boolean {
return (activity is MainActivity
|| activity is ArticleDetailActivity
|| activity is ForumVideoDetailActivity
|| activity is ForumDetailActivity
|| activity is ForumListActivity
|| activity is NewQuestionDetailActivity)
}
override fun onActivityPaused(activity: Activity) {
CurrentActivityHolder.activitySet.remove(activity)
FloatingBackViewManager.dismissBackView()
if (HaloApp.isUserAcceptPrivacyPolicy(activity)) {
DataUtils.onPause(activity)
}
if (activity.isFinishing) {
AppManager.getInstance().finishActivity(activity)
}
}
override fun onActivityStopped(activity: Activity) {
Notifier.hide()
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
}
override fun onActivityDestroyed(activity: Activity) {
AppManager.getInstance().finishActivity(activity)
}
}

View File

@ -3,6 +3,7 @@ package com.gh.base;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
@ -11,17 +12,26 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.RelativeLayout;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.DrawableRes;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.ActionMenuView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gh.common.constant.Constants;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.ImageUtils;
import com.gh.common.util.SPUtils;
import com.gh.common.view.GameIconView;
import com.gh.download.DownloadManager;
import com.gh.gamecenter.DownloadManagerActivity;
import com.gh.gamecenter.R;
@ -44,7 +54,7 @@ import java.util.List;
* 特殊页面请参考{@link BaseActivity}
*/
public abstract class ToolBarActivity extends BaseActivity implements ToolbarController, Toolbar.OnMenuItemClickListener {
public abstract class ToolBarActivity extends BaseActivity implements ToolbarController, ActionMenuView.OnMenuItemClickListener {
@Nullable
private PackageViewModel mPackageViewModel;
@ -55,6 +65,22 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon
protected TextView mTitleTv;
protected LinearLayout mTitleContainer;
protected LinearLayout mIconTitleContainer;
protected FrameLayout mBackContainer;
protected ActionMenuView mActionMenuView;
protected View mBackBtn;
protected GameIconView mGameIconView;
protected SimpleDraweeView mUserAvatarIv;
protected TextView mIconTitle;
@Nullable
private TextView mDownloadCountHint;
@ -64,7 +90,7 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon
setStatusBarDarkMode(true, this);
initToolbar();
if (showDownloadMenu()) {
if (!SPUtils.getBoolean(Constants.SP_TEENAGER_MODE) && showDownloadMenu()) {
mPackageViewModel = ViewModelProviders.of(this, new PackageViewModel.Factory()).get(PackageViewModel.class);
mPackageViewModel.getFilterSameUpdateLiveData().observe(this, this::updateDownloadCountHint);
}
@ -89,10 +115,20 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon
mToolbarContainer = findViewById(R.id.normal_toolbar_container);
mToolbar = findViewById(R.id.normal_toolbar);
mTitleTv = findViewById(R.id.normal_title);
mActionMenuView = findViewById(R.id.actionMenuView);
mTitleContainer = findViewById(R.id.titleContainer);
mIconTitleContainer = findViewById(R.id.iconTitleContainer);
mBackContainer = findViewById(R.id.backContainer);
mBackBtn = findViewById(R.id.backBtn);
mGameIconView = findViewById(R.id.gameIv);
mUserAvatarIv = findViewById(R.id.userAvatar);
mIconTitle = findViewById(R.id.iconTitle);
if (mToolbar != null) {
// setSupportActionBar(mToolbar); // 替换actionBar后 toolBar无法控制
mToolbar.setNavigationIcon(provideNavigationIcon());
mToolbar.setNavigationOnClickListener(provideNavigationItemClickListener());
// mToolbar.setNavigationIcon(provideNavigationIcon());
// mToolbar.setNavigationOnClickListener(provideNavigationItemClickListener());
if (mBackBtn != null) mBackBtn.setOnClickListener(provideNavigationItemClickListener());
if (mBackContainer != null) mBackContainer.setOnClickListener(provideNavigationItemClickListener());
if (mTitleTv != null) {
mTitleTv.setOnClickListener(view -> {
final List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
@ -114,6 +150,7 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon
@Override
public void setNavigationTitle(String title) {
if (mTitleTv != null) mTitleTv.setText(title);
if (mIconTitle != null) mIconTitle.setText(title);
}
@Override
@ -130,15 +167,20 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon
@Override
public void setToolbarMenu(int res) {
if (mToolbar == null) return;
mToolbar.inflateMenu(res);
mToolbar.setOnMenuItemClickListener(this);
if (mActionMenuView == null) return;
// 青少年模式下要隐藏下载按钮
if (SPUtils.getBoolean(Constants.SP_TEENAGER_MODE) && res == R.menu.menu_download) return;
// mToolbar.inflateMenu(res);
// mToolbar.setOnMenuItemClickListener(this);
getMenuInflater().inflate(res, mActionMenuView.getMenu());
mActionMenuView.setOnMenuItemClickListener(this);
if (showDownloadMenu()) {
createDownloadMenu(res);
}
Menu menu = mToolbar.getMenu();
Menu menu = mActionMenuView.getMenu();
for (int i = 0; i < menu.size(); i++) {
MenuItem menuItem = menu.getItem(i);
// menu设置actionLayout后无法捕捉点击事件以icon为tag如果icon is null 手动设置menuItem点击事件
@ -149,51 +191,61 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon
}
}
// 限制标题实际宽度 防止标题挡住toolbar menu按钮
if (menu.size() > 2 && mTitleTv != null) {
ViewGroup.LayoutParams layoutParams = mTitleTv.getLayoutParams();
if (layoutParams instanceof RelativeLayout.LayoutParams) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) layoutParams;
if (showToolbarAtLeft()) {
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.addRule(RelativeLayout.CENTER_VERTICAL);
params.setMargins(DisplayUtils.dip2px(55), 0, DisplayUtils.dip2px(48 * menu.size()), 0);
} else {
params.setMargins(DisplayUtils.dip2px(90), 0, DisplayUtils.dip2px(90), 0);
}
mTitleTv.setLayoutParams(params);
}
} else {
if (showToolbarAtLeft()) {
ViewGroup.LayoutParams layoutParams = mTitleTv.getLayoutParams();
if (layoutParams instanceof RelativeLayout.LayoutParams) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) layoutParams;
params.addRule(RelativeLayout.CENTER_VERTICAL);
params.setMargins(DisplayUtils.dip2px(55), 0, DisplayUtils.dip2px(48 * menu.size()), 0);
mTitleTv.setLayoutParams(params);
}
}
if (showToolbarAtLeft() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && mTitleTv != null) {
mTitleTv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START);
}
setTitleCenter();
}
@Override
protected void onResume() {
super.onResume();
setTitleCenter();
}
// 设置标题居中
public void setTitleCenter() {
if (mActionMenuView != null && mTitleContainer != null && mBackContainer != null && !showToolbarAtLeft()) {
mActionMenuView.post(() -> {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mTitleContainer.getLayoutParams();
params.setMargins(mActionMenuView.getWidth() - mBackContainer.getWidth(), 0, 0, 0);
mTitleContainer.setLayoutParams(params);
});
}
}
public void setGameIconToolbar(String icon, String iconSubscript) {
mTitleContainer.setVisibility(View.GONE);
mGameIconView.displayGameIcon(icon, iconSubscript);
mGameIconView.setVisibility(View.VISIBLE);
mIconTitleContainer.setVisibility(View.VISIBLE);
}
public void setUserAvatarIconToolbar(String icon) {
mTitleContainer.setVisibility(View.GONE);
ImageUtils.display(mUserAvatarIv, icon);
mUserAvatarIv.setVisibility(View.VISIBLE);
mIconTitleContainer.setVisibility(View.VISIBLE);
}
private void createDownloadMenu(int res) {
if (res != R.menu.menu_download) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_download, mToolbar.getMenu());
inflater.inflate(R.menu.menu_download, mActionMenuView.getMenu());
}
if (mPackageViewModel != null) {
updateDownloadCountHint(mPackageViewModel.getFilterSameUpdateLiveData().getValue());
}
View downloadMenuView = mToolbar.getMenu().findItem(R.id.menu_download).getActionView();
View downloadMenuView = mActionMenuView.getMenu().findItem(R.id.menu_download).getActionView();
mDownloadCountHint = downloadMenuView.findViewById(R.id.menu_download_count_hint);
}
private void updateDownloadCountHint(List<GameUpdateEntity> updateList) {
if (mDownloadCountHint == null) return;
String count = DownloadManager.getInstance(getApplicationContext()).getDownloadOrUpdateCount(updateList);
String count = DownloadManager.getInstance().getDownloadOrUpdateCount(updateList);
if (count != null) {
mDownloadCountHint.setVisibility(View.VISIBLE);
mDownloadCountHint.setText(count);
@ -214,7 +266,7 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBDownloadStatus status) {
if (showDownloadMenu() && mPackageViewModel != null) {
if (!SPUtils.getBoolean(Constants.SP_TEENAGER_MODE) && showDownloadMenu() && mPackageViewModel != null) {
updateDownloadCountHint(mPackageViewModel.getFilterSameUpdateLiveData().getValue());
}
}
@ -222,17 +274,18 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon
@Override
public MenuItem getMenuItem(int res) {
if (mToolbar == null) return null; //后续页面做好判断
return mToolbar.getMenu().findItem(res);
return mActionMenuView.getMenu().findItem(res);
}
public void clearMenu() {
if (mToolbar != null) {
mToolbar.getMenu().clear();
mActionMenuView.getMenu().clear();
setTitleCenter();
}
}
public Menu getMenu() {
return mToolbar.getMenu();
return mActionMenuView.getMenu();
}
@Override
@ -259,4 +312,25 @@ public abstract class ToolBarActivity extends BaseActivity implements ToolbarCon
mToolbarContainer.setVisibility(isHide ? View.GONE : View.VISIBLE);
}
}
@Override
protected void onNightModeChange() {
super.onNightModeChange();
if (mToolbar != null) {
mToolbar.setBackgroundColor(ContextCompat.getColor(this, R.color.background_white));
}
if (mBackBtn != null) {
if (mBackBtn instanceof ImageView) {
((ImageView) mBackBtn).setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_bar_back));
} else if (mBackBtn instanceof TextView) {
((TextView) mBackBtn).setTextColor(ContextCompat.getColor(this, R.color.text_subtitle));
}
}
if (mTitleTv != null) {
mTitleTv.setTextColor(ContextCompat.getColor(this, R.color.text_black));
}
if (showDownloadMenu() && getMenuItem(R.id.menu_download) != null) {
((ImageView) getMenuItem(R.id.menu_download).getActionView().findViewById(R.id.menu_download_iv)).setImageDrawable(ContextCompat.getDrawable(this, R.drawable.toolbar_download));
}
}
}

View File

@ -1,14 +1,18 @@
package com.gh.base.fragment;
import android.app.Dialog;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.KeyEvent;
import com.gh.common.util.ClickUtils;
import com.gh.common.util.NightModeUtils;
import com.gh.gamecenter.R;
import com.lightgame.utils.RuntimeUtils;
import com.lightgame.utils.Utils;
import java.lang.reflect.Field;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
@ -26,10 +30,18 @@ import androidx.lifecycle.Lifecycle;
public class BaseDialogFragment extends DialogFragment {
protected boolean mNightMode;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNightMode = NightModeUtils.INSTANCE.isNightMode(requireContext());
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = new Dialog(getActivity(), R.style.DialogWindowTransparent);
final Dialog dialog = new Dialog(getActivity(), getThemeRes());
dialog.setCanceledOnTouchOutside(false);
dialog.setOnKeyListener((dialog1, keyCode, event) -> {
if (keyCode == KeyEvent.KEYCODE_BACK && !ClickUtils.isFastDoubleClick()) {
@ -41,6 +53,10 @@ public class BaseDialogFragment extends DialogFragment {
return dialog;
}
public int getThemeRes() {
return R.style.DialogWindowTransparent;
}
public void toast(@StringRes int res) {
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
toast(getString(res));
@ -71,9 +87,34 @@ public class BaseDialogFragment extends DialogFragment {
transaction.show(fragment);
transaction.commit();
} else {
super.show(manager, tag);
try {
Class<?> clazz = DialogFragment.class;
Field dismissed = clazz.getDeclaredField("mDismissed");
dismissed.setAccessible(true);
dismissed.set(this, false);
Field shownByMe = clazz.getDeclaredField("mShownByMe");
shownByMe.setAccessible(true);
shownByMe.set(this, true);
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(this, tag);
transaction.commitAllowingStateLoss();
} catch (Exception e) {
super.show(manager, tag);
e.printStackTrace();
}
}
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
onNightModeChange();
}
protected void onNightModeChange() {
mNightMode = NightModeUtils.INSTANCE.isNightMode(requireContext());
}
}

View File

@ -1,6 +1,7 @@
package com.gh.base.fragment;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@ -8,6 +9,7 @@ import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
@ -23,7 +25,9 @@ import com.gh.common.constant.Constants;
import com.gh.common.syncpage.ISyncAdapterHandler;
import com.gh.common.syncpage.SyncDataEntity;
import com.gh.common.syncpage.SyncPageRepository;
import com.gh.common.util.NightModeUtils;
import com.gh.gamecenter.BuildConfig;
import com.gh.gamecenter.R;
import com.gh.gamecenter.eventbus.EBMiPush;
import com.lightgame.OnTitleClickListener;
import com.lightgame.utils.RuntimeUtils;
@ -37,7 +41,6 @@ import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
@ -58,9 +61,13 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
protected boolean isEverPause;
protected boolean mNightMode;
@NonNull
protected String mEntrance = "";
public long startPageTime = 0;
protected final Handler mBaseHandler = new BaseFragment.BaseHandler(this);
protected static class BaseHandler extends Handler {
@ -108,6 +115,12 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
protected void initView(View view) {
View mBackBtn = view.findViewById(R.id.backBtn);
View mBackContainer = view.findViewById(R.id.backContainer);
if (mBackBtn != null && mBackContainer != null) {
mBackBtn.setOnClickListener(v -> requireActivity().onBackPressed());
mBackContainer.setOnClickListener(v -> requireActivity().onBackPressed());
}
}
protected void postRunnable(Runnable runnable) {
@ -140,21 +153,22 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
EventBus.getDefault().register(this);
// For data binding.
if (getInflatedLayout() != null) {
mCachedView = getInflatedLayout();
} else {
mCachedView = getInflatedLayout();
if (mCachedView == null) {
mCachedView = View.inflate(getContext(), getLayoutId(), null);
}
if (useButterKnife()) {
ButterKnife.bind(this, mCachedView);
}
initView(mCachedView);
if (addSyncPageObserver()) {
initSyncPageObserver();
}
if (BuildConfig.IS_NIGHT_MODE_ON) {
mNightMode = NightModeUtils.INSTANCE.isNightMode(requireContext());
} else {
mNightMode = false;
}
}
private void initSyncPageObserver() {
@ -207,6 +221,10 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (container != null) {
container.removeView(mCachedView);
// TODO 页面重建 (framgent 的重新获取) 有大问题,这里只是修修补补
if (mCachedView != null && mCachedView.getParent() instanceof ViewGroup) {
((ViewGroup) mCachedView.getParent()).removeView(mCachedView);
}
}
return mCachedView;
}
@ -222,6 +240,13 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
public void onResume() {
super.onResume();
isEverPause = false;
startPageTime = System.currentTimeMillis();
if (BuildConfig.IS_NIGHT_MODE_ON
&& !NightModeUtils.INSTANCE.getSystemMode()
&& mNightMode != NightModeUtils.INSTANCE.isNightMode(requireContext())) {
onNightModeChange();
}
}
@Override
@ -307,7 +332,9 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
// 为 fragment 附加 bundle (setArgument())
public BaseFragment with(Bundle bundle) {
this.setArguments(bundle);
if (!isStateSaved()) {
this.setArguments(bundle);
}
return this;
}
@ -324,7 +351,15 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
return false;
}
protected boolean useButterKnife() {
return true;
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (BuildConfig.IS_NIGHT_MODE_ON) {
onNightModeChange();
}
}
protected void onNightModeChange() {
mNightMode = NightModeUtils.INSTANCE.isNightMode(requireContext());
}
}

View File

@ -1,5 +1,6 @@
package com.gh.base.fragment;
import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
@ -8,6 +9,12 @@ import android.view.View;
import android.widget.CheckedTextView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import com.gh.base.adapter.FragmentAdapter;
import com.gh.common.view.TabIndicatorView;
import com.gh.gamecenter.R;
@ -20,12 +27,6 @@ import com.lightgame.view.NoScrollableViewPager;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import butterknife.BindView;
/**
* Created by khy on 15/03/18.
*/
@ -34,12 +35,11 @@ public abstract class BaseFragment_TabLayout extends NormalFragment implements V
public static final String PAGE_INDEX = "PAGE_INDEX";
@BindView(R.id.fragment_tab_layout)
protected TabLayout mTabLayout;
@BindView(R.id.fragment_view_pager)
protected NoScrollableViewPager mViewPager;
@BindView(R.id.fragment_tab_indicator)
protected TabIndicatorView mTabIndicatorView;
@Nullable
protected View mDividerLineView;
protected List<Fragment> mFragmentsList;
@ -75,19 +75,6 @@ public abstract class BaseFragment_TabLayout extends NormalFragment implements V
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) mCheckedIndex = getArguments().getInt(PAGE_INDEX, 0);
mTabTitleList = new ArrayList<>();
initTabTitleList(mTabTitleList);
mFragmentsList = new ArrayList<>(restoreFragments());
if (mFragmentsList.isEmpty() || mFragmentsList.size() != mTabTitleList.size()) {
mFragmentsList.clear();
initFragmentList(mFragmentsList);
}
}
private ArrayList<Fragment> restoreFragments() {
String tag = "android:switcher:" + mViewPager.getId() + ":";
ArrayList<Fragment> fragments = new ArrayList<>();
@ -105,6 +92,21 @@ public abstract class BaseFragment_TabLayout extends NormalFragment implements V
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mTabLayout = view.findViewById(R.id.fragment_tab_layout);
mViewPager = view.findViewById(R.id.fragment_view_pager);
mTabIndicatorView = view.findViewById(R.id.fragment_tab_indicator);
mDividerLineView = view.findViewById(R.id.dividerLine);
if (getArguments() != null) mCheckedIndex = getArguments().getInt(PAGE_INDEX, 0);
mTabTitleList = new ArrayList<>();
initTabTitleList(mTabTitleList);
mFragmentsList = new ArrayList<>(restoreFragments());
if (mFragmentsList.isEmpty() || mFragmentsList.size() != mTabTitleList.size()) {
mFragmentsList.clear();
initFragmentList(mFragmentsList);
}
mViewPager.setOffscreenPageLimit(mFragmentsList.size());
mViewPager.addOnPageChangeListener(this);
mViewPager.setAdapter(new FragmentAdapter(getChildFragmentManager(), mFragmentsList, mTabTitleList));
@ -119,7 +121,7 @@ public abstract class BaseFragment_TabLayout extends NormalFragment implements V
if (tab == null) continue;
String tabTitle = tab.getText() != null ? tab.getText().toString() : "";
View tabView = provideTabView(i, tabTitle);
if (tabView == null) tabView = createDefaultTabCustomView(tabTitle);
if (tabView == null) tabView = createDefaultTabCustomView(requireContext(), tabTitle);
tab.setCustomView(tabView);
}
@ -152,7 +154,7 @@ public abstract class BaseFragment_TabLayout extends NormalFragment implements V
});
}
private static void updateTabStyle(TabLayout.Tab tab, boolean isChecked) {
public static void updateTabStyle(TabLayout.Tab tab, boolean isChecked) {
View tabView = tab.getCustomView();
if (tabView == null) {
Utils.log("TabLayout->Tab样式不是通用样式,请检查");
@ -171,12 +173,13 @@ public abstract class BaseFragment_TabLayout extends NormalFragment implements V
return;
}
tabTitle.setTypeface(isChecked ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
tabTitle.setTextColor(ContextCompat.getColorStateList(tabTitle.getContext(), R.color.text_tabbar_style));
}
// 如果不设置View的话无法动态设置字体样式
@NonNull
public static View createDefaultTabCustomView(String title) {
View view = LayoutInflater.from(HaloApp.getInstance().getApplication().getBaseContext()).inflate(R.layout.tab_item, null);
public static View createDefaultTabCustomView(Context context, String title) {
View view = LayoutInflater.from(context).inflate(R.layout.tab_item, null);
View tabTitle = view.findViewById(R.id.tab_title);
if (tabTitle instanceof CheckedTextView) {
((CheckedTextView) tabTitle).setText(title);
@ -198,4 +201,22 @@ public abstract class BaseFragment_TabLayout extends NormalFragment implements V
public void onPageScrollStateChanged(int state) {
}
@Override
protected void onNightModeChange() {
super.onNightModeChange();
View container = requireView().findViewById(R.id.fragment_tab_container);
if (container != null) {
container.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white));
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
TabLayout.Tab tab = mTabLayout.getTabAt(i);
if (tab != null) {
updateTabStyle(tab, tab.isSelected());
}
}
}
if (mDividerLineView != null) {
mDividerLineView.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.divider));
}
}
}

View File

@ -11,12 +11,14 @@ package com.gh.base.fragment;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.IdRes;
import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.view.View;
import com.gh.gamecenter.normal.NormalFragment;
@ -53,19 +55,21 @@ public abstract class BaseFragment_ViewPager extends NormalFragment implements D
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFragmentsList = new ArrayList<>();
initFragmentList(mFragmentsList);
mAdapter = BaseFragmentPagerAdapter.newInstance(getChildFragmentManager(), mFragmentsList);
final Bundle args = getArguments();
if (args != null) {
mCheckedIndex = args.getInt(ARGS_INDEX);
}
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mViewPager = (ViewPager) view.findViewById(getViewPagerId());
mViewPager = view.findViewById(getViewPagerId());
mFragmentsList = restoreFragments();
if (mFragmentsList.size() == 0) {
initFragmentList(mFragmentsList);
}
mAdapter = BaseFragmentPagerAdapter.newInstance(getChildFragmentManager(), mFragmentsList);
final Bundle args = getArguments();
if (args != null) {
mCheckedIndex = args.getInt(ARGS_INDEX);
}
mViewPager.setOffscreenPageLimit(mFragmentsList.size());
mViewPager.setAdapter(mAdapter);
if (mCheckedIndex < mFragmentsList.size()) {
@ -116,9 +120,24 @@ public abstract class BaseFragment_ViewPager extends NormalFragment implements D
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
public ArrayList<Fragment> restoreFragments() {
String tag = "android:switcher:" + mViewPager.getId() + ":";
ArrayList<Fragment> fragments = new ArrayList<>();
int childCount = getChildCount();
for (int index = 0; index < childCount; index++) {
Fragment fragment = getChildFragmentManager().findFragmentByTag(tag + index);
if (fragment != null) {
fragments.add(fragment);
}
}
return fragments;
}
public abstract int getChildCount();
public int getCurrentItem() {
return mViewPager != null ? mViewPager.getCurrentItem() : 0;
}

View File

@ -2,7 +2,6 @@ package com.gh.base.fragment
import android.os.Bundle
import com.gh.gamecenter.normal.NormalFragment
import com.lightgame.utils.Utils
/**
* 懒加载(支持多层嵌套)
@ -105,15 +104,25 @@ abstract class BaseLazyFragment : NormalFragment() {
isSupportVisible = visible
if (visible) {
if (mIsFirstVisible && view != null) {
// TODO 当 fragment 重建时这里的被调用很奇怪onActivityCreated 回调触发,但此时的 view 是空的,原因是 createView 还没被调用
// TODO 这样就造成了 onFragmentResume 里可能用到 view 的地方出现空指针异常,所以这里遇到 view 为空的时候 return 等下一次被调用才进去
if (view == null) {
return
}
if (mIsFirstVisible) {
mIsFirstVisible = false
onFragmentFirstVisible()
}
onFragmentResume()
dispatchChildVisibleState(true)
} else {
dispatchChildVisibleState(false)
onFragmentPause()
// 当 fragment 重建时,这个代码块可能在第一次 view 为空的 visible 后调用导致在 onFragmentPause 里可能用到 view 的地方出现空指针异常
if (!mIsFirstVisible) {
dispatchChildVisibleState(false)
onFragmentPause()
}
}
}

View File

@ -3,26 +3,20 @@ package com.gh.base.fragment
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.PagerAdapter
import androidx.viewpager.widget.ViewPager
import butterknife.BindView
import com.gh.base.adapter.FragmentAdapter
import com.gh.common.view.TabIndicatorView
import com.gh.gamecenter.R
import com.google.android.material.tabs.TabLayout
import com.lightgame.view.NoScrollableViewPager
import java.util.*
abstract class BaseLazyTabFragment : BaseLazyFragment(), ViewPager.OnPageChangeListener {
@BindView(R.id.fragment_tab_layout)
lateinit var mTabLayout: TabLayout
@BindView(R.id.fragment_view_pager)
lateinit var mViewPager: NoScrollableViewPager
@BindView(R.id.fragment_tab_indicator)
lateinit var mTabIndicatorView: TabIndicatorView
var mFragmentsList: MutableList<Fragment> = arrayListOf()
@ -67,6 +61,14 @@ abstract class BaseLazyTabFragment : BaseLazyFragment(), ViewPager.OnPageChangeL
return null
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mTabLayout = view.findViewById(R.id.fragment_tab_layout)
mViewPager = view.findViewById(R.id.fragment_view_pager)
mTabIndicatorView = view.findViewById(R.id.fragment_tab_indicator)
}
override fun onFragmentFirstVisible() {
super.onFragmentFirstVisible()
mTabTitleList.clear()
@ -82,7 +84,7 @@ abstract class BaseLazyTabFragment : BaseLazyFragment(), ViewPager.OnPageChangeL
mViewPager.offscreenPageLimit = mFragmentsList.size
mViewPager.addOnPageChangeListener(this)
mViewPager.adapter = providePagerAdapter()
?: FragmentAdapter(childFragmentManager, mFragmentsList, mTabTitleList)
?: FragmentAdapter(childFragmentManager, mFragmentsList, mTabTitleList)
mViewPager.currentItem = mCheckedIndex
mTabLayout.setupWithViewPager(mViewPager)
mTabIndicatorView.setupWithTabLayout(mTabLayout)
@ -92,7 +94,7 @@ abstract class BaseLazyTabFragment : BaseLazyFragment(), ViewPager.OnPageChangeL
val tab = mTabLayout.getTabAt(i) ?: continue
val tabTitle = if (tab.text != null) tab.text.toString() else ""
var tabView = provideTabView(i, tabTitle)
if (tabView == null) tabView = BaseFragment_TabLayout.createDefaultTabCustomView(tabTitle)
if (tabView == null) tabView = BaseFragment_TabLayout.createDefaultTabCustomView(requireContext(), tabTitle)
tab.customView = tabView
}
BaseFragment_TabLayout.initTabStyle(mTabLayout, mCheckedIndex)
@ -105,18 +107,35 @@ abstract class BaseLazyTabFragment : BaseLazyFragment(), ViewPager.OnPageChangeL
for (index in 0 until childCount) {
val fragment = childFragmentManager.findFragmentByTag("$tag$index")
if (fragment != null) {
restoreFragment(fragment)
fragments.add(fragment)
}
}
return fragments
}
open fun restoreFragment(fragment: Fragment) {}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {}
override fun onPageScrollStateChanged(state: Int) {}
override fun onNightModeChange() {
super.onNightModeChange()
val container = requireView().findViewById<View>(R.id.fragment_tab_container)
if (container != null) {
container.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
for (i in 0 until mTabLayout.tabCount) {
val tab = mTabLayout.getTabAt(i)
if (tab != null) {
BaseFragment_TabLayout.updateTabStyle(tab, tab.isSelected)
}
}
}
}
companion object {
const val PAGE_INDEX = "PAGE_INDEX"
}

View File

@ -0,0 +1,99 @@
package com.gh.base.fragment
import android.os.Bundle
import android.view.View
import android.view.ViewStub
import com.gh.gamecenter.R
/**
* 这是在 BaseLazyFragment 之上添加了一些通用功能的抽象类
*
* 怎么将一个已有的 fragment 转化为懒加载 (延迟渲染) 的 fragment 呢?
* (继承 ListFragment 的类请改为继承 LazyListFragment)
*
* 0. 删掉旧的 getInflatedLayout() 的代码,现在由 getStubLayoutId() 提供 Stub 布局 (默认为 R.layout.fragment_stub若重写请注意提供 id 为 stub 的 ViewStub
* 1. 重写 getRealLayoutId(),提供实际要延迟渲染的 layout Id
* 1. 将原有在 onCreate() 的代码移动到 onFragmentFirstVisible()
* 2. 将原有在 onViewCreated() 的代码移动到 initRealView()
* 注意initRealView() 在 onFragmentFirstVisible() 中被调用,如果要初始化 viewModel 等非 UI 对象请在 super.onFragmentVisible() 调用)
* 3. 如需使用 ViewBinding ,在 onRealLayoutInflated() 的回调中初始化 ViewBinding 即可
* 4. onResume() 的代码移动到 onFragmentResume()onPause() 的代码移动到 onFragmentPause()
* 5. Done!
*/
abstract class LazyFragment : BaseLazyFragment() {
// ViewStub + ViewBinding 有莫名的 bug语法上没问题但编译时通不过。
private var mViewStub: ViewStub? = null
private var mIsRecreatedByFragmentManager = false
override fun onCreate(savedInstanceState: Bundle?) {
if (savedInstanceState != null) {
mIsRecreatedByFragmentManager = true
}
super.onCreate(savedInstanceState)
}
@Deprecated(
"使用了 LazyFragment 以后不要 override getLayoutId(),建议 override getRealLayoutId() 或者 getStubLayoutId()",
ReplaceWith("LazyFragment.getRealLayoutId()")
)
override fun getLayoutId() = if (isRecreatedByFragmentManager()) {
getRealLayoutId()
} else {
getStubLayoutId()
}
override fun initView(view: View?) {
super.initView(view)
if (!isRecreatedByFragmentManager()) {
mViewStub = mCachedView.findViewById(R.id.stub)
}
}
override fun onFragmentFirstVisible() {
super.onFragmentFirstVisible()
inflateRealView()
initRealView()
}
/**
* 真正 inflate View 的地方
*/
protected open fun inflateRealView() {
if (isRecreatedByFragmentManager()) {
onRealLayoutInflated(mCachedView)
} else {
mViewStub?.layoutResource = getRealLayoutId()
mViewStub?.setOnInflateListener { _, inflatedView -> onRealLayoutInflated(inflatedView) }
mViewStub?.inflate()?.let { mCachedView = it }
}
}
protected fun isRecreatedByFragmentManager() = mIsRecreatedByFragmentManager
/**
* 请在这个方法之后获取初始化后的各种 view
*
* 替换旧 fragment 实现时,等同于 onViewCreated
*/
protected open fun initRealView() {}
/**
* 提供要 stub inflate 的 layout
*/
protected abstract fun getRealLayoutId(): Int
/**
* 提供含有 stub 的 layout
*/
protected open fun getStubLayoutId(): Int {
return R.layout.fragment_stub
}
/**
* 真实 layout inflate 完成的回调,可用于 viewBinding
*/
protected open fun onRealLayoutInflated(inflatedView: View) {}
}

View File

@ -4,12 +4,15 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.ExtensionsKt;
import com.gh.gamecenter.R;
/**
@ -52,6 +55,14 @@ public class WaitingDialogFragment extends BaseDialogFragment {
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
WindowManager.LayoutParams layoutParams = getDialog().getWindow().getAttributes();
layoutParams.width = DisplayUtils.dip2px(160);
getDialog().getWindow().setAttributes(layoutParams);
}
@Override
public void show(FragmentManager manager, String tag) {
try {
@ -87,7 +98,11 @@ public class WaitingDialogFragment extends BaseDialogFragment {
@Override
public void dismissAllowingStateLoss() {
mBackListener = null;
super.dismissAllowingStateLoss();
try {
super.dismissAllowingStateLoss();
} catch (Exception e) {
e.printStackTrace();
}
}
public static class WaitingDialogData {

View File

@ -2,12 +2,14 @@ package com.gh.common
import android.os.Handler
import android.os.Looper
import com.gh.base.GHThreadFactory
import com.gh.common.AppExecutor.heavyWeightIoExecutor
import com.gh.common.AppExecutor.ioExecutor
import com.gh.common.AppExecutor.lightWeightIoExecutor
import com.gh.common.AppExecutor.logExecutor
import com.gh.common.AppExecutor.uiExecutor
import io.reactivex.schedulers.Schedulers
import java.util.concurrent.Executor
import java.util.concurrent.Executors
import java.util.concurrent.*
/**
* APP 线程池管理类
@ -15,16 +17,34 @@ import java.util.concurrent.Executors
* [ioExecutor] 是一个最大线程数固定的线程池,较为繁重的 IO 任务可以交给它
* [uiExecutor] 是主线程的包裹,需要切换至主线程执行可以用它
* [lightWeightIoExecutor] 是一个单线程的线程池,轻量级且需要保证同一线程的 IO 任务可以交给它
*
* [heavyWeightIoExecutor] 重量级的线程池,一些高频调用但不用保证结果的任务可以交给它
* [logExecutor] 只为上传 log 而使用的线程池
*/
object AppExecutor {
private val mCoreSize = Runtime.getRuntime().availableProcessors()
private val mMinimumPoolSize = 6.coerceAtLeast(mCoreSize)
private val mMaximumPoolSize = 24.coerceAtLeast(mCoreSize * 3)
@JvmStatic
val uiExecutor by lazy { MainThreadExecutor() }
@JvmStatic
val lightWeightIoExecutor by lazy { Executors.newSingleThreadExecutor() }
val lightWeightIoExecutor: ExecutorService by lazy { Executors.newSingleThreadExecutor(GHThreadFactory("GH_LIGHT_WEIGHT_IO_THREAD")) }
@JvmStatic
val ioExecutor = Executors.newCachedThreadPool() // 用 by lazy 可能影响初始化速度
val heavyWeightIoExecutor: ExecutorService by lazy { Executors.newFixedThreadPool(2, GHThreadFactory("GH_HEAVY_WEIGHT_IO_THREAD")) }
@JvmStatic
val logExecutor: ExecutorService by lazy { Executors.newSingleThreadExecutor(GHThreadFactory("GH_LOG_THREAD")) }
@JvmStatic
val ioExecutor = ThreadPoolExecutor(
mMinimumPoolSize,
mMaximumPoolSize,
20L, TimeUnit.SECONDS,
LinkedBlockingQueue(256),
GHThreadFactory("GH_IO_THREAD"))
val cachedScheduler by lazy { Schedulers.from(ioExecutor) }
@ -41,14 +61,14 @@ object AppExecutor {
}
}
fun runOnIoThread(isLightWeightTask: Boolean = false, f: () -> Unit) {
if (isLightWeightTask) {
AppExecutor.lightWeightIoExecutor.execute(f)
} else {
AppExecutor.ioExecutor.execute(f)
fun runOnIoThread(isLightWeightTask: Boolean = false, isHeavyWightTask: Boolean = false, f: () -> Unit) {
when {
isLightWeightTask -> lightWeightIoExecutor.execute(f)
isHeavyWightTask -> heavyWeightIoExecutor.execute(f)
else -> ioExecutor.execute(f)
}
}
fun runOnUiThread(f: () -> Unit) {
AppExecutor.uiExecutor.execute(f)
uiExecutor.execute(f)
}

View File

@ -3,38 +3,39 @@ package com.gh.common
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.util.Base64
import android.webkit.JavascriptInterface
import androidx.annotation.Keep
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentActivity
import com.gh.base.CurrentActivityHolder
import com.gh.common.constant.Constants
import com.gh.common.loghub.LoghubUtils
import com.gh.common.tracker.Tracker
import com.gh.common.util.*
import com.gh.common.view.dsbridge.CompletionHandler
import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.ImageViewerActivity
import com.gh.gamecenter.LoginActivity
import com.gh.gamecenter.WebActivity
import com.gh.gamecenter.entity.Badge
import com.gh.gamecenter.entity.MtaEvent
import com.gh.gamecenter.entity.NotificationUgc
import com.gh.gamecenter.*
import com.gh.gamecenter.energy.EnergyCenterActivity
import com.gh.gamecenter.energy.EnergyHouseActivity
import com.gh.gamecenter.entity.*
import com.gh.gamecenter.help.QaFeedbackDialogFragment
import com.gh.gamecenter.manager.UserManager
import com.gh.gamecenter.retrofit.BiResponse
import com.gh.gamecenter.retrofit.RetrofitManager
import com.gh.gamecenter.personalhome.border.AvatarBorderActivity
import com.gh.gamecenter.security.BindPhoneActivity
import com.gh.gamecenter.user.LoginTag
import com.gh.gamecenter.user.UserRepository
import com.halo.assistant.HaloApp
import com.lightgame.utils.Utils
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import okhttp3.ResponseBody
import org.json.JSONObject
import retrofit2.HttpException
import java.io.BufferedOutputStream
import java.io.File
import java.io.FileOutputStream
import java.util.*
import kotlin.collections.ArrayList
class DefaultJsApi(var context: Context) {
private var mLoginHandler: CompletionHandler<Any>? = null
@JavascriptInterface
fun isGhzs(msg: Any): String {
return "true"
@ -64,8 +65,12 @@ class DefaultJsApi(var context: Context) {
@JavascriptInterface
fun login(msg: Any) {
val intent = LoginActivity.getIntent(context, "浏览器")
context.startActivity(intent)
if (SPUtils.getBoolean(Constants.SP_HAS_GET_PHONE_INFO) || NetworkUtils.isOpenMobileData(context)) {
QuickLoginHelper.startLogin(context, "浏览器")
} else {
val intent = LoginActivity.getIntent(context, "浏览器")
context.startActivity(intent)
}
}
@JavascriptInterface
@ -92,7 +97,7 @@ class DefaultJsApi(var context: Context) {
@JavascriptInterface
fun getAppVersionCode(msg: Any): Int {
return PackageUtils.getVersionCode()
return PackageUtils.getGhVersionCode()
}
@JavascriptInterface
@ -108,35 +113,39 @@ class DefaultJsApi(var context: Context) {
wechatLoginInfoMap["access_token"] = jsonContent.getString("access_token")
wechatLoginInfoMap["refresh_token"] = jsonContent.getString("refresh_token")
RetrofitManager.getInstance(HaloApp.getInstance().application)
.api
.postBindWechat(wechatLoginInfoMap.createRequestBody())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : BiResponse<ResponseBody>() {
override fun onSuccess(data: ResponseBody) {
handler.complete(true)
}
WechatBindHelper.bindWechat(wechatLoginInfoMap, object : BiCallback<Boolean, Boolean> {
override fun onFirst(first: Boolean) {
EnergyTaskHelper.postEnergyTask("bind_wechat")
handler.complete(true)
}
override fun onFailure(exception: Exception) {
handler.complete(false)
if (exception is HttpException) {
ErrorHelper.handleError(HaloApp.getInstance().application, exception.response().errorBody()?.string())
}
}
})
override fun onSecond(second: Boolean) {
handler.complete(false)
}
})
LoginHelper.unregisterCallback()
}
override fun onLoginFailure(loginType: LoginTag, error: String) {
handler.complete(false)
LoginHelper.unregisterCallback()
}
})
}
}
@JavascriptInterface
fun refreshWechatBindData(msg: Any) {
WechatBindHelper.getWechatConfig(null)
}
@JavascriptInterface
fun copyText(msg: Any) {
msg.toString().copyTextAndToast()
runOnUiThread {
msg.toString().copyTextAndToast()
}
}
@JavascriptInterface
@ -198,6 +207,7 @@ class DefaultJsApi(var context: Context) {
@JavascriptInterface
fun updateRegulationTestStatus(msg: Any) {
if (msg.toString().toLowerCase(Locale.getDefault()) == "pass") {
EnergyTaskHelper.postEnergyTask("finish_etiquette_exam")
SPUtils.setString(Constants.SP_REGULATION_TEST_PASS_STATUS, "pass")
}
}
@ -215,7 +225,7 @@ class DefaultJsApi(var context: Context) {
@JavascriptInterface
fun showIncompatibleVersionDialog(msg: Any) {
DialogUtils.showLowVersionDialog(context)
DialogHelper.showUpgradeDialog(context)
}
@JavascriptInterface
@ -228,6 +238,20 @@ class DefaultJsApi(var context: Context) {
MessageShareUtils.getInstance(context).shareFromWeb(context, imageShareEvent.type)
}
@JavascriptInterface
fun inviteFriends(event: Any) {
val inviteEvent = event.toString().toObject() ?: InviteFriendsEvent()
val context = CurrentActivityHolder.getCurrentActivity()
if ("poster" == inviteEvent.type) {
Base64ImageHolder.image = inviteEvent.poster.run {
if (this.startsWith("data:image/png;base64")) this.split(",")[1] else this
}
MessageShareUtils.getInstance(context).shareInviteFriends(context, inviteEvent.way)
} else {
ShareUtils.getInstance(context).shareInviteFriends(context, inviteEvent.url, inviteEvent.way)
}
}
@JavascriptInterface
fun bindPhone(msg: Any) {
val intent = BindPhoneActivity.getNormalIntent(context, false)
@ -243,7 +267,7 @@ class DefaultJsApi(var context: Context) {
@JavascriptInterface
fun logoutExitWebViewAndRedirectToLogin() {
UserRepository.getInstance(context).logout()
UserRepository.getInstance().logout()
if (context is Activity) {
AppExecutor.uiExecutor.executeWithDelay(Runnable {
context.ifLogin("内部网页")
@ -257,10 +281,170 @@ class DefaultJsApi(var context: Context) {
runOnUiThread { DirectUtils.directToWebView(context, url.toString(), "内部网页") }
}
@JavascriptInterface
fun postWearBadgeTask(msg: Any) {
EnergyTaskHelper.postEnergyTask("wear_badge")
}
@JavascriptInterface
fun startEnergyCenter(msg: Any) {
context.startActivity(EnergyCenterActivity.getIntent(context))
}
@JavascriptInterface
fun startEnergyHouse(msg: Any) {
context.startActivity(EnergyHouseActivity.getIntent(context))
}
@JavascriptInterface
fun showQaFeedbackDialog(msg: Any) {
QaFeedbackDialogFragment.show(context as AppCompatActivity, msg.toString())
}
@JavascriptInterface
fun getMetaObject(msg: Any): String {
return LogUtils.getMetaObject().toString()
}
@JavascriptInterface
fun getLaunchId(msg: Any): String {
return Tracker.launchId
}
@JavascriptInterface
fun getSessionId(msg: Any): String {
return Tracker.sessionId
}
@JavascriptInterface
fun postLogEvent(event: Any) {
val logEvent = event.toString().toObject() ?: LogEvent()
debugOnly {
Utils.log("LogUtils->${logEvent.jsonString}")
}
LoghubUtils.log(logEvent.jsonString, logEvent.logStore, false)
}
@JavascriptInterface
fun startAvatarBorderPage(msg: Any) {
context.startActivity(AvatarBorderActivity.getIntent(context, msg.toString()))
}
@JavascriptInterface
fun isNetworkConnected(): Boolean {
return NetworkUtils.isNetworkConnected(context)
}
@JavascriptInterface
fun isWifiConnected(): Boolean {
return NetworkUtils.isWifiConnected(context)
}
@JavascriptInterface
fun enableBackToActivity(msg: Any) {
FloatingBackViewManager.enableBackView(FloatingBackViewManager.TYPE_ACTIVITY, msg.toString())
}
@JavascriptInterface
fun startBBSStayTimeCount(msg: Any) {
BbsStayTimeHelper.enableStayTimeCount(msg.toString().toInt())
}
@JavascriptInterface
fun saveBase64ImageToGallery(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)
}
}
}
}
}
@JavascriptInterface
fun loginWithCallback(msg: Any, handler: CompletionHandler<Any>) {
mLoginHandler = handler
login(msg)
}
fun onLogin() {
mLoginHandler?.complete(true)
mLoginHandler = null
}
@JavascriptInterface
fun openInNewFullWebview(url: Any) {
runOnUiThread { DirectUtils.directToFullScreenWebPage(context, url.toString(), true) }
}
@JavascriptInterface
fun startGameCollectionSquareBrowseTask(event: Any) {
val browseTimeEvent = event.toString().toObject() ?: BrowseTaskEvent()
GameCollectionSquareBrowseTaskHelper.enableBrowseTimeCount(
browseTimeEvent.timeout.toInt(),
browseTimeEvent.isFinished == "true"
)
}
@JavascriptInterface
fun checkUpdateGhzs(msg: Any) {
context.startActivity(AboutActivity.getIntent(context, true))
}
@JavascriptInterface
public fun clickGameActivityDownloadBtn(event: Any) {
val gameActivityEvent = event.toString().toObject() ?: GameActivityEvent()
GameActivityDownloadHelper.start(context, gameActivityEvent)
}
@JavascriptInterface
fun isGameActivityTaskCompleted(event: Any, handler: CompletionHandler<Any>) {
val gameActivityEvent = event.toString().toObject() ?: GameActivityEvent()
GameActivityDownloadHelper.checkTaskComplete(context, gameActivityEvent, handler)
}
@JavascriptInterface
fun postGameActivityExposureEvent(event: Any) {
val gameActivityEvent = event.toString().toObject() ?: GameActivityEvent()
GameActivityDownloadHelper.postExposureEvent(gameActivityEvent)
}
@Keep
internal data class ImageEvent(var imageList: ArrayList<String> = arrayListOf(), var position: Int = 0)
@Keep
internal data class ImageShareEvent(var image: String = "", var type: String = "")
@Keep
internal data class InviteFriendsEvent(
var type: String = "",
var way: String = "",
var url: String = "",
var poster: String = ""
)
@Keep
internal data class LogEvent(var jsonString: String = "", var logStore: String = "")
@Keep
internal data class BrowseTaskEvent(var timeout: String = "", var isFinished: String = "")
@Keep
data class GameActivityEvent(
var gameId: String = "",
var activityTitle: String = "",
var activityId: String = "",
var platform: String = ""
)
}

View File

@ -5,20 +5,25 @@ import android.content.Intent
import android.net.Uri
import android.text.TextUtils
import android.util.Base64
import com.gh.base.CurrentActivityHolder
import com.gh.common.constant.Constants
import com.gh.common.util.*
import com.gh.common.util.DirectUtils.directToFeedback
import com.gh.common.util.DirectUtils.directToGameDetailVideoStreaming
import com.gh.common.util.DirectUtils.directToGameServerCalendar
import com.gh.common.util.DirectUtils.directToGameVideo
import com.gh.common.util.DirectUtils.directToLegacyVideoDetail
import com.gh.common.util.DirectUtils.directToLinkPage
import com.gh.common.util.DirectUtils.directToQa
import com.gh.common.util.DirectUtils.directToVideoDetail
import com.gh.common.util.GsonUtils.gson
import com.gh.gamecenter.LibaoDetailActivity
import com.gh.gamecenter.MainActivity
import com.gh.gamecenter.NewsDetailActivity
import com.gh.gamecenter.WebActivity
import com.gh.gamecenter.entity.*
import com.gh.gamecenter.gamecollection.publish.GameCollectionEditActivity
import com.gh.gamecenter.qa.BbsType
import com.gh.gamecenter.qa.video.publish.VideoPublishActivity
import com.gh.gamecenter.subject.SubjectActivity
import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel
import com.lightgame.utils.Utils
@ -28,6 +33,14 @@ object DefaultUrlHandler {
@JvmStatic
fun interceptUrl(context: Context, url: String, entrance: String): Boolean {
return interceptUrl(context, url, entrance, false)
}
/**
* @param bringAppToFront 是否需要在不匹配 host 的时候把 APP 调回到前台 (如微信调起)
*/
@JvmStatic
fun interceptUrl(context: Context, url: String, entrance: String, bringAppToFront: Boolean = false): Boolean {
val uri = Uri.parse(url)
if ("ghzhushou" == uri.scheme) {
Utils.log("url = $url")
@ -38,11 +51,21 @@ object DefaultUrlHandler {
if (!TextUtils.isEmpty(path)) {
id = path!!.substring(1)
}
if (TextUtils.isEmpty(id)) {
id = uri.getQueryParameter("id") ?: ""
}
val intent: Intent
when (host) {
"article" -> context.startActivity(NewsDetailActivity.getIntentById(context, id, entrance))
"game" -> DirectUtils.directToGameDetail(context, id = id, tab = uri.getQueryParameter("to"), autoDownload = uri.getQueryParameter("auto_download") == "true", entrance = entrance)
"game" -> DirectUtils.directToGameDetail(
context,
id = id,
tab = uri.getQueryParameter("to"),
autoDownload = uri.getQueryParameter("auto_download") == "true",
entrance = entrance
)
"column" -> SubjectActivity.startSubjectActivity(context, id, uri.getQueryParameter("name"), false, entrance)
@ -63,9 +86,7 @@ object DefaultUrlHandler {
}
"inurl" -> {
intent = Intent(context, WebActivity::class.java)
intent.putExtra(EntranceUtils.KEY_URL, uri.getQueryParameter("url"))
context.startActivity(intent)
DirectUtils.directToWebView(context, uri.getQueryParameter("url") ?: "")
}
"outurl" -> {
@ -120,8 +141,9 @@ object DefaultUrlHandler {
}
if ("articles" == type) {
DirectUtils.directToCommunityArticle(
context, typeId, communityId,
entrance, "文章链接")
context, typeId, communityId,
entrance, "文章链接"
)
}
}
EntranceUtils.HOST_UPLOAD_VIDEO -> {
@ -141,7 +163,8 @@ object DefaultUrlHandler {
}
EntranceUtils.HOST_USERHOME -> {
val position = uri.getQueryParameter("position")
DirectUtils.directToHomeActivity(context, id, if (position.isNullOrEmpty()) -1 else position.toInt(), entrance, "")
val subtype = uri.getQueryParameter("sub_type") ?: ""
DirectUtils.directToHomeActivity(context, id, subtype, if (position.isNullOrEmpty()) -1 else position.toInt(), entrance, "")
}
EntranceUtils.HOST_VIDEO_MORE -> {
val referer = uri.getQueryParameter("referer") ?: ""
@ -151,7 +174,7 @@ object DefaultUrlHandler {
val fieldId = uri.getQueryParameter("fieldId") ?: ""
val sectionName = uri.getQueryParameter("sectionName") ?: ""
val paginationType = uri.getQueryParameter("paginationType")
?: "page"//活动分页方式 page filter
?: "page"//活动分页方式 page filter
val location = if (!TextUtils.isEmpty(act)) {
VideoDetailContainerViewModel.Location.VIDEO_ACTIVITY.value
} else if (!TextUtils.isEmpty(fieldId)) {
@ -159,12 +182,31 @@ object DefaultUrlHandler {
} else {
id
}
directToVideoDetail(context, id, location, false, gameId, entrance, "", referer, type, act, paginationType, fieldId, sectionName)
directToLegacyVideoDetail(
context,
id,
location,
false,
gameId,
entrance,
"",
referer,
type,
act,
paginationType,
fieldId,
sectionName
)
}
EntranceUtils.HOST_VIDEO_DETAIL -> {
DirectUtils.directToVideoDetail(context, id, entrance, path)
}
EntranceUtils.HOST_VIDEO_SINGLE -> {
val referer = uri.getQueryParameter("referer") ?: ""
directToVideoDetail(context, id, VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value,
false, "", entrance, "", if (TextUtils.isEmpty(referer)) "" else referer)
DirectUtils.directToVideoDetail(
context, id, VideoDetailContainerViewModel.Location.SINGLE_VIDEO.value,
false, "", entrance, "", if (TextUtils.isEmpty(referer)) "" else referer
)
}
EntranceUtils.HOST_VIDEO_STREAMING_HOME -> {
intent = Intent(context, MainActivity::class.java)
@ -207,7 +249,7 @@ object DefaultUrlHandler {
EntranceUtils.HOST_BLOCK -> {
val name = uri.getQueryParameter("name")
?: ""
?: ""
val entity = SubjectRecommendEntity(link = id, name = name, text = name)
DirectUtils.directToBlock(context, entity, entrance)
}
@ -222,13 +264,13 @@ object DefaultUrlHandler {
EntranceUtils.HOST_HELP -> {
val name = uri.getQueryParameter("name")
?: ""
?: ""
DirectUtils.directToQa(context, name, id)
}
EntranceUtils.HOST_HELP_COLLECTION -> {
val name = uri.getQueryParameter("name")
?: ""
?: ""
DirectUtils.directToQaCollection(context, name, id)
}
@ -256,10 +298,11 @@ object DefaultUrlHandler {
EntranceUtils.HOST_GAME_NEWS -> {
DirectUtils.directToGameNews(
context,
uri.getQueryParameter(EntranceUtils.KEY_GAME_ID),
uri.getQueryParameter(EntranceUtils.KEY_GAME_NAME),
entrance);
context,
uri.getQueryParameter(EntranceUtils.KEY_GAME_ID),
uri.getQueryParameter(EntranceUtils.KEY_GAME_NAME),
entrance
);
}
EntranceUtils.HOST_GAME_CALENDAR -> {
@ -275,11 +318,56 @@ object DefaultUrlHandler {
}
EntranceUtils.HOST_GAME_RATING_DETAIL -> {
DirectUtils.directToGameRatingDetail(context, uri.getQueryParameter(EntranceUtils.KEY_GAME_ID), uri.getQueryParameter(EntranceUtils.KEY_COMMENT_ID), EntranceUtils.ENTRANCE_BROWSER)
DirectUtils.directToGameRatingDetail(
context,
uri.getQueryParameter(EntranceUtils.KEY_GAME_ID),
uri.getQueryParameter(EntranceUtils.KEY_COMMENT_ID),
EntranceUtils.ENTRANCE_BROWSER
)
}
EntranceUtils.HOST_FORUM -> {
DirectUtils.directToForum(context)
val position = uri.getQueryParameter(EntranceUtils.KEY_POSITION)?.toInt()
DirectUtils.directToForum(context, position ?: 0)
}
EntranceUtils.HOST_UPLOAD_VIDEO_NEW -> {
val activityName = uri.getQueryParameter("activity_name") ?: ""
val activityId = uri.getQueryParameter("activity_id") ?: ""
val original = uri.getQueryParameter("original") ?: ""
val forumName = uri.getQueryParameter("forum_name") ?: ""
val forumId = uri.getQueryParameter("forum_id") ?: ""
val forumIcon = uri.getQueryParameter("forum_icon") ?: ""
val forumType = uri.getQueryParameter("forum_type") ?: BbsType.OFFICIAL_BBS.value
val gameId = uri.getQueryParameter("game_id") ?: ""
val gameName = uri.getQueryParameter("game_name") ?: ""
val icon = uri.getQueryParameter("game_icon") ?: ""
val iconSubscript = uri.getQueryParameter("game_icon_subscript") ?: ""
val gameEntity =
if (forumType == BbsType.OFFICIAL_BBS.value && gameId.isNotEmpty() && gameName.isNotEmpty() && icon.isNotEmpty()) {
GameEntity(id = gameId, mName = gameName, mIcon = icon, mIconSubscript = iconSubscript)
} else null
val activityLabelEntity = if (activityId.isNotEmpty() && activityName.isNotEmpty()) {
ActivityLabelEntity(id = activityId, name = activityName, original = original.ifEmpty { "false" }.toBoolean())
} else null
val communityEntity = if (forumId.isNotEmpty() && forumName.isNotEmpty() && forumIcon.isNotEmpty()) {
CommunityEntity(id = forumId, name = forumName, icon = forumIcon)
} else null
context.startActivity(
VideoPublishActivity.getIntent(
context,
communityEntity,
gameEntity,
activityLabelEntity,
forumType,
disableForumSelection = false,
isFromCommunityActivity = true,
entrance,
""
)
)
}
EntranceUtils.HOST_SUGGESTION -> {
@ -287,19 +375,25 @@ object DefaultUrlHandler {
val platformName = PlatformUtils.getInstance(context).getPlatformName(platform)
val gameId = uri.getQueryParameter(EntranceUtils.KEY_GAMEID)
val packageMd5 = uri.getQueryParameter(EntranceUtils.KEY_PACKAGE_MD5)
val content = if (TextUtils.isEmpty(gameId) || TextUtils.isEmpty(packageMd5)) String.format("%s-%s-V%s",
uri.getQueryParameter(EntranceUtils.KEY_GAME_NAME),
if (TextUtils.isEmpty(platformName)) platform else platformName,
uri.getQueryParameter(EntranceUtils.KEY_VERSION)) else String.format("%s-%s-V%s\n游戏ID%s\n游戏包MD5%s\n",
uri.getQueryParameter(EntranceUtils.KEY_GAME_NAME),
if (TextUtils.isEmpty(platformName)) platform else platformName,
uri.getQueryParameter(EntranceUtils.KEY_VERSION), gameId, packageMd5)
val isQaFeedback = uri.getQueryParameter(EntranceUtils.KEY_IS_QA_FEEDBACK) == "true"
val content = if (TextUtils.isEmpty(gameId) || TextUtils.isEmpty(packageMd5)) String.format(
"%s-%s-V%s",
uri.getQueryParameter(EntranceUtils.KEY_GAME_NAME),
if (TextUtils.isEmpty(platformName)) platform else platformName,
uri.getQueryParameter(EntranceUtils.KEY_VERSION)
) else String.format(
"%s-%s-V%s\n游戏ID%s\n游戏包MD5%s\n",
uri.getQueryParameter(EntranceUtils.KEY_GAME_NAME),
if (TextUtils.isEmpty(platformName)) platform else platformName,
uri.getQueryParameter(EntranceUtils.KEY_VERSION), gameId, packageMd5
)
val qaId = uri.getQueryParameter("qa_id") ?: ""
val qaContentId = uri.getQueryParameter(EntranceUtils.KEY_QA_CONTENT_ID) ?: ""
val qaTitle = uri.getQueryParameter(EntranceUtils.KEY_QA_TITLE)
if (!TextUtils.isEmpty(qaId)) {
directToQa(context, qaTitle, qaId)
} else {
directToFeedback(context, content, EntranceUtils.ENTRANCE_BROWSER)
directToFeedback(context, content, null, isQaFeedback, qaContentId, EntranceUtils.ENTRANCE_BROWSER)
}
}
@ -307,7 +401,50 @@ object DefaultUrlHandler {
val position = uri.getQueryParameter("position") ?: ""
DirectUtils.directToHelpAndFeedback(context, position.toInt())
}
else -> DialogUtils.showLowVersionDialog(context)
EntranceUtils.HOST_HELP_DETAIL -> {
var url = uri.getQueryParameter("url")
if (!url.isNullOrEmpty()) {
context.startActivity(WebActivity.getIntent(context, url, false))
} else {
url = if (EnvHelper.isDevEnv) {
Constants.HELP_ADDRESS_DEV
} else {
Constants.HELP_ADDRESS
}
val id = uri.getQueryParameter("id")
val name = uri.getQueryParameter("name")
val qaCollectionId = uri.getQueryParameter("collection_id")
context.startActivity(WebActivity.getIntent(context, "$url$id", name, true, !qaCollectionId.isNullOrEmpty()))
}
}
EntranceUtils.HOST_GAME_COLLECTION_DETAIL -> {
DirectUtils.directToGameCollectionDetail(context, id, entrance)
}
EntranceUtils.HOST_GAME_COLLECTION_SQUARE -> {
DirectUtils.directToGameCollectionSquare(context, entrance)
}
EntranceUtils.HOST_GAME_COLLECTION_EDIT -> {
context.startActivity(GameCollectionEditActivity.getIntent(context, entrance))
}
else -> {
if (bringAppToFront) {
DirectUtils.directToMainActivity(context)
if (!TextUtils.isEmpty(host)) {
AppExecutor.uiExecutor.executeWithDelay({
CurrentActivityHolder.getCurrentActivity()?.let {
DialogHelper.showUpgradeDialog(it)
}
}, 200)
}
} else {
DialogHelper.showUpgradeDialog(context)
}
}
}
return true
} else if ("zhiqu" == uri.scheme) {
@ -344,6 +481,11 @@ object DefaultUrlHandler {
return true
}
// 处理内部页面逻辑
if (transformNormalScheme(context, url, entrance)) {
return true
}
if ("http" != uri.scheme && "https" != uri.scheme) return true
return false
}
@ -352,15 +494,17 @@ object DefaultUrlHandler {
fun transformNormalScheme(context: Context, url: String, entrance: String): Boolean {
val uri = Uri.parse(url)
if (uri.host == "www.ghzs666.com"
|| uri.host == "www.ghzs.com"
|| uri.host == "ask.ghzs.com"
|| uri.host == "m.ghzs.com"
|| uri.host == "m.ghzs666.com") {
|| uri.host == "www.ghzs.com"
|| uri.host == "ask.ghzs.com"
|| uri.host == "m.ghzs.com"
|| uri.host == "m.ghzs666.com"
) {
Utils.log(uri.path)
uri.path?.apply {
when {
contains("game") -> {
val gameId = uri.getQueryParameter("gameId") ?: ""
val gameId = uri.getQueryParameter("gameId") ?: uri.pathSegments.last()
?: ""
DirectUtils.directToGameDetail(context, gameId, entrance, autoDownload = false, traceEvent = null)
}
contains("question") -> {
@ -372,11 +516,14 @@ object DefaultUrlHandler {
DirectUtils.directToAnswerDetail(context, answerId, entrance, "")
}
}
contains("communities") && contains("article") -> {
((contains("bbs")) && contains("article") ||
(contains("communities")) && contains("article")) -> {
var communityId = ""
var type = ""
var typeId = ""
val split = replace("/communities", "").replace(".html", "").split("/".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
val split =
replace("/communities", "").replace("/bbs", "").replace(".html", "").split("/".toRegex()).dropLastWhile { it.isEmpty() }
.toTypedArray()
for (text in split) {
if (TextUtils.isEmpty(communityId)) {
communityId = text
@ -390,15 +537,20 @@ object DefaultUrlHandler {
typeId = text
}
}
if ("articles" == type) {
if ("articles" == type || "article" == type) {
DirectUtils.directToCommunityArticle(
context, typeId, communityId,
entrance, "文章链接")
context, typeId, communityId,
entrance, "文章链接"
)
}
}
contains("article") -> {
val articleId = split("/")[2].replace(".html", "")
DirectUtils.directToArticle(context, articleId, entrance)
if (entrance == "隐私政策") {
DirectUtils.directToArticle(context, articleId, true, entrance)
} else {
DirectUtils.directToArticle(context, articleId, entrance)
}
}
contains("columns") -> {
val columnsId = split("/")[3]
@ -406,14 +558,35 @@ object DefaultUrlHandler {
val name = uri.getQueryParameter("communityName") ?: ""
DirectUtils.directToCommunityColumn(context, CommunityEntity(id, name), columnsId, entrance, "")
}
contains("zone") -> {
contains("zone") && split("/").size > 2 -> {
val gameId = split("/")[2]
DirectUtils.directGameZone(context, gameId, url, entrance)
}
else -> return false
}
}
return true
}
return false
}
/**
* 将 url 转换为 LinkEntity (实际只有 type 和 link 两个字段,仅供日志,不保证能用)
*/
fun urlToLinkEntity(url: String): LinkEntity? {
val uri = Uri.parse(url)
if ("ghzhushou" == uri.scheme) {
Utils.log("url = $url")
Utils.log("url = " + uri.scheme!!)
val host = uri.host
val path = uri.path
var id = ""
if (!TextUtils.isEmpty(path)) {
id = path!!.substring(1)
}
return LinkEntity(type = host, link = id)
}
return null
}
}

View File

@ -11,6 +11,7 @@ import com.gh.gamecenter.entity.TimeEntity
import com.gh.gamecenter.retrofit.Response
import com.gh.gamecenter.retrofit.RetrofitManager
import com.halo.assistant.HaloApp
import io.reactivex.schedulers.Schedulers
import kotlin.concurrent.fixedRateTimer
object FixedRateJobHelper {
@ -34,8 +35,8 @@ object FixedRateJobHelper {
fixedRateTimer("Global-Fixed-Rate-Timer", initialDelay = 100, period = CHECKER_PERIOD) {
// 时间校对10分钟一次
if ((mExecuteCount * CHECKER_PERIOD) % TIME_PERIOD == 0L) {
RetrofitManager.getInstance(HaloApp.getInstance().application).api.time
.subscribeOn(AppExecutor.cachedScheduler)
RetrofitManager.getInstance().api.time
.subscribeOn(Schedulers.io())
.subscribe(object : Response<TimeEntity>() {
override fun onResponse(response: TimeEntity?) {
val serverTime = response?.time

View File

@ -22,7 +22,7 @@
// ChatActivity.ACTION_DISMISS_FLOATING_WINDOW -> {
// ImManager.dismissFloatingWindow()
//
// RetrofitManager.getInstance(HaloApp.getInstance().application).api.postImEnding(UserManager.getInstance().userId)
// RetrofitManager.getInstance().api.postImEnding(UserManager.getInstance().userId)
// .subscribeOn(Schedulers.io())
// .subscribe()
// }

View File

@ -78,7 +78,7 @@ object PushManager {
//
// val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString())
//
// RetrofitManager.getInstance(mApplication).api.getAlias(body)
// RetrofitManager.getInstance().api.getAlias(body)
// .subscribeOn(Schedulers.io())
// .subscribe(
// { setAlias(it) },

View File

@ -5,6 +5,7 @@ import android.app.Application
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import com.gh.base.GHThreadFactory
import com.halo.assistant.HaloApp
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
@ -29,31 +30,31 @@ class TimeElapsedHelper(val fragment: Fragment?, val activity: Activity?) {
init {
activity?.application?.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
override fun onActivityStarted(a: Activity?) {
override fun onActivityStarted(a: Activity) {
}
override fun onActivitySaveInstanceState(a: Activity?, outState: Bundle?) {
override fun onActivitySaveInstanceState(a: Activity, outState: Bundle) {
}
override fun onActivityStopped(a: Activity?) {
override fun onActivityStopped(a: Activity) {
}
override fun onActivityCreated(a: Activity?, savedInstanceState: Bundle?) {
override fun onActivityCreated(a: Activity, savedInstanceState: Bundle?) {
}
override fun onActivityPaused(a: Activity?) {
override fun onActivityPaused(a: Activity) {
if (activity == a) {
pauseCounting()
}
}
override fun onActivityResumed(a: Activity?) {
override fun onActivityResumed(a: Activity) {
if (activity == a) {
resumeCounting()
}
}
override fun onActivityDestroyed(a: Activity?) {
override fun onActivityDestroyed(a: Activity) {
if (activity == a) {
HaloApp.getInstance().application.unregisterActivityLifecycleCallbacks(this)
}
@ -114,7 +115,7 @@ class TimeElapsedHelper(val fragment: Fragment?, val activity: Activity?) {
}
object TimeElapsedThreadHolder {
val threadService: ExecutorService by lazy { Executors.newSingleThreadExecutor() }
val threadService: ExecutorService by lazy { Executors.newSingleThreadExecutor(GHThreadFactory("TIME_ELAPSED_THREAD")) }
}
interface TimeoutCallback {

View File

@ -1,36 +1,49 @@
package com.gh.common.constant;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import com.gh.common.util.EnvHelper;
import com.gh.common.util.GsonUtils;
import com.gh.common.util.PackageHelper;
import com.gh.common.util.PackageUtils;
import com.gh.common.util.SPUtils;
import com.gh.gamecenter.BuildConfig;
import com.gh.gamecenter.SuggestionActivity;
import com.gh.gamecenter.entity.GameGuidePopupEntity;
import com.gh.gamecenter.entity.NewSettingsEntity;
import com.gh.gamecenter.entity.NewsEntity;
import com.gh.gamecenter.entity.SettingsEntity;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.retrofit.BiResponse;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
import com.halo.assistant.HaloApp;
import com.lightgame.utils.Utils;
import org.greenrobot.eventbus.EventBus;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import androidx.annotation.Nullable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
public class Config {
public static final String API_HOST = BuildConfig.API_HOST;
public static final String SENSITIVE_API_HOST = BuildConfig.SENSITIVE_API_HOST;
// 这个 API_HOST 在测试包里会随着选择的环境切换,正式包里会一直保持正式 host
public static final String API_HOST = EnvHelper.getHost();
public static final String NEW_API_HOST = EnvHelper.getNewHost();
/**
* 需要配置的请使用{@link PreferenceManager#getDefaultSharedPreferences(Context)}
@ -41,26 +54,20 @@ public class Config {
public static final String WECHAT_SECRET = BuildConfig.WECHAT_SECRET;
public static final String TENCENT_APPID = BuildConfig.TENCENT_APPID;
public static final String WEIBO_APPKEY = BuildConfig.WEIBO_APPKEY;
public static final String MIPUSH_APPID = BuildConfig.MIPUSH_APPID;
public static final String MIPUSH_APPKEY = BuildConfig.MIPUSH_APPKEY;
public static final String MTA_APPKEY = BuildConfig.MTA_APPKEY;
public static final String TALKINGDATA_APPID = BuildConfig.TD_APPID;// TalkingData
public static final String UMENG_APPKEY = BuildConfig.UMENG_APPKEY;
public static final String UMENG_MESSAGE_SECRET = BuildConfig.UMENG_MESSAGE_SECRET;
public static final String BUGLY_APPID = BuildConfig.BUGLY_APPID;
public static final String LETO_APPID = BuildConfig.LETO_APPID;
public static final String TTAD_APPID = BuildConfig.TTAD_APPID;
public static final String DOUYIN_CLIENTKEY = BuildConfig.DOUYIN_CLIENTKEY;
public static final String DOUYIN_CLIENTSECRET = BuildConfig.DOUYIN_CLIENTSECRET;
public static final String QUICK_LOGIN_APPID = BuildConfig.QUICK_LOGIN_APPID;
public static final String QUICK_LOGIN_APPKEY = BuildConfig.QUICK_LOGIN_APPKEY;
// http://www.ghzs666.com/article/${articleId}.html
public static final String URL_ARTICLE = "http://www.ghzs666.com/article/"; // ghzs/ghzs666 统一
public static final String PATCHES = "patches";
public static final String DEFAULT_CHANNEL = "GH_TEST";
public static final String DEFAULT_CHANNEL = "GH_TEST3";
public static final String DEFAULT_CHANNEL_FOR_RELEASE = "GH_LOST"; // 正式包的缺省渠道,避免因渠道丢失而回落到测试渠道
private static String SETTINGS_KEY = "settingsKey";
private static SettingsEntity mSettingsEntity;
private static NewSettingsEntity mNewSettingsEntity;
private static GameGuidePopupEntity mGameGuidePopupEntity;
private static SharedPreferences mDefaultSharedPreferences;
public static final String FIX_DOWNLOAD_KEY = "isFixDownload";
public static final String FIX_PLUGIN_KEY = "isFixPlugin";
@ -70,6 +77,8 @@ public class Config {
public static final int VIDEO_PAGE_SIZE = 21; // 视频列表大多都是一行3个
public static boolean isShow() {
if (SPUtils.getBoolean(Constants.SP_TEENAGER_MODE)) return false;
if (getPreferences().getBoolean(FIX_DOWNLOAD_KEY, false)) return true;
if (!isExistDownloadFilter()) return false;
@ -203,6 +212,26 @@ public class Config {
return mSettingsEntity;
}
@Nullable
public static NewSettingsEntity getNewSettingsEntity() {
if (mNewSettingsEntity == null) {
try {
String json = SPUtils.getString(Constants.SP_NEW_SETTINGS);
if (!TextUtils.isEmpty(json)) {
mNewSettingsEntity = GsonUtils.fromJson(json, NewSettingsEntity.class);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return mNewSettingsEntity;
}
@Nullable
public static GameGuidePopupEntity getGameGuidePopupEntity() {
return mGameGuidePopupEntity;
}
private static boolean isExistDownloadFilter() {
if (getSettings() == null || getSettings().getDownload() == null || getSettings().getDownload().size() == 0) {
return false;
@ -225,7 +254,11 @@ public class Config {
}
public static SharedPreferences getPreferences() {
return PreferenceManager.getDefaultSharedPreferences(HaloApp.getInstance().getApplication());
if (mDefaultSharedPreferences == null) {
mDefaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(HaloApp.getInstance().getApplication());
}
return mDefaultSharedPreferences;
}
public static boolean isExistHideFunction() {
@ -255,10 +288,11 @@ public class Config {
editor.apply();
}
@SuppressLint("CheckResult")
public static void getGhzsSettings() {
String channel = HaloApp.getInstance().getChannel();
RetrofitManager.getInstance(HaloApp.getInstance().getApplication())
.getSensitiveApi().getSettings(PackageUtils.getVersionName(), channel)
RetrofitManager.getInstance()
.getApi().getSettings(PackageUtils.getGhVersionName(), channel)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Response<SettingsEntity>() {
@ -275,8 +309,53 @@ public class Config {
if (!getPreferences().getBoolean(Config.FIX_DOWNLOAD_KEY, false) && Config.isShow()) {
getPreferences().edit().putBoolean(Config.FIX_DOWNLOAD_KEY, true).apply();
}
EventBus.getDefault().post(new EBReuse("Refresh"));
if (!SPUtils.getBoolean(Constants.SP_TEENAGER_MODE)) {
EventBus.getDefault().post(new EBReuse("Refresh"));
}
}
});
RetrofitManager.getInstance()
.getApi().getNewSettings(Build.MANUFACTURER, Build.MODEL, channel, Build.VERSION.SDK_INT, BuildConfig.VERSION_NAME)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BiResponse<NewSettingsEntity>() {
@Override
public void onSuccess(NewSettingsEntity data) {
mNewSettingsEntity = data;
SPUtils.setString(Constants.SP_NEW_SETTINGS, GsonUtils.toJson(data));
}
});
RetrofitManager.getInstance()
.getApi().getGameGuidePopup(Build.MANUFACTURER, Build.VERSION.RELEASE, Build.MODEL, channel, BuildConfig.VERSION_NAME)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BiResponse<GameGuidePopupEntity>() {
@Override
public void onSuccess(GameGuidePopupEntity data) {
mGameGuidePopupEntity = data;
}
});
String manufacturer = Build.MANUFACTURER.toUpperCase(Locale.CHINA);
if (manufacturer.equals("OPPO") || manufacturer.equals("VIVO")) {
RetrofitManager.getInstance().getNewApi().getBrowserHintUrl(manufacturer)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BiResponse<ResponseBody>() {
@Override
public void onSuccess(ResponseBody data) {
try {
JSONObject jsonObject = new JSONObject(data.string());
if (!TextUtils.isEmpty(jsonObject.getJSONObject("data").getString("link"))) {
SPUtils.setString(Constants.SP_BROWSER_HINT_URL, jsonObject.getJSONObject("data").getString("link"));
}
} catch (JSONException | IOException e) {
e.printStackTrace();
}
}
});
}
}
}

View File

@ -1,6 +1,7 @@
package com.gh.common.constant;
import com.gh.common.util.PackageUtils;
import com.gh.common.util.TimeUtils;
import com.halo.assistant.HaloApp;
public class Constants {
@ -27,12 +28,16 @@ public class Constants {
public static final String GAME_DETAIL_COME_IN = "game_detail_come_in"; // 从游戏详情进入
public static final String SPLASH_AD = "splash_ad"; // 启动广告
public static final String XPOSED_INSTALLER_PACKAGE_NAME = "de.robv.android.xposed.installer";
public static final String EB_QUIT_LOGIN = "quit_login";
// 用于避免历史下载掺和到普通下载状态的 ID 修饰符
public static final String GAME_ID_DIVIDER = ":";
public static final String EB_SHOW_AD = "show_ad";
public static final String EB_GAME_DETAIL = "eb_game_detail";
// 用于避免历史下载影响到部分依赖名字作为数据更新条件的修饰符
public static final String GAME_NAME_DECORATOR = " ";
@ -44,15 +49,26 @@ public class Constants {
// 最近显示的弹窗信息
public static final String SP_LAST_OPENING_ID = "last_opening_dialog_id";
public static final String SP_LAST_OPENING_TIME = "last_opening_dialog_time";
public static final String SP_LAST_ACCEPTED_PRIVACY_DIALOG_ID = "last_accepted_privacy_dialog_id";
// 游戏图标和图标角标
public static final String RAW_GAME_ICON = "raw_game_icon";
public static final String GAME_ICON_SUBSCRIPT = "game_icon_subscript";
public static final String IS_PLATFORM_RECOMMEND = "isPlatformRecommend";
// 下载 id一般来说跟下载文件名一样
public static final String DOWNLOAD_ID = "download_id";
public static final String GHZS_GAME_ID = "5ae4462c2924bc7936438d07";
public static final String EXTRA_DOWNLOAD_TYPE = "extra_download_type";
public static final String SILENT_UPDATE = "静默更新";
public static final String SIMULATOR_DOWNLOAD = "下载模拟器";
public static final String SIMULATOR_GAME = "simulator_game";
public static final String SIMULATOR = "simulator";
public static final String GAME_NAME = "game_name";
public static final String SIMULATOR_DOWNLOAD_START_TIME = "simulator_download_start_time";
public static final String LAST_GHZS_UPDATE_FILE_SIZE = "last_ghzs_update_file_size";
@ -62,6 +78,17 @@ public class Constants {
public static final String SP_IMEI = "imei";
public static final String SP_ANDROID_ID = "android_id";
// 安装类型
public static final String SP_INSTALL_TYPE = "install_type";
public static final String LAST_INSTALL_GAME = "last_install_game";
// 骨架图配置
public static final int SHIMMER_ANGLE = 18;
public static final int SHIMMER_DURATION = 1200;
public static final float MASK_WIDTH = 0.8F;
public static final float GRADIENT_CENTER_COLOR_WIDTH = 0.1F;
//引导设置 “通知管理” 引导弹窗
public static final String SP_SHOWED_NOTIFICATION_LOGIN = "show_notification_login_hint";
public static final String SP_SHOWED_NOTIFICATION_QUESTION = "show_notification_question_hint";
@ -77,11 +104,11 @@ public class Constants {
// 今天是否已经触发了 “通知管理” 引导弹窗
public static final String SP_IS_SHOWED_NOTIFICATION_TODAY = "show_is_notification_today";
// v4.0.0已废弃,标记安装的游戏为已玩过弹窗最多取消2次 (https://gitlab.ghzs.com/pm/halo-app-issues/issues/722 调整为版本相关) (不是常量了也放这里好像有点奇怪)
public static final String SP_MARK_INSTALLED_GAME = "mark_installed_game" + PackageUtils.getVersionName();
public static final String SP_MARK_INSTALLED_GAME = "mark_installed_game" + PackageUtils.getGhVersionName();
// 标记安装的游戏为已玩过弹窗(个人主页最多弹一次)
public static final String SP_MARK_INSTALLED_GAME_USER_HOME = "mark_installed_game_user_home" + PackageUtils.getVersionName();
public static final String SP_MARK_INSTALLED_GAME_USER_HOME = "mark_installed_game_user_home" + PackageUtils.getGhVersionName();
// 标记安装的游戏为已玩过弹窗(我的游戏最多弹一次)
public static final String SP_MARK_INSTALLED_GAME_MY_GAME = "mark_installed_game_my_game" + PackageUtils.getVersionName();
public static final String SP_MARK_INSTALLED_GAME_MY_GAME = "mark_installed_game_my_game" + PackageUtils.getGhVersionName();
//视频详情滑动引导
public static final String SP_SHOW_SLIDE_GUIDE = "show_slide_guide";
//视频详情点击引导
@ -106,8 +133,6 @@ public class Constants {
public static final String SP_FILTER_TAGS = "filter_tags";
//实名认证弹窗分类数据
public static final String SP_AUTH_DIALOG = "auth_dialog";
//顶部视频进度保存,重启恢复
public static final String SP_TOP_VIDEO_SCHEDULE = "top_video_schedule";
//我的光环小红点提示
public static final String SP_GH_RED_POINT_REMIND = "gh_red_point_remind";
//论坛首页引导
@ -131,10 +156,100 @@ public class Constants {
public static final String SP_BRAND_NEW_USER = "brand_new_user";
//包名检测是否点击不再提示
public static final String SP_PACKAGE_CHECK = "package_check";
//游戏详情预约引导提示
public static final String SP_GAME_DETAIL_RESERVE_GUIDE = "game_detail_reserve_guide";
public static final String SP_XAPK_UNZIP_ACTIVITY = "xapk_unzip_activity";
public static final String SP_XAPK_URL = "xapk_url";
//游戏详情推荐弹窗
public static final String SP_RECOMMEND_POPUP = "recommend_popup";
// 设备实名信息
public static final String SP_DEVICE_CERTIFICATION_PREFIX = "device_certification_prefix";
// 使用浏览器安装开关
public static final String SP_USE_BROWSER_TO_INSTALL = "use_browser_to_install";
// 游戏详情页底部使用浏览器安装提示
public static final String SP_SHOULD_SHOW_GAMEDETAIL_USE_BROWSER_TO_INSTALL_HINT = "should_show_gamedetail_use_browser_to_install_hint";
// 第一次普通安装推荐使用浏览器安装提示
public static final String SP_SHOULD_SHOW_USE_BROWSER_TO_INSTALL_HINT = "should_show_use_browser_to_install_hint";
// 游戏详情切换安装方式显示开关
public static final String SP_SWITCH_INSTALL_VISIBLE = "sp_switch_install_visible";
//模拟器管理引导
public static final String SP_SIMULATOR_GUIDE = "simulator_guide";
//模拟器游戏引导
public static final String SP_SIMULATOR_GAME_GUIDE = "simulator_game_guide";
// 临时设备ID (本地生成与GID不相关)
public static final String SP_TEMPORARY_DEVICE_ID = "temporary_device_id";
// 光环助手最后的安装(更新)时间
public static final String SP_GH_LAST_UPDATE_TIME = "gh_last_update_time";
//首页视频播放进度
public static final String SP_HOME_VIDEO_PLAY_RECORD = "home_video_play_record";
// 论坛内容视频播放进度
public static final String SP_CONTENT_VIDEO_PLAY_RECORD = "content_video_play_record";
// 用户是否曾经永久拒绝过存储权限
public static final String SP_USER_HAS_PERMANENTLY_DENIED_STORAGE_PERMISSION = "user_has_permanently_denied_storage_permission";
// 是否已经填写邀请码
public static final String SP_HAS_COMPLETE_INVITE_CODE = "has_complete_invite_code";
// 补充配置项
public static final String SP_NEW_SETTINGS = "new_settings";
// 头像挂件ID
public static final String SP_CHOOSE_AVATAR_ID = "choose_avatar_id";
// 是否第一次进入新分类2.0
public static final String SP_FIRST_ENTER_CATEGORY_V2 = "first_enter_category_v2";
// 是否成功取过号
public static final String SP_HAS_GET_PHONE_INFO = "has_get_phone_info";
// 是否点击过更换背景按钮
public static final String SP_HAS_CLICK_CHANGE_BG = "has_click_change_bg";
// 是否显示更换背景提示
public static final String SP_SHOW_CHANGE_BG_TIPS = "show_change_bg_tips" + TimeUtils.getStartTimeOfToday();
// 新分类2.0引导
public static final String SP_SHOW_CATEGORY_GUIDE = "show_category_guide";
// 用户是否需要 weibo x86 so
public static final String SP_USER_NEED_WEIBO_X86_SO = "user_need_weibo_x86_so";
// 当前设备是不是模拟器
public static final String SP_IS_EMULATOR = "is_emulator";
// 内容视频播放选项
public static final String SP_CONTENT_VIDEO_OPTION = "content_video_option";
// 首页/游戏详情页视频播放选项
public static final String SP_HOME_OR_DETAIL_VIDEO_OPTION = "home_or_detail_video_option";
// 是否默认静音播放视频
public static final String SP_VIDEO_PLAY_MUTE = "video_play_mute";
//帖子发布页上传视频引导
public static final String SP_ARTICLE_VIDEO_GUIDE = "article_video_guide";
//问题发布页上传视频引导
public static final String SP_QUESTION_VIDEO_GUIDE = "question_video_guide";
// 论坛详情申请版主引导
public static final String SP_FORUM_DETAIL_MODERATOR_GUIDE = "forum_detail_moderator_guide";
// 游戏详情安装引导
public static final String SP_GAME_DETAIL_INSTALL_GUIDE = "game_detail_install_guide";
public static final String SP_SHOULD_SHOW_GAME_DETAIL_INSTALL_GUIDE = "should_show_game_detail_install_guide";
// 儿童/青少年模式
public static final String SP_TEENAGER_MODE = "teenager_mode";
// 我的游戏引导
public static final String SP_MY_GAME_GUIDE = "my_game_guide";
//微信绑定配置信息
public static final String SP_WECHAT_CONFIG = "wechat_config";
//游戏库导航栏小红点提示
public static final String SP_GAME_NAVIGATION = "game_navigation";
//手机号码匹配规则
public static final String REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
public static final String REGEX_ACCOUNT = "^[a-zA-Z_]\\w{5,17}$";
@ -144,8 +259,8 @@ public class Constants {
public static final String INPUT_RULE = "0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ_";
// 微信绑定地址
public static final String WECHAT_BIND_ADDRESS_DEV = "https://resource.ghzs.com/page/wechat_dev/index.html#/";
public static final String WECHAT_BIND_ADDRESS = "https://resource.ghzs.com/page/wechat_pro/index.html#/";
public static final String WECHAT_BIND_ADDRESS_DEV = "https://dev-and-static.ghzs.com/web/wechat_bind/index.html#/";
public static final String WECHAT_BIND_ADDRESS = "https://and-static.ghzs.com/web/wechat_bind/index.html#/";
// 礼仪考试地址
public static final String REGULATION_TEST_ADDRESS_DEV = "https://static-web.ghzs.com/etiquette-dev/index.html#/";
@ -169,13 +284,99 @@ public class Constants {
//版规声明
public static final String FORUM_REGULATIONS_NEWS_ID = "5f4db9cc34d44d01b92fd670";
// 权限使用场景地址
public static final String PERMISSION_SCENARIO_ADDRESS = "https://resource.ghzs.com/page/permissions/android.html";
//帮助内容详情
public static final String HELP_ADDRESS_DEV = "https://static-web.ghzs.com/ghzs_help_dev/help.html?content=";
public static final String HELP_ADDRESS = "https://static-web.ghzs.com/ghzs_help/help.html?content=";
// 注销页面
public static final String LOGOUT_ADDRESS_DEV = "https://static-web.ghzs.com/ghzs_help_dev/help.html?content=5f6b1f02786564003944a693";
public static final String LOGOUT_ADDRESS = "https://static-web.ghzs.com/ghzs_help/help.html?content=5f534111b1f72909fc225672";
public static final String LOGOUT_ADDRESS_DEV = "https://static-web.ghzs.com/ghzs_help_dev/help.html?content=5f6b1f02786564003944a693&from=ghzs";
public static final String LOGOUT_ADDRESS = "https://static-web.ghzs.com/ghzs_help/help.html?content=5f534111b1f72909fc225672&from=ghzs";
// 商品详情
public static final String COMMODITY_DETAIL_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/product?from=ghzs";
public static final String COMMODITY_DETAIL_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/product?from=ghzs";
// 光能记录
public static final String ENERGY_RECORD_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/record?from=ghzs";
public static final String ENERGY_RECORD_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/record?from=ghzs";
// 订单中心
public static final String ORDER_CENTER_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/orders?from=ghzs";
public static final String ORDER_CENTER_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/orders?from=ghzs";
// 订单详情
public static final String ORDER_DETAIL_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/order-detail?from=ghzs";
public static final String ORDER_DETAIL_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/order-detail?from=ghzs";
// 邀请好友
public static final String INVITE_FRIENDS_ADDRESS_DEV = "https://static-web.ghzs.com/ghzs_activity_dev/inviteFriends.html#/invite";
public static final String INVITE_FRIENDS_ADDRESS = "https://static-web.ghzs.com/ghzs_activity_prod/inviteFriends.html#/invite";
// 等级页面
public static final String LEVEL_ADDRESS_DEV = "https://static-web.ghzs.com/ghzs-userhome-dev/index.html#/level";
public static final String LEVEL_ADDRESS = "https://static-web.ghzs.com/ghzs-userhome/index.html#/level";
// 兑换规则
public static final String EXCHANGE_RULE_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/exchange-rule?from=ghzs";
public static final String EXCHANGE_RULE_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/exchange-rule?from=ghzs";
// 光能规则
public static final String ENERGY_RULE_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/energy-rule?from=ghzs";
public static final String ENERGY_RULE_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/energy-rule?from=ghzs";
// 兑换商品
public static final String EXCHANGE_COMMODITY_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/exchange-log?from=ghzs";
public static final String EXCHANGE_COMMODITY_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/exchange-log?from=ghzs";
// 抽奖乐园
public static final String LOTTERY_PARADISE_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/lottery-list?from=ghzs";
public static final String LOTTERY_PARADISE_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/lottery-list?from=ghzs";
// 我的奖品
public static final String MY_PRIZE_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/mywin?from=ghzs";
public static final String MY_PRIZE_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/mywin?from=ghzs";
// 中奖订单详情
public static final String WIN_ORDER_DETAIL_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/win-order-detail?from=ghzs";
public static final String WIN_ORDER_DETAIL_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/win-order-detail?from=ghzs";
// 地址信息
public static final String ADDRESS_INFO_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/address-list?from=ghzs";
public static final String ADDRESS_INFO_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/address-list?from=ghzs";
// 领奖信息
public static final String PRIZE_INFO_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/user-info?from=ghzs";
public static final String PRIZE_INFO_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/user-info?from=ghzs";
// 提现信息
public static final String WITHDRAW_INFO_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/cash?from=ghzs";
public static final String WITHDRAW_INFO_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/cash?from=ghzs";
// 活动详情
public static final String ACTIVITY_DETAIL_ADDRESS_DEV = "https://static-web.ghzs.com/ghzs_activity_dev/common.html?from=ghzs";
public static final String ACTIVITY_DETAIL_ADDRESS = "https://static-web.ghzs.com/ghzs_activity_prod/common.html?from=ghzs";
// 游戏单详情分享链接
public static final String GAME_COLLECTION_SHARE_ADDRESS_DEV = "https://dev-and-static.ghzs.com/web/game_collection/index.html#/?from=ghzs";
public static final String GAME_COLLECTION_SHARE_ADDRESS = "https://and-static.ghzs.com/web/game_collection/index.html#/?from=ghzs";
// 游戏单活动分享链接 https://git.shanqu.cc/pm/halo-app-issues/-/issues/1638
public static final String GAME_COLLECTION_ACTIVITY_ADDRESS_DEV = "https://dev-and-static.ghzs.com/web/ghzs_activity/haoyouUnlock.html";
public static final String GAME_COLLECTION_ACTIVITY_ADDRESS = "https://and-static.ghzs.com/web/ghzs_activity/haoyouUnlock.html";
// 青少年模式找回密码
public static final String TEEN_MODE_RESET_PASSWORD = "https://resource.ghzs.com/page/privacy_policies/help_password.html";
// 儿童/青少年使用须知
public static final String TEEN_MODE_RULE = "https://resource.ghzs.com/page/privacy_policies/teenager_privacy.html";
//游戏单管理规范
public static final String GAME_COLLECTION_RULE = "https://resource.ghzs.com/page/privacy_policies/game_collection.html";
public static final String SP_IS_DEV_ENV = "is_dev_env";
//最少需要多少数据才能上传
public static final int DATA_AMOUNT = 20;
@ -197,7 +398,7 @@ public class Constants {
//已收录包名更新 cd间隔
public static final int PACKAGES_CD = 60 * 1000;
public static final String[] REPORT_LIST = new String[]{"垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息", "违法有害信息", ""};
public static final String[] REPORT_LIST = new String[]{"垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息", "违法有害信息", "他原因"};
public static final String ENTRANCE_UNKNOWN = "(unknown)";
@ -208,4 +409,19 @@ public class Constants {
// 标记下载重试标记(值为任务已下载大小,为空表示需要重试)
public static final String MARK_RETRY_DOWNLOAD = "retry_download";
// 工具箱历史记录最多4个
public static final String TOOLBOX_HISTORY = "toolbox_history";
// 浏览器安装说明url
public static final String SP_BROWSER_HINT_URL = "browser_hint_url";
public static final String DEFAULT_OPPO_BROWSER_HINT_URL = "https://static-web.ghzs.com/ghzs_help/help.html?content=5fa90fe143d91a022e0d33ff";
public static final String DEFAULT_VIVO_BROWSER_HINT_URL = "https://static-web.ghzs.com/ghzs_help/help.html?content=618112ce04796e63e97643a4&from=ghzs";
public static final int FOLLOW_HINT_TRIGGER_HEIGHT = 10;
// 深色模式
public static final String SP_NIGHT_MODE = "night_mode";
// 跟随系统模式
public static final String SP_SYSTEM_MODE = "system_mode";
}

View File

@ -35,6 +35,9 @@ public class ItemViewType {
public static final int GALLERY_SLIDE = 27; // 首页自动滚动画廊专题
public static final int GALLERY = 28; // 首页倾斜画廊专题
public static final int BLANK_DIVIDER = 29; // 空白补充区域
public static final int COMMON_LINK_COLLECTION = 30; // 通用链接合集
public static final int RANK_COLLECTION = 31; // 排行榜样式专题合集
public static final int GAME_COLLECTION_ITEM = 32; // 游戏单
/**
* 普通列表

View File

@ -0,0 +1,185 @@
package com.gh.common.databind
import android.os.Build
import android.text.Editable
import android.text.Html
import android.text.TextWatcher
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.widget.EditText
import android.widget.LinearLayout
import android.widget.PopupWindow
import androidx.core.content.ContextCompat
import androidx.databinding.BindingAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import com.gh.base.OnViewClickListener
import com.gh.common.util.dip2px
import com.gh.common.util.toDrawable
import com.gh.common.view.BugFixedPopupWindow
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.KaifuAddItemBinding
import com.gh.gamecenter.databinding.LayoutAddKaifuPopupBinding
import com.gh.gamecenter.databinding.LayoutPopupContainerBinding
import com.gh.gamecenter.entity.ServerCalendarEntity
import com.gh.gamecenter.servers.add.AddKaiFuPopupAdapter
import java.text.SimpleDateFormat
import java.util.*
object AddKaiFuBindingAdapter {
private var popupWindow: BugFixedPopupWindow? = null
@JvmStatic
@BindingAdapter("addKaiFuView", "clickListener")
fun addKaiFuView(
view: LinearLayout,
list: List<ServerCalendarEntity?>?,
listener: OnViewClickListener<*>?
) {
if (list == null) return
view.removeAllViews()
view.addView(LayoutInflater.from(view.context).inflate(R.layout.kaifu_new_add_item_title, null))
for (i in list.indices) {
val inflate = LayoutInflater.from(view.context).inflate(R.layout.kaifu_add_item, null)
val binding = KaifuAddItemBinding.bind(inflate)
binding.clickListener = listener
binding.entity = list[i]
binding.position = i
binding.isCloseBottom = list.size - 1 == i
view.addView(inflate)
binding.kaifuAddFirstName.setOnFocusChangeListener { _, hasFocus ->
if (hasFocus) {
binding.kaifuAddFirstName.hint = ""
if (binding.kaifuAddFirstName.text.isNullOrEmpty()) {
showPopupOption(binding.kaifuAddFirstName) {
binding.kaifuAddFirstName.setText(it)
binding.kaifuAddFirstName.setSelection(it.length)
}
}
} else {
binding.kaifuAddFirstName.hint = "点击填写"
}
}
binding.kaifuAddServerName.setOnFocusChangeListener { _, hasFocus ->
if (hasFocus) {
binding.kaifuAddServerName.hint = ""
} else {
binding.kaifuAddServerName.hint = "点击填写"
}
}
binding.kaifuAddFirstName.addTextChangedListener(object :TextWatcher{
override fun beforeTextChanged(
s: CharSequence?,
start: Int,
count: Int,
after: Int
) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
if (!s.isNullOrEmpty()){
popupWindow?.dismiss()
}
}
override fun afterTextChanged(s: Editable?) {
}
})
if (i == list.size - 1) {
binding.kaifuAddTime.background = R.drawable.bg_add_kaifu_bottom_left.toDrawable()
binding.kaifuAddServerName.background = R.drawable.bg_add_kaifu_bottom_right.toDrawable()
}
}
}
@JvmStatic
@BindingAdapter("addKaiFuTime", "addKaiFuPosition")
fun addKaiFuTime(view: EditText, time: Long, position: Int) {
if (time == 0L) {
view.hint = "点击选择"
view.setText("")
} else {
val pattern = "yyy-MM-dd HH:mm"
val format = SimpleDateFormat(pattern, Locale.CHINA)
view.setText(format.format(time * 1000))
if (position == 0) {
view.append(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) Html.fromHtml(
String.format(
"<font color='#2496FF'>%1\$s</font>",
"&nbsp+"
), Html.FROM_HTML_MODE_LEGACY
) else Html.fromHtml(String.format("<font color='#2496FF'>%1\$s</font>", "&nbsp+")))
}
}
}
@JvmStatic
@BindingAdapter("kaiFuTextColor", "kaiFuTextPosition")
fun kaiFuTextColor(view: EditText, dataMark: Int, position: Int) {
if (dataMark == 1 && view.id == R.id.kaifu_add_time || dataMark == 2 && view.id == R.id.kaifu_add_first_name || dataMark == 3 && view.id == R.id.kaifu_add_server_name || dataMark == 4) {
view.setTextColor(ContextCompat.getColor(view.context, R.color.theme_red))
view.setHintTextColor(ContextCompat.getColor(view.context, R.color.theme_red))
} else if (position == 0) {
view.setTextColor(ContextCompat.getColor(view.context, R.color.hint))
view.setHintTextColor(ContextCompat.getColor(view.context, R.color.hint))
} else {
view.setTextColor(ContextCompat.getColor(view.context, R.color.text_title))
view.setHintTextColor(ContextCompat.getColor(view.context, R.color.hint))
}
}
@JvmStatic
private fun showPopupOption(view: View, callback: (text: String) -> Unit) {
val inflater = LayoutInflater.from(view.context)
val mainBinding = LayoutPopupContainerBinding.inflate(inflater)
popupWindow = BugFixedPopupWindow(
mainBinding.root,
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
val windowPos = IntArray(2)
val anchorLoc = IntArray(2)
// 获取锚点View在屏幕上的左上角坐标位置
view.getLocationOnScreen(anchorLoc)
val anchorHeight = view.height
// 获取屏幕的高宽
val screenHeight = view.context.resources.displayMetrics.heightPixels
popupWindow?.let { popupWindow ->
// 测量contentView
popupWindow.contentView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED)
val windowHeight = popupWindow.contentView.measuredHeight
// 判断需要向上弹出还是向下弹出显示
val isNeedShowUp = screenHeight - anchorLoc[1] - anchorHeight < windowHeight
windowPos[1] = if (isNeedShowUp) {
anchorLoc[1] - windowHeight
} else anchorLoc[1] + anchorHeight
LayoutAddKaifuPopupBinding.inflate(inflater, mainBinding.container, false).apply {
root.layoutParams = root.layoutParams.apply {
width = view.width + 16F.dip2px()
}
popupRv.adapter = AddKaiFuPopupAdapter(
root.context,
arrayListOf("安卓混服", "硬核专服", "官方专服", "官方渠道服", "腾讯QQ服", "腾讯微信服")
) {
callback.invoke(it)
popupWindow.dismiss()
}
popupRv.layoutManager = LinearLayoutManager(root.context)
mainBinding.container.addView(root)
}
popupWindow.isTouchable = true
popupWindow.inputMethodMode = PopupWindow.INPUT_METHOD_NEEDED
popupWindow.isOutsideTouchable = true
popupWindow.animationStyle = R.style.popwindow_option_anim_style
// 设置偏移
windowPos[1] = windowPos[1] - 12F.dip2px()
windowPos[0] = anchorLoc[0] - 11F.dip2px()
popupWindow.showAtLocation(view, Gravity.TOP or Gravity.START, windowPos[0], windowPos[1])
}
}
}

View File

@ -10,14 +10,12 @@ import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.databinding.BindingAdapter;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.facebook.drawee.view.SimpleDraweeView;
@ -25,7 +23,6 @@ import com.gh.base.OnViewClickListener;
import com.gh.common.constant.Config;
import com.gh.common.dialog.CertificationDialog;
import com.gh.common.dialog.PackageCheckDialogFragment;
import com.gh.common.dialog.ReserveDialogFragment;
import com.gh.common.exposure.ExposureEvent;
import com.gh.common.history.HistoryHelper;
import com.gh.common.repository.ReservationRepository;
@ -36,6 +33,7 @@ import com.gh.common.util.DataUtils;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.DownloadDialogHelper;
import com.gh.common.util.ExtensionsKt;
import com.gh.common.util.GameUtils;
import com.gh.common.util.GameViewUtils;
import com.gh.common.util.ImageUtils;
@ -46,17 +44,18 @@ import com.gh.common.util.NumberUtils;
import com.gh.common.util.PackageInstaller;
import com.gh.common.util.PackageUtils;
import com.gh.common.util.PlatformUtils;
import com.gh.common.util.RealNameHelper;
import com.gh.common.util.ReservationHelper;
import com.gh.common.view.DownloadProgressBar;
import com.gh.common.view.DrawableView;
import com.gh.common.view.GameIconView;
import com.gh.download.DownloadManager;
import com.gh.download.dialog.DownloadDialog;
import com.gh.download.server.BrowserInstallHelper;
import com.gh.gamecenter.DownloadManagerActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.WebActivity;
import com.gh.gamecenter.baselist.LoadStatus;
import com.gh.gamecenter.databinding.KaifuAddItemBinding;
import com.gh.gamecenter.databinding.KaifuDetailItemRowBinding;
import com.gh.gamecenter.entity.ApkEntity;
import com.gh.gamecenter.entity.GameEntity;
@ -66,6 +65,7 @@ import com.gh.gamecenter.entity.ServerCalendarEntity;
import com.gh.gamecenter.entity.TagStyleEntity;
import com.gh.gamecenter.entity.TestEntity;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.gamedetail.dialog.GamePermissionDialogFragment;
import com.gh.gamecenter.manager.PackagesManager;
import com.gh.gamecenter.qa.entity.CommunityVideoEntity;
import com.lightgame.download.DownloadEntity;
@ -75,10 +75,8 @@ import com.lightgame.utils.Utils;
import org.greenrobot.eventbus.EventBus;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
/**
* Created by khy on 12/02/18.
@ -86,22 +84,18 @@ import java.util.Locale;
public class BindingAdapters {
@BindingAdapter("imageIcon")
public static void loadIcon(SimpleDraweeView view, String imageUrl) {
ImageUtils.displayIcon(view, imageUrl);
}
@BindingAdapter("imageUrl")
public static void loadImage(SimpleDraweeView view, String imageUrl) {
ImageUtils.display(view, imageUrl);
}
@BindingAdapter("setTextSize")
public static void setTextSize(TextView view, int number) {
view.setTextSize(number);
}
@BindingAdapter("setTypeface")
public static void setTypeface(TextView view, String type) {
if (type == null) return;
@ -121,7 +115,6 @@ public class BindingAdapters {
}
}
@BindingAdapter({"addDetailKaiFuView", "addDetailKaiFuViewListener", "isReadyPatch"})
public static void addDetailKaiFuView(LinearLayout view, List<ServerCalendarEntity> list
, OnViewClickListener listener, Boolean isReadyPatch) {
if (list == null) return;
@ -129,13 +122,13 @@ public class BindingAdapters {
for (int i = 0; i < list.size() + 1; i++) { // 1 is Title
View inflate = LayoutInflater.from(view.getContext()).inflate(R.layout.kaifu_detail_item_row, null);
KaifuDetailItemRowBinding binding = KaifuDetailItemRowBinding.bind(inflate);
binding.setIsCloseBottom(i == list.size());
binding.setIsReadyPatch(isReadyPatch);
if (i == 0) {
binding.setIsTitle(true);
} else {
ServerCalendarEntity serverEntity = list.get(i - 1);
binding.setEntity(serverEntity);
binding.getRoot().setBackgroundColor(isReadyPatch != null && isReadyPatch ? ExtensionsKt.toColor(R.color.theme) : ExtensionsKt.toColor(R.color.white));
binding.getRoot().setPadding(DisplayUtils.dip2px(1), DisplayUtils.dip2px(1), DisplayUtils.dip2px(1), i == list.size() ? DisplayUtils.dip2px(1) : 0);
ServerCalendarEntity serverEntity = list.get(i - 1);
binding.timeTv.setText(i == 0 ? "时间" : serverEntity.getFormatTime("HH:mm"));
binding.remarkTv.setText(i == 0 ? "备注" : serverEntity.getRemark());
binding.nameTv.setText(i == 0 ? "名字" : (TextUtils.isEmpty(serverEntity.getNote()) ? "-" : serverEntity.getNote()));
if (i != 0) {
binding.getRoot().setOnClickListener(v -> {
listener.onClick(v, isReadyPatch != null && isReadyPatch ? serverEntity : null);
});
@ -157,77 +150,10 @@ public class BindingAdapters {
}
// 如果超过10000则转换为1.0W
@BindingAdapter("transSimpleCount")
public static void transSimpleCount(TextView view, int count) {
view.setText(NumberUtils.transSimpleCount(count));
}
@BindingAdapter({"addKaiFuView", "clickListener"})
public static void addKaiFuView(LinearLayout view, List<ServerCalendarEntity> list, OnViewClickListener listener) {
if (list == null) return;
view.removeAllViews();
view.addView(LayoutInflater.from(view.getContext()).inflate(R.layout.kaifu_add_item_title, null));
for (int i = 0; i < list.size(); i++) {
View inflate = LayoutInflater.from(view.getContext()).inflate(R.layout.kaifu_add_item, null);
KaifuAddItemBinding binding = KaifuAddItemBinding.bind(inflate);
binding.setClickListener(listener);
binding.setEntity(list.get(i));
binding.setPosition(i);
binding.setIsCloseBottom(list.size() - 1 == i);
view.addView(inflate);
binding.kaifuAddName.setOnFocusChangeListener((v, hasFocus) -> {
if (hasFocus) {
binding.kaifuAddName.setHint("");
} else {
binding.kaifuAddName.setHint("点击填写");
}
});
binding.kaifuAddRemark.setOnFocusChangeListener((v, hasFocus) -> {
if (hasFocus) {
binding.kaifuAddRemark.setHint("");
} else {
binding.kaifuAddRemark.setHint("点击填写");
}
});
}
}
@BindingAdapter({"addKaiFuTime", "addKaiFuPosition"})
public static void addKaiFuTime(EditText view, Long time, Integer position) {
if (time == 0) {
view.setHint("点击选择");
view.setText("");
} else {
String pattern;
if (position == 0) {
pattern = "yyy-MM-dd HH:mm +";
} else {
pattern = "yyy-MM-dd HH:mm";
}
SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.CHINA);
view.setText(format.format(time * 1000));
}
}
@BindingAdapter({"kaiFuTextColor", "kaiFuTextPosition"})
public static void kaiFuTextColor(EditText view, Integer dataMark, Integer position) {
if (dataMark == 1 && view.getId() == R.id.kaifu_add_time
|| dataMark == 2 && view.getId() == R.id.kaifu_add_name
|| dataMark == 3 && view.getId() == R.id.kaifu_add_remark
|| dataMark == 4 && (view.getId() == R.id.kaifu_add_time || view.getId() == R.id.kaifu_add_name)) {
view.setTextColor(ContextCompat.getColor(view.getContext(), R.color.red));
view.setHintTextColor(ContextCompat.getColor(view.getContext(), R.color.red));
} else if (position == 0) {
view.setTextColor(ContextCompat.getColor(view.getContext(), R.color.hint));
view.setHintTextColor(ContextCompat.getColor(view.getContext(), R.color.hint));
} else {
view.setTextColor(ContextCompat.getColor(view.getContext(), R.color.title));
view.setHintTextColor(ContextCompat.getColor(view.getContext(), R.color.hint));
}
}
@BindingAdapter("textColorFromString")
public static void textColorFromString(TextView tv, String hexString) {
if (TextUtils.isEmpty(hexString)) return;
@ -238,7 +164,6 @@ public class BindingAdapters {
}
}
@BindingAdapter("visibleGone")
public static void showHide(View view, Boolean show) {
if (show != null && show) {
view.setVisibility(View.VISIBLE);
@ -247,7 +172,6 @@ public class BindingAdapters {
}
}
@BindingAdapter("goneIf")
public static void goneIf(View view, Boolean gone) {
if (gone != null && gone) {
view.setVisibility(View.GONE);
@ -259,7 +183,6 @@ public class BindingAdapters {
/**
* lazy 的 paddingTop
*/
@BindingAdapter("lazyPaddingLeft")
public static void lazyPaddingLeft(View view, int paddingLeftInDp) {
view.setPadding(DisplayUtils.dip2px(paddingLeftInDp), view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom());
}
@ -267,7 +190,6 @@ public class BindingAdapters {
/**
* lazy 的 paddingTop
*/
@BindingAdapter("lazyPaddingTop")
public static void lazyPaddingTop(View view, int paddingTopInDp) {
view.setPadding(view.getPaddingLeft(), DisplayUtils.dip2px(paddingTopInDp), view.getPaddingRight(), view.getPaddingBottom());
}
@ -275,12 +197,10 @@ public class BindingAdapters {
/**
* lazy 的 paddingBottom
*/
@BindingAdapter("lazyPaddingBottom")
public static void lazyPaddingBottom(View view, int paddingBottomInDp) {
view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), view.getPaddingRight(), DisplayUtils.dip2px(paddingBottomInDp));
}
@BindingAdapter("visibleInvisible")
public static void visibleInvisible(View view, Boolean show) {
if (show != null && show) {
view.setVisibility(View.VISIBLE);
@ -289,7 +209,6 @@ public class BindingAdapters {
}
}
@BindingAdapter("messageUnread")
public static void setMessageUnread(TextView view, int unreadCount) {
if (unreadCount < 100) {
view.setText(String.valueOf(unreadCount));
@ -298,7 +217,6 @@ public class BindingAdapters {
}
}
@BindingAdapter("serverTypePadding")
public static void setServerTypePadding(TextView view, String serverType) {
int paddRight = 0;
if (TextUtils.isEmpty(serverType)) {
@ -316,7 +234,6 @@ public class BindingAdapters {
view.setPadding(0, 0, paddRight, 0);
}
@BindingAdapter("serverType")
public static void setServerType(TextView view, String serverType) {
view.setText(serverType);
if ("删档内测".equals(serverType) || "不删档内测".equals(serverType)) {
@ -326,19 +243,22 @@ public class BindingAdapters {
}
}
@BindingAdapter("game")
public static void setGame(View view, GameEntity gameEntity) {
if (gameEntity != null && view instanceof GameIconView) {
((GameIconView) view).displayGameIcon(gameEntity);
}
}
@BindingAdapter("articleType")
public static void setGameIcon(View view, GameEntity gameEntity) {
if (gameEntity != null && view instanceof GameIconView) {
((GameIconView) view).displayGameIcon(gameEntity.getIcon(), gameEntity.getIconSubscript());
}
}
public static void setArticleType(TextView view, String articleType) {
NewsUtils.setNewsType(view, articleType, 0, 0);
}
@BindingAdapter("detailDownloadText")
public static void setDetailDownloadText(TextView view, GameEntity gameEntity) {
if (gameEntity == null || gameEntity.getApk().isEmpty()) {
view.setBackgroundResource(R.drawable.game_item_btn_pause_style);
@ -347,7 +267,6 @@ public class BindingAdapters {
}
}
@BindingAdapter("liBaoBtn")
public static void setLiBaoBtn(TextView view, String status) {
if (TextUtils.isEmpty(status)) return;
switch (status) {
@ -412,7 +331,6 @@ public class BindingAdapters {
}
// 大图下的进度条
@BindingAdapter({"downloadButton", "traceEvent", "clickCallBack", "entrance", "location"})
public static void setDownloadButton(DownloadProgressBar progressBar,
GameEntity gameEntity,
ExposureEvent traceEvent,
@ -420,6 +338,9 @@ public class BindingAdapters {
@Nullable String entrance,
@Nullable String location) {
// 恢复DialogFragment
restoreDialogFragment(progressBar);
// 判断是否显示按钮
if (gameEntity != null
&& Config.isShowDownload(gameEntity.getId())
@ -456,27 +377,37 @@ public class BindingAdapters {
return;
}
}
PackageCheckDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity.getPackageDialog(), () -> {
DownloadDialogHelper.findAvailableDialogAndShow(v.getContext(), gameEntity, apk, () -> {
CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> {
DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> {
DialogUtils.showOverseaDownloadDialog(v.getContext(), gameEntity, () -> {
DialogUtils.checkDownload(v.getContext(), apk.getSize(),
isSubscribe -> download(progressBar, gameEntity, traceEvent, isSubscribe, entrance, location));
RealNameHelper.checkIfAuth(v.getContext(), gameEntity, () -> {
GamePermissionDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, gameEntity.getInfo(), () -> {
BrowserInstallHelper.showBrowserInstallHintDialog(v.getContext(), () -> {
PackageCheckDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, () -> {
DownloadDialogHelper.findAvailableDialogAndShow(v.getContext(), gameEntity, apk, () -> {
CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> {
DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> {
DialogUtils.showOverseaDownloadDialog(v.getContext(), gameEntity, () -> {
DialogUtils.checkDownload(v.getContext(), apk.getSize(),
isSubscribe -> download(progressBar, gameEntity, traceEvent, isSubscribe, entrance, location));
});
});
});
});
});
});
});
});
} else {
CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> {
DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> {
DownloadDialog.showDownloadDialog(
v.getContext(),
gameEntity,
traceEvent,
entrance,
location + ":" + gameEntity.getName());
RealNameHelper.checkIfAuth(v.getContext(), gameEntity, () -> {
GamePermissionDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, gameEntity.getInfo(), () -> {
CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> {
DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> {
DownloadDialog.showDownloadDialog(
v.getContext(),
gameEntity,
traceEvent,
entrance,
location + ":" + gameEntity.getName());
});
});
});
});
}
@ -511,19 +442,22 @@ public class BindingAdapters {
case INSTALL_PLUGIN:
case INSTALL_NORMAL:
if (gameEntity.getApk().size() == 1) {
DownloadEntity downloadEntity = DownloadManager.getInstance(progressBar.getContext()).getDownloadEntityByUrl(gameEntity.getApk().get(0).getUrl());
DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshotByUrl(gameEntity.getApk().get(0).getUrl());
if (downloadEntity != null) {
PackageInstaller.install(v.getContext(), downloadEntity);
}
}
break;
case RESERVABLE:
CheckLoginUtils.checkLogin(progressBar.getContext(), "", () -> {
ReserveDialogFragment dialogFragment = ReserveDialogFragment.getInstance(gameEntity, () -> {
LogUtils.logReservation(gameEntity, traceEvent);
updateReservation(progressBar, gameEntity);
RealNameHelper.checkIfAuth(v.getContext(), gameEntity, () -> {
GamePermissionDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, gameEntity.getInfo(), () -> {
CheckLoginUtils.checkLogin(progressBar.getContext(), "", () -> {
ReservationHelper.reserve(v.getContext(), gameEntity.getId(), () -> {
LogUtils.logReservation(gameEntity, traceEvent);
updateReservation(progressBar, gameEntity);
});
});
});
dialogFragment.show(((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager(), "reserve");
});
break;
case RESERVED:
@ -550,8 +484,10 @@ public class BindingAdapters {
HistoryHelper.insertGameEntity(gameEntity);
}
Intent i = new Intent(WebActivity.getIntentForWebGame(progressBar.getContext(), linkEntity.getLink(), gameEntity.getName(), isPlay, linkEntity.getCloseButton()));
progressBar.getContext().startActivity(i);
GamePermissionDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, gameEntity.getInfo(), () -> {
Intent i = new Intent(WebActivity.getIntentForWebGame(progressBar.getContext(), linkEntity.getLink(), gameEntity.getName(), isPlay, linkEntity.getCloseButton()));
progressBar.getContext().startActivity(i);
});
break;
case UPDATING:
Utils.toast(progressBar.getContext(), "正在加急更新版本,敬请后续留意");
@ -614,7 +550,7 @@ public class BindingAdapters {
// 显示下载过程状态
if (gameEntity.getApk().size() == 1) {
DownloadEntity downloadEntity = DownloadManager.getInstance(progressBar.getContext()).getDownloadEntityByUrl(gameEntity.getApk().get(0).getUrl());
DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshotByUrl(gameEntity.getApk().get(0).getUrl());
if (downloadEntity != null) {
progressBar.setProgress((int) (downloadEntity.getPercent() * 10));
switch (downloadEntity.getStatus()) {
@ -642,6 +578,9 @@ public class BindingAdapters {
case cancel:
case hijack:
case notfound:
case uncertificated:
case unqualified:
case unavailable:
break;
default:
break;
@ -650,6 +589,18 @@ public class BindingAdapters {
}
}
/**
* 当页面完全重建时若存在重建的DialogFragment则需要手动恢复该DialogFragment之前配置的回调(因为DialogFragment重建时只会从arguments中获取之前的配置内容
* 而arguments无法传递回调)或者dismiss该DialogFragment
*/
private static void restoreDialogFragment(DownloadProgressBar progressBar) {
GamePermissionDialogFragment gamePermissionDialogFragment =
((GamePermissionDialogFragment) ((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag(GamePermissionDialogFragment.class.getSimpleName()));
if (gamePermissionDialogFragment != null) {
gamePermissionDialogFragment.dismissAllowingStateLoss();
}
}
/*private static void download(DownloadProgressBar progressBar, GameEntity gameEntity, ExposureEvent traceEvent, @Nullable String entrance, @Nullable String location, View v) {
if (gameEntity.getApk().size() == 1) {
ApkEntity apk = gameEntity.getApk().get(0);
@ -720,18 +671,58 @@ public class BindingAdapters {
}
}
@BindingAdapter("gameLabelList")
public static void setGameLabelList(LinearLayout layout, List<TagStyleEntity> tagStyle) {
GameViewUtils.setLabelList(layout.getContext(), layout, tagStyle);
}
// 包含测试开服标签
@BindingAdapter("setGameTags")
public static void setGameTags(LinearLayout layout, GameEntity gameEntity) {
try {
if (layout.getVisibility() == View.GONE) return;
ArrayList<TagStyleEntity> tagStyle = new ArrayList<>();
TestEntity test = gameEntity.getTest();
if (test != null
// 这个判断用于开测表列表
&& !"type_tag".equals(test.getGameTag())) {
if ("custom".equals(test.getGameTag())) {
TagStyleEntity typeTag = new TagStyleEntity();
if (!TextUtils.isEmpty(test.getText())) {
typeTag.setName(test.getText() != null ? test.getText() : "");
} else {
typeTag.setName(test.getType() != null ? test.getType() : "");
}
typeTag.setBackground("E8F3FF");
typeTag.setColor("1383EB");
tagStyle.add(typeTag);
} else {
TagStyleEntity typeTag = new TagStyleEntity();
typeTag.setName(test.getType() != null ? test.getType() : "");
typeTag.setBackground("FFF3E0");
typeTag.setColor("FA8500");
tagStyle.add(typeTag);
TagStyleEntity timeTag = new TagStyleEntity();
timeTag.setName(GameViewUtils.getGameTestDate(test.getStart()));
timeTag.setBackground("E0FFF9");
timeTag.setColor("00A887");
tagStyle.add(timeTag);
}
} else {
tagStyle = gameEntity.getTagStyle();
}
GameViewUtils.setLabelList(layout.getContext(), layout, tagStyle);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void setVideoDetailGameTags(LinearLayout layout, GameEntity gameEntity) {
try {
ArrayList<TagStyleEntity> tagStyle = new ArrayList<>();
TestEntity test = gameEntity.getTest();
if (test != null) {
if (test != null
// 这个判断用于开测表列表
&& !"type_tag".equals(test.getGameTag())) {
TagStyleEntity typeTag = new TagStyleEntity();
typeTag.setName(test.getType() != null ? test.getType() : "");
typeTag.setBackground("FFF3E0");
@ -746,20 +737,18 @@ public class BindingAdapters {
} else {
tagStyle = gameEntity.getTagStyle();
}
GameViewUtils.setLabelList(layout.getContext(), layout, tagStyle);
GameViewUtils.setLabelList(layout.getContext(), layout, tagStyle, 4);
} catch (Exception e) {
e.printStackTrace();
}
}
@BindingAdapter("isRefreshing")
public static void isRefreshing(SwipeRefreshLayout layout, LoadStatus status) {
if (status != LoadStatus.INIT_LOADING && status != LoadStatus.LIST_LOADING) {
layout.setRefreshing(false);
}
}
@BindingAdapter({"setGameName", "isShowPlatform", "isShowSuffix"})
public static void setGameName(TextView view, GameEntity game, boolean isShowPlatform, @Nullable Boolean isShowSuffix) {
if (isShowSuffix == null) isShowSuffix = true; // 默认显示
if (isShowPlatform && game.getApk().size() > 0) {
@ -772,7 +761,6 @@ public class BindingAdapters {
}
@BindingAdapter({"setCommunityImage", "setCommunityVideoImage"})
public static void setCommunityImage(SimpleDraweeView imageView, List<String> images, List<CommunityVideoEntity> videos) {
if (videos.size() > 0) {
CommunityVideoEntity videoEntity = videos.get(0);
@ -786,7 +774,6 @@ public class BindingAdapters {
}
}
@BindingAdapter({"setCommunityVideoDuration"})
public static void setCommunityVideoDuration(TextView mVideoDuration, List<CommunityVideoEntity> videos) {
if (videos != null && videos.size() > 0) {
CommunityVideoEntity videoEntity = videos.get(0);
@ -798,7 +785,6 @@ public class BindingAdapters {
}
}
@BindingAdapter({"setGameTags", "setMaxGameTags"})
public static void setGameTags(TextView view, List<TagStyleEntity> tags, int maxTags) {
if (tags == null) {
view.setText("");
@ -827,7 +813,6 @@ public class BindingAdapters {
view.setText(span);
}
@BindingAdapter({"setVideoData"})
public static void setVideoData(TextView view, int count) {
if (count > 0) {
view.setCompoundDrawablesWithIntrinsicBounds(ContextCompat.getDrawable(view.getContext(), R.drawable.ic_video_data_up), null, null, null);
@ -835,7 +820,7 @@ public class BindingAdapters {
view.setText(count + "");
} else {
view.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
view.setTextColor(ContextCompat.getColor(view.getContext(), R.color.text_999999));
view.setTextColor(ContextCompat.getColor(view.getContext(), R.color.text_subtitleDesc));
view.setText("-");
}
}

View File

@ -0,0 +1,94 @@
package com.gh.common.dialog
import android.app.Activity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import com.gh.base.fragment.BaseDialogFragment
import com.gh.common.util.DirectUtils
import com.gh.common.util.EntranceUtils
import com.gh.common.util.SpanBuilder
import com.gh.common.util.dip2px
import com.gh.common.view.CustomLinkMovementMethod
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.DialogApplyModeratorBinding
class ApplyModeratorDialogFragment : BaseDialogFragment() {
private lateinit var binding: DialogApplyModeratorBinding
private var mGroupNumber = ""
private var mGroupKey = ""
private var mParentTag = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requireArguments().run {
mGroupNumber = getString(KEY_GROUP_NUMBER) ?: ""
mGroupKey = getString(KEY_GROUP_KEY) ?: ""
mParentTag = getString(EntranceUtils.KEY_PARENT_TAG) ?: ""
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = DialogApplyModeratorBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val startText = "版主考核群:"
val text = "$startText$mGroupNumber\n感谢你对论坛建设的支持\n请加入版主考核群并联系群主进行版主资格考核"
binding.desTv.text = SpanBuilder(text)
.click(startText.length, startText.length + mGroupNumber.length, R.color.theme_font,true) {
DirectUtils.directToQqGroup(
requireContext(),
mGroupKey
)
}
.build()
binding.desTv.movementMethod = CustomLinkMovementMethod.getInstance()
binding.confirmTv.setOnClickListener {
dismissAllowingStateLoss()
activity?.supportFragmentManager?.findFragmentByTag(mParentTag)
?.onActivityResult(REQUEST_CODE, Activity.RESULT_OK, null)
}
}
override fun onStart() {
super.onStart()
val width = requireContext().resources.displayMetrics.widthPixels - 60F.dip2px()
val height = ViewGroup.LayoutParams.WRAP_CONTENT
dialog?.window?.setLayout(width, height)
}
companion object {
const val KEY_GROUP_NUMBER = "group_number"
const val KEY_GROUP_KEY = "group_key"
const val REQUEST_CODE = 1103
@JvmStatic
fun show(
activity: AppCompatActivity,
number: String,
key: String,
tag: String
) {
ApplyModeratorDialogFragment().apply {
arguments = Bundle().apply {
putString(KEY_GROUP_NUMBER, number)
putString(KEY_GROUP_KEY, key)
putString(EntranceUtils.KEY_PARENT_TAG, tag)
}
}.show(
activity.supportFragmentManager,
ApplyModeratorDialogFragment::class.java.simpleName
)
}
}
}

View File

@ -0,0 +1,95 @@
package com.gh.common.dialog
import android.annotation.SuppressLint
import android.app.Dialog
import android.os.Bundle
import android.view.*
import com.gh.base.fragment.BaseDialogFragment
import com.gh.gamecenter.R
import com.halo.assistant.HaloApp
abstract class BaseDraggableDialogFragment : BaseDialogFragment(), View.OnTouchListener {
private var mInitPositionY = 0f
private lateinit var mGestureDetector: GestureDetector
private lateinit var mRootView: View
private lateinit var mDragCloseView: View
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mRootView = getRootView()
mDragCloseView = getDragCloseView()
mDragCloseView.setOnTouchListener(this)
mGestureDetector = GestureDetector(requireContext(), SingleTapConfirm())
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val createDialog = super.onCreateDialog(savedInstanceState)
createDialog.setCanceledOnTouchOutside(true)
val window = createDialog.window
window?.setGravity(Gravity.BOTTOM)
window?.setWindowAnimations(R.style.community_publication_animation)
return createDialog
}
// dialog drag animation
@SuppressLint("ClickableViewAccessibility")
override fun onTouch(v: View, event: MotionEvent): Boolean {
if (mGestureDetector.onTouchEvent(event) && mRootView.y == 0F) {
v.performClick()
return true
}
when (event.action) {
MotionEvent.ACTION_DOWN -> {
mInitPositionY = mRootView.y - event.rawY
}
MotionEvent.ACTION_MOVE -> {
val offsetY = event.rawY + mInitPositionY
val dialogY = mRootView.y
if (dialogY + offsetY > 0) {
mRootView.animate()
.y(offsetY)
.setDuration(0)
.start()
} else {
resetDialogPosition()
}
}
MotionEvent.ACTION_CANCEL,
MotionEvent.ACTION_UP,
MotionEvent.ACTION_OUTSIDE -> {
if (mRootView.y >= mRootView.height / 2) {
dismissAllowingStateLoss()
} else {
resetDialogPosition(300)
}
}
else -> return false
}
return true
}
private fun resetDialogPosition(duration: Long = 0) {
mRootView.animate()
.y(0F)
.setDuration(duration)
.start()
}
private class SingleTapConfirm : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapUp(event: MotionEvent): Boolean {
return true
}
}
override fun onStart() {
super.onStart()
val width = HaloApp.getInstance().application.resources.displayMetrics.widthPixels
val height = dialog?.window?.attributes?.height ?: ViewGroup.LayoutParams.WRAP_CONTENT
dialog?.window?.setLayout(width, height)
}
abstract fun getRootView(): View
abstract fun getDragCloseView(): View
override fun getThemeRes(): Int = R.style.DialogFragmentDimAmount
}

View File

@ -4,6 +4,8 @@ import android.content.DialogInterface
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import com.gh.common.util.MtaHelper
import com.lightgame.dialog.BaseDialogFragment
import java.util.concurrent.atomic.AtomicBoolean
@ -63,4 +65,29 @@ abstract class BaseTrackableDialogFragment : BaseDialogFragment() {
open fun trackWithBasicDeviceInfo() = false
override fun show(manager: FragmentManager, tag: String?) {
val fragment = manager.findFragmentByTag(tag)
if (fragment != null) {
val transaction = manager.beginTransaction()
transaction.show(fragment)
transaction.commit()
} else {
try {
val clazz: Class<*> = DialogFragment::class.java
val dismissed = clazz.getDeclaredField("mDismissed")
dismissed.isAccessible = true
dismissed[this] = false
val shownByMe = clazz.getDeclaredField("mShownByMe")
shownByMe.isAccessible = true
shownByMe[this] = true
val transaction = manager.beginTransaction()
transaction.add(this, tag)
transaction.commitAllowingStateLoss()
} catch (e: Exception) {
super.show(manager, tag)
e.printStackTrace()
}
}
}
}

View File

@ -17,18 +17,13 @@ import androidx.appcompat.app.AppCompatActivity
import com.gh.common.avoidcallback.AvoidOnResultManager
import com.gh.common.avoidcallback.Callback
import com.gh.common.constant.Constants
import com.gh.common.util.CheckLoginUtils
import com.gh.common.util.DialogUtils
import com.gh.common.util.GsonUtils
import com.gh.common.util.SPUtils
import com.gh.common.util.*
import com.gh.gamecenter.R
import com.gh.gamecenter.UserInfoEditActivity
import com.gh.gamecenter.WebActivity
import com.gh.gamecenter.ShellActivity
import com.gh.gamecenter.entity.AuthDialogEntity
import com.gh.gamecenter.entity.AuthDialogLevel
import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.manager.UserManager
import com.gh.gamecenter.user.UserViewModel
import com.google.gson.reflect.TypeToken
import com.halo.assistant.fragment.user.UserInfoEditFragment
import com.lightgame.utils.AppManager
@ -56,7 +51,7 @@ class CertificationDialog(context: Context, private val authDialogEntity: AuthDi
detailedDesTv.paint.isAntiAlias = true
detailedDesTv.setOnClickListener {
context.startActivity(WebActivity.getIntentByUrl(context, authDialogEntity.link))
DirectUtils.directToWebView(context, authDialogEntity.link)
}
when (authDialogEntity.level) {
@ -134,10 +129,17 @@ class CertificationDialog(context: Context, private val authDialogEntity: AuthDi
val currentActivity = AppManager.getInstance().currentActivity() ?: return
AvoidOnResultManager.getInstance(currentActivity as AppCompatActivity)
.startForResult(UserInfoEditActivity.getIntent(context, UserViewModel.TYPE_ID_CARD), object : Callback {
.startForResult(
ShellActivity.getIntent(
context,
ShellActivity.Type.REAL_NAME_INFO,
).apply {
putExtra(EntranceUtils.KEY_GAME_ID, gameId)
}, object : Callback {
override fun onActivityResult(resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && data != null) {
val isAuthSuccess = data.getBooleanExtra(UserInfoEditFragment.AUTH_SUCCESS, false)
val isAuthSuccess =
data.getBooleanExtra(UserInfoEditFragment.AUTH_SUCCESS, false)
if (isAuthSuccess) {
listener.onConfirm()
dismiss()

View File

@ -23,22 +23,22 @@ import com.gh.common.constant.Constants
import com.gh.common.util.*
import com.gh.download.DownloadManager
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.DialogDeviceRemindBinding
import com.gh.gamecenter.entity.DeviceDialogEntity
import com.gh.gamecenter.entity.GameEntity
import com.google.gson.reflect.TypeToken
import com.halo.assistant.fragment.SettingsFragment.AUTO_INSTALL_SP_KEY
import com.gh.gamecenter.setting.GameDownloadSettingFragment.Companion.AUTO_INSTALL_SP_KEY
import com.lightgame.download.DataWatcher
import com.lightgame.download.DownloadEntity
import com.lightgame.download.DownloadStatus
import io.reactivex.disposables.Disposable
import kotlinx.android.synthetic.main.dialog_device_remind.view.*
import java.lang.ref.WeakReference
/**
* 设备提醒弹窗
*/
class DeviceRemindDialog(context: Context, val entity: DeviceDialogEntity, val gameEntity: GameEntity) : Dialog(context, R.style.GhAlertDialog) {
private lateinit var view: View
private val mBinding: DialogDeviceRemindBinding by lazy { DialogDeviceRemindBinding.inflate(layoutInflater) }
private var currentPage = 0
private var mSlideLooperInterval = 3000L
private lateinit var mLooperHandle: LooperHandle
@ -60,39 +60,48 @@ class DeviceRemindDialog(context: Context, val entity: DeviceDialogEntity, val g
companion object {
fun showDeviceRemindDialog(context: Context, gameEntity: GameEntity) {
val datas = SPUtils.getString(Constants.SP_DEVICE_REMIND)
if (datas.isNotEmpty()) {
val pair = shouldShowDeviceRemindDialog(gameEntity)
if (pair.first) {
val dialog = DeviceRemindDialog(context, pair.second!!, gameEntity)
dialog.show()
}
}
}
fun shouldShowDeviceRemindDialog(gameEntity: GameEntity): Pair<Boolean, DeviceDialogEntity?> {
val datas = SPUtils.getString(Constants.SP_DEVICE_REMIND)
if (datas.isNotEmpty()) {
val type = object : TypeToken<List<DeviceDialogEntity>>() {}.type
val entitys = GsonUtils.gson.fromJson<List<DeviceDialogEntity>>(datas, type)
val entities = GsonUtils.gson.fromJson<List<DeviceDialogEntity>>(datas, type)
//1.判断设备是否匹配
val entity = entitys.find { it.manufacturer.toLowerCase().startsWith(Build.MANUFACTURER.toLowerCase()) }
?: return
val entity = entities.find { it.manufacturer.toLowerCase().startsWith(Build.MANUFACTURER.toLowerCase()) }
?: return Pair(false, null)
//2.判断游戏不含剔除标签
gameEntity.tagStyle.forEach {
if (entity.excludeTags.contains(it.name)) {
return
return Pair(false, null)
}
}
//3.不再弹出提示判断
val isNoRemindAgain = SPUtils.getBoolean(Constants.SP_NO_REMIND_AGAIN, false)
if (isNoRemindAgain) return
val dialog = DeviceRemindDialog(context, entity, gameEntity)
dialog.show()
if (isNoRemindAgain) return Pair(false, null)
return Pair(true, entity)
}
return Pair(false, null)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
view = LayoutInflater.from(context).inflate(R.layout.dialog_device_remind, null)
setContentView(view)
setContentView(mBinding.root)
mDatas.addAll(entity.gallery)
view.titleTv.text = entity.title
view.contentTv.text = entity.content
mBinding.titleTv.text = entity.title
mBinding.contentTv.text = entity.content
view.bannerView.apply {
mBinding.bannerView.apply {
orientation = ViewPager2.ORIENTATION_HORIZONTAL
mAdapter = BannerAdapter()
val recyclerView = getChildAt(0) as RecyclerView
@ -123,36 +132,36 @@ class DeviceRemindDialog(context: Context, val entity: DeviceDialogEntity, val g
}
val isFirst = SPUtils.getBoolean(Constants.SP_FIRST_DEVICE_REMIND, false)
if (!isFirst) {
view.cancelTv.isEnabled = false
view.cancelTv.background = ContextCompat.getDrawable(context, R.drawable.button_round_f5f5f5)
mBinding.cancelTv.isEnabled = false
mBinding.cancelTv.background = ContextCompat.getDrawable(context, R.drawable.button_round_f5f5f5)
disposable = countDownTimer(3) { finish, time ->
if (finish) {
view.cancelTv.isEnabled = true
view.cancelTv.background = ContextCompat.getDrawable(context, R.drawable.button_blue_oval)
view.cancelTv.text = "我知道了"
view.cancelTv.setTextColor(ContextCompat.getColor(context, R.color.white))
mBinding.cancelTv.isEnabled = true
mBinding.cancelTv.background = ContextCompat.getDrawable(context, R.drawable.button_blue_oval)
mBinding.cancelTv.text = "我知道了"
mBinding.cancelTv.setTextColor(ContextCompat.getColor(context, R.color.white))
} else {
view.cancelTv.text = "我知道了(${time}S)"
mBinding.cancelTv.text = "我知道了(${time}S)"
}
}
SPUtils.setBoolean(Constants.SP_FIRST_DEVICE_REMIND, true)
} else {
view.noRemindAgainCb.visibility = View.VISIBLE
view.cancelTv.text = "我知道了"
view.cancelTv.isEnabled = true
view.cancelTv.setTextColor(ContextCompat.getColor(context, R.color.white))
view.cancelTv.background = ContextCompat.getDrawable(context, R.drawable.button_blue_oval)
mBinding.noRemindAgainCb.visibility = View.VISIBLE
mBinding.cancelTv.text = "我知道了"
mBinding.cancelTv.isEnabled = true
mBinding.cancelTv.setTextColor(ContextCompat.getColor(context, R.color.white))
mBinding.cancelTv.background = ContextCompat.getDrawable(context, R.drawable.button_blue_oval)
}
view.cancelTv.setOnClickListener {
SPUtils.setBoolean(Constants.SP_NO_REMIND_AGAIN, view.noRemindAgainCb.isChecked)
mBinding.cancelTv.setOnClickListener {
SPUtils.setBoolean(Constants.SP_NO_REMIND_AGAIN, mBinding.noRemindAgainCb.isChecked)
dismiss()
}
DownloadManager.getInstance(context).addObserver(dataWatcher)
DownloadManager.getInstance().addObserver(dataWatcher)
}
private fun addIndicator() {
view.indicatorLl.removeAllViews()
mBinding.indicatorLl.removeAllViews()
mDatas.forEach { _ ->
val indicatorView = ImageView(context).apply {
setImageResource(R.drawable.selector_device_remind_indicator)
@ -161,13 +170,13 @@ class DeviceRemindDialog(context: Context, val entity: DeviceDialogEntity, val g
params.rightMargin = DisplayUtils.dip2px(1F)
layoutParams = params
}
view.indicatorLl.addView(indicatorView)
mBinding.indicatorLl.addView(indicatorView)
}
}
private fun slideIndicator(position: Int) {
for (i in 0 until view.indicatorLl.childCount) {
val childAt = view.indicatorLl.getChildAt(i)
for (i in 0 until mBinding.indicatorLl.childCount) {
val childAt = mBinding.indicatorLl.getChildAt(i)
childAt.isSelected = i == position
}
}
@ -200,7 +209,7 @@ class DeviceRemindDialog(context: Context, val entity: DeviceDialogEntity, val g
fun scrollToNextPage() {
currentPage++
view.bannerView.setCurrentItem(currentPage, true)
mBinding.bannerView.setCurrentItem(currentPage, true)
}
fun startScroll() {
@ -215,7 +224,7 @@ class DeviceRemindDialog(context: Context, val entity: DeviceDialogEntity, val g
class LooperHandle(val mAdapter: BannerAdapter) : Handler() {
private val mWeakReference: WeakReference<BannerAdapter> = WeakReference(mAdapter)
override fun handleMessage(msg: Message?) {
override fun handleMessage(msg: Message) {
val adapter = mWeakReference.get()
adapter?.scrollToNextPage()
adapter?.startScroll()
@ -228,6 +237,6 @@ class DeviceRemindDialog(context: Context, val entity: DeviceDialogEntity, val g
disposable!!.dispose()
disposable = null
}
DownloadManager.getInstance(context).removeObserver(dataWatcher)
DownloadManager.getInstance().removeObserver(dataWatcher)
}
}

View File

@ -1,5 +1,6 @@
package com.gh.common.dialog
import android.app.Dialog
import android.graphics.Paint
import android.os.Bundle
import android.util.TypedValue
@ -8,54 +9,75 @@ import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.text.HtmlCompat
import com.gh.base.fragment.BaseDialogFragment
import com.gh.common.util.DirectUtils
import com.gh.common.util.DisplayUtils
import com.gh.common.util.MtaHelper
import com.gh.common.util.dip2px
import com.gh.common.util.toColor
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.DialogGameOffServiceBinding
import com.gh.gamecenter.entity.GameEntity
import kotlinx.android.synthetic.main.dialog_game_off_service.*
// 游戏关闭下载弹窗
class GameOffServiceDialogFragment
// : BaseTrackableDialogFragment()
:BaseDialogFragment() {
: BaseDialogFragment() {
private var mDialog: GameEntity.Dialog? = null
private var mBinding: DialogGameOffServiceBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mDialog = requireArguments().getParcelable(KEY_DIALOG)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.dialog_game_off_service, null)
return DialogGameOffServiceBinding
.inflate(inflater)
.apply { mBinding = this }
.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mDialog?.run {
titleTv.text = title
contentTv.text = HtmlCompat.fromHtml(content, HtmlCompat.FROM_HTML_MODE_LEGACY)
for (site in sites) {
val siteTv = TextView(context)
siteTv.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT).apply {
topMargin = DisplayUtils.dip2px(12f)
}
siteTv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)
siteTv.setTextColor(ContextCompat.getColor(requireContext(), R.color.theme_font))
siteTv.text = site.text
siteTv.paintFlags = siteTv.paintFlags or Paint.UNDERLINE_TEXT_FLAG
siteTv.setOnClickListener {
// MtaHelper.onEvent("游戏下载状态按钮", getKey(), site.text)
DirectUtils.directToWebView(requireContext(), site.url, "(关闭下载弹窗)")
mBinding?.run {
mDialog?.run {
titleTv.text = title
contentTv.text = HtmlCompat.fromHtml(content, HtmlCompat.FROM_HTML_MODE_LEGACY)
okTv.setOnClickListener {
dismissAllowingStateLoss()
}
container.addView(siteTv)
// 过滤内容为空的元素
val notEmptySite = sites.filter { it.text.isNotBlank() }
notEmptySite.forEachIndexed { index, site ->
val siteTv = TextView(context)
siteTv.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT).apply {
topMargin = 24F.dip2px()
if (index == notEmptySite.size - 1) bottomMargin = 8F.dip2px()
}
siteTv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14F)
siteTv.setTextColor(R.color.theme_font.toColor())
siteTv.text = site.text
siteTv.paintFlags = siteTv.paintFlags or Paint.UNDERLINE_TEXT_FLAG
siteTv.setOnClickListener {
// MtaHelper.onEvent("游戏下载状态按钮", getKey(), site.text)
DirectUtils.directToWebView(requireContext(), site.url, "(关闭下载弹窗)")
dismissAllowingStateLoss()
}
container.addView(siteTv)
}
}
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return super.onCreateDialog(savedInstanceState).apply { setCanceledOnTouchOutside(true) }
}
// override fun getEvent(): String {
// return "游戏下载状态按钮"
// }
@ -65,9 +87,13 @@ class GameOffServiceDialogFragment
// }
companion object {
const val KEY_DIALOG = "dialog"
@JvmStatic
fun getInstance(dialog: GameEntity.Dialog) = GameOffServiceDialogFragment().apply {
mDialog = dialog
arguments = Bundle().apply {
putParcelable(KEY_DIALOG, dialog)
}
}
}

View File

@ -19,6 +19,7 @@ import com.gh.common.util.PermissionHelper.INSTALL_PERMISSION_CODE
import com.gh.common.xapk.XapkInstaller
import com.gh.gamecenter.R
import com.lightgame.download.DownloadEntity
import com.lightgame.utils.Utils
import kotlin.random.Random
class InstallPermissionDialogFragment : BaseTrackableDialogFragment() {
@ -26,7 +27,7 @@ class InstallPermissionDialogFragment : BaseTrackableDialogFragment() {
lateinit var mView: View
var isXapk = false
var url: String = ""
var mCallBack: (() -> Unit)? = null
var mCallBack: ((isFromPermissionGrantedCallback: Boolean) -> Unit)? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
mView = inflater.inflate(R.layout.dialog_install_permission, null, false)
@ -56,7 +57,7 @@ class InstallPermissionDialogFragment : BaseTrackableDialogFragment() {
closeTv.setOnClickListener {
MtaHelper.onEvent(getEvent(), getKey(), "文案样式_点击以后再说")
if (isXapk) {
mCallBack?.invoke()
mCallBack?.invoke(false)
}
dismiss()
}
@ -77,9 +78,11 @@ class InstallPermissionDialogFragment : BaseTrackableDialogFragment() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK && requestCode == INSTALL_PERMISSION_CODE) {
SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "")
SPUtils.setString(Constants.SP_XAPK_URL, "")
mCallBack?.invoke()
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "")
SPUtils.setString(Constants.SP_XAPK_URL, "")
}
mCallBack?.invoke(true)
dismiss()
}
}
@ -90,27 +93,27 @@ class InstallPermissionDialogFragment : BaseTrackableDialogFragment() {
companion object {
@JvmStatic
fun show(activity: AppCompatActivity, downloadEntity: DownloadEntity, callBack: (() -> Unit)?) {
fun show(activity: AppCompatActivity, downloadEntity: DownloadEntity, callBack: ((isFromPermissionGrantedCallback: Boolean) -> Unit)?) {
val isXapk = XapkInstaller.XAPK_EXTENSION_NAME == downloadEntity.path.getExtension()
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
callBack?.invoke()
callBack?.invoke(false)
return
}
val haveInstallPermission = activity.packageManager.canRequestPackageInstalls()
if (haveInstallPermission) {
callBack?.invoke()
callBack?.invoke(false)
return
}
if (isXapk) {
val xapkUnzipVersions = Config.getSettings()?.permissionPopupAppliedVersions?.xapkUnzip
if (xapkUnzipVersions?.contains(Build.VERSION.SDK_INT.toString()) == false) {
callBack?.invoke()
callBack?.invoke(false)
return
}
} else {
val installVersions = Config.getSettings()?.permissionPopupAppliedVersions?.install
if (installVersions?.contains(Build.VERSION.SDK_INT.toString()) == false) {
callBack?.invoke()
callBack?.invoke(false)
return
}
}

View File

@ -1,6 +1,7 @@
package com.gh.common.dialog
import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Intent
import android.os.Build
import android.os.Bundle
@ -15,10 +16,10 @@ import com.gh.common.util.PermissionHelper
import com.gh.common.util.fromHtml
import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.DialogNotificationHintBinding
import com.gh.gamecenter.entity.NotificationStyleEntity
import com.gh.gamecenter.entity.NotificationUgc
import com.lightgame.utils.Utils
import kotlinx.android.synthetic.main.dialog_notification_hint.*
import org.json.JSONArray
import java.io.BufferedReader
import java.io.IOException
@ -29,9 +30,10 @@ import kotlin.random.Random
class NotificationHintDialogFragment : BaseTrackableDialogFragment() {
private var mNotificationUgc: NotificationUgc? = null
private val mBinding: DialogNotificationHintBinding by lazy { DialogNotificationHintBinding.inflate(layoutInflater) }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.dialog_notification_hint, null)
return mBinding.root
}
@Suppress("DEPRECATION")
@ -54,35 +56,41 @@ class NotificationHintDialogFragment : BaseTrackableDialogFragment() {
val styleEntityJson = jsonObj.getJSONObject(mNotificationUgc!!.value)
val styleEntity = GsonUtils.fromJson(styleEntityJson.toString(), NotificationStyleEntity::class.java)
val drawableId = resources.getIdentifier(styleEntity.image, "drawable", requireContext().packageName)
notificationIv.setImageDrawable(ContextCompat.getDrawable(requireContext(), drawableId))
notificationTitle.text = styleEntity.title
notificationContent.text = styleEntity.content.fromHtml()
if (index == 0) {
closeIv.setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.ic_notification_close_1))
} else {
activateTv.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_notification_open_btn_style_1)
activateTv.text = "优雅的开启"
}
activateTv.setOnClickListener {
MtaHelper.onEventWithBasicDeviceInfo(getEvent(), getKey(), "点击立即开启")
MtaHelper.onEventWithBasicDeviceInfo(getEvent(), getKey(), "${styleEntity.scenes}_${styleEntity.styleNo}_点击立即开启")
dismiss()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//这种方案适用于 API 26, 即8.0含8.0)以上可以用
val intent = Intent()
intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
intent.putExtra(Settings.EXTRA_APP_PACKAGE, BuildConfig.APPLICATION_ID)
startActivity(intent)
mBinding.run {
notificationIv.setImageDrawable(ContextCompat.getDrawable(requireContext(), drawableId))
notificationTitle.text = styleEntity.title
notificationContent.text = styleEntity.content.fromHtml()
if (index == 0) {
closeIv.setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.ic_notification_close_1))
} else {
PermissionHelper.toPermissionSetting(requireActivity())
activateTv.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_notification_open_btn_style_1)
activateTv.text = "优雅的开启"
}
}
closeIv.setOnClickListener {
dismiss()
MtaHelper.onEventWithBasicDeviceInfo(getEvent(), getKey(), "点击关闭")
MtaHelper.onEventWithBasicDeviceInfo(getEvent(), getKey(), "${styleEntity.scenes}_${styleEntity.styleNo}_点击关闭")
activateTv.setOnClickListener {
MtaHelper.onEventWithBasicDeviceInfo(getEvent(), getKey(), "点击立即开启")
MtaHelper.onEventWithBasicDeviceInfo(getEvent(), getKey(), "${styleEntity.scenes}_${styleEntity.styleNo}_点击立即开启")
dismissAllowingStateLoss()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//这种方案适用于 API 26, 即8.0含8.0)以上可以用
val intent = Intent()
intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
intent.putExtra(Settings.EXTRA_APP_PACKAGE, BuildConfig.APPLICATION_ID)
try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {
PermissionHelper.toPermissionSetting(requireActivity())
}
} else {
PermissionHelper.toPermissionSetting(requireActivity())
}
}
closeIv.setOnClickListener {
dismissAllowingStateLoss()
MtaHelper.onEventWithBasicDeviceInfo(getEvent(), getKey(), "点击关闭")
MtaHelper.onEventWithBasicDeviceInfo(getEvent(), getKey(), "${styleEntity.scenes}_${styleEntity.styleNo}_点击关闭")
}
}
dialog?.setCanceledOnTouchOutside(true)

View File

@ -1,30 +1,39 @@
package com.gh.common.dialog
import android.animation.ValueAnimator
import android.content.Context
import android.content.pm.PackageInfo
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.LinearInterpolator
import android.widget.LinearLayout
import android.widget.RelativeLayout
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentTransaction
import androidx.lifecycle.Lifecycle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.gh.base.BaseRecyclerViewHolder
import com.gh.common.constant.Constants
import com.gh.common.util.*
import com.gh.common.view.CustomLinkMovementMethod
import com.gh.download.DownloadManager
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.FragmentPackageCheckBinding
import com.gh.gamecenter.databinding.PackageCheckItemBinding
import com.gh.gamecenter.entity.DetectionObjectEntity
import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.entity.LinkEntity
import com.gh.gamecenter.entity.PackageDialogEntity
import com.gh.gamecenter.eventbus.EBPackage
import com.halo.assistant.HaloApp
import com.lightgame.adapter.BaseRecyclerAdapter
import com.lightgame.dialog.BaseDialogFragment
import com.lightgame.download.DataWatcher
import com.lightgame.download.DownloadEntity
import com.lightgame.download.DownloadStatus
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@ -33,6 +42,7 @@ import org.greenrobot.eventbus.ThreadMode
/**
* 包名检测弹窗
*/
// TODO 将 gameEntity 放到 argument 里再取出,避免重建时为空
class PackageCheckDialogFragment : BaseDialogFragment() {
private lateinit var binding: FragmentPackageCheckBinding
@ -40,12 +50,35 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
private val mDuration = 3000
private var mDisposable: Disposable? = null
private var mAdapter: PackageCheckAdapter? = null
var packageDialogEntity: PackageDialogEntity? = null
private var mAllInstalledPackages = PackageUtils.getInstalledPackages(HaloApp.getInstance().application, 0)
var gameEntity: GameEntity? = null
var callBack: DialogUtils.ConfirmListener? = null
private val dataWatcher = object : DataWatcher() {
override fun onDataChanged(downloadEntity: DownloadEntity) {
val packageName = downloadEntity.packageName
val detectionObjects = gameEntity?.packageDialog?.detectionObjects
if (DownloadStatus.add == downloadEntity.status || DownloadStatus.done == downloadEntity.status) {
detectionObjects?.forEach { detectionObject ->
if (detectionObject.packages.contains(packageName)) {
val packageLink = gameEntity?.packageDialog?.links?.find { it.buttonLink }
LogUtils.uploadPackageCheck(
"pkg_check_pop_download", if (DownloadStatus.add == downloadEntity.status) "下载开始" else "下载完成",
gameEntity, packageLink?.text ?: "", packageLink?.title
?: "", downloadEntity.gameId, downloadEntity.getMetaExtra(Constants.GAME_NAME)
)
}
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
gameEntity?.let {
LogUtils.uploadPackageCheck("pkg_check_pop_click", "出现弹窗", it, "", "", "", "")
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -55,7 +88,7 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
packageDialogEntity?.let {
gameEntity?.packageDialog?.let {
changeParams(it.detectionObjects.size)
binding.packageRv.layoutManager = LinearLayoutManager(requireContext())
@ -67,8 +100,11 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
val spanBuilder = SpanBuilder(it.linkHintText).build()
it.links.forEachIndexed { index, link ->
val linkSpan = SpanBuilder(link.title ?: "").click(0, (link.title
?: "").length, R.color.theme_font, true) {
val linkSpan = SpanBuilder(link.title ?: "").click(
0, (link.title
?: "").length, R.color.theme_font, true
) {
LogUtils.uploadPackageCheck("pkg_check_pop_click", "点击链接", gameEntity, link.text, link.title, "", "")
DirectUtils.directToLinkPage(requireContext(), link, "包名检测弹窗", "")
}.build()
spanBuilder.append(linkSpan)
@ -88,6 +124,10 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
binding.cancelTv.text = "我知道了"
binding.noRemindAgainCb.visibility = View.GONE
}
"OPTIONAL_CURRENT_HINT" -> {
binding.cancelTv.text = "我知道了"
binding.noRemindAgainCb.visibility = View.VISIBLE
}
else -> {
binding.cancelTv.text = "我知道了"
binding.noRemindAgainCb.visibility = View.VISIBLE
@ -95,7 +135,9 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
}
initListener(it)
}
checkPackage()
binding.root.post {
checkPackage()
}
}
private fun changeParams(size: Int) {
@ -107,15 +149,19 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
private fun initListener(entity: PackageDialogEntity) {
binding.downloadBtn.setOnClickListener {
if (binding.noRemindAgainCb.isChecked) {
SPUtils.setBoolean(Constants.SP_PACKAGE_CHECK, true)
saveRecord(entity)
}
val isAllPackageInstalled = isAllPackageInstalled(entity)
val isAllPackageInstalled = isAllPackageInstalled(mAllInstalledPackages, entity)
if (isAllPackageInstalled) {
callBack?.onConfirm()
dismissAllowingStateLoss()
} else {
val packageLink = entity.links.find { it.buttonLink }
var packageLink = getNotInstalledLink(entity)
if (packageLink == null) {
packageLink = entity.links.find { it.buttonLink }
}
if (packageLink != null) {
LogUtils.uploadPackageCheck("pkg_check_pop_click", "点击前往下载", gameEntity, packageLink.text, packageLink.title, "", "")
DirectUtils.directToLinkPage(requireContext(), packageLink, "包名检测弹窗", "")
}
}
@ -126,22 +172,26 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
callBack?.onConfirm()
}
if (binding.noRemindAgainCb.isChecked) {
SPUtils.setBoolean(Constants.SP_PACKAGE_CHECK, true)
saveRecord(entity)
LogUtils.uploadPackageCheck("pkg_check_pop_click", "不再提示", gameEntity, "", "", "", "")
}
dismissAllowingStateLoss()
}
}
private fun saveRecord(entity: PackageDialogEntity) {
if (entity.level == "OPTIONAL_CURRENT_HINT") {
SPUtils.setBoolean("${Constants.SP_PACKAGE_CHECK}:${gameEntity?.id}", true)
} else {
SPUtils.setBoolean("${Constants.SP_PACKAGE_CHECK}:${gameEntity?.packageDialog?.id}", true)
}
}
private fun checkPackage() {
var index = 0
mTotalWidth = (DisplayUtils.getScreenWidth() - 108f.dip2px()).toFloat()
mDisposable = rxTimer(1) {
val width = (mTotalWidth / mDuration) * it
val params = binding.progressView.layoutParams as RelativeLayout.LayoutParams
params.width = width.toInt()
binding.progressView.layoutParams = params
packageDialogEntity?.detectionObjects?.let { objects ->
gameEntity?.packageDialog?.detectionObjects?.let { objects ->
if (objects.isNotEmpty()) {
val averageTime = if (objects.size == 1) {
mDuration
@ -159,24 +209,50 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
if (it >= mDuration) {
mDisposable?.dispose()
binding.downloadBtn.isEnabled = true
binding.progressText.text = "检测完成"
binding.progressView.background = ContextCompat.getDrawable(requireContext(), R.drawable.package_check_complete_bg)
binding.downloadBtn.background = R.drawable.bg_notification_open_btn_style_2.toDrawable()
}
}
val animator = ValueAnimator.ofInt(0, 100)
animator.duration = mDuration.toLong()
animator.interpolator = LinearInterpolator()
animator.addUpdateListener {
binding.progressBar.progress = it.animatedValue as Int
}
animator.start()
}
private fun getNotInstalledLink(packageDialogEntity: PackageDialogEntity): LinkEntity? {
val links = LinkedHashSet<LinkEntity>()
packageDialogEntity.detectionObjects.forEach { obj ->
if (!checkDetectionsInstalled(mAllInstalledPackages, obj.packages)) {
obj.assignDownload.forEach {
links.add(packageDialogEntity.links[it])
}
}
}
var link: LinkEntity? = null
if (links.size > 1) {
link = links.find { it.buttonLink } ?: links.toList()[0]
} else if (links.size == 1) {
link = links.toList()[0]
}
return link
}
override fun onStart() {
super.onStart()
val width = requireContext().resources.displayMetrics.widthPixels - 60F.dip2px()
val height = ViewGroup.LayoutParams.WRAP_CONTENT
dialog?.window?.setLayout(width, height)
dialog?.setCanceledOnTouchOutside(true)
requireDialog().window?.setLayout(width, height)
requireDialog().setCanceledOnTouchOutside(true)
DownloadManager.getInstance().addObserver(dataWatcher)
}
override fun onResume() {
super.onResume()
packageDialogEntity?.let {
if (isAllPackageInstalled(it)) {
mAllInstalledPackages = PackageUtils.getInstalledPackages(HaloApp.getInstance().application, 0)
gameEntity?.packageDialog?.let {
if (isAllPackageInstalled(mAllInstalledPackages, it)) {
callBack?.onConfirm()
dismissAllowingStateLoss()
}
@ -189,26 +265,30 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
if (mDisposable?.isDisposed == false) {
mDisposable?.dispose()
}
LogUtils.uploadPackageCheck("pkg_check_pop_click", "关闭弹窗", gameEntity, "", "", "", "")
DownloadManager.getInstance().removeObserver(dataWatcher)
}
//安装、卸载事件
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEventMainThread(busFour: EBPackage) {
if ("安装" == busFour.type || "卸载" == busFour.type) {
mAllInstalledPackages = PackageUtils.getInstalledPackages(HaloApp.getInstance().application, 0)
mAdapter?.notifyDataSetChanged()
}
}
class PackageCheckAdapter(val context: Context, val entities: ArrayList<DetectionObjectEntity>) : BaseRecyclerAdapter<RecyclerView.ViewHolder>(context) {
inner class PackageCheckAdapter(val context: Context, val entities: ArrayList<DetectionObjectEntity>) :
BaseRecyclerAdapter<RecyclerView.ViewHolder>(context) {
private var index = -1
fun notifyPackages() {
index++
notifyDataSetChanged()
notifyItemChanged(index)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return PackageCheckViewHolder(PackageCheckItemBinding.bind(LayoutInflater.from(context).inflate(R.layout.package_check_item, parent, false)))
return PackageCheckViewHolder(parent.toBinding())
}
override fun getItemCount(): Int = entities.size
@ -216,22 +296,15 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is PackageCheckViewHolder) {
val entity = entities[position]
holder.binding.entity = entity
holder.binding.gameNameTv.text = entity.text
if (position <= index) {
var isAllInstalled = false
entity.packages.forEach { packageName ->
val isInstalled = PackageUtils.getInstalledPackages(context, 0).find { it.packageName == packageName } != null
if (isInstalled) {
isAllInstalled = true
return@forEach
}
}
val isAllInstalled = checkDetectionsInstalled(mAllInstalledPackages, entity.packages)
if (isAllInstalled) {
holder.binding.statusTv.text = "已安装"
holder.binding.statusTv.setTextColor(ContextCompat.getColor(context, R.color.theme_font))
} else {
holder.binding.statusTv.text = "未安装"
holder.binding.statusTv.setTextColor(ContextCompat.getColor(context, R.color.text_FF4147))
holder.binding.statusTv.setTextColor(ContextCompat.getColor(context, R.color.theme_red))
}
holder.binding.statusTv.visibility = View.VISIBLE
} else {
@ -245,56 +318,66 @@ class PackageCheckDialogFragment : BaseDialogFragment() {
companion object {
@JvmStatic
fun show(activity: AppCompatActivity, packageDialogEntity: PackageDialogEntity?, callBack: DialogUtils.ConfirmListener) {
fun show(activity: AppCompatActivity, gameEntity: GameEntity, callBack: DialogUtils.ConfirmListener) {
val packageDialogEntity = gameEntity.packageDialog
if (packageDialogEntity == null) {
callBack.onConfirm()
return
}
if (isAllPackageInstalled(packageDialogEntity)) {
val allInstalledPackages = PackageUtils.getInstalledPackages(HaloApp.getInstance().application, 0)
if (isAllPackageInstalled(allInstalledPackages, packageDialogEntity)) {
callBack.onConfirm()
return
}
val isChoose = SPUtils.getBoolean(Constants.SP_PACKAGE_CHECK, false)
val isChoose = SPUtils.getBoolean("${Constants.SP_PACKAGE_CHECK}:${packageDialogEntity.id}", false)
if (packageDialogEntity.level == "OPTIONAL_HINT" && isChoose) {
callBack.onConfirm()
return
}
var dialogFragment = activity.supportFragmentManager.findFragmentByTag(PackageCheckDialogFragment::class.java.simpleName) as? PackageCheckDialogFragment
val isCurrentGameChoose = SPUtils.getBoolean("${Constants.SP_PACKAGE_CHECK}:${gameEntity.id}", false)
if (packageDialogEntity.level == "OPTIONAL_CURRENT_HINT" && isCurrentGameChoose) {
callBack.onConfirm()
return
}
if (!activity.lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) return
var dialogFragment =
activity.supportFragmentManager.findFragmentByTag(PackageCheckDialogFragment::class.java.simpleName) as? PackageCheckDialogFragment
if (dialogFragment == null) {
dialogFragment = PackageCheckDialogFragment()
dialogFragment.packageDialogEntity = packageDialogEntity
dialogFragment.gameEntity = gameEntity
dialogFragment.callBack = callBack
dialogFragment.show(activity.supportFragmentManager, PackageCheckDialogFragment::class.java.simpleName)
} else {
dialogFragment.packageDialogEntity = packageDialogEntity
dialogFragment.gameEntity = gameEntity
dialogFragment.callBack = callBack
val transaction: FragmentTransaction = activity.supportFragmentManager.beginTransaction()
transaction.show(dialogFragment)
transaction.commit()
}
}
fun isAllPackageInstalled(packageDialogEntity: PackageDialogEntity): Boolean {
var isAllInstalled = true
val isPackagesInstall: (ArrayList<String>) -> Boolean = { packages ->
var isPackagesInstalled = false
packages.forEach {packageName->
val isInstalled = PackageUtils.getInstalledPackages(HaloApp.getInstance().application, 0).find { it.packageName == packageName } != null
if (isInstalled) {
isPackagesInstalled = true
return@forEach
}
private fun checkDetectionsInstalled(allInstalledPackages: List<PackageInfo>, packages: ArrayList<String>): Boolean {
var isPackagesInstalled = false
packages.forEach { packageName ->
val isInstalled = allInstalledPackages.find { it.packageName == packageName } != null
if (isInstalled) {
isPackagesInstalled = true
return@forEach
}
isPackagesInstalled
}
return isPackagesInstalled
}
fun isAllPackageInstalled(allInstalledPackages: List<PackageInfo>, packageDialogEntity: PackageDialogEntity): Boolean {
var isAllInstalled = true
packageDialogEntity.detectionObjects.forEach loop@{ obj ->
if (!isPackagesInstall(obj.packages)) {
if (!checkDetectionsInstalled(allInstalledPackages, obj.packages)) {
isAllInstalled = false
return isAllInstalled
}

View File

@ -1,155 +0,0 @@
package com.gh.common.dialog
import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.TextPaint
import android.text.method.ScrollingMovementMethod
import android.text.style.ClickableSpan
import android.view.*
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentTransaction
import com.gh.base.fragment.BaseDialogFragment
import com.gh.common.util.DirectUtils.directToExternalBrowser
import com.gh.common.util.dip2px
import com.gh.common.view.CustomLinkMovementMethod
import com.gh.gamecenter.R
class PrivacyDialogFragment : BaseDialogFragment() {
// private val mLocalPrivacyHtml = "file:///android_asset/privacy_policies.html"
// private val mLocalRegulationHtml = "file:///android_asset/user_regulation.html"
var containerView: View? = null
var mCallBack: ((isSuccess: Boolean) -> Unit)? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
containerView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_privacy_protocol, null, false)
return containerView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// val mWebViewPrivacy = containerView?.findViewById<WebView>(R.id.webView)
// val mWebViewRegulation = containerView?.findViewById<WebView>(R.id.webView2)
//
// mWebViewPrivacy?.isHorizontalScrollBarEnabled = false
// mWebViewRegulation?.isHorizontalScrollBarEnabled = false
val contentTv = containerView?.findViewById<TextView>(R.id.contentTv)
val descTv = containerView?.findViewById<TextView>(R.id.descTv)
contentTv?.movementMethod = ScrollingMovementMethod()
val skipText = SpannableStringBuilder("查看完整版的隐私政策和用户协议")
skipText.setSpan(object : ClickableSpan() {
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.color = ContextCompat.getColor(requireContext(), R.color.theme_font)
ds.isUnderlineText = false
}
override fun onClick(widget: View) {
directToExternalBrowser(context!!, context!!.getString(R.string.privacy_policy_url))
}
}, skipText.length - 9, skipText.length - 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
skipText.setSpan(object : ClickableSpan() {
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.color = ContextCompat.getColor(requireContext(), R.color.theme_font)
ds.isUnderlineText = false
}
override fun onClick(widget: View) {
directToExternalBrowser(requireContext(), requireContext().getString(R.string.disclaimer_url))
}
}, skipText.length - 4, skipText.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
descTv?.movementMethod = CustomLinkMovementMethod()
descTv?.text = skipText
// val mWebViewPrivacy = containerView?.findViewById<WebView>(R.id.webView)
//
// mWebViewPrivacy?.isHorizontalScrollBarEnabled = false
//
// val settingsArrayList = arrayListOf(mWebViewPrivacy?.settings, mWebViewRegulation?.settings)
//
// for (settings in settingsArrayList) {
// settings?.javaScriptEnabled = true
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// settings?.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
// }
// // 避免提示网页有害信息不能访问
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// settings?.safeBrowsingEnabled = false
// }
//
// // 适配大于屏幕宽度的页面
// settings?.useWideViewPort = true
// settings?.loadWithOverviewMode = true
// settings?.domStorageEnabled = true
//
// // 自适应屏幕
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// settings?.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
// }
// }
// mWebViewPrivacy?.webViewClient = client
// mWebViewRegulation?.webViewClient = client
containerView?.findViewById<View>(R.id.refuseTv)?.setOnClickListener {
mCallBack?.invoke(false)
dismissAllowingStateLoss()
}
containerView?.findViewById<View>(R.id.agreeTv)?.setOnClickListener {
mCallBack?.invoke(true)
dismissAllowingStateLoss()
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val createDialog = super.onCreateDialog(savedInstanceState)
createDialog.setCanceledOnTouchOutside(false)
createDialog.setOnKeyListener(object : DialogInterface.OnKeyListener {
override fun onKey(dialog: DialogInterface?, keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true
}
return false
}
})
val window = createDialog.window
window?.setGravity(Gravity.CENTER)
return createDialog
}
override fun onStart() {
super.onStart()
val width = requireContext().resources.displayMetrics.widthPixels - 60F.dip2px()
val height = ViewGroup.LayoutParams.WRAP_CONTENT
dialog?.window?.setLayout(width, height)
}
companion object {
@JvmStatic
fun show(activity: AppCompatActivity, callBack: ((isSuccess: Boolean) -> Unit)?) {
var privacyDialogFragment = activity.supportFragmentManager.findFragmentByTag(PrivacyDialogFragment::class.java.simpleName) as? PrivacyDialogFragment
if (privacyDialogFragment != null) {
privacyDialogFragment.mCallBack = callBack
val transaction: FragmentTransaction = activity.supportFragmentManager.beginTransaction()
transaction.show(privacyDialogFragment)
transaction.commit()
} else {
privacyDialogFragment = PrivacyDialogFragment().apply {
mCallBack = callBack
}
privacyDialogFragment.show(activity.supportFragmentManager, PrivacyDialogFragment::class.java.simpleName)
}
}
}
}

View File

@ -0,0 +1,190 @@
package com.gh.common.dialog
import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.TextPaint
import android.text.method.ScrollingMovementMethod
import android.text.style.ClickableSpan
import android.view.*
import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentTransaction
import com.gh.base.fragment.BaseDialogFragment
import com.gh.common.constant.Constants
import com.gh.common.util.SPUtils
import com.gh.common.util.dip2px
import com.gh.common.util.fromHtml
import com.gh.common.view.CustomLinkMovementMethod
import com.gh.gamecenter.R
import com.gh.gamecenter.WebActivity
import com.gh.gamecenter.databinding.DialogPrivacyProtocolBinding
import com.gh.gamecenter.entity.DialogEntity
import com.lightgame.utils.AppManager
import splitties.bundle.put
class PrivacyPolicyDialogFragment : BaseDialogFragment() {
private var mCallBack: ((isSuccess: Boolean) -> Unit)? = null
private val mBinding by lazy { DialogPrivacyProtocolBinding.inflate(layoutInflater) }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return mBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mBinding.contentTv.movementMethod = ScrollingMovementMethod()
val privacyPolicyEntity = arguments?.get(KEY_DATA) as? DialogEntity.PrivacyPolicyEntity
if (privacyPolicyEntity == null) {
showPreLaunchStyle()
} else {
showUpdatedStyle(privacyPolicyEntity)
}
}
private fun showUpdatedStyle(privacyPolicyEntity: DialogEntity.PrivacyPolicyEntity) {
mBinding.titleIv.visibility = View.VISIBLE
mBinding.privacyTitleTv.text = "光环助手《隐私协议》更新"
mBinding.contentTv.text = privacyPolicyEntity.content.fromHtml()
val skipText = SpannableStringBuilder("查看隐私政策详情")
skipText.setSpan(object : ClickableSpan() {
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.color = ContextCompat.getColor(requireContext(), R.color.theme_font)
ds.isUnderlineText = false
}
override fun onClick(widget: View) {
val intent = WebActivity.getIntent(requireContext(), context!!.getString(R.string.privacy_policy_url), true)
context?.startActivity(intent)
}
}, skipText.length - 6, skipText.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
mBinding.descTv.movementMethod = CustomLinkMovementMethod()
mBinding.descTv.text = skipText
if (privacyPolicyEntity.alertType == "INFORM") {
mBinding.refuseTv.visibility = View.GONE
mBinding.agreeTv.text = "我知道了"
mBinding.agreeTv.setOnClickListener {
SPUtils.setString(Constants.SP_LAST_ACCEPTED_PRIVACY_DIALOG_ID, privacyPolicyEntity.id)
mCallBack?.invoke(true)
dismissAllowingStateLoss()
}
} else {
mBinding.refuseTv.text = "不同意退出"
mBinding.agreeTv.text = "同意"
mBinding.refuseTv.setOnClickListener {
dismissAllowingStateLoss()
AppManager.getInstance().finishAllActivity()
}
mBinding.agreeTv.setOnClickListener {
SPUtils.setString(Constants.SP_LAST_ACCEPTED_PRIVACY_DIALOG_ID, privacyPolicyEntity.id)
mCallBack?.invoke(true)
dismissAllowingStateLoss()
}
}
}
private fun showPreLaunchStyle() {
val skipText = SpannableStringBuilder("查看完整版的隐私政策和用户协议")
skipText.setSpan(object : ClickableSpan() {
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.color = ContextCompat.getColor(requireContext(), R.color.theme_font)
ds.isUnderlineText = false
}
override fun onClick(widget: View) {
val intent = WebActivity.getIntent(requireContext(), context!!.getString(R.string.privacy_policy_url), true)
context?.startActivity(intent)
}
}, skipText.length - 9, skipText.length - 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
skipText.setSpan(object : ClickableSpan() {
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.color = ContextCompat.getColor(requireContext(), R.color.theme_font)
ds.isUnderlineText = false
}
override fun onClick(widget: View) {
val intent = WebActivity.getIntent(requireContext(), context!!.getString(R.string.disclaimer_url), true)
context?.startActivity(intent)
}
}, skipText.length - 4, skipText.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
mBinding.descTv.movementMethod = CustomLinkMovementMethod()
mBinding.descTv.text = skipText
mBinding.refuseTv.setOnClickListener {
mCallBack?.invoke(false)
dismissAllowingStateLoss()
}
mBinding.agreeTv.setOnClickListener {
mCallBack?.invoke(true)
dismissAllowingStateLoss()
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val createDialog = super.onCreateDialog(savedInstanceState)
createDialog.setCanceledOnTouchOutside(false)
createDialog.setOnKeyListener(object : DialogInterface.OnKeyListener {
override fun onKey(dialog: DialogInterface?, keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true
}
return false
}
})
val window = createDialog.window
window?.setGravity(Gravity.CENTER)
return createDialog
}
override fun onStart() {
super.onStart()
val width = requireContext().resources.displayMetrics.widthPixels - 60F.dip2px()
val height = ViewGroup.LayoutParams.WRAP_CONTENT
dialog?.window?.setLayout(width, height)
}
companion object {
const val KEY_DATA = "data"
@JvmStatic
fun show(activity: FragmentActivity,
privacyPolicyEntity: DialogEntity.PrivacyPolicyEntity? = null,
callBack: ((isSuccess: Boolean) -> Unit)?) {
var privacyDialogFragment = activity.supportFragmentManager.findFragmentByTag(PrivacyPolicyDialogFragment::class.java.simpleName) as? PrivacyPolicyDialogFragment
if (privacyDialogFragment != null) {
privacyDialogFragment.mCallBack = callBack
val transaction: FragmentTransaction = activity.supportFragmentManager.beginTransaction()
transaction.show(privacyDialogFragment)
transaction.commit()
} else {
privacyDialogFragment = PrivacyPolicyDialogFragment().apply {
mCallBack = callBack
}
}
privacyDialogFragment.arguments = Bundle().apply {
put(KEY_DATA, privacyPolicyEntity)
}
privacyDialogFragment.show(
activity.supportFragmentManager,
PrivacyPolicyDialogFragment::class.java.simpleName
)
}
}
}

View File

@ -1,379 +1,384 @@
package com.gh.common.dialog
import android.annotation.SuppressLint
import android.app.Application
import android.os.Bundle
import android.text.Html
import android.view.*
import android.view.animation.AnimationUtils
import android.widget.EditText
import android.widget.TextView
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import butterknife.BindView
import butterknife.ButterKnife
import butterknife.OnClick
import com.gh.base.fragment.BaseDialogFragment
import com.gh.common.AppExecutor
import com.gh.common.constant.Config
import com.gh.common.history.HistoryHelper
import com.gh.common.repository.ReservationRepository
import com.gh.common.util.*
import com.gh.gamecenter.R
import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.entity.NotificationUgc
import com.gh.gamecenter.manager.UserManager
import com.gh.gamecenter.retrofit.BiResponse
import com.gh.gamecenter.retrofit.RetrofitManager
import com.halo.assistant.HaloApp
import com.lightgame.utils.Utils
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import okhttp3.ResponseBody
import org.json.JSONArray
import org.json.JSONObject
// 预约弹窗
class ReserveDialogFragment
: BaseDialogFragment(), KeyboardHeightObserver {
// : BaseTrackableDialogFragment() {
@BindView(R.id.reserve_hint_tv)
lateinit var reserveHintTv: TextView
@BindView(R.id.reserve_content_tv)
lateinit var reserveContentTv: TextView
@BindView(R.id.reserve_completed_content_tv)
lateinit var reserveCompletedContentTv: TextView
@BindView(R.id.mobile_et)
lateinit var mobileEt: EditText
@BindView(R.id.reserve_container)
lateinit var reserveContainer: View
@BindView(R.id.reserve_completed_container)
lateinit var reserveCompletedContainer: View
@BindView(R.id.customizable_btn)
lateinit var customizableBtn: TextView
@BindView(R.id.content_container)
lateinit var contentContainer: View
@BindView(R.id.mobile_index_container)
lateinit var mobileIndexContainer: View
@BindView(R.id.mobile_index_reserve)
lateinit var mobileIndexReserve: TextView
@BindView(R.id.mobile_index_user)
lateinit var mobileIndexUser: TextView
@BindView(R.id.mobile_et_delete)
lateinit var mobileEtDelete: View
@BindView(R.id.layout_container)
lateinit var layoutContainer: View
private lateinit var mViewModel: ReserveViewModel
private var mSuccessCallback: SuccessCallback? = null
private var mGame: GameEntity? = null
private var mGameId: String = ""
private var mGameName: String = ""
private var mKeyboardHeightProvider: KeyboardHeightProvider? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mViewModel = viewModelProvider()
mKeyboardHeightProvider = KeyboardHeightProvider(activity)
mKeyboardHeightProvider?.start()
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.dialog_reserve_game, null)
}
// override fun getEvent(): String {
// return "预约游戏"
//package com.gh.common.dialog
//
//import android.annotation.SuppressLint
//import android.app.Application
//import android.os.Bundle
//import android.text.Html
//import android.view.*
//import android.view.animation.AnimationUtils
//import android.widget.EditText
//import android.widget.TextView
//import androidx.lifecycle.AndroidViewModel
//import androidx.lifecycle.MutableLiveData
//import androidx.lifecycle.Observer
//import butterknife.BindView
//import butterknife.ButterKnife
//import butterknife.OnClick
//import com.gh.base.fragment.BaseDialogFragment
//import com.gh.common.AppExecutor
//import com.gh.common.constant.Config
//import com.gh.common.history.HistoryHelper
//import com.gh.common.repository.ReservationRepository
//import com.gh.common.util.*
//import com.gh.gamecenter.R
//import com.gh.gamecenter.entity.GameEntity
//import com.gh.gamecenter.entity.NotificationUgc
//import com.gh.gamecenter.manager.UserManager
//import com.gh.gamecenter.retrofit.BiResponse
//import com.gh.gamecenter.retrofit.RetrofitManager
//import com.halo.assistant.HaloApp
//import com.lightgame.utils.Utils
//import io.reactivex.android.schedulers.AndroidSchedulers
//import io.reactivex.schedulers.Schedulers
//import okhttp3.ResponseBody
//import org.json.JSONArray
//import org.json.JSONObject
//
//// 预约弹窗
//@Deprecated("v5.6.0废弃")
//class ReserveDialogFragment
// : BaseDialogFragment(), KeyboardHeightObserver {
//// : BaseTrackableDialogFragment() {
//
// @BindView(R.id.reserve_hint_tv)
// lateinit var reserveHintTv: TextView
//
// @BindView(R.id.reserve_content_tv)
// lateinit var reserveContentTv: TextView
//
// @BindView(R.id.reserve_completed_content_tv)
// lateinit var reserveCompletedContentTv: TextView
//
// @BindView(R.id.mobile_et)
// lateinit var mobileEt: EditText
//
// @BindView(R.id.reserve_container)
// lateinit var reserveContainer: View
//
// @BindView(R.id.reserve_completed_container)
// lateinit var reserveCompletedContainer: View
//
// @BindView(R.id.customizable_btn)
// lateinit var customizableBtn: TextView
//
// @BindView(R.id.content_container)
// lateinit var contentContainer: View
//
// @BindView(R.id.mobile_index_container)
// lateinit var mobileIndexContainer: View
//
// @BindView(R.id.mobile_index_reserve)
// lateinit var mobileIndexReserve: TextView
//
// @BindView(R.id.mobile_index_user)
// lateinit var mobileIndexUser: TextView
//
// @BindView(R.id.mobile_et_delete)
// lateinit var mobileEtDelete: View
//
// @BindView(R.id.layout_container)
// lateinit var layoutContainer: View
//
// private lateinit var mViewModel: ReserveViewModel
//
// var successCallback: SuccessCallback? = null
//
// private var mGame: GameEntity? = null
// private var mGameId: String = ""
// private var mGameName: String = ""
//
// private var mKeyboardHeightProvider: KeyboardHeightProvider? = null
//
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
//
// mGame = requireArguments().getParcelable(EntranceUtils.KEY_GAME)
// mGameId = mGame?.id ?:""
// mGameName = mGame?.name ?:""
//
// mViewModel = viewModelProvider()
// mKeyboardHeightProvider = KeyboardHeightProvider(activity)
// mKeyboardHeightProvider?.start()
// }
//
// override fun getKey(): String {
// return "预约功能操作"
// override fun onActivityCreated(savedInstanceState: Bundle?) {
// super.onActivityCreated(savedInstanceState)
// dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
// }
@Suppress("DEPRECATION")
@SuppressLint("SetTextI18n")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
ButterKnife.bind(this, view)
val reserveContent = "游戏上线,您将收到<font color='#1383EB'>免费短信</font>提醒"
reserveContentTv.text = Html.fromHtml(reserveContent)
mobileEt.setTextChangedListener { s, _, _, _ ->
mobileIndexContainer.visibility = View.GONE
mobileEtDelete.goneIf(s.trim().isEmpty())
}
mViewModel.reservation.observeNonNull(this) {
if (it.success) {
showSuccessDialog(it.withMobile, it.boundWechat)
mSuccessCallback?.onSuccess()
HistoryHelper.insertGameEntity(mGame!!)
}
}
mViewModel.reserveMobile.observe(viewLifecycleOwner, Observer {
setMobileIndexHint(it)
})
dialog?.setCanceledOnTouchOutside(true)
}
private fun showSuccessDialog(withMobile: Boolean, boundWechat: Boolean) {
reserveHintTv.text = "游戏预约成功"
reserveContainer.visibility = View.GONE
reserveCompletedContainer.visibility = View.VISIBLE
val reservation = Config.getSettings()?.appointment
val dialogConfig = if (withMobile) reservation?.withMobile else reservation?.withoutMobile
reserveCompletedContentTv.text = dialogConfig?.htmlContent?.fromHtml()
if (dialogConfig?.text.isNullOrEmpty()
|| (dialogConfig?.type == "wechat_bind" && boundWechat)) {
customizableBtn.visibility = View.GONE
} else {
customizableBtn.text = dialogConfig?.text
customizableBtn.setOnClickListener {
// MtaHelper.onEvent("预约游戏", "预约功能操作", "点击跳转按钮")
DirectUtils.directToLinkPage(
requireContext(),
dialogConfig!!.toLinkEntity(),
"(游戏预约)",
"")
dismissAllowingStateLoss()
}
}
}
private fun setMobileIndexHint(reserveMobile: String?) {
var userMobile = UserManager.getInstance().userInfoEntity?.mobile
if (reserveMobile == userMobile) userMobile = null
if (!reserveMobile.isNullOrEmpty()) {
mobileIndexReserve.visibility = View.VISIBLE
mobileIndexReserve.text = reserveMobile
} else {
mobileIndexReserve.visibility = View.GONE
}
if (!userMobile.isNullOrEmpty()) {
mobileIndexUser.visibility = View.VISIBLE
mobileIndexUser.text = userMobile
} else {
mobileIndexUser.visibility = View.GONE
}
mobileIndexContainer.goneIf(mobileIndexUser.visibility == View.GONE && mobileIndexReserve.visibility == View.GONE)
if (mobileIndexContainer.visibility ==View.VISIBLE) {
mobileIndexContainer.animation = AnimationUtils.loadAnimation(requireContext(), R.anim.reserve_dialog_index_anim)
}
}
@OnClick(R.id.reserve_with_mobile_btn,
R.id.reserve_without_mobile_btn,
R.id.content_container,
R.id.close_btn,
R.id.customizable_btn,
R.id.mobile_index_reserve,
R.id.mobile_index_user,
R.id.mobile_et_delete,
R.id.mobile_et,
R.id.layout_container)
fun onClick(view: View) {
when (view.id) {
R.id.reserve_without_mobile_btn -> {
// MtaHelper.onEvent("预约游戏", "预约功能操作", "点击无手机号预约")
if (mobileIndexContainer.visibility == View.VISIBLE) {
mobileIndexContainer.visibility = View.GONE
return
}
mViewModel.reserve(gameId = mGameId, gameName = mGameName)
}
R.id.reserve_with_mobile_btn -> {
if (mobileIndexContainer.visibility == View.VISIBLE) {
mobileIndexContainer.visibility = View.GONE
return
}
val mobile = mobileEt.text.toString()
if (mobile.length < 11 || !mobile.startsWith("1")) {
Utils.toast(context, "手机号格式错误,请检查并重新输入")
return
}
// MtaHelper.onEvent("预约游戏", "预约功能操作", "点击立即预约")
mViewModel.reserve(gameId = mGameId, gameName = mGameName, mobile = mobile)
}
R.id.close_btn -> {
// MtaHelper.onEvent("预约游戏", "预约功能操作", "点击关闭")
dismissAllowingStateLoss()
AppExecutor.uiExecutor.executeWithDelay(Runnable {
NotificationHelper.showNotificationHintDialog(NotificationUgc.RESERVE_GAME)
}, 1000)
}
R.id.content_container -> {
mobileIndexContainer.visibility = View.GONE
}
R.id.mobile_index_reserve -> {
mobileEt.setText(mobileIndexReserve.text.toString())
mobileEt.setSelection(mobileEt.text.length)
mobileIndexContainer.visibility = View.GONE
}
R.id.mobile_index_user -> {
mobileEt.setText(mobileIndexUser.text.toString())
mobileEt.setSelection(mobileEt.text.length)
mobileIndexContainer.visibility = View.GONE
}
R.id.mobile_et_delete -> {
mobileEt.setText("")
}
R.id.mobile_et -> {
mobileIndexContainer.visibility = View.GONE
}
R.id.layout_container -> {
dismissAllowingStateLoss()
}
}
}
override fun onResume() {
super.onResume()
if (HaloApp.getInstance().mCacheKeyboardHeight > 0) {
val attributes = dialog?.window?.attributes
val heightPixels = requireContext().resources.displayMetrics.heightPixels
val mCacheKeyboardHeight = HaloApp.getInstance().mCacheKeyboardHeight
val statusBarHeight = DisplayUtils.getStatusBarHeight(requireContext().resources)
dialog?.window?.attributes?.height = heightPixels - mCacheKeyboardHeight - statusBarHeight
attributes?.gravity = Gravity.TOP
dialog?.window?.attributes = attributes
}
mKeyboardHeightProvider?.setKeyboardHeightObserver(this)
}
override fun onPause() {
super.onPause()
mKeyboardHeightProvider?.setKeyboardHeightObserver(null)
}
override fun onDestroy() {
super.onDestroy()
mKeyboardHeightProvider?.close()
}
override fun onKeyboardHeightChanged(height: Int, orientation: Int) {
if (height > 0) {
val attributes = dialog?.window?.attributes
attributes?.gravity = Gravity.CENTER
dialog?.window?.attributes = attributes
HaloApp.getInstance().mCacheKeyboardHeight = height
}
}
companion object {
@JvmStatic
fun getInstance(gameEntity: GameEntity, successCallback: SuccessCallback) = ReserveDialogFragment().apply {
this.mGame = gameEntity
this.mGameId = gameEntity.id
this.mGameName = gameEntity.name ?: ""
this.mSuccessCallback = successCallback
}
}
interface SuccessCallback {
fun onSuccess()
}
}
class ReserveViewModel(application: Application) : AndroidViewModel(application) {
val reservation = MutableLiveData<Reservation>()
val reserveMobile = MutableLiveData<String>()
init {
getAppointmentMobile()
}
@SuppressLint("CheckResult")
fun reserve(gameId: String, gameName: String, mobile: String = "") {
val requestMap = hashMapOf<String, String>()
requestMap["game_id"] = gameId
if (mobile.isNotEmpty()) {
requestMap["mobile"] = mobile
}
RetrofitManager.getInstance(getApplication()).api
.createNewGameReservation(requestMap.createRequestBody())
.subscribeOn(Schedulers.io())
.subscribe(object : BiResponse<ResponseBody>() {
override fun onSuccess(data: ResponseBody) {
var boundWechat = false
tryWithDefaultCatch {
boundWechat = JSONObject(data.string() ?: "").getBoolean("wechat_bind")
}
reservation.postValue(Reservation(success = true, withMobile = mobile.isNotEmpty(), boundWechat = boundWechat))
ReservationRepository.addReservationToMemoryAndRefresh(gameId)
// MtaHelper.onEvent("预约游戏", "预约", gameName)
}
override fun onFailure(exception: Exception) {
Utils.toast(getApplication(), exception.message)
}
})
}
@SuppressLint("CheckResult")
private fun getAppointmentMobile() {
RetrofitManager.getInstance(getApplication()).api
.getAppointmentMobile(UserManager.getInstance().userId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : BiResponse<ResponseBody>() {
override fun onSuccess(data: ResponseBody) {
var mobile: String? = null
tryCatchInRelease {
val jsonArray = JSONArray(data.string())
if (jsonArray.length() > 0) {
mobile = jsonArray.get(0).toString()
}
}
reserveMobile.postValue(mobile)
}
override fun onFailure(exception: Exception) {
reserveMobile.postValue(null)
}
})
}
class Reservation(var success: Boolean = false, var withMobile: Boolean = false, var boundWechat: Boolean = false)
}
//
// override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// return inflater.inflate(R.layout.dialog_reserve_game, null)
// }
//
//// override fun getEvent(): String {
//// return "预约游戏"
//// }
////
//// override fun getKey(): String {
//// return "预约功能操作"
//// }
//
// @Suppress("DEPRECATION")
// @SuppressLint("SetTextI18n")
// override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// super.onViewCreated(view, savedInstanceState)
// ButterKnife.bind(this, view)
//
// val reserveContent = "游戏上线,您将收到<font color='#1383EB'>免费短信</font>提醒"
// reserveContentTv.text = Html.fromHtml(reserveContent)
//
//
// mobileEt.setTextChangedListener { s, _, _, _ ->
// mobileIndexContainer.visibility = View.GONE
// mobileEtDelete.goneIf(s.trim().isEmpty())
// }
//
// mViewModel.reservation.observeNonNull(this) {
// if (it.success) {
// showSuccessDialog(it.withMobile, it.boundWechat)
// successCallback?.onSuccess()
// HistoryHelper.insertGameEntity(mGame!!)
// }
// }
//
// mViewModel.reserveMobile.observe(viewLifecycleOwner, Observer {
// setMobileIndexHint(it)
// })
//
// dialog?.setCanceledOnTouchOutside(true)
// }
//
// private fun showSuccessDialog(withMobile: Boolean, boundWechat: Boolean) {
// reserveHintTv.text = "游戏预约成功"
// reserveContainer.visibility = View.GONE
// reserveCompletedContainer.visibility = View.VISIBLE
//
// val reservation = Config.getSettings()?.appointment
// val dialogConfig = if (withMobile) reservation?.withMobile else reservation?.withoutMobile
//
// reserveCompletedContentTv.text = dialogConfig?.htmlContent?.fromHtml()
// if (dialogConfig?.text.isNullOrEmpty()
// || (dialogConfig?.type == "wechat_bind" && boundWechat)) {
// customizableBtn.visibility = View.GONE
// } else {
// customizableBtn.text = dialogConfig?.text
// customizableBtn.setOnClickListener {
//// MtaHelper.onEvent("预约游戏", "预约功能操作", "点击跳转按钮")
// DirectUtils.directToLinkPage(
// requireContext(),
// dialogConfig!!.toLinkEntity(),
// "(游戏预约)",
// "")
// dismissAllowingStateLoss()
// }
// }
// }
//
// private fun setMobileIndexHint(reserveMobile: String?) {
// var userMobile = UserManager.getInstance().userInfoEntity?.mobile
// if (reserveMobile == userMobile) userMobile = null
//
// if (!reserveMobile.isNullOrEmpty()) {
// mobileIndexReserve.visibility = View.VISIBLE
// mobileIndexReserve.text = reserveMobile
// } else {
// mobileIndexReserve.visibility = View.GONE
// }
//
// if (!userMobile.isNullOrEmpty()) {
// mobileIndexUser.visibility = View.VISIBLE
// mobileIndexUser.text = userMobile
// } else {
// mobileIndexUser.visibility = View.GONE
// }
// mobileIndexContainer.goneIf(mobileIndexUser.visibility == View.GONE && mobileIndexReserve.visibility == View.GONE)
// if (mobileIndexContainer.visibility ==View.VISIBLE) {
// mobileIndexContainer.animation = AnimationUtils.loadAnimation(requireContext(), R.anim.reserve_dialog_index_anim)
// }
// }
//
// @OnClick(R.id.reserve_with_mobile_btn,
// R.id.reserve_without_mobile_btn,
// R.id.content_container,
// R.id.close_btn,
// R.id.customizable_btn,
// R.id.mobile_index_reserve,
// R.id.mobile_index_user,
// R.id.mobile_et_delete,
// R.id.mobile_et,
// R.id.layout_container)
// fun onClick(view: View) {
// when (view.id) {
// R.id.reserve_without_mobile_btn -> {
//// MtaHelper.onEvent("预约游戏", "预约功能操作", "点击无手机号预约")
// if (mobileIndexContainer.visibility == View.VISIBLE) {
// mobileIndexContainer.visibility = View.GONE
// return
// }
//
// mViewModel.reserve(gameId = mGameId, gameName = mGameName)
// }
//
// R.id.reserve_with_mobile_btn -> {
// if (mobileIndexContainer.visibility == View.VISIBLE) {
// mobileIndexContainer.visibility = View.GONE
// return
// }
//
// val mobile = mobileEt.text.toString()
// if (mobile.length < 11 || !mobile.startsWith("1")) {
// Utils.toast(context, "手机号格式错误,请检查并重新输入")
// return
// }
//
//// MtaHelper.onEvent("预约游戏", "预约功能操作", "点击立即预约")
// mViewModel.reserve(gameId = mGameId, gameName = mGameName, mobile = mobile)
// }
//
// R.id.close_btn -> {
//// MtaHelper.onEvent("预约游戏", "预约功能操作", "点击关闭")
// dismissAllowingStateLoss()
// AppExecutor.uiExecutor.executeWithDelay(Runnable {
// NotificationHelper.showNotificationHintDialog(NotificationUgc.RESERVE_GAME)
// }, 1000)
// }
// R.id.content_container -> {
// mobileIndexContainer.visibility = View.GONE
// }
// R.id.mobile_index_reserve -> {
// mobileEt.setText(mobileIndexReserve.text.toString())
// mobileEt.setSelection(mobileEt.text.length)
// mobileIndexContainer.visibility = View.GONE
// }
// R.id.mobile_index_user -> {
// mobileEt.setText(mobileIndexUser.text.toString())
// mobileEt.setSelection(mobileEt.text.length)
// mobileIndexContainer.visibility = View.GONE
// }
// R.id.mobile_et_delete -> {
// mobileEt.setText("")
// }
// R.id.mobile_et -> {
// mobileIndexContainer.visibility = View.GONE
// }
// R.id.layout_container -> {
// dismissAllowingStateLoss()
// }
// }
// }
//
// override fun onResume() {
// super.onResume()
// if (HaloApp.getInstance().mCacheKeyboardHeight > 0) {
// val attributes = dialog?.window?.attributes
// val heightPixels = requireContext().resources.displayMetrics.heightPixels
// val mCacheKeyboardHeight = HaloApp.getInstance().mCacheKeyboardHeight
// val statusBarHeight = DisplayUtils.getStatusBarHeight(requireContext().resources)
// dialog?.window?.attributes?.height = heightPixels - mCacheKeyboardHeight - statusBarHeight
// attributes?.gravity = Gravity.TOP
// dialog?.window?.attributes = attributes
// }
// mKeyboardHeightProvider?.setKeyboardHeightObserver(this)
// }
//
// override fun onPause() {
// super.onPause()
// mKeyboardHeightProvider?.setKeyboardHeightObserver(null)
// }
//
// override fun onDestroy() {
// super.onDestroy()
// mKeyboardHeightProvider?.close()
// }
//
// override fun onKeyboardHeightChanged(height: Int, orientation: Int) {
// if (height > 0) {
// val attributes = dialog?.window?.attributes
// attributes?.gravity = Gravity.CENTER
// dialog?.window?.attributes = attributes
// HaloApp.getInstance().mCacheKeyboardHeight = height
// }
// }
//
// companion object {
// @JvmStatic
// fun getInstance(gameEntity: GameEntity, successCallback: SuccessCallback) = ReserveDialogFragment().apply {
// arguments = Bundle().apply {
// putParcelable(EntranceUtils.KEY_GAME, gameEntity)
// }
// this.successCallback = successCallback
// }
// }
//
// interface SuccessCallback {
// fun onSuccess()
// }
//}
//
//class ReserveViewModel(application: Application) : AndroidViewModel(application) {
// val reservation = MutableLiveData<Reservation>()
//
// val reserveMobile = MutableLiveData<String>()
//
// init {
// getAppointmentMobile()
// }
//
// @SuppressLint("CheckResult")
// fun reserve(gameId: String, gameName: String, mobile: String = "") {
//
// val requestMap = hashMapOf<String, String>()
// requestMap["game_id"] = gameId
// if (mobile.isNotEmpty()) {
// requestMap["mobile"] = mobile
// }
//
// RetrofitManager.getInstance().api
// .createNewGameReservation(requestMap.createRequestBody())
// .subscribeOn(Schedulers.io())
// .subscribe(object : BiResponse<ResponseBody>() {
// override fun onSuccess(data: ResponseBody) {
// var boundWechat = false
// tryWithDefaultCatch {
// boundWechat = JSONObject(data.string() ?: "").getBoolean("wechat_bind")
// }
//
// reservation.postValue(Reservation(success = true, withMobile = mobile.isNotEmpty(), boundWechat = boundWechat))
// ReservationRepository.addReservationToMemoryAndRefresh(gameId)
//
//// MtaHelper.onEvent("预约游戏", "预约", gameName)
// }
//
// override fun onFailure(exception: Exception) {
// Utils.toast(getApplication(), exception.message)
// }
// })
// }
//
// @SuppressLint("CheckResult")
// private fun getAppointmentMobile() {
// RetrofitManager.getInstance().api
// .getAppointmentMobile(UserManager.getInstance().userId)
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe(object : BiResponse<ResponseBody>() {
// override fun onSuccess(data: ResponseBody) {
// var mobile: String? = null
// tryCatchInRelease {
// val jsonArray = JSONArray(data.string())
// if (jsonArray.length() > 0) {
// mobile = jsonArray.get(0).toString()
// }
// }
//
// reserveMobile.postValue(mobile)
// }
//
// override fun onFailure(exception: Exception) {
// reserveMobile.postValue(null)
// }
// })
// }
//
// class Reservation(var success: Boolean = false, var withMobile: Boolean = false, var boundWechat: Boolean = false)
//}

View File

@ -0,0 +1,97 @@
package com.gh.common.dialog
import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle
import android.view.*
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentTransaction
import com.gh.base.fragment.BaseDialogFragment
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.DialogSyncCertificationBinding
class SyncCertificationDialogFragment : BaseDialogFragment() {
private var mCallBack: ((isSuccess: Boolean) -> Unit)? = null
private val mBinding by lazy { DialogSyncCertificationBinding.inflate(layoutInflater) }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return mBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initUI()
}
private fun initUI() {
mBinding.contentTv.text = getString(R.string.dialog_sync_certification_content)
mBinding.refuseTv.setOnClickListener {
dismissAllowingStateLoss()
}
mBinding.agreeTv.setOnClickListener {
mCallBack?.invoke(true)
dismissAllowingStateLoss()
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val createDialog = super.onCreateDialog(savedInstanceState)
createDialog.setCanceledOnTouchOutside(false)
createDialog.setOnKeyListener(object : DialogInterface.OnKeyListener {
override fun onKey(dialog: DialogInterface?, keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true
}
return false
}
})
val window = createDialog.window
window?.setGravity(Gravity.CENTER)
return createDialog
}
//
// override fun onStart() {
// super.onStart()
// val width = requireContext().resources.displayMetrics.widthPixels - 60F.dip2px()
// val height = ViewGroup.LayoutParams.WRAP_CONTENT
// dialog?.window?.setLayout(width, height)
// }
companion object {
@JvmStatic
fun show(activity: FragmentActivity, callBack: ((isSuccess: Boolean) -> Unit)?) {
var certificationDialogFragment =
activity.supportFragmentManager.findFragmentByTag(SyncCertificationDialogFragment::class.java.simpleName) as? SyncCertificationDialogFragment
if (certificationDialogFragment != null) {
certificationDialogFragment.mCallBack = callBack
val transaction: FragmentTransaction =
activity.supportFragmentManager.beginTransaction()
transaction.show(certificationDialogFragment)
transaction.commit()
} else {
certificationDialogFragment = SyncCertificationDialogFragment().apply {
mCallBack = callBack
}
}
certificationDialogFragment.show(
activity.supportFragmentManager,
SyncCertificationDialogFragment::class.java.simpleName
)
}
}
}

View File

@ -3,27 +3,88 @@ package com.gh.common.exposure
import android.os.Parcelable
import androidx.annotation.Keep
import com.google.gson.annotations.SerializedName
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize
@Keep
@Parcelize
data class ExposureEntity(
@SerializedName("game_id")
val gameId: String? = "",
val gameName: String? = "",
val gameVersion: String? = "",
val sequence: Int? = 0,
val platform: String? = "",
val downloadType: String? = "",
val downloadCompleteType: String? = "",
@SerializedName("game_id")
val gameId: String? = "",
@SerializedName("subject_id")
val subjectId: String? = null, // 专题 id
@SerializedName("carousel_id")
val carouselId: String? = "", // 轮播图 id
val gameName: String? = "",
val gameVersion: String? = "",
val sequence: Int? = 0,
val outerSequence: Int? = 0,
val platform: String? = null,
var isMirrorData: Boolean = false,
@SerializedName("is_web_download")
var isWebDownload: Boolean = false,
val downloadType: String? = null,
val downloadCompleteType: String? = null,
@SerializedName("display_type")
val displayType: String? = "",
@SerializedName("is_platform_recommend")
val isPlatformRecommend: Boolean? = false,
// 下载地址的 host 和 path
var host: String? = "",
var path: String? = "",
// 外层内容 id (包括)
// 1. "test_server_id" : "", // 开测表 ID
// 2. "block_id" : "", // 板块 ID
// 3. "category_id" : "", // 新分类1.0 ID
// 4. "category_v2_id" : "", // 新分类2.0 ID
var containerId: String? = null,
var containerType: String? = null,
// 统计启动弹窗相关数据用的 (ugly)
@SerializedName("dialog_id")
var welcomeDialogId: String? = "",
@SerializedName("link_title")
var welcomeDialogLinkTitle: String? = ""
) : Parcelable
@SerializedName("test_server_id")
var testServerId: String? = null,
@SerializedName("block_id")
var blockId: String? = null,
@SerializedName("category_id")
var categoryId: String? = null,
@SerializedName("category_v2_id")
var categoryV2Id: String? = null,
@SerializedName("navigation_id")
var navigationId: String? = null,
// 专题详情的来源页面和来源 id
@SerializedName("source_page")
var sourcePage: String? = null,
@SerializedName("source_page_id")
var sourcePageId: String? = null,
@SerializedName("source_page_name")
var sourcePageName: String? = null,
// 下载地址的 host 和 path
var host: String? = null,
var path: String? = null,
// 统计启动弹窗相关数据用的 (ugly)
@SerializedName("dialog_id")
var welcomeDialogId: String? = null,
@SerializedName("link_title")
var welcomeDialogLinkTitle: String? = null
) : Parcelable {
fun setContainerInfo(id: String?, type: String?) {
when (type) {
TEST_SERVER_ID -> testServerId = id
BLOCK_ID -> blockId = id
CATEGORY_ID -> categoryId = id
CATEGORY_V2_ID -> categoryV2Id = id
NAVIGATION_ID -> navigationId = id
}
containerId = null
containerType = null
}
companion object {
const val TEST_SERVER_ID = "test_server_id"
const val BLOCK_ID = "block_id"
const val CATEGORY_ID = "category_id"
const val CATEGORY_V2_ID = "category_v2_id"
const val NAVIGATION_ID = "navigation_id"
}
}

View File

@ -9,45 +9,102 @@ import com.gh.common.exposure.meta.Meta
import com.gh.common.exposure.meta.MetaUtil
import com.gh.common.exposure.time.TimeUtil
import com.gh.common.util.getFirstElementDividedByDivider
import com.gh.download.server.BrowserInstallHelper
import com.gh.gamecenter.entity.GameEntity
import kotlinx.android.parcel.Parcelize
import com.lightgame.download.DownloadEntity
import kotlinx.parcelize.Parcelize
import java.util.*
import kotlin.collections.ArrayList
@Keep
@Parcelize
@Entity(tableName = "exposureEvent")
data class ExposureEvent(
var payload: ExposureEntity,
val source: List<ExposureSource>,
var eTrace: List<ExposureEvent>? = arrayListOf(),
val event: ExposureType,
val meta: Meta = MetaUtil.getMeta(),
val time: Int = TimeUtil.currentTime(),
@PrimaryKey
val id: String = UUID.randomUUID().toString()) : Parcelable {
var payload: ExposureEntity,
val source: List<ExposureSource>,
var eTrace: List<ExposureEvent>? = arrayListOf(),
val event: ExposureType,
val meta: Meta = MetaUtil.getMeta(),
val time: Int = TimeUtil.currentTime(),
@PrimaryKey
val id: String = UUID.randomUUID().toString()
) : Parcelable {
companion object {
// TODO 建一个 exposureEvent 池规避反复生成对象
@JvmStatic
fun createEvent(gameEntity: GameEntity?, source: List<ExposureSource>, eTrace: List<ExposureEvent>? = null, event: ExposureType = ExposureType.EXPOSURE): ExposureEvent {
fun createEvent(
gameEntity: GameEntity?,
source: List<ExposureSource>,
eTrace: List<ExposureEvent>? = null,
event: ExposureType = ExposureType.EXPOSURE
): ExposureEvent {
if (gameEntity?.getApk()?.size == 1) {
gameEntity.gameVersion = gameEntity.getApk().elementAtOrNull(0)?.version ?: ""
}
return ExposureEvent(
payload = ExposureEntity(
gameId = gameEntity?.id?.getFirstElementDividedByDivider(Constants.GAME_ID_DIVIDER),
gameName = gameEntity?.name?.removeSuffix(Constants.GAME_NAME_DECORATOR),
gameVersion = gameEntity?.gameVersion,
sequence = gameEntity?.sequence,
platform = gameEntity?.platform,
downloadType = gameEntity?.downloadType,
downloadCompleteType = gameEntity?.downloadCompleteType,
// ugly
welcomeDialogId = gameEntity?.welcomeDialogId ?: eTrace?.firstOrNull()?.payload?.welcomeDialogId,
welcomeDialogLinkTitle = gameEntity?.welcomeDialogTitle ?: eTrace?.firstOrNull()?.payload?.welcomeDialogLinkTitle),
source = source,
eTrace = eTrace,
event = event).apply { gameEntity?.exposureEvent = this }
payload = ExposureEntity(
gameId = gameEntity?.id?.getFirstElementDividedByDivider(DownloadEntity.GAME_ID_DIVIDER),
gameName = eTrace?.firstOrNull()?.payload?.gameName
?: gameEntity?.name?.removeSuffix(Constants.GAME_NAME_DECORATOR),
gameVersion = eTrace?.firstOrNull()?.payload?.gameVersion
?: gameEntity?.gameVersion,
subjectId = eTrace?.firstOrNull()?.payload?.subjectId
?: gameEntity?.subjectId
?: gameEntity?.subjectData?.id,
isMirrorData = eTrace?.firstOrNull()?.payload?.isMirrorData
?: gameEntity?.shouldUseMirrorInfo() ?: false,
isWebDownload = BrowserInstallHelper.isUseBrowserToInstallEnabled() && BrowserInstallHelper.shouldUseBrowserToInstall(), // 实时的值,不用从 eTrace 里取
sequence = eTrace?.firstOrNull()?.payload?.sequence ?: gameEntity?.sequence,
outerSequence = eTrace?.firstOrNull()?.payload?.outerSequence
?: gameEntity?.outerSequence,
platform = eTrace?.firstOrNull()?.payload?.platform ?: gameEntity?.platform,
downloadType = gameEntity?.downloadType,
downloadCompleteType = gameEntity?.downloadCompleteType,
displayType = eTrace?.firstOrNull()?.payload?.displayType
?: gameEntity?.displayContent,
isPlatformRecommend = gameEntity?.isPlatformRecommend,
// ugly
welcomeDialogId = gameEntity?.welcomeDialogId
?: eTrace?.firstOrNull()?.payload?.welcomeDialogId,
welcomeDialogLinkTitle = gameEntity?.welcomeDialogTitle
?: eTrace?.firstOrNull()?.payload?.welcomeDialogLinkTitle
),
source = source,
eTrace = eTrace,
event = event
).also {
it.payload.categoryId = eTrace?.firstOrNull()?.payload?.categoryId
it.payload.categoryV2Id = eTrace?.firstOrNull()?.payload?.categoryV2Id
it.payload.testServerId = eTrace?.firstOrNull()?.payload?.testServerId
it.payload.blockId = eTrace?.firstOrNull()?.payload?.blockId
it.payload.setContainerInfo(
eTrace?.firstOrNull()?.payload?.containerId ?: gameEntity?.containerId,
eTrace?.firstOrNull()?.payload?.containerType ?: gameEntity?.containerType
)
it.payload.sourcePage = eTrace?.firstOrNull()?.payload?.sourcePage
it.payload.sourcePageId = eTrace?.firstOrNull()?.payload?.sourcePageId
it.payload.sourcePageName = eTrace?.firstOrNull()?.payload?.sourcePageName
gameEntity?.exposureEvent = it
}
}
@JvmStatic
fun createEventWithSourceConcat(
gameEntity: GameEntity?,
basicSource: List<ExposureSource>,
source: List<ExposureSource>,
eTrace: List<ExposureEvent>? = null,
event: ExposureType = ExposureType.EXPOSURE
): ExposureEvent {
val concatSourceList = ArrayList<ExposureSource>().apply {
addAll(basicSource)
addAll(source)
}
return createEvent(gameEntity, concatSourceList, eTrace, event)
}
}
}

View File

@ -11,24 +11,24 @@ import io.reactivex.functions.Consumer
*/
class ExposureListener(var fragment: Fragment, var exposable: IExposable) : RecyclerView.OnScrollListener() {
var throttleBus: ExposureThrottleBus? = null
val throttleBus: ExposureThrottleBus by lazy { ExposureThrottleBus(Consumer { commitExposure(it) }, Consumer(Throwable::printStackTrace)) }
var layoutManager: LinearLayoutManager? = null
var visibleState: ExposureThrottleBus.VisibleState? = null
init {
fragment.fragmentManager?.registerFragmentLifecycleCallbacks(
object : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
throttleBus = ExposureThrottleBus(Consumer { commitExposure(it) }, Consumer(Throwable::printStackTrace))
}
override fun onFragmentPaused(fm: FragmentManager, f: Fragment) {
visibleState?.let { commitExposure(it) }
throttleBus?.clear()
if (fragment == f) {
visibleState?.let { commitExposure(it) }
throttleBus.clear()
}
}
override fun onFragmentViewDestroyed(fm: FragmentManager, f: Fragment) {
fragment.fragmentManager?.unregisterFragmentLifecycleCallbacks(this)
if (fragment == f) {
fragment.fragmentManager?.unregisterFragmentLifecycleCallbacks(this)
}
}
}, false)
}
@ -44,7 +44,7 @@ class ExposureListener(var fragment: Fragment, var exposable: IExposable) : Recy
layoutManager?.run {
visibleState = ExposureThrottleBus.VisibleState(findFirstVisibleItemPosition(), findLastVisibleItemPosition())
throttleBus?.postVisibleState(visibleState!!)
throttleBus.postVisibleState(visibleState!!)
}
}

View File

@ -1,15 +1,13 @@
package com.gh.common.exposure
import com.aliyun.sls.android.sdk.model.LogGroup
import com.gh.common.exposure.time.TimeUtil
import com.aliyun.sls.android.producer.Log
import com.gh.common.loghub.LoghubHelper
import com.gh.common.util.toJson
import com.gh.common.util.tryWithDefaultCatch
import com.gh.gamecenter.BuildConfig
import com.gh.loghub.LgLOG
import com.gh.loghub.LoghubHelper
import com.halo.assistant.HaloApp
import com.lightgame.utils.Utils
import java.util.concurrent.Executors
import java.util.concurrent.ExecutorService
/**
* A handful tool for committing logs to aliyun loghub.
@ -22,26 +20,23 @@ import java.util.concurrent.Executors
*/
object ExposureManager {
private const val ENDPOINT = "cn-qingdao.log.aliyuncs.com"
private const val PROJECT = "ghzs"
private const val STORE_SIZE = 100
private const val LOG_STORE = BuildConfig.EXPOSURE_REPO
private val loghubHelper = LoghubHelper.getInstance()
// exposureCache 用来过滤掉具有相同 id 的曝光事件,避免重复发送事件
private val exposureSet by lazy { hashSetOf<ExposureEvent>() }
private val exposureExecutor by lazy { Executors.newSingleThreadExecutor() }
private var exposureExecutor: ExecutorService? = null
private val exposureCache by lazy { FixedSizeLinkedHashSet<String>(300) }
private val exposureDao by lazy { ExposureDatabase.buildDatabase(HaloApp.getInstance().application).logHubEventDao() }
@JvmStatic
fun init() {
loghubHelper.init(HaloApp.getInstance().application, ENDPOINT, PROJECT, LOG_STORE) { TimeUtil.currentTimeMillis() }
exposureExecutor.execute {
val eventList = exposureDao.getAll()
exposureSet.addAll(eventList)
fun init(excutor: ExecutorService) {
exposureExecutor = excutor
exposureExecutor?.execute {
tryWithDefaultCatch {
val eventList = exposureDao.getAll()
exposureSet.addAll(eventList)
}
}
}
@ -49,7 +44,7 @@ object ExposureManager {
* Log a single exposure event.
*/
fun log(event: ExposureEvent) {
exposureExecutor.execute {
exposureExecutor?.execute {
try {
if (!exposureCache.contains(event.id)) {
// Catch `android.database.sqlite.SQLiteFullException: database or disk is full` exception.
@ -71,7 +66,7 @@ object ExposureManager {
* Log a collection of exposure event.
*/
fun log(eventList: List<ExposureEvent>) {
exposureExecutor.execute {
exposureExecutor?.execute {
for (event in eventList) {
try {
if (!exposureCache.contains(event.id)) {
@ -94,14 +89,13 @@ object ExposureManager {
* @param forced Ignore all restrictions.
*/
fun commitSavedExposureEvents(forced: Boolean = false) {
exposureExecutor.execute {
exposureExecutor?.execute {
tryWithDefaultCatch {
// TODO 初始化 loghubHelper 去掉这个 tryCatch 块
if (exposureSet.size < STORE_SIZE && !forced || exposureSet.size == 0) return@execute
val exposureList = exposureSet.toList()
// uploadLogGroup 是一个异步方法LoghubHelper 里面实现了重传功能,所以这里交给它就好了
loghubHelper.uploadLogGroup(buildLogGroup(exposureList))
uploadExposures(exposureList)
Utils.log("Exposure", "提交了${exposureList.size}条曝光记录")
exposureSet.removeAll(exposureList)
@ -114,31 +108,25 @@ object ExposureManager {
return jsonWithMultipleBracket.replace("[[", "[").replace("]]", "]")
}
private fun buildLogGroup(eventList: List<ExposureEvent>): LogGroup {
val logGroup = LogGroup("sls android", "no ip")
eventList.forEach { logGroup.PutLog(buildLog(it)) }
return logGroup
private fun uploadExposures(eventList: List<ExposureEvent>) {
eventList.forEach {
LoghubHelper.uploadLog(buildLog(it), LOG_STORE)
}
}
private fun buildLog(event: ExposureEvent): LgLOG {
val log = LgLOG(TimeUtil.currentTime())
log.PutContent("id", event.id)
log.PutContent("payload", event.payload.toJson())
log.PutContent("event", event.event.toString())
log.PutContent("source", eliminateMultipleBrackets(event.source.toJson()))
log.PutContent("meta", event.meta.toJson())
log.PutContent("e-traces", if (event.eTrace != null) {
private fun buildLog(event: ExposureEvent) = Log().apply {
putContent("id", event.id)
putContent("payload", event.payload.toJson())
putContent("event", event.event.toString())
putContent("source", eliminateMultipleBrackets(event.source.toJson()))
putContent("meta", event.meta.toJson())
putContent("e-traces", if (event.eTrace != null) {
eliminateMultipleBrackets(event.eTrace?.toJson() ?: "")
} else "")
log.PutTime(event.time)
return log
logTime = event.time.toLong()
}
internal class FixedSizeLinkedHashSet<T>(var maxSize: Int) : LinkedHashSet<T>() {
class FixedSizeLinkedHashSet<T>(var maxSize: Int) : LinkedHashSet<T>() {
override fun add(element: T): Boolean {
if (size == maxSize) {
pop()

View File

@ -2,7 +2,7 @@ package com.gh.common.exposure
import android.os.Parcelable
import androidx.annotation.Keep
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize
@Keep
@Parcelize

View File

@ -2,53 +2,75 @@ package com.gh.common.exposure
import android.text.TextUtils
import com.g00fy2.versioncompare.Version
import com.gh.common.constant.Constants
import com.gh.common.util.PackageUtils
import com.gh.common.util.toObject
import com.gh.gamecenter.entity.ApkEntity
import com.gh.gamecenter.entity.GameEntity
import com.halo.assistant.HaloApp
import java.util.*
import com.lightgame.download.DownloadEntity
object ExposureUtils {
private val mDownloadCompleteTraceEventIdSet = ExposureManager.FixedSizeLinkedHashSet<String>(3)
@JvmStatic
fun logADownloadExposureEvent(entity: GameEntity,
platform: String?,
traceEvent: ExposureEvent?,
downloadType: DownloadType): ExposureEvent {
fun logADownloadExposureEvent(
entity: GameEntity,
platform: String?,
traceEvent: ExposureEvent?,
downloadType: DownloadType
): ExposureEvent {
val gameEntity = entity.clone()
gameEntity.id = if (entity.id.contains(Constants.GAME_ID_DIVIDER)) {
entity.id.split(Constants.GAME_ID_DIVIDER).toTypedArray()[0]
gameEntity.id = if (entity.id.contains(DownloadEntity.GAME_ID_DIVIDER)) {
entity.id.split(DownloadEntity.GAME_ID_DIVIDER).toTypedArray()[0]
} else {
entity.id
}
gameEntity.gameVersion = entity.getApk().elementAtOrNull(0)?.version ?: gameEntity.gameVersion
gameEntity.gameVersion = entity.getApk().elementAtOrNull(0)?.version
?: gameEntity.gameVersion
gameEntity.platform = platform
gameEntity.downloadType = downloadType.toString()
val exposureEvent = ExposureEvent.createEvent(gameEntity = gameEntity,
source = traceEvent?.source ?: ArrayList(),
eTrace = ExposureTraceUtils.appendTrace(traceEvent),
event = ExposureType.DOWNLOAD)
ExposureManager.log(exposureEvent)
val exposureEvent = ExposureEvent.createEvent(
gameEntity = gameEntity,
source = traceEvent?.source ?: ArrayList(),
eTrace = ExposureTraceUtils.appendTrace(traceEvent),
event = ExposureType.DOWNLOAD
)
if (!TextUtils.isEmpty(entity.id)) {
ExposureManager.log(exposureEvent)
}
return exposureEvent
}
@JvmStatic
fun logADownloadCompleteExposureEvent(entity: GameEntity,
platform: String?,
trace: String?,
host: String? = "unknown",
path: String? = "unknown",
downloadType: DownloadType) {
fun logADownloadCompleteExposureEvent(
entity: GameEntity,
platform: String?,
trace: String?,
host: String? = "unknown",
path: String? = "unknown",
downloadType: DownloadType
) {
val gameEntity = entity.clone()
gameEntity.platform = platform
gameEntity.downloadCompleteType = downloadType.toString()
val traceEvent = trace?.toObject<ExposureEvent>()
val exposureEvent = ExposureEvent.createEvent(gameEntity = gameEntity,
source = traceEvent?.source ?: ArrayList(),
eTrace = ExposureTraceUtils.appendTrace(traceEvent),
event = ExposureType.DOWNLOAD_COMPLETE)
if (TextUtils.isEmpty(entity.id)) return
// 避免生成 trace 相同的下载完成事件,根据日志看下载完成的同一秒有可能生成两条
if (mDownloadCompleteTraceEventIdSet.contains(traceEvent?.id)) {
return
}
traceEvent?.payload?.gameId?.let { mDownloadCompleteTraceEventIdSet.add(it) }
val exposureEvent = ExposureEvent.createEvent(
gameEntity = gameEntity,
source = traceEvent?.source ?: ArrayList(),
eTrace = ExposureTraceUtils.appendTrace(traceEvent),
event = ExposureType.DOWNLOAD_COMPLETE
)
exposureEvent.payload.host = host
exposureEvent.payload.path = path
ExposureManager.log(exposureEvent)
@ -57,12 +79,25 @@ object ExposureUtils {
@JvmStatic
fun getDownloadType(apkEntity: ApkEntity, gameId: String): DownloadType {
return if (PackageUtils.isInstalled(HaloApp.getInstance().application, apkEntity.packageName)) {
if (PackageUtils.isSignedByGh(HaloApp.getInstance().application, apkEntity.packageName)) {
return if (PackageUtils.isInstalled(
HaloApp.getInstance().application,
apkEntity.packageName
)
) {
if (PackageUtils.isSignedByGh(
HaloApp.getInstance().application,
apkEntity.packageName
)
) {
if (PackageUtils.isCanUpdate(apkEntity, gameId)) {
DownloadType.PLUGIN_UPDATE
} else {
if (Version(apkEntity.version).isHigherThan(PackageUtils.getVersionByPackage(apkEntity.packageName))) {
if (Version(apkEntity.version).isHigherThan(
PackageUtils.getVersionNameByPackageName(
apkEntity.packageName
)
)
) {
DownloadType.UPDATE
} else {
DownloadType.DOWNLOAD
@ -80,6 +115,26 @@ object ExposureUtils {
}
}
/**
* 为游戏实体添加位置序号和上层专题 id (若存在)
*/
@JvmStatic
fun updateExposureInfo(
gameList: List<GameEntity>?,
subjectId: String? = null,
containerId: String? = null,
containerType: String? = null
) {
gameList?.let {
for ((index, game) in it.withIndex()) {
game.sequence = index
game.subjectId = subjectId
game.containerId = containerId
game.containerType = containerType
}
}
}
enum class DownloadType {
DOWNLOAD,

View File

@ -2,16 +2,16 @@ package com.gh.common.exposure.meta
import android.os.Parcelable
import androidx.annotation.Keep
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize
@Keep
@Parcelize
data class Meta(
val mac: String? = "",
val imei: String? = "",
val jnfj: String? = "",
val model: String? = "",
val manufacturer: String? = "",
val android_id: String? = "",
val dia: String? = "",
val android_sdk: Int? = -1,
val android_version: String? = "",
val network: String? = "",

View File

@ -11,10 +11,10 @@ import android.telephony.TelephonyManager
import android.text.TextUtils
import com.gh.common.constant.Constants
import com.gh.common.util.SPUtils
import com.gh.common.util.tryWithDefaultCatch
import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.manager.UserManager
import com.halo.assistant.HaloApp
import com.leon.channel.helper.ChannelReaderUtil
import com.walkud.rom.checker.RomIdentifier
object MetaUtil {
@ -26,13 +26,25 @@ object MetaUtil {
private var imei: String? = null
private var base64EncodedImei: String? = null
private var androidId: String? = null
private var base64EncodedAndroidId: String? = null
private var romName: String? = null
private var romVersion: String? = null
fun refreshMeta() {
m = Meta(mac = "",
imei = getIMEI(),
if (romName == null) {
tryWithDefaultCatch {
romName = RomIdentifier.getRom().name
romVersion = RomIdentifier.getRom().versionName
}
}
m = Meta(mac = null,
jnfj = getBase64EncodedIMEI(),
model = getModel(),
manufacturer = getManufacturer(),
android_id = getAndroidId(),
dia = getBase64EncodedAndroidId(),
android_sdk = getAndroidSDK(),
android_version = getAndroidVersion(),
network = getNetwork(),
@ -43,7 +55,7 @@ object MetaUtil {
appVersion = BuildConfig.VERSION_NAME,
userId = UserManager.getInstance().userId,
exposureVersion = BuildConfig.EXPOSURE_VERSION,
rom = RomIdentifier.getRom().name + "" + RomIdentifier.getRom().versionName)
rom = romName + "" + romVersion)
}
fun getMeta(): Meta {
@ -54,10 +66,7 @@ object MetaUtil {
}
private fun getChannel(): String? {
if (TextUtils.isEmpty(channel)) {
channel = if (ChannelReaderUtil.getChannel(application) != null) ChannelReaderUtil.getChannel(application) else ""
}
return channel
return HaloApp.getInstance().channel
}
/**
@ -107,6 +116,10 @@ object MetaUtil {
@JvmStatic
fun getBase64EncodedIMEI(): String {
if (imei == null) {
getIMEI()
}
if (TextUtils.isEmpty(base64EncodedImei) && imei != null) {
try {
base64EncodedImei = android.util.Base64.encodeToString(getIMEI().trim().toByteArray(), android.util.Base64.NO_WRAP)
@ -119,6 +132,24 @@ object MetaUtil {
return base64EncodedImei ?: ""
}
@JvmStatic
fun getBase64EncodedAndroidId(): String {
if (androidId == null) {
getAndroidId()
}
if (TextUtils.isEmpty(base64EncodedAndroidId) && androidId != null) {
try {
base64EncodedAndroidId = android.util.Base64.encodeToString(getAndroidId().trim().toByteArray(), android.util.Base64.NO_WRAP)
} catch (e: java.lang.Exception) {
e.printStackTrace()
return ""
}
}
return base64EncodedAndroidId ?: ""
}
fun getModel(): String? {
return Build.MODEL
}

View File

@ -1,7 +1,6 @@
package com.gh.common.filter
import android.annotation.SuppressLint
import com.gh.common.AppExecutor
import com.gh.common.constant.Constants
import com.gh.common.util.SPUtils
import com.gh.common.util.debounceActionWithInterval
@ -12,8 +11,8 @@ import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.retrofit.BiResponse
import com.gh.gamecenter.retrofit.RetrofitManager
import com.halo.assistant.HaloApp
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Function
import io.reactivex.schedulers.Schedulers
object RegionSettingHelper {
@ -62,13 +61,12 @@ object RegionSettingHelper {
@SuppressLint("CheckResult")
@JvmStatic
fun getRegionSetting() {
debounceActionWithInterval(R.string.app_name, 3000) {
debounceActionWithInterval(R.string.app_name, 5000) {
// 使用默认的 Schdulers.io() 可能会触发 OOM
RetrofitManager.getInstance(HaloApp.getInstance().application)
.sensitiveApi
RetrofitManager.getInstance()
.api
.getRegionSetting(HaloApp.getInstance().channel)
.subscribeOn(AppExecutor.cachedScheduler)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(object : BiResponse<RegionSetting>() {
override fun onSuccess(data: RegionSetting) {
updateSettingsInMemory(data)
@ -76,7 +74,7 @@ object RegionSettingHelper {
}
override fun onFailure(exception: Exception) {
SPUtils.getString(SP_SETTING).toObject<RegionSetting>()?.let {
SPUtils.getString(SP_SETTING)?.toObject<RegionSetting>()?.let {
updateSettingsInMemory(it)
}
}

View File

@ -6,6 +6,7 @@ import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.gh.gamecenter.entity.GamesCollectionEntity
import com.gh.gamecenter.entity.HistoryGameEntity
import com.gh.gamecenter.entity.MyVideoEntity
import com.gh.gamecenter.entity.NewsEntity
@ -15,7 +16,7 @@ import com.gh.gamecenter.room.converter.*
import com.gh.gamecenter.room.dao.*
import com.halo.assistant.HaloApp
@Database(entities = [AnswerEntity::class, ArticleEntity::class, NewsEntity::class, HistoryGameEntity::class, MyVideoEntity::class], version = 7, exportSchema = false)
@Database(entities = [AnswerEntity::class, ArticleEntity::class, NewsEntity::class, HistoryGameEntity::class, MyVideoEntity::class, GamesCollectionEntity::class], version = 11, exportSchema = false)
@TypeConverters(CountConverter::class,
CommunityConverter::class,
TimeConverter::class,
@ -23,8 +24,16 @@ import com.halo.assistant.HaloApp
ThumbnailConverter::class,
TagStyleListConverter::class,
StringArrayListConverter::class,
ListStringConverter::class,
CommunityVideoConverter::class,
UserConverter::class)
UserConverter::class,
ImageInfoConverter::class,
VideoInfoConverter::class,
QuestionsConverter::class,
MeConverter::class,
SimpleGameListConverter::class,
TagInfoListConverter::class,
ActivityLabelListConverter::class)
abstract class HistoryDatabase : RoomDatabase() {
@ -33,6 +42,7 @@ abstract class HistoryDatabase : RoomDatabase() {
abstract fun newsDao(): NewsHistoryDao
abstract fun gameDao(): GameDao
abstract fun videoHistoryDao(): VideoHistoryDao
abstract fun gamesCollectionDao(): GamesCollectionDao
companion object {
@ -69,6 +79,47 @@ abstract class HistoryDatabase : RoomDatabase() {
}
}
val MIGRATION_7_8: Migration = object : Migration(7, 8) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("Alter TABLE ArticleEntity add images TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE ArticleEntity add imagesInfo TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE AnswerEntity add imagesInfo TEXT NOT NULL DEFAULT ''")
}
}
val MIGRATION_8_9: Migration = object : Migration(8, 9) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("Alter TABLE ArticleEntity add des TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE ArticleEntity add url TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE ArticleEntity add videoInfo TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE ArticleEntity add poster TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE ArticleEntity add length INTEGER NOT NULL DEFAULT 0")
database.execSQL("Alter TABLE ArticleEntity add status TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE ArticleEntity add content TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE ArticleEntity add questions TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE AnswerEntity add des TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE AnswerEntity add url TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE AnswerEntity add videoInfo TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE AnswerEntity add poster TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE AnswerEntity add length INTEGER NOT NULL DEFAULT 0")
database.execSQL("Alter TABLE AnswerEntity add status TEXT NOT NULL DEFAULT ''")
database.execSQL("Alter TABLE AnswerEntity add content TEXT NOT NULL DEFAULT ''")
}
}
val MIGRATION_9_10: Migration = object : Migration(9, 10) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("CREATE TABLE GamesCollectionEntity (id TEXT NOT NULL PRIMARY KEY, tags TEXT, games TEXT, title TEXT NOT NULL, intro TEXT NOT NULL, cover TEXT NOT NULL, display TEXT NOT NULL, stamp TEXT NOT NULL, count TEXT, user TEXT, me TEXT, orderTag INTEGER NOT NULL)"
)
}
}
val MIGRATION_10_11: Migration = object : Migration(10, 11) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("Alter TABLE GamesCollectionEntity add activityTags TEXT DEFAULT ''")
}
}
val instance by lazy {
Room.databaseBuilder(HaloApp.getInstance().application, HistoryDatabase::class.java, "USER_TRACK_HISTORY_DATABASE")
.addMigrations(MIGRATION_2_3)
@ -76,6 +127,10 @@ abstract class HistoryDatabase : RoomDatabase() {
.addMigrations(MIGRATION_4_5)
.addMigrations(MIGRATION_5_6)
.addMigrations(MIGRATION_6_7)
.addMigrations(MIGRATION_7_8)
.addMigrations(MIGRATION_8_9)
.addMigrations(MIGRATION_9_10)
.addMigrations(MIGRATION_10_11)
.build()
}
}

View File

@ -24,6 +24,11 @@ object HistoryHelper {
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.articleDao().addArticle(articleEntity) } }
}
fun insertGamesCollectionEntity(gamesCollectionDetailEntity: GamesCollectionDetailEntity) {
val gamesCollectionEntity = convertGamesCollectionDetailToGamesCollection(gamesCollectionDetailEntity)
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.gamesCollectionDao().addGamesCollection(gamesCollectionEntity) } }
}
@JvmStatic
fun insertGameEntity(gameEntity: GameEntity) {
val historyGameEntity = convertGameEntityToHistoryGameEntity(gameEntity)
@ -44,10 +49,9 @@ object HistoryHelper {
historyGame.brief = updateEntity.brief
historyGame.des = ""
historyGame.icon = updateEntity.rawIcon ?: updateEntity.icon
historyGame.iconSubscript = historyGame.iconSubscript
historyGame.iconSubscript = updateEntity.iconSubscript
historyGame.name = updateEntity.name
historyGame.tagStyle = updateEntity.tagStyle
historyGame.tag = updateEntity.tag
return historyGame
}
@ -69,48 +73,55 @@ object HistoryHelper {
@JvmStatic
fun insertNewsEntity(newsEntity: NewsEntity) {
newsEntity.orderTag = System.currentTimeMillis()
runOnIoThread { HistoryDatabase.instance.newsDao().addNews(newsEntity) }
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.newsDao().addNews(newsEntity) } }
}
@JvmStatic
fun deleteNewsEntity(newsId: String) {
runOnIoThread { HistoryDatabase.instance.newsDao().deleteNews(NewsEntity().apply { id = newsId }) }
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.newsDao().deleteNews(NewsEntity().apply { id = newsId }) } }
}
@JvmStatic
fun deleteGameEntity(gameId: String) {
runOnIoThread { HistoryDatabase.instance.gameDao().deleteGame(HistoryGameEntity(id = gameId)) }
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.gameDao().deleteGame(HistoryGameEntity(id = gameId)) } }
}
@JvmStatic
fun deleteArticleEntity(articleId: String) {
runOnIoThread { HistoryDatabase.instance.articleDao().deleteArticle(ArticleEntity(id = articleId)) }
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.articleDao().deleteArticle(ArticleEntity(id = articleId)) } }
}
@JvmStatic
fun deleteAnswerEntity(answerId: String) {
runOnIoThread { HistoryDatabase.instance.answerDao().deleteAnswer(AnswerEntity().apply { primaryKey = answerId }) }
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.answerDao().deleteAnswer(AnswerEntity().apply { primaryKey = answerId }) } }
}
@JvmStatic
fun deleteVideoEntity(videoId: String) {
runOnIoThread { HistoryDatabase.instance.videoHistoryDao().deleteVideo(MyVideoEntity().apply { id = videoId }) }
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.videoHistoryDao().deleteVideo(MyVideoEntity().apply { id = videoId }) } }
}
@JvmStatic
fun deleteAttentionVideoRecord() {
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.videoHistoryDao().deleteAttentionVideoRecord() } }
}
@JvmStatic
fun deleteGamesCollectionEntity(gameCollectionId: String) {
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.gamesCollectionDao().deleteGamesCollection(GamesCollectionEntity(id = gameCollectionId)) }}
}
@JvmStatic
fun emptyDatabase() {
runOnIoThread { HistoryDatabase.instance.clearAllTables() }
runOnIoThread { tryCatchInRelease { HistoryDatabase.instance.clearAllTables() } }
}
private fun convertArticleDetailToArticle(articleDetailEntity: ArticleDetailEntity): ArticleEntity {
val articleEntity = ArticleEntity()
articleEntity.id = articleDetailEntity.id
articleEntity.brief = articleDetailEntity.content.
removeVideoContent().
removeInsertedContent().
clearHtmlFormatCompletely().
replace(" +".toRegex()," ")
articleEntity.brief = articleDetailEntity.content.removeVideoContent().removeInsertedContent().clearHtmlFormatCompletely().replace(" +".toRegex(), " ")
articleEntity.count = articleDetailEntity.count
articleDetailEntity.community.id = articleDetailEntity.communityId
articleEntity.community = articleDetailEntity.community
@ -118,6 +129,9 @@ object HistoryHelper {
articleEntity.title = articleDetailEntity.title
articleEntity.user = articleDetailEntity.user
articleEntity.orderTag = System.currentTimeMillis()
articleEntity.images = articleDetailEntity.images
articleEntity.imagesInfo = articleDetailEntity.imagesInfo
articleEntity.videos = articleDetailEntity.videos
return articleEntity
}
@ -132,14 +146,41 @@ object HistoryHelper {
answerEntity.vote = answerDetailEntity.vote
answerEntity.user = answerDetailEntity.user
answerEntity.orderTag = System.currentTimeMillis()
answerEntity.brief = answerDetailEntity.content.
removeVideoContent().
removeInsertedContent().
clearHtmlFormatCompletely().
replace(" +".toRegex(), " ")
answerEntity.brief = answerDetailEntity.content.removeVideoContent().removeInsertedContent().clearHtmlFormatCompletely().replace(" +".toRegex(), " ")
answerEntity.time = answerDetailEntity.time
answerEntity.images = answerDetailEntity.images
answerEntity.imagesInfo = answerDetailEntity.imagesInfo
answerEntity.videos = answerDetailEntity.videos
return answerEntity
}
private fun convertGamesCollectionDetailToGamesCollection(gamesCollectionDetailEntity: GamesCollectionDetailEntity): GamesCollectionEntity {
val gamesCollectionEntity = GamesCollectionEntity()
gamesCollectionEntity.id = gamesCollectionDetailEntity.id
gamesCollectionEntity.tags = gamesCollectionDetailEntity.tags
gamesCollectionEntity.activityTags = gamesCollectionDetailEntity.activityTags
gamesCollectionDetailEntity.games?.take(3)?.map { it.toSimpleGame() }?.run {
gamesCollectionEntity.games = ArrayList(this)
}
gamesCollectionEntity.title = gamesCollectionDetailEntity.title
gamesCollectionEntity.intro = gamesCollectionDetailEntity.intro
gamesCollectionEntity.cover = gamesCollectionDetailEntity.cover
gamesCollectionEntity.display = gamesCollectionDetailEntity.display
gamesCollectionEntity.orderTag = System.currentTimeMillis()
gamesCollectionEntity.stamp = gamesCollectionDetailEntity.stamp
gamesCollectionEntity.count = gamesCollectionDetailEntity.count
gamesCollectionDetailEntity.user?.run {
gamesCollectionEntity.user = User(
id = id ?: "",
name = name ?: "",
icon = icon ?: "",
badge = badge)
}
gamesCollectionEntity.me = gamesCollectionDetailEntity.me
return gamesCollectionEntity
}
}

View File

@ -0,0 +1,38 @@
package com.gh.common.image
import com.facebook.imagepipeline.common.ImageDecodeOptions
import com.facebook.imagepipeline.decoder.ImageDecoder
import com.facebook.imagepipeline.image.CloseableImage
import com.facebook.imagepipeline.image.EncodedImage
import com.facebook.imagepipeline.image.QualityInfo
class EmptyDecoder : ImageDecoder {
override fun decode(
encodedImage: EncodedImage,
length: Int,
qualityInfo: QualityInfo,
options: ImageDecodeOptions
): CloseableImage {
return object : CloseableImage() {
override fun close() {
// do nothing
}
override fun getWidth(): Int {
return 0
}
override fun getHeight(): Int {
return 0
}
override fun getSizeInBytes(): Int {
return 0
}
override fun isClosed(): Boolean {
return true
}
}
}
}

View File

@ -0,0 +1,32 @@
package com.gh.common.json
import org.json.JSONArray
import org.json.JSONObject
import java.util.*
//Source: https://stackoverflow.com/questions/41861449/kotlin-dsl-for-creating-json-objects-without-creating-garbage
fun json(build: JsonObjectBuilder.() -> Unit): JSONObject {
return JsonObjectBuilder().json(build)
}
class JsonObjectBuilder {
private val deque: Deque<JSONObject> = ArrayDeque()
fun json(build: JsonObjectBuilder.() -> Unit): JSONObject {
deque.push(JSONObject())
this.build()
return deque.pop()
}
infix fun <T> String.to(value: T) {
// wrap value into json block if it is a lambda
val wrapped = when (value) {
is Function0<*> -> json { value.invoke() }
is Array<*> -> JSONArray().apply { value.forEach { put(it) } }
else -> value
}
deque.peek().put(this, wrapped)
}
}

View File

@ -4,7 +4,7 @@ import android.os.Parcelable
import androidx.annotation.Keep
import androidx.room.Entity
import androidx.room.PrimaryKey
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize
import java.util.*
@Keep

View File

@ -0,0 +1,105 @@
package com.gh.common.loghub
import com.aliyun.sls.android.producer.*
import com.gh.common.util.PackageFlavorHelper
import com.halo.assistant.HaloApp
import com.lightgame.utils.Utils
/**
* 上传阿里云日志辅助类
*/
object LoghubHelper {
private const val ACCESS_KEY_ID = "LTAIV3i0sNc4TPK1"
private const val ACCESS_KEY_SECRET = "8dKtTPeE5WYA6ZCeuIBcIVp7eB0ir4"
private const val ENDPOINT = "cn-qingdao.log.aliyuncs.com"
private const val PROJECT = "ghzs"
private val mClientMaps by lazy { hashMapOf<String, LogProducerClient>() }
fun uploadLog(log: Log, logStore: String) {
getClient(logStore)?.addLog(log)
}
fun uploadLogs(logs: List<Log>, logStore: String) {
logs.forEach {
uploadLog(it, logStore)
}
}
private fun getClient(logStore: String): LogProducerClient? {
if (!mClientMaps.containsKey(logStore)) {
mClientMaps[logStore] = createClient(logStore)
}
return mClientMaps[logStore]
}
private fun createClient(logStore: String): LogProducerClient {
val config = LogProducerConfig(
HaloApp.getInstance().applicationContext,
ENDPOINT,
PROJECT,
logStore,
ACCESS_KEY_ID,
ACCESS_KEY_SECRET
).apply {
// 1 开启断点续传功能, 0 关闭
// 每次发送前会把日志保存到本地的binlog文件只有发送成功才会删除保证日志上传At Least Once
setPersistent(1)
// 持久化的文件名,需要保证文件所在的文件夹已创建。配置多个客户端时,不应设置相同文件
setPersistentFilePath(HaloApp.getInstance().application.filesDir.absolutePath + "/${logStore}.dat")
// 是否每次AddLog强制刷新高可靠性场景建议打开
setPersistentForceFlush(1)
// 持久化文件滚动个数建议设置成10。
setPersistentMaxFileCount(10)
// 每个持久化文件的大小建议设置成1-10M
setPersistentMaxFileSize(1024 * 1024)
// 本地最多缓存的日志数不建议超过1M通常设置为65536即可
setPersistentMaxLogCount(65536)
//网络连接超时时间整数单位秒默认为10
setConnectTimeoutSec(15)
//日志发送超时时间整数单位秒默认为15
setSendTimeoutSec(15)
//flusher线程销毁最大等待时间整数单位秒默认为1
setDestroyFlusherWaitSec(2)
//sender线程池销毁最大等待时间整数单位秒默认为1
setDestroySenderWaitSec(2)
//日志时间与本机时间之差,超过该大小后会根据 `drop_delay_log` 选项进行处理。
//一般此种情况只会在设置persistent的情况下出现即设备下线后超过几天/数月启动,发送退出前未发出的日志
//整数单位秒默认为7*24*3600即7天
setMaxLogDelayTime(7 * 24 * 3600)
//对于超过 `max_log_delay_time` 日志的处理策略
//0 不丢弃,把日志时间修改为当前时间; 1 丢弃,默认为 1 (丢弃)
setDropDelayLog(0)
//是否丢弃鉴权失败的日志0 不丢弃1丢弃
//默认为 0即不丢弃
setDropUnauthorizedLog(0)
}
return if (!PackageFlavorHelper.IS_TEST_FLAVOR) {
LogProducerClient(config)
} else {
LogProducerClient(config) { resultCode, reqId, errorMessage, logBytes, compressedBytes ->
// resultCode 返回结果代码
// reqId 请求id
// errorMessage 错误信息没有为null
// logBytes 日志大小
// compressedBytes 压缩后日志大小
Utils.log(
"LoghubHelper -> ${
String.format(
"%s %s %s %s %s",
LogProducerResult.fromInt(resultCode),
reqId,
errorMessage,
logBytes,
compressedBytes
)
}"
)
}
}
}
}

View File

@ -2,14 +2,12 @@ package com.gh.common.loghub
import android.app.Application
import androidx.annotation.Keep
import com.aliyun.sls.android.sdk.model.Log
import com.aliyun.sls.android.sdk.model.LogGroup
import com.aliyun.sls.android.producer.Log
import com.gh.common.exposure.ExposureEntity
import com.gh.common.exposure.meta.Meta
import com.gh.common.util.tryWithDefaultCatch
import com.gh.loghub.LoghubHelper
import org.json.JSONObject
import java.util.concurrent.Executors
import java.util.concurrent.ExecutorService
object LoghubUtils {
@ -17,22 +15,25 @@ object LoghubUtils {
private lateinit var mApplication: Application
private val loghubEventSet by lazy { hashSetOf<LoghubEvent>() }
private val loghubEventExecutor by lazy { Executors.newSingleThreadExecutor() }
private var loghubEventExecutor: ExecutorService? = null
private val loghubEventDao by lazy { LoghubDatabase.buildDatabase(mApplication).logHubEventDao() }
@JvmStatic
fun init(application: Application) {
fun init(application: Application, executor: ExecutorService) {
mApplication = application
loghubEventExecutor.execute {
val eventList = loghubEventDao.getAll()
loghubEventSet.addAll(eventList)
loghubEventExecutor = executor
loghubEventExecutor?.execute {
tryWithDefaultCatch {
val eventList = loghubEventDao.getAll()
loghubEventSet.addAll(eventList)
}
}
}
@JvmStatic
fun log(logJson: JSONObject, logStore: String, forcedUpload: Boolean) {
loghubEventExecutor.execute {
loghubEventExecutor?.execute {
try {
val event = LoghubEvent(time = (System.currentTimeMillis() / 1000L).toString(), content = logJson.toString(), logStore = logStore)
loghubEventSet.add(event)
@ -49,7 +50,7 @@ object LoghubUtils {
@JvmStatic
fun log(jsonString: String, logStore: String, forcedUpload: Boolean) {
loghubEventExecutor.execute {
loghubEventExecutor?.execute {
try {
val event = LoghubEvent(time = (System.currentTimeMillis() / 1000L).toString(), content = jsonString, logStore = logStore)
loghubEventSet.add(event)
@ -64,49 +65,37 @@ object LoghubUtils {
}
}
private fun uploadLogGroup(logGroup: LogGroup, logStore: String) {
LoghubHelper.getInstance().uploadLogGroup(logGroup, logStore)
}
fun commitSavedLoghubEvents() {
loghubEventExecutor.execute {
loghubEventExecutor?.execute {
// TODO 初始化 loghubHelper 去掉这个 tryCatch 块
tryWithDefaultCatch {
if (loghubEventSet.isEmpty()) return@execute
val exposureList = loghubEventSet.toList()
createLogGroupAndUpload()
uploadEvents()
loghubEventSet.removeAll(exposureList)
loghubEventDao.deleteMany(exposureList)
}
}
}
private fun createLogGroupAndUpload() {
val logGroupHashMap = hashMapOf<String, LogGroup>()
private fun uploadEvents() {
for (event in loghubEventSet) {
if (!logGroupHashMap.containsKey(event.logStore)) {
logGroupHashMap[event.logStore] = LogGroup("sls android", "no ip")
}
val log = Log()
// 特殊处理以下logStore不需要用content包裹数据
if (event.logStore == "collection" || event.logStore == "common" || event.logStore == "halo-api-device-installed") {
val contentJson = JSONObject(event.content)
for (key in contentJson.keys()) {
log.PutContent(key, contentJson.get(key).toString())
log.putContent(key, contentJson.get(key).toString())
}
} else {
log.PutContent("current time ", event.time)
log.PutContent("content", event.content)
log.putContent("current time ", event.time)
log.putContent("content", event.content)
}
logGroupHashMap[event.logStore]?.PutLog(log)
}
for ((logStore, logGroup) in logGroupHashMap) {
uploadLogGroup(logGroup, logStore)
LoghubHelper.uploadLog(log, event.logStore)
}
}

View File

@ -12,13 +12,15 @@ import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.TextView
import androidx.cardview.widget.CardView
import androidx.core.view.ViewCompat
import com.facebook.drawee.view.SimpleDraweeView
import com.gh.common.util.DisplayUtils
import com.gh.common.util.ImageUtils
import com.gh.common.util.doOnEnd
import com.gh.common.util.doOnStart
import com.gh.gamecenter.R
import kotlinx.android.synthetic.main.view_notifier.view.*
class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0)
: FrameLayout(context, attrs, defStyle) {
@ -65,13 +67,21 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS
var showVerticalTranslateAnimation: Boolean = true
private var mCardView: CardView
private var mContentTv: TextView
private var mIconIv: SimpleDraweeView
init {
inflate(context, R.layout.view_notifier, this)
ViewCompat.setTranslationZ(this, Integer.MAX_VALUE.toFloat())
cardView.scaleX = SCALE_MINI
cardView.scaleY = SCALE_MINI
mCardView = findViewById(R.id.cardView)
mContentTv = findViewById(R.id.tvText)
mIconIv = findViewById(R.id.ivIcon)
mCardView.scaleX = SCALE_MINI
mCardView.scaleY = SCALE_MINI
verticalAnimationOffset = dp2px(100F)
@ -113,7 +123,7 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS
expandAnimator.duration = DEFAULT_DURATION
expandAnimator.addUpdateListener { a ->
val progress = a?.animatedValue as Float
tvText.width = (textWidth * progress).toInt()
mContentTv.width = (textWidth * progress).toInt()
}
expandAnimator.doOnEnd {
enableSwipeToDismiss()
@ -124,46 +134,46 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS
shrinkAnimator.duration = DEFAULT_DURATION
shrinkAnimator.addUpdateListener { a ->
val progress = a?.animatedValue as Float
tvText.width = (textWidth * progress).toInt()
mContentTv.width = (textWidth * progress).toInt()
}
shrinkAnimator.doOnEnd {
val lp = FrameLayout.LayoutParams(cardView.layoutParams)
val lp = FrameLayout.LayoutParams(mCardView.layoutParams)
lp.gravity = Gravity.NO_GRAVITY
cardView.layoutParams = lp
mCardView.layoutParams = lp
disableSwipeToDismiss()
}
translateToLeftAnimator = ObjectAnimator.ofFloat(cardView, "translationX", veryRight, centerX)
translateToLeftAnimator = ObjectAnimator.ofFloat(mCardView, "translationX", veryRight, centerX)
translateToLeftAnimator.duration = DEFAULT_DURATION
translateToLeftAnimator.doOnEnd {
onShowListener?.onShow()
val lp = FrameLayout.LayoutParams(cardView.layoutParams)
val lp = FrameLayout.LayoutParams(mCardView.layoutParams)
lp.gravity = Gravity.CENTER_HORIZONTAL
cardView.layoutParams = lp
cardView.translationX = 0f
mCardView.layoutParams = lp
mCardView.translationX = 0f
expandAnimator.start()
}
translateToRightAnimator = ObjectAnimator.ofFloat(cardView, "translationX", centerX, veryRight)
translateToRightAnimator = ObjectAnimator.ofFloat(mCardView, "translationX", centerX, veryRight)
translateToRightAnimator.duration = DEFAULT_DURATION
translateUpAnimator = ObjectAnimator.ofFloat(cardView, "translationY", veryBottom + verticalAnimationOffset, veryBottom)
translateUpAnimator = ObjectAnimator.ofFloat(mCardView, "translationY", veryBottom + verticalAnimationOffset, veryBottom)
translateUpAnimator.duration = DEFAULT_DURATION
translateUpAnimator.doOnStart { cardView.translationX = veryRight }
translateUpAnimator.doOnStart { mCardView.translationX = veryRight }
translateDownAnimator = ObjectAnimator.ofFloat(cardView, "translationY", veryBottom, veryBottom + verticalAnimationOffset)
translateDownAnimator = ObjectAnimator.ofFloat(mCardView, "translationY", veryBottom, veryBottom + verticalAnimationOffset)
translateDownAnimator.duration = DEFAULT_DURATION
zoomInAnimator = ObjectAnimator.ofPropertyValuesHolder(cardView, PropertyValuesHolder.ofFloat("scaleX", SCALE_DEFAULT),
zoomInAnimator = ObjectAnimator.ofPropertyValuesHolder(mCardView, PropertyValuesHolder.ofFloat("scaleX", SCALE_DEFAULT),
PropertyValuesHolder.ofFloat("scaleY", SCALE_DEFAULT))
zoomInAnimator.duration = DEFAULT_DURATION
zoomInAnimator.doOnStart { cardView.translationX = veryRight }
zoomInAnimator.doOnStart { cardView.translationY = veryBottom }
zoomInAnimator.doOnStart { mCardView.translationX = veryRight }
zoomInAnimator.doOnStart { mCardView.translationY = veryBottom }
zoomOutAnimator = ObjectAnimator.ofPropertyValuesHolder(cardView, PropertyValuesHolder.ofFloat("scaleX", SCALE_MINI),
zoomOutAnimator = ObjectAnimator.ofPropertyValuesHolder(mCardView, PropertyValuesHolder.ofFloat("scaleX", SCALE_MINI),
PropertyValuesHolder.ofFloat("scaleY", SCALE_MINI))
zoomOutAnimator.duration = DEFAULT_DURATION
zoomOutAnimator.doOnEnd { removeFromParent() }
@ -177,7 +187,7 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS
}
private fun enableSwipeToDismiss() {
cardView?.setOnTouchListener(SwipeDismissTouchListener(cardView, object : SwipeDismissTouchListener.DismissCallbacks {
mCardView?.setOnTouchListener(SwipeDismissTouchListener(mCardView, object : SwipeDismissTouchListener.DismissCallbacks {
override fun canDismiss(): Boolean {
return true
}
@ -193,7 +203,7 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS
}
private fun disableSwipeToDismiss() {
cardView?.setOnTouchListener(null)
mCardView?.setOnTouchListener(null)
}
override fun onDetachedFromWindow() {
@ -264,13 +274,13 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS
fun setText(text: String?) {
if (!TextUtils.isEmpty(text)) {
tvText.text = text
tvText.measure(0, 0)
textWidth = tvText.measuredWidth
tvText.width = 0
mContentTv.text = text
mContentTv.measure(0, 0)
textWidth = mContentTv.measuredWidth
mContentTv.width = 0
cardView.measure(0, 0)
cardViewWidth = cardView.measuredWidth
mCardView.measure(0, 0)
cardViewWidth = mCardView.measuredWidth
}
}
@ -284,7 +294,7 @@ class NotifierView @JvmOverloads constructor(context: Context, attrs: AttributeS
}
fun setIcon(url: String) {
ImageUtils.display(ivIcon, url)
ImageUtils.display(mIconIv, url)
}
private fun dp2px(dp: Float): Int {

View File

@ -5,13 +5,14 @@ import android.database.ContentObserver
import android.media.AudioManager
import android.os.Handler
import com.gh.common.util.tryCatchInRelease
import com.halo.assistant.HaloApp
class VolumeObserver(var context: Context, handler: Handler, var callback: MuteCallback? = null)
: ContentObserver(handler) {
class VolumeObserver(var callback: MuteCallback? = null)
: ContentObserver(Handler()) {
var previousVolume: Int = 0
init {
val audio = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val audio = HaloApp.getInstance().application.getSystemService(Context.AUDIO_SERVICE) as AudioManager
// 部分设备的 audioManager getStreamVolume 内部会触发空指针 :(
tryCatchInRelease { previousVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC) }
}
@ -19,7 +20,7 @@ class VolumeObserver(var context: Context, handler: Handler, var callback: MuteC
override fun onChange(selfChange: Boolean) {
super.onChange(selfChange)
val audio = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val audio = HaloApp.getInstance().application.getSystemService(Context.AUDIO_SERVICE) as AudioManager
var currentVolume = 0
tryCatchInRelease {

View File

@ -5,7 +5,6 @@ import com.gh.common.util.ApkActiveUtils
import com.gh.common.util.RandomUtils
import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.retrofit.RetrofitManager
import com.halo.assistant.HaloApp
import io.reactivex.Observable
// 热门卡牌的仓库
@ -16,7 +15,7 @@ object RemenkapaiRepository {
@JvmStatic
fun getRemenkapai(size: Int): Observable<List<GameEntity>> {
return if (remenkapaiList.isEmpty()) {
RetrofitManager.getInstance(HaloApp.getInstance().application).sensitiveApi.remenkapai
RetrofitManager.getInstance().api.remenkapai
.map(RegionSettingHelper.filterGame)
.map { gameList -> filterEntityWithoutApk(gameList) }
.map { pickRandomSizeEntity(size) }

View File

@ -39,7 +39,7 @@ object ReservationRepository {
@JvmStatic
fun refreshReservations() {
if (CheckLoginUtils.isLogin()) {
RetrofitManager.getInstance(HaloApp.getInstance().application).api
RetrofitManager.getInstance().api
.getAllTheGameReservations(UserManager.getInstance().userId, Utils.getTime(HaloApp.getInstance().application))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())

View File

@ -2,19 +2,17 @@ package com.gh.common.simulator
import android.app.Dialog
import android.content.Context
import android.view.Gravity
import android.view.View
import android.view.Window
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import com.g00fy2.versioncompare.Version
import com.gh.common.AppExecutor.uiExecutor
import com.gh.common.constant.Constants
import com.gh.common.dialog.TrackableDialog
import com.gh.common.util.*
import com.gh.common.util.PackageInstaller.getDownloadPath
import com.gh.download.DownloadManager
import com.gh.gamecenter.R
import com.gh.gamecenter.entity.ApkEntity
@ -23,6 +21,7 @@ import com.gh.gamecenter.entity.TrackableEntity
import com.halo.assistant.HaloApp
import com.lightgame.download.*
import com.lightgame.utils.Utils
import java.lang.ref.WeakReference
import java.text.DecimalFormat
class SimulatorDownloadManager private constructor() {
@ -34,6 +33,7 @@ class SimulatorDownloadManager private constructor() {
private var appProgressFilling: View? = null
private var appProgressAnchor: View? = null
private var downloadDialog: Dialog? = null
private var mContextRef: WeakReference<Context>? = null
private var simulatorLocation: SimulatorLocation? = null
private var simulator: SimulatorEntity? = null
@ -70,8 +70,11 @@ class SimulatorDownloadManager private constructor() {
val fileName = downloadEntity.path.substring(downloadEntity.path.lastIndexOf('/') + 1).removeSuffix(".apk")
val startTime = downloadEntity.getMetaExtra(Constants.SIMULATOR_DOWNLOAD_START_TIME)
LogUtils.uploadSimulatorDownload("simulator_download_complete", fileName, simulator?.id, downloadEntity.name, gameId, locationStr, downloadType, startTime)
DownloadManager.getInstance(HaloApp.getInstance().application).cancel(downloadEntity.url, false, true)
downloadDialog?.dismiss()
DownloadManager.getInstance().cancel(downloadEntity.url, false, true)
val activity = mContextRef?.get() as? AppCompatActivity
if (activity?.isFinishing == false) {
downloadDialog?.dismiss()
}
}
DownloadStatus.neterror == downloadEntity.status -> {
ToastUtils.showToast("网络不稳定,下载任务已暂停")
@ -82,6 +85,15 @@ class SimulatorDownloadManager private constructor() {
DownloadStatus.notfound == downloadEntity.status -> {
ToastUtils.showToast("下载链接异常,请稍后重试")
}
DownloadStatus.uncertificated == downloadEntity.status -> {
ToastUtils.showToast("请先进行实名认证")
}
DownloadStatus.unqualified == downloadEntity.status -> {
ToastUtils.showToast("未成年人暂不允许在此时间下载游戏")
}
DownloadStatus.unavailable == downloadEntity.status -> {
ToastUtils.showToast("该游戏未接入防沉迷系统,暂不支持下载")
}
DownloadStatus.hijack == downloadEntity.status -> {
ToastUtils.showToast("网络劫持,请稍后重试")
}
@ -94,7 +106,9 @@ class SimulatorDownloadManager private constructor() {
showDownloadDialog(context, simulator, location, "", "", null)
}
fun showDownloadDialog(context: Context, simulator: SimulatorEntity?, location: SimulatorLocation, gameId: String = "", gameName: String = "", cancelCallback: (() -> Unit)? = null) {
fun showDownloadDialog(context: Context?, simulator: SimulatorEntity?, location: SimulatorLocation, gameId: String = "", gameName: String = "", cancelCallback: (() -> Unit)? = null) {
if (context == null) return
mContextRef = WeakReference(context)
this.simulatorLocation = location
this.simulator = simulator
this.gameId = gameId
@ -105,7 +119,7 @@ class SimulatorDownloadManager private constructor() {
return
}
val isInstalled = PackageUtils.isInstalledFromAllPackage(context, simulator?.apk?.packageName)
val versionFromInstalledApp = PackageUtils.getVersionByPackage(simulator?.apk?.packageName)
val versionFromInstalledApp = PackageUtils.getVersionNameByPackageName(simulator?.apk?.packageName)
val shouldShowUpdate = Version(simulator?.apk?.version).isHigherThan(versionFromInstalledApp)
val title = if (shouldShowUpdate && isInstalled) "更新模拟器" else "安装模拟器"
val message = if (shouldShowUpdate && isInstalled) "检测到模拟器存在更高版本,是否前往更新" else "模拟器游戏需要先下载安装对应的模拟器,才可以运行"
@ -117,15 +131,30 @@ class SimulatorDownloadManager private constructor() {
key = if (shouldShowUpdate && isInstalled) "更新弹窗" else "下载弹窗",
logShowEvent = true
)
DialogUtils.showNewAlertDialog(context, title, message, negativeText, positiveText, trackableEntity, Gravity.LEFT, {
if (shouldShowUpdate && isInstalled) {
cancelCallback?.invoke()
MtaHelper.onEvent(trackableEntity.event, trackableEntity.key, "点击下次再说")
}
}, {
showDownloadingDialog(context, simulator)
MtaHelper.onEvent(trackableEntity.event, trackableEntity.key, if (shouldShowUpdate && isInstalled) "点击更新" else "点击下载")
})
DialogHelper.showDialog(
context,
title,
message,
positiveText,
negativeText,
trackMtaEvent = true,
cancelClickCallback = {
if (shouldShowUpdate && isInstalled) {
cancelCallback?.invoke()
MtaHelper.onEvent(trackableEntity.event, trackableEntity.key, "点击下次再说")
}
},
confirmClickCallback = {
showDownloadingDialog(context, simulator)
MtaHelper.onEvent(
trackableEntity.event,
trackableEntity.key,
if (shouldShowUpdate && isInstalled) "点击更新" else "点击下载"
)
},
mtaEvent = trackableEntity.event, mtaKey = trackableEntity.key,
extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true)
)
}
private fun showDownloadingDialog(context: Context, simulator: SimulatorEntity?) {
@ -151,13 +180,16 @@ class SimulatorDownloadManager private constructor() {
appProgressFilling = view.findViewById(R.id.progress_filling)
view.findViewById<View>(R.id.app_tv_cancel).setOnClickListener {
DownloadManager.getInstance(context).pause(simulator?.apk?.url)
DownloadManager.getInstance().pause(simulator?.apk?.url)
MtaHelper.onEvent("模拟器下载", "下载中弹窗", "点击关闭")
downloadDialog?.dismiss()
val activity = mContextRef?.get() as? AppCompatActivity
if (activity?.isFinishing == false) {
downloadDialog?.dismiss()
}
}
downloadDialog?.setOnDismissListener {
DownloadManager.getInstance(context).removeObserver(dataWatcher)
DownloadManager.getInstance().removeObserver(dataWatcher)
}
downloadDialog?.setCanceledOnTouchOutside(false)
@ -169,51 +201,62 @@ class SimulatorDownloadManager private constructor() {
params?.width = context.resources.displayMetrics.widthPixels - DisplayUtils.dip2px(60f)
downloadDialog?.window?.attributes = params
download(context, simulator)
download(simulator)
}
private fun showNoneEmulatorDialog(context: Context) {
val dialog = DialogUtils.showNewAlertDialog(context, "安装模拟器", "模拟器游戏需要先下载安装对应的模拟器,才可以运行", "取消", "暂无下载", null, {
ToastUtils.showToast("该模拟器暂未提供下载")
})
dialog?.window?.findViewById<TextView>(R.id.confirm)?.setTextColor(ContextCompat.getColor(context, R.color.text_cccccc))
DialogHelper.showDialog(
context,
"安装模拟器",
"模拟器游戏需要先下载安装对应的模拟器,才可以运行",
"暂无下载",
"取消",
confirmClickCallback = {
ToastUtils.showToast("该模拟器暂未提供下载")
},
uiModificationCallback = { binding ->
binding.confirmTv.setTextColor(R.color.text_body.toColor())
},
extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true))
}
private fun download(context: Context, simulator: SimulatorEntity?) {
private fun download(simulator: SimulatorEntity?) {
val apkEntity = simulator?.apk ?: return
DownloadManager.getInstance(context).pauseAll()
val entity = DownloadManager.getInstance(context).getDownloadEntityByUrl(apkEntity.url)
val entity = DownloadManager.getInstance().getDownloadEntityByUrl(apkEntity.url)
HaloApp.put(simulator.name, simulator)
if (entity != null) {
when (entity.status) {
DownloadStatus.pause, DownloadStatus.subscribe,
DownloadStatus.neterror, DownloadStatus.timeout -> {
DownloadManager.getInstance(context).addObserver(dataWatcher)
uiExecutor.executeWithDelay(Runnable { DownloadManager.getInstance(context).resume(entity, true) }, 200)
DownloadManager.getInstance().addObserver(dataWatcher)
uiExecutor.executeWithDelay(Runnable { DownloadManager.getInstance().resume(entity, true) }, 200)
downloadDialog?.show()
}
DownloadStatus.done -> DataChanger.notifyDataChanged(entity)
else -> createDownload(context, apkEntity, simulator)
else -> createDownload(apkEntity, simulator)
}
} else {
createDownload(context, apkEntity, simulator)
createDownload(apkEntity, simulator)
}
}
private fun createDownload(context: Context, apkEntity: ApkEntity, simulator: SimulatorEntity) {
DownloadManager.getInstance(context).addObserver(dataWatcher)
private fun createDownload(apkEntity: ApkEntity, simulator: SimulatorEntity) {
DownloadManager.getInstance().addObserver(dataWatcher)
val downloadId = PackageInstaller.createDownloadId(simulator.name)
val downloadEntity = DownloadEntity()
downloadEntity.url = apkEntity.url
downloadEntity.name = simulator.name
downloadEntity.path = getDownloadPath(simulator.name, apkEntity.format)
downloadEntity.path = PackageInstaller.getDownloadPathWithId(downloadId, apkEntity.format)
downloadEntity.platform = apkEntity.getPlatform()
downloadEntity.packageName = apkEntity.packageName
downloadEntity.versionName = apkEntity.version
downloadEntity.addMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE, Constants.SIMULATOR_DOWNLOAD)
downloadEntity.addMetaExtra(Constants.SIMULATOR_DOWNLOAD_START_TIME, (System.currentTimeMillis() / 1000).toString())
uiExecutor.executeWithDelay(Runnable { DownloadManager.getInstance(context).add(downloadEntity) }, 200)
downloadEntity.addMetaExtra(Constants.DOWNLOAD_ID, downloadId)
uiExecutor.executeWithDelay(Runnable { DownloadManager.getInstance().add(downloadEntity) }, 200)
val locationStr = if (simulatorLocation == SimulatorLocation.LAUNCH) "${simulatorLocation?.value}${gameName}" else simulatorLocation?.value
val fileName = downloadEntity.path.substring(downloadEntity.path.lastIndexOf('/') + 1).removeSuffix(".apk")

View File

@ -3,37 +3,44 @@ package com.gh.common.simulator
import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.text.TextUtils
import com.g00fy2.versioncompare.Version
import com.gh.common.json.json
import com.gh.common.util.*
import com.gh.download.DownloadManager
import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.entity.SimulatorGameRecordEntity
import com.gh.gamecenter.manager.UserManager
import com.gh.gamecenter.retrofit.BiResponse
import com.gh.gamecenter.retrofit.EmptyResponse
import com.gh.gamecenter.retrofit.Response
import com.gh.gamecenter.retrofit.RetrofitManager
import com.gh.gamecenter.room.AppDatabase
import com.halo.assistant.HaloApp
import com.lightgame.download.DownloadDao
import com.lightgame.download.DownloadEntity
import com.lightgame.download.FileUtils
import com.lightgame.utils.AppManager
import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import okhttp3.ResponseBody
import org.json.JSONArray
import java.io.ByteArrayOutputStream
import java.io.File
object SimulatorGameManager {
private val gamePath = FileUtils.getDownloadPath(HaloApp.getInstance().application, "emulator_game")
private val gamePath by lazy { FileUtils.getDownloadPath(HaloApp.getInstance().application, "emulator_game") }
@JvmStatic
fun getPathByType(type: String) = "${gamePath}/${type}"
@JvmStatic
fun deleteLocalGames(names: List<String>) {
val downloadEntityList = DownloadManager.getInstance(HaloApp.getInstance().application).allDownloadEntity
val downloadEntityList = DownloadManager.getInstance().allDownloadEntity
names.forEach { name ->
val downloadEntity = downloadEntityList.find { it.name == name }
if (downloadEntity != null) {
@ -48,7 +55,7 @@ object SimulatorGameManager {
@JvmStatic
fun deleteLocalGame(name: String) {
val downloadEntityList = DownloadManager.getInstance(HaloApp.getInstance().application).allDownloadEntity
val downloadEntityList = DownloadManager.getInstance().allDownloadEntity
val downloadEntity = downloadEntityList.find { it.name == name }
if (downloadEntity != null) {
val file = File(downloadEntity.path)
@ -63,7 +70,7 @@ object SimulatorGameManager {
fun findDownloadEntityByUrl(url: String?): DownloadEntity? {
val downloadEntity = DownloadDao.getInstance(HaloApp.getInstance().application).get(url)
if (downloadEntity != null) {
val isFileCompleted = DownloadManager.getInstance(HaloApp.getInstance().application).isFileCompleted(url)
val isFileCompleted = DownloadManager.getInstance().isDownloadCompleted(url)
if (downloadEntity.isSimulatorGame() && isFileCompleted) {
return downloadEntity
}
@ -77,8 +84,10 @@ object SimulatorGameManager {
@JvmStatic
fun launchSimulatorGame(downloadEntity: DownloadEntity, gameEntity: GameEntity) {
val versionFromInstalledApp = PackageUtils.getVersionByPackage(gameEntity.simulator?.apk?.packageName)
val versionFromInstalledApp = PackageUtils.getVersionNameByPackageName(gameEntity.simulator?.apk?.packageName)
val shouldShowUpdate = Version(gameEntity.simulator?.apk?.version).isHigherThan(versionFromInstalledApp)
updateSimulatorConfigFile(gameId = gameEntity.id)
if (shouldShowUpdate) {
SimulatorDownloadManager.getInstance().showDownloadDialog(AppManager.getInstance().recentActiveActivity, gameEntity.simulator,
SimulatorDownloadManager.SimulatorLocation.LAUNCH, gameEntity.id, gameEntity.name
@ -90,31 +99,63 @@ object SimulatorGameManager {
}
}
@SuppressLint("CheckResult")
private fun jumpToSimulator(downloadEntity: DownloadEntity, gameEntity: GameEntity) {
val intent = Intent()
intent.data = Uri.fromFile(File(downloadEntity.path))
if (gameEntity.simulatorType == "FBA") {
val apkEntity = gameEntity.getApk()[0]
intent.putExtra("rom_name", apkEntity.packageName)
}
intent.putExtra("default_path", downloadEntity.path.substring(0, downloadEntity.path.lastIndexOf('/')))
intent.putExtra("game_type", gameEntity.simulatorType)
intent.putExtra("title", downloadEntity.name)
intent.putExtra("icon", gameEntity.icon ?: "")
intent.putExtra("meta", LogUtils.getMetaObject().toString())
intent.putExtra("simulatorId", gameEntity.simulator?.id)
intent.putExtra("simulatorName", gameEntity.simulator?.name)
intent.putExtra("gameId", gameEntity.id)
val gameIcon = gameEntity.icon ?: gameEntity.rawIcon ?: ""
Single.just(ImageUtils.getCachedUrl(gameIcon))
.flatMap {
getBitmapFormCache(it)
}.map {
BitmapUtils.compressBitmap(it, 100)
}.map {
val baos = ByteArrayOutputStream()
it.compress(Bitmap.CompressFormat.WEBP, 100, baos)
baos.toByteArray()
}
.compose(singleToMain())
.subscribe({
val intent = Intent()
intent.data = Uri.fromFile(File(downloadEntity.path))
if (gameEntity.simulatorType == "FBA" || gameEntity.simulatorType == "FBN") {
val apkEntity = gameEntity.getApk()[0]
intent.putExtra("rom_name", apkEntity.packageName)
}
intent.putExtra("default_path", downloadEntity.path.substring(0, downloadEntity.path.lastIndexOf('/')))
intent.putExtra("game_type", gameEntity.simulatorType)
intent.putExtra("title", downloadEntity.name)
intent.putExtra("icon", gameIcon)
intent.putExtra("iconStream", it)
intent.putExtra("meta", LogUtils.getMetaObject().toString())
intent.putExtra("simulatorId", gameEntity.simulator?.id)
intent.putExtra("simulatorName", gameEntity.simulator?.name)
intent.putExtra("gameId", gameEntity.id)
val destActivity = "com.gh.emu.RequestPermissionActivity"
intent.setClassName(gameEntity.simulator?.apk?.packageName ?: "", destActivity)
try {
AppManager.getInstance().recentActiveActivity.startActivity(intent)
} catch (e: ActivityNotFoundException) {
ToastUtils.showToast("模拟器安装错误")
}
val destActivity = "com.gh.emu.RequestPermissionActivity"
intent.setClassName(gameEntity.simulator?.apk?.packageName ?: "", destActivity)
try {
AppManager.getInstance().recentActiveActivity?.startActivity(intent)
} catch (e: ActivityNotFoundException) {
ToastUtils.showToast("模拟器安装错误")
}
recordPlaySimulatorGames(gameEntity.id)
recordPlaySimulatorGames(gameEntity.id)
}, {
ToastUtils.showToast("跳转失败")
})
}
private fun getBitmapFormCache(url: String): Single<Bitmap> {
return Single.create {
ImageUtils.getBitmap(url, object : BiCallback<Bitmap, Boolean> {
override fun onFirst(first: Bitmap) {
it.onSuccess(first)
}
override fun onSecond(second: Boolean) {
it.onError(Throwable("获取bitmap失败"))
}
})
}
}
@ -123,18 +164,69 @@ object SimulatorGameManager {
*/
@SuppressLint("CheckResult")
@JvmStatic
fun recordDownloadSimulatorGames(gameId: String) {
fun recordDownloadSimulatorGame(gameId: String, type: String) {
val requestMap = hashMapOf<String, Any>()
requestMap["game_id"] = gameId
requestMap["package"] = "-"
val body = requestMap.createRequestBodyAny()
RetrofitManager.getInstance(HaloApp.getInstance().application).api
RetrofitManager.getInstance().api
.downloadSimulatorGames(HaloApp.getInstance().gid, body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(singleToMain())
.subscribe(object : BiResponse<ResponseBody>() {
override fun onSuccess(data: ResponseBody) {
refreshSimulatorGame(gameId, type)
}
})
}
/**
* 批量记录设备下载的模拟器游戏
*/
@SuppressLint("CheckResult")
@JvmStatic
fun recordDownloadSimulatorGames() {
val gameArray = JSONArray()
val allGameList = AppDatabase.getInstance().simulatorGameDao().getAllSimulatorGame()
for (game in allGameList) {
if (!game.isDeleted) {
gameArray.put(json {
"game_id" to game.id
"package" to "-"
})
}
}
if (gameArray.length() == 0) return
RetrofitManager.getInstance().api
.putDownloadSimulatorGames(HaloApp.getInstance().gid, gameArray.toRequestBody())
.compose(singleToMain())
.subscribe(EmptyResponse())
}
@SuppressLint("CheckResult")
private fun refreshSimulatorGame(gameId: String, type: String) {
val simulatorGameDao = AppDatabase.getInstance().simulatorGameDao()
RetrofitManager.getInstance().api
.getSimulatorGames(HaloApp.getInstance().gid, 1, getFilter(type))
.compose(singleToMain())
.subscribe(object : BiResponse<List<GameEntity>>() {
override fun onSuccess(data: List<GameEntity>) {
val simulatorGameRecordList = ArrayList<SimulatorGameRecordEntity>()
data.forEach {
val entity = it.convertSimulatorGameRecordEntity()
entity.isRecentlyPlayed = it.id == gameId
simulatorGameRecordList.add(entity)
}
simulatorGameDao.addSimulatorGameList(simulatorGameRecordList)
}
})
}
private fun getFilter(type: String): String {
return UrlFilterUtils.getFilterQuery("type", type)
}
/**
* 标记已玩过
*/
@ -145,10 +237,9 @@ object SimulatorGameManager {
requestMap["game_id"] = gameId
requestMap["package"] = packageName
val body = requestMap.toRequestBody()
RetrofitManager.getInstance(HaloApp.getInstance().application).api
RetrofitManager.getInstance().api
.postPlayedGame(UserManager.getInstance().userId, body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(singleToMain())
.subscribe(EmptyResponse())
}
}
@ -163,7 +254,7 @@ object SimulatorGameManager {
requestMap["game_id"] = gameId
requestMap["package"] = "-"
val body = requestMap.createRequestBodyAny()
RetrofitManager.getInstance(HaloApp.getInstance().application).api
RetrofitManager.getInstance().api
.playedSimulatorGames(HaloApp.getInstance().gid, body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@ -175,7 +266,7 @@ object SimulatorGameManager {
*/
@SuppressLint("CheckResult")
fun deleteSimulatorGame(gameId: String, callback: () -> Unit) {
RetrofitManager.getInstance(HaloApp.getInstance().application).api
RetrofitManager.getInstance().api
.deleteSimulatorGame(HaloApp.getInstance().gid, gameId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@ -189,11 +280,12 @@ object SimulatorGameManager {
/**
* 批量删除设备下载模拟器游戏的记录
*/
@JvmStatic
@SuppressLint("CheckResult")
fun deleteSimulatorGames(gameIds: List<String>, callback: () -> Unit) {
val requestMap = hashMapOf<String, Any>()
requestMap["game_ids"] = gameIds
RetrofitManager.getInstance(HaloApp.getInstance().application).api
RetrofitManager.getInstance().api
.deleteSimulatorGames(HaloApp.getInstance().gid, requestMap.toRequestBody())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@ -210,10 +302,28 @@ object SimulatorGameManager {
@JvmStatic
@SuppressLint("CheckResult")
fun deleteAllSimulatorGame() {
RetrofitManager.getInstance(HaloApp.getInstance().application).api
RetrofitManager.getInstance().api
.deleteAllSimulatorGame(HaloApp.getInstance().gid)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(EmptyResponse())
}
private fun updateSimulatorConfigFile(gameId: String) {
RetrofitManager.getInstance()
.api
.getGameDigest(gameId)
.map(ApkActiveUtils.filterMapper)
.subscribeOn(Schedulers.io())
.subscribe(object : Response<GameEntity>() {
override fun onResponse(game: GameEntity?) {
game?.let {
if (!TextUtils.isEmpty(game.simulatorGameConfig)) {
val configFilePath = getPathByType(game.simulatorType + "/cheat/" + game.getApk().firstOrNull()?.packageName + ".ini")
FileUtils.downloadAndUpdateFile(game.simulatorGameConfig, configFilePath)
}
}
}
})
}
}

View File

@ -6,6 +6,7 @@ object SyncFieldConstants {
const val ANSWER_VOTE = "ANSWER_VOTE"
const val ARTICLE_VOTE = "ARTICLE_VOTE"
const val ARTICLE_COMMENT_VOTE = "ARTICLE_COMMENT_VOTE"
const val GAME_COLLECTION_VOTE = "GAME_COLLECTION_VOTE"
// 赞同数量
const val ANSWER_VOTE_COUNT = "ANSWER_VOTE_COUNT"
@ -16,8 +17,12 @@ object SyncFieldConstants {
const val ANSWER_COMMENT_COUNT = "ANSWER_COMMENT_COUNT"
const val ARTICLE_COMMENT_COUNT = "ARTICLE_COMMENT_COUNT"
const val ARTICLE_COMMENT_REPLY_COUNT = "ARTICLE_COMMENT_REPLY_COUNT"
const val ANSWER_COMMENT_REPLY_COUNT = "ANSWER_COMMENT_REPLY_COUNT"
// 回答数量
const val ANSWER_COUNT = "ANSWER_COUNT"
// 是否关注
const val IS_FOLLOWER = "IS_FOLLOWER"
}

View File

@ -16,7 +16,6 @@ import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity
import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity
import com.gh.gamecenter.qa.entity.AnswerEntity
import com.gh.gamecenter.qa.entity.Questions
import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity
class ExampleAdapter(context: Context) : ListAdapter<AnswerEntity>(context), ISyncAdapterHandler {
@ -63,10 +62,11 @@ class ExampleAdapter(context: Context) : ListAdapter<AnswerEntity>(context), ISy
binding.title.setOnClickListener {
if ("community_article" == answer.type) {
mContext.startActivity(ArticleDetailActivity.getIntent(mContext, UserManager.getInstance().community, answer.id!!, "", getPath()))
} else {
val questions = answer.questions
mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, "", getPath()))
}
// else {
// val questions = answer.questions
// mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.id, "", getPath()))
// }
}
answerViewHolder.itemView.setOnClickListener {
@ -80,7 +80,7 @@ class ExampleAdapter(context: Context) : ListAdapter<AnswerEntity>(context), ISy
ItemViewType.ITEM_FOOTER -> {
val footerViewHolder = holder as FooterViewHolder
footerViewHolder.initItemPadding()
footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver, R.string.ask_loadover_hint)
footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver)
}
}
}

View File

@ -29,7 +29,7 @@ class ExampleFragment : ListFragment<AnswerEntity, NormalListViewModel<AnswerEnt
}
override fun provideDataObservable(page: Int): Observable<MutableList<AnswerEntity>> {
return RetrofitManager.getInstance(context).api.getCommunitiesRecommendNewest(UserManager.getInstance().community.id, page)
return RetrofitManager.getInstance().api.getCommunitiesRecommendNewest(UserManager.getInstance().community.id, page)
}
override fun provideListViewModel(): NormalListViewModel<AnswerEntity> {

View File

@ -0,0 +1,24 @@
package com.gh.common.tracker
import android.app.Activity
import android.app.Application
import android.os.Bundle
// FYI 快速启动并且不设置 contentView 马上结束的 SplashActivity 没有 onStart 和 onStop 回调
class ActivityLifecycleWatcher(private val mTrack: ITrack) : Application.ActivityLifecycleCallbacks {
override fun onActivityStarted(activity: Activity) {
mTrack.onActivityStarted(activity)
}
override fun onActivityStopped(activity: Activity) {
mTrack.onActivityStopped(activity)
}
override fun onActivityDestroyed(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
override fun onActivityResumed(activity: Activity) {}
}

View File

@ -0,0 +1,72 @@
package com.gh.common.tracker
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import java.util.*
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicLong
import kotlin.concurrent.fixedRateTimer
/**
* 应用生命周期观察者
*/
class AppLifecycleWatcher(private val mTrack: ITrack) : DefaultLifecycleObserver {
private var mWatchVisibleCount = 0 // 检查是否满足上传可见的次数
private val mLastVisibleTime by lazy { AtomicLong(0L) } // 最后可见时间
private val mIsVisible by lazy { AtomicBoolean(false) } // 当前是否可见
private val mWatchInterval by lazy { AtomicLong(MIN_WATCH_VISIBLE_INTERVAL) } // 与上次上报可见的间隔时间
init {
fixedRateTimer(FIXED_RATE_TIMER_NAME, initialDelay = MIN_WATCH_VISIBLE_INTERVAL, period = MIN_WATCH_VISIBLE_INTERVAL) {
if (mIsVisible.get()) {
// 单位间隔发送
val meetLogVisibleInterval = (mWatchVisibleCount++) * MIN_WATCH_VISIBLE_INTERVAL == mWatchInterval.get()
val equalToMinVisibleInterval = mWatchInterval.get() == MIN_WATCH_VISIBLE_INTERVAL
val equalToMaxVisibleInterval = mWatchInterval.get() == MAX_WATCH_VISIBLE_INTERVAL
if (meetLogVisibleInterval || equalToMinVisibleInterval) {
// 上报完重置计数
mWatchVisibleCount = 0
mTrack.onAppVisible(mWatchInterval.get() / 1000)
if (!equalToMaxVisibleInterval) {
mWatchInterval.set(mWatchInterval.get() * 2) // 间隔递增两倍
}
}
}
}
}
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
if (mLastVisibleTime.get() == 0L
|| (mLastVisibleTime.get() + SESSION_ALIVE_INTERVAL) < System.currentTimeMillis() / 1000) {
mTrack.onSessionChanged(UUID.randomUUID().toString())
}
mIsVisible.set(true)
mTrack.onAppStarted()
}
override fun onStop(owner: LifecycleOwner) {
super.onStop(owner)
mIsVisible.set(false)
mLastVisibleTime.set(System.currentTimeMillis() / 1000)
mWatchInterval.set(MIN_WATCH_VISIBLE_INTERVAL)
mTrack.onAppStopped()
}
companion object {
private const val FIXED_RATE_TIMER_NAME = "APP_TRACKER_TIMER"
private const val SESSION_ALIVE_INTERVAL = 30L // 30s
private const val MIN_WATCH_VISIBLE_INTERVAL = 5000L // 5s
private const val MAX_WATCH_VISIBLE_INTERVAL = 320000L // 320s
}
}

View File

@ -0,0 +1,8 @@
package com.gh.common.tracker
import androidx.annotation.Nullable
interface IBusiness {
@Nullable
fun getBusinessId(): Pair<String, String>
}

View File

@ -0,0 +1,14 @@
package com.gh.common.tracker
import android.app.Activity
interface ITrack {
fun onActivityStarted(activity: Activity)
fun onActivityStopped(activity: Activity)
fun onAppStarted()
fun onAppVisible(interval: Long)
fun onAppStopped()
fun onSessionChanged(sessionId: String)
}

View File

@ -0,0 +1,73 @@
package com.gh.common.tracker
import android.app.Activity
import android.app.Application
import androidx.lifecycle.ProcessLifecycleOwner
import com.gh.common.runOnUiThread
import java.util.*
/**
* launch_id 当前启动的唯一 id (每次应用冷启动或被内存回收时变更)
* session_id 当前会话的唯一 id (应用切换至后台超30秒时变更)
*/
object Tracker : ITrack {
private var mSessionId: String = ""
private val mLaunchId by lazy { UUID.randomUUID().toString() }
val sessionId: String
get() = mSessionId
val launchId: String
get() = mLaunchId
private var mIsInitialized = false
@JvmStatic
fun init(application: Application) {
if (mIsInitialized) {
return
}
runOnUiThread {
ProcessLifecycleOwner.get().lifecycle.addObserver(AppLifecycleWatcher(this))
application.registerActivityLifecycleCallbacks(ActivityLifecycleWatcher(this))
}
mIsInitialized = true
}
override fun onActivityStarted(activity: Activity) {
val businessId = if (activity is IBusiness) activity.getBusinessId() else null
TrackerLogger.logActivityStart(
System.identityHashCode(activity).toString(),
activity::class.java.simpleName,
businessId)
}
override fun onActivityStopped(activity: Activity) {
val businessId = if (activity is IBusiness) activity.getBusinessId() else null
TrackerLogger.logActivityStop(
System.identityHashCode(activity).toString(),
activity::class.java.simpleName,
businessId)
}
override fun onAppStarted() {
TrackerLogger.logAppStart()
}
override fun onAppVisible(interval: Long) {
TrackerLogger.logAppVisible(interval)
}
override fun onAppStopped() {
TrackerLogger.logAppStop()
}
override fun onSessionChanged(sessionId: String) {
mSessionId = sessionId
}
}

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