Compare commits

..

258 Commits

Author SHA1 Message Date
max
dc1ae42fa1 feat:固化新增代码的混淆配置
fix:调整命名(泛型)
2024-05-14 19:50:45 +08:00
max
42c82e1c0b fix:调整一些UI与多语言适配 2024-05-14 19:48:22 +08:00
max
70d0049477 feat:调整翻译文案 2024-05-14 18:19:52 +08:00
max
0eeb9cd105 feat:调整头条文本大小 2024-05-14 18:06:57 +08:00
max
e5b2e3f5e7 feat:增加混淆配置 keep 2024-05-14 18:06:37 +08:00
max
a7076f7bc8 feat:多语言调整(PK相关) 2024-05-14 17:39:26 +08:00
max
54c07468d5 feat:多语言适配;补充部分翻译 2024-05-14 17:39:26 +08:00
max
8135142287 feat:新增公聊新消息过滤功能(只接收文本、图片、1081) 2024-05-14 17:39:25 +08:00
max
5a067ec0fd 多语言适配:粉丝团 2024-05-14 17:39:25 +08:00
max
e377a51094 fix:修复部分多语言适配问题 2024-05-14 17:39:24 +08:00
max
01093d39c5 fix:去掉播放礼物特效的一些判断(价值大于520、特效标识),改为是否有特效 2024-05-14 17:39:23 +08:00
max
e386c0cf58 feat:替换邀请好友icon 2024-05-14 17:39:23 +08:00
max
fffb78a9f6 feat:恢复礼物弹窗-幸运礼物、周星礼物提示 2024-05-14 17:39:22 +08:00
max
209ebabd34 feat:恢复支付密码设置功能 2024-05-14 17:39:22 +08:00
max
5697be0ba9 feat:恢复装扮商城 2024-05-14 17:39:21 +08:00
max
de6d892df5 feat:隐藏房间玩法列表-名称展示 2024-05-14 17:39:20 +08:00
max
f21e14ca5b 多语言适配:修改部分翻译 2024-05-14 17:39:20 +08:00
max
c4c03edc5f feat:调整公聊部分UI 2024-05-14 17:39:20 +08:00
max
72863b8bde feat:恢复粉丝团功能 2024-05-14 17:39:20 +08:00
max
9be483de4b 多余语适配:去掉部分常量 2024-05-14 17:39:20 +08:00
max
bf3098d5c3 fix:修复自定义ImageSpan加载图片回调更新View的线程问题 2024-05-14 17:39:19 +08:00
max
94f33e2fa7 feat:补充公聊加入房间附带参数(和房间一样,但目前用不上) 2024-05-14 17:39:17 +08:00
max
a54b7967c9 feat:恢复房间部分功能(小时榜、房间榜) 2024-05-14 17:39:17 +08:00
max
bd00bb7e91 fix:修复发布头条支付弹窗未选中金币问题 2024-05-14 17:39:17 +08:00
max
a86950f80a fix:修复房间消息列表-消息展示不完整问题 2024-05-14 17:39:15 +08:00
max
ca8f581c69 feat:恢复收益记录-明细H5入口、恢复我的-邀请好友入口 2024-05-14 17:39:15 +08:00
max
7c8685d652 同步PIKO:恢复首页Tab分类功能 2024-05-14 17:39:15 +08:00
max
89065de00f feat:补充房间公聊发送按钮多语言图片 2024-05-14 17:39:14 +08:00
max
338bedb0e0 fix:修复房间-公聊消息昵称不展示问题 2024-05-14 17:39:14 +08:00
max
6635167a30 fix:调整音乐列表分页大小(尽可能避免一直单页播放问题) 2024-05-14 17:39:13 +08:00
max
7c23f5e24b 多语言适配:替换房间在线列表部分icon 2024-05-14 17:39:12 +08:00
max
d51aba4908 多语言适配 2024-05-14 17:39:11 +08:00
max
2a3aa0a77e 多语言适配:部分文案与图片 2024-05-14 17:39:11 +08:00
max
ff25fd4ded fix:修复房间用户资料弹窗-操作按钮点击立即销毁弹窗问题 2024-05-14 17:39:10 +08:00
max
d7be587078 fix:修复福袋公屏未区分地区问题 2024-05-14 17:39:09 +08:00
max
9f7187e7ae feat:公聊发布头条-图片多语言适配 2024-05-14 17:39:09 +08:00
max
7f38169684 feat:房间-公聊文本消息支持emoji 2024-05-14 17:39:09 +08:00
max
3bc264cccb feat:调整公聊大厅弹幕数据加载策略(为空才请求) 2024-05-14 17:39:09 +08:00
max
912ef11d1b fix:获取公聊大厅ID的读取策略优化 2024-05-14 17:39:08 +08:00
max
62679db186 feat:完成游戏房公聊业务
fix:公聊入口弹幕支持emoji展示
2024-05-14 17:39:07 +08:00
max
ea92c08ca1 fix:修复百顺游戏时飘屏无法展示问题(由Activity改为View-Fragment实现) 2024-05-14 17:39:07 +08:00
max
9ae80b839b fix:调整游戏SDK传参
feat:游戏余额不足跳转充值页,增加提示弹窗
2024-05-14 17:39:06 +08:00
max
01f3418f43 feat:初步完成百顺游戏接入 2024-05-14 17:39:05 +08:00
max
5e634b1fda feat:补充创建房间-图片多语言适配 2024-05-14 17:39:04 +08:00
max
32ac09ef60 feat:恢复创建游戏房间功能 2024-05-14 17:39:03 +08:00
max
ae4dea2ab0 feat:恢复游戏房功能 2024-05-14 17:39:03 +08:00
max
f76582b1f6 feat:优化首页Tab-Fragment的可见检测逻辑
fix:修复部分空指针异常
2024-05-14 17:39:02 +08:00
max
f121ef5ad1 feat:完成房间公聊功能 2024-05-14 17:39:02 +08:00
max
a7a04c2950 feat:公聊厅消息列表支持头饰展示 2024-05-14 17:39:01 +08:00
max
af0ba80b30 feat:完善公聊厅UI
feat:公聊厅列表增加数量限制
2024-05-14 17:39:01 +08:00
max
c986a2dce6 feat:完成公聊厅-首页入口 2024-05-14 17:38:59 +08:00
max
376fbdaeb2 feat:初步搭建房间内公聊 2024-05-14 17:38:58 +08:00
max
7fd10e1222 feat:完善公聊厅发布头条支付对接,以及购买后展示逻辑 2024-05-14 17:38:58 +08:00
max
edb8c962cd feat:完善公聊页细节实现
feat:对接公聊ID、发布头条、获取头条接口
2024-05-14 17:38:57 +08:00
max
378ea3802d feat:初步搭建公聊页面(待完善) 2024-05-14 17:38:57 +08:00
max
04f434531c 多语言适配:调整部分阿语翻译 2024-05-06 10:40:47 +08:00
max
a18b0d3f4d feat:调整云信测试环境KEY 2024-04-30 15:10:45 +08:00
max
58c298bbd6 fix:调整老板位阿语文案 2024-04-30 10:13:48 +08:00
max
35bc665f03 fix:调整阿语数字展示为0123.. 2024-04-30 09:56:16 +08:00
max
414a248418 feat:调整我的-加入公会-阿语图片 2024-04-30 09:36:47 +08:00
max
22b45993e4 fix:登录页不同语言字体大小适配 2024-04-29 17:36:04 +08:00
max
2af211457b feat:登录页增加切换环境入口 2024-04-29 17:28:38 +08:00
max
29a62a034d fix:修复首页Tab数据源导致的内存泄露问题 2024-04-29 15:39:12 +08:00
max
a2980914e8 fix:尝试解决部分手机应用名读取成XChat_Android_Core问题 2024-04-29 11:21:55 +08:00
max
920b159820 feat:补充飘屏-异常捕获 2024-04-29 11:20:47 +08:00
max
6e37bd9c68 fix:修复房间前台服务-通知兼容异常问题 2024-04-29 10:15:22 +08:00
max
1d399777b1 fix:修复飘屏findViewById导致偶发异常问题 2024-04-29 10:14:34 +08:00
max
3626d5708a feat:调整版本号 2024-04-26 19:50:21 +08:00
max
ebd9ddd8de feat:首页列表新增房间标签展示 2024-04-26 18:57:44 +08:00
max
20497cb2b7 多语言适配:调整公会相关文案图片,支持我的公会状态 2024-04-26 18:03:50 +08:00
max
61bb91920d fix-多语言适配:修改部分文案与图标 2024-04-26 17:14:19 +08:00
max
6a30060bf9 fix:调整送礼弹窗-全麦文案适配 2024-04-26 17:03:54 +08:00
max
76abafe1cc fix:修复送礼麦位动画错位问题 2024-04-26 17:02:56 +08:00
max
6256151928 fix:修复福袋飘屏异常展示问题 2024-04-26 16:05:46 +08:00
max
3d59e7f244 UI-fix:我的-ID文案调整 2024-04-26 15:40:04 +08:00
max
66f8a527f9 同步PIKO:个播跨房PK-bug处理记录 2024-04-26 15:08:41 +08:00
max
57d0852d14 同步PIKO:完成声网个播PK功能 2024-04-26 14:59:41 +08:00
max
38b0af2f35 同步PIKO:修复个播PK声音状态异常 2024-04-26 14:45:15 +08:00
max
062c2ee0a9 同步PIKO:修复个播PK进房未加入对方房间问题 2024-04-26 14:35:34 +08:00
max
4ff5ca40e3 同步PIKO:修复相亲房送礼导致闭麦、结束导致闭麦问题;修复BaseRoomFragment麦克风状态判断问题 2024-04-26 14:28:46 +08:00
max
ad543ccbbc 同步PIKO:修复音乐无限切换bug 2024-04-26 14:24:53 +08:00
max
2d8f3939ee 恢复首页排行榜入口 2024-04-26 11:04:01 +08:00
max
e43b3348bf 更新混淆配置 2024-04-25 16:12:49 +08:00
max
8f552d6663 混淆配置:这个引用会被误混淆(大概因为同名),改为直接引用路径 2024-04-25 15:49:09 +08:00
max
a7c528fff1 fix:修复文件上传失败问题(混淆导致) 2024-04-25 15:47:30 +08:00
max
afc1d5ef69 混淆异常处理 2024-04-24 23:20:09 +08:00
max
4a3c8cbdac 混淆配置:调整顺序(应该没区别) 2024-04-24 23:11:46 +08:00
max
1c9c084c3e 多语言适配:补充提交 2024-04-24 21:10:00 +08:00
max
39cd73b021 fix:修复多个多语言UI适配问题 2024-04-24 21:07:27 +08:00
max
f6e5017fbb fix:修复VIP中心的多语言适配问题 2024-04-24 20:39:57 +08:00
max
8562768556 fix:去掉不必要的字段(为null导致异常) 2024-04-24 19:53:46 +08:00
max
7d6f0c360b feat:更新混淆规则(新增一些目录移动配置) 2024-04-24 18:36:14 +08:00
max
e635f69b1f fix:欢乐砸蛋公屏文案调整(1.寻爱之旅换欢乐砸蛋2.欢乐砸蛋暂时不需要翻译) 2024-04-24 18:24:18 +08:00
max
66e9a1442e 补充全局飘屏屏蔽页面 2024-04-24 17:34:23 +08:00
max
30036526bd fix:全局飘屏增加屏蔽页面(升级弹窗) 2024-04-24 17:30:26 +08:00
max
de71c445c1 feat:调整收益记录页UI(文本颜色互换) 2024-04-24 17:27:25 +08:00
max
088d27c51c feat:调整状态图资源 2024-04-24 17:12:17 +08:00
max
42007aa075 feat:调整接口日志输出限制(debug环境输出) 2024-04-24 16:13:35 +08:00
max
bc441a8ac2 多语言适配:调整我的页面-VIP中心入口的图片 2024-04-24 15:09:54 +08:00
max
5b9ada0902 多语言适配:我的装扮页面适配 2024-04-24 11:56:22 +08:00
max
5f441aa8eb fix:去掉通用飘屏文本行数限制 2024-04-24 11:54:26 +08:00
max
9e8a95c1d6 feat:补充几个之前删除的SVGA文件 2024-04-23 20:12:00 +08:00
max
ac14be2c88 feat:调整通用飘屏-SVGA方案(自己做进场/退出动画,不用SVGA的动态文本了,自己叠加一个TextView) 2024-04-23 18:58:50 +08:00
max
e334c7ce16 feat:调整接口加密KEY 2024-04-23 18:33:55 +08:00
max
32b0fba6fb 同步PIKO:房间在线列表改用接口加载 2024-04-23 15:08:04 +08:00
max
d9a39877f1 fix:修复欢乐砸蛋排行榜数据加载问题(viewpager2导致) 2024-04-23 14:21:17 +08:00
max
681bd8bca9 修改房间默认背景 2024-04-23 11:37:42 +08:00
max
fc62f8cd28 fix:修复部分手机偶现多语言切换失效问题(发现一台Vivo测试机,进入退出二级页面后,Application的Locale被重置 导致ResUtils.getString没有正确读取文本) 2024-04-22 21:13:16 +08:00
max
696dc32234 fix:调整福袋飘屏 多语言文案问题 2024-04-22 20:54:35 +08:00
max
99e85366b3 多语言适配:创建房间 2024-04-22 18:15:30 +08:00
max
70785fdf47 同步PIKO:恢复地区隔离功能 2024-04-22 17:43:02 +08:00
max
b353105ca2 多语言适配:遗漏的文案适配 2024-04-22 16:45:44 +08:00
max
62dc2e3c9d 多语言适配:修复部分多语言适配问题(私聊页、PK拒绝提示、PK搜索ID等) 2024-04-22 16:34:22 +08:00
max
9c63c56488 feat:全局性广播飘窗-增加地区隔离逻辑(只展示当前地区的飘屏) 2024-04-22 15:20:50 +08:00
max
d3b16529e1 feat:寻爱之旅玩法改版-》欢乐砸蛋 2024-04-22 15:04:09 +08:00
max
d73770cfe2 fix:文案调整(贵族->VIP) 2024-04-19 18:26:30 +08:00
max
191990426a 多语言适配:赠送礼物失败提示文案 2024-04-19 18:24:16 +08:00
max
87052c52c1 补充提交:缺少引用 2024-04-19 18:11:56 +08:00
max
568a42799d 同步PIKO:PK更新值忽略超级幸运礼物 2024-04-19 17:32:39 +08:00
max
c0663e4aa8 同步PIKO:云信消息处理增加异常捕获 2024-04-19 17:18:29 +08:00
max
a8e7634920 同步PIKO:移植超级幸运礼物 2024-04-19 17:07:06 +08:00
max
8d292ccac0 feat:福袋礼物飘屏采用新方案实现 2024-04-19 15:42:07 +08:00
max
b81f0c0808 多语言适配:PK状态背景适配 2024-04-19 14:17:38 +08:00
max
b354931ed2 多语言适配:送礼弹窗-VIP特权图标资源 2024-04-19 11:52:32 +08:00
max
f538dde6da 多语言适配:排麦弹窗操作按钮多语言大小适配 2024-04-19 11:40:09 +08:00
max
a37ff5d9b8 fix:修复相亲房bug及多语言适配 2024-04-19 11:18:55 +08:00
max
f675e3e085 RTL适配:修复PK面板背景图片适配问题 2024-04-19 10:19:26 +08:00
max
63553473bf feat:升级TRTC-SDK(11.7.0.13946) 2024-04-19 10:16:44 +08:00
max
15f8ae439b RTL适配:私聊-消息适配、全局性的布局属性替换(layout_alignParentLeft、layout_alignParentRight、layout_toLeftOf、layout_toRightOf) 2024-04-19 09:43:34 +08:00
max
f73b56726a fix:调整私聊输入框文本:局中 2024-04-18 19:07:49 +08:00
max
cbca06b03d feat:寻爱飘屏实现方案调整(改用新飘屏方案实现) 2024-04-18 18:52:19 +08:00
max
9b0168f614 功能恢复:恢复寻爱玩法 2024-04-18 18:52:18 +08:00
max
70b9e5cbdd 恢复个播房 2024-04-18 18:52:18 +08:00
max
f95f8fb0f5 房间飘屏最大展示条数改为1 2024-04-18 15:01:37 +08:00
max
8b90c472e3 fix:修复google不可用情况下 无法使用金币开通问题 2024-04-18 15:00:31 +08:00
max
c924a2b2ac fix:修复房间底部输入框入口多语言适配问题 2024-04-18 14:32:35 +08:00
max
e7d2c0cf75 同步PIKO:送礼接口修改为V5 2024-04-18 11:26:57 +08:00
max
5946726d0b fix:修复公会部分页面的多语言适配问题 2024-04-18 11:25:35 +08:00
max
ca266841ac RTL适配:VIP中心-返利图片适配 2024-04-17 18:12:38 +08:00
max
5c9ad5b2fb 文案修改:贵族 换成 VIP 2024-04-17 18:09:03 +08:00
max
68e6d2aa15 功能恢复:恢复贵族中心的帮助入口、排行榜入口、特权详情查看功能 2024-04-17 12:04:28 +08:00
max
fcecc29add 多语言适配:图片资源适配 2024-04-17 11:36:24 +08:00
max
81ba536dba fix:修复公会页操作入口多语言适配问题 2024-04-16 20:14:24 +08:00
max
3bf1af2c0b fix:修复切换语言后进房提示文案未及时更新问题 2024-04-16 20:13:59 +08:00
max
48de4c765b feat:调整进房提示文案 2024-04-16 19:47:27 +08:00
max
eb6fb9b2da fix:金币翻译调整为Coins 2024-04-16 19:39:12 +08:00
max
5cf07b86b3 RTL适配:送礼-麦位动画 2024-04-16 18:59:48 +08:00
max
0fce835c0c fix:修复房间用户弹窗操作按钮加载问题 2024-04-16 17:20:26 +08:00
max
dcbd5aae25 fix:调整送礼飘窗阿语文案 2024-04-16 16:15:20 +08:00
max
b5541afc5d RTL适配:送礼公屏 2024-04-16 16:00:51 +08:00
max
25e0c29dbc fix:修复粉丝列表按钮适配问题 2024-04-16 15:53:12 +08:00
max
46c6ee3e99 fix:修复搜索页输入框未局中问题 2024-04-16 15:37:27 +08:00
max
6277322ebe fix:礼物弹窗适配RTL:Viewpager换ViewPager2
fix:移除礼物弹窗-余额文案
2024-04-16 15:19:26 +08:00
max
a8bc86b5aa fix:调整送礼弹窗-钻石图标大小 2024-04-15 18:27:10 +08:00
max
291f85c310 同步PIKO:完成送礼可用金币+钻石功能 2024-04-15 18:23:16 +08:00
max
26ea3dbfd5 feat:完成通用飘屏公屏功能(使用新方案,同时把礼物飘窗也改用新方案实现) 2024-04-15 17:45:27 +08:00
max
14a70f29c8 fix:修复启动页多语言适配问题 2024-04-15 16:57:21 +08:00
max
96174fbfeb feat:首页房间Top榜边框资源适配多语言 2024-04-15 16:38:10 +08:00
max
492b5f7263 feat:调整礼物面包接口、去掉GiftModel构造函数请求礼物数据逻辑 2024-04-15 16:29:25 +08:00
max
408afcebcb feat:调整首页房间列表公告标题字段 2024-04-15 10:28:19 +08:00
max
18904e853e feat:logo调整、占位图调整 2024-04-12 19:19:15 +08:00
max
61ac515cf9 feat:首页房间列表UI调整 2024-04-12 19:16:49 +08:00
max
c47281401e 应用名修改:Molistar->MoliStar 2024-04-12 16:47:08 +08:00
max
58abce7456 同步PIKO:修复礼物Modle默认加载礼物列表未判断登录问题 2024-04-12 16:41:10 +08:00
max
fdd6f1836f 移植文件上传:七牛云换腾讯云 2024-04-12 16:16:37 +08:00
max
5928151853 移除星座展示 2024-04-12 11:19:24 +08:00
max
c4cc6153df RTL适配:Viewpager换为Viewpager2 2024-04-12 11:00:10 +08:00
max
ecdeee3e76 RTL适配:全局替换布局属性(layout_marginLeft->layout_marginStar、layout_marginRight->layout_marginEnd、paddingLeft->paddingStart、paddingRight->paddingEnd、drawableLeft->drawableStar、drawableRight->drawableEnd、gravityLeft->gravityStart、gravityRight->gravityEnd) 2024-04-12 09:55:20 +08:00
max
a39a11343c RTL适配:送礼弹窗、礼物飘窗 2024-04-12 09:38:43 +08:00
max
c5d0b80f1b 修改测试环境域名、云信测试环境KEY 2024-04-11 19:41:32 +08:00
max
520efa04f8 RTL适配:增加EditText全局样式适配 2024-04-11 18:56:22 +08:00
max
5b1b469316 多语言适配:添加部分多语言图片资源 2024-04-11 16:57:15 +08:00
max
7ce3990728 RTL适配:房间右侧操作面板、我的操作条目箭头 2024-04-11 16:18:39 +08:00
max
542e12a88b RTL适配:房间用户卡片底部操作按钮移动到上面的操作按钮区 2024-04-11 16:12:26 +08:00
max
7373093946 适配首页-星球动画RTL 2024-04-11 14:05:17 +08:00
max
792b140f0f fix:修复切换语言启动时未正确设置问题 2024-04-11 14:04:59 +08:00
max
c64d74aa7d fix:修复部分手机切换Application语言无效问题 2024-04-11 11:32:47 +08:00
max
73f24839d4 feat:完成 钻石金币 概念互换(文案、图标资源互换) 2024-04-10 18:38:30 +08:00
max
9a532c5c3f 删除部分目前版本不需要的图片资源 2024-04-10 11:50:31 +08:00
max
1b74aa08ce fix:修复错误引用问题 2024-04-09 15:52:17 +08:00
max
831d219f36 feat:完成切换语言功能,新增阿语(目前只适配部分) 2024-04-09 15:26:37 +08:00
max
6858130a7e 固化新增的混淆规则 2024-04-08 09:29:37 +08:00
max
db9077fbbc feat:增量混淆 2024-04-07 18:27:19 +08:00
max
e67ab3c1b3 feat:移植分享邀请功能(新增LinkActivity相关代码是为了邀请码唤起功能,之前用的MobLink方案,但目前molistar不打算接入第三方SDK) 2024-04-07 16:43:26 +08:00
max
df0b246062 feat:完成登录页UI微调整 2024-04-07 14:29:16 +08:00
max
bf133e5dc6 feat:恢复首页banner 2024-04-07 10:23:17 +08:00
max
b4f26d324c feat:增加支付场景的日志输出 2024-04-02 20:18:28 +08:00
max
4a2618a76b 调整版本号 2024-04-02 17:57:14 +08:00
max
1b56fd075b fix:贵族中心适配英文:微调部分字体大小、文案 、图标 2024-04-02 17:55:44 +08:00
max
f1586fb0ac feat:设置页条目字体大小统一 2024-04-02 17:02:47 +08:00
max
66aa5a5671 fix:修复贵族中心空指针隐患 2024-04-02 16:52:35 +08:00
max
52bfc9636b feat:移除不必要的类 2024-04-02 16:52:12 +08:00
max
7c0665b9ce feat:调整贵族中心部分翻译 2024-04-02 14:22:24 +08:00
max
ecb3c46407 feat:退出登录操作 增加退出google登录 2024-04-02 11:43:23 +08:00
max
6ce3a64ea3 fix:调整贵族中心部分翻译和文本局中对齐 2024-04-02 11:30:11 +08:00
max
408ec37ff2 fix:获取google-service做非空判断 2024-04-02 10:40:25 +08:00
max
ecdbf9e9c3 feat:地区选择添加英国、美国 2024-04-02 10:39:10 +08:00
max
d8ae8a559d feat:初步移植piko的新版贵族中心(返利+购买) 2024-04-01 19:00:26 +08:00
max
2f8511ca16 feat:添加google登录 2024-04-01 16:34:24 +08:00
max
7e6c8bc4d3 图片资源MD5修改固化 2024-04-01 11:47:11 +08:00
max
30c63dd35d 移除无用清单文件配置 2024-03-05 14:22:22 +08:00
max
40b54bdf53 补充混淆配置 2024-03-05 14:21:38 +08:00
max
7bdbae1d9e 移除测试代码 2024-03-05 00:13:24 +08:00
max
30dbebc696 移除无用资源 2024-03-05 00:13:11 +08:00
max
d3c70fa0d9 修改送全麦文案展示(国际化) 2024-03-05 00:04:31 +08:00
max
bc5a20263c 调整注册页-性别提示UI位置 2024-03-04 21:39:56 +08:00
max
2205c59d69 隐藏房间在线列表 部分标签信息 2024-03-04 21:39:50 +08:00
max
a7f8c413d6 修改创建房间图标
修改搜索列表-在直播图标
2024-03-04 21:39:32 +08:00
max
2c098a9092 去掉房间公屏-收藏房间提示 2024-03-04 21:39:21 +08:00
zu
e547fff367 最新混淆配置 2024-03-04 21:38:46 +08:00
max
b7951341b2 调整首页星球滚动速度 2024-03-04 18:30:04 +08:00
max
30d81ebbfd 调整房间公屏开关文案国际化 2024-03-04 18:29:48 +08:00
max
3cb2267032 修改贵族页背景图 2024-03-04 17:52:16 +08:00
max
85dcb4806e 去掉房间小时榜、房间排行榜、粉丝团、个播房
去掉礼物入口首充图标
去掉规则一些H5入口
去掉首页排行榜入口
2024-03-04 17:23:32 +08:00
max
40a93939ad 去掉地区检测 2024-03-04 14:41:11 +08:00
max
98b66940e5 删除部分无用工具类 2024-03-04 14:40:49 +08:00
max
7b4bb010bf 重命名加密模块相关代码 2024-03-04 14:31:55 +08:00
max
9bc58277aa feat:修改声网、云信 配置 2024-03-04 14:24:34 +08:00
max
5a69f092a2 feat:修改消息-【小秘书、工会】头像地址 2024-03-04 14:14:40 +08:00
max
1873359e36 修改域名、应用名、签名等配置 2024-03-04 11:25:20 +08:00
max
eae1539375 国际化配置修改:打包仅保留en(目前版本需求) 2024-03-01 21:15:44 +08:00
max
c49d8c0f0c feat:完成多语言(新增英文) 2024-03-01 21:10:49 +08:00
max
642b0cc1fc 删除贵族特权明细弹窗 2024-03-01 20:17:16 +08:00
max
9850069824 feat:完成首页数据交互 2024-03-01 20:14:23 +08:00
max
038aded819 feat:初步完成首页星球UI部分 2024-02-29 21:10:22 +08:00
max
bffe6916e9 删除部分代码(分享、签到等) 2024-02-29 15:42:17 +08:00
max
9bb7ee73f5 feat:完成个人主页UI改版 2024-02-29 15:21:14 +08:00
max
81769854ee 恢复误删除的房间操作弹窗入口
移除贵族特权详情描述展示
2024-02-29 10:54:08 +08:00
max
614b5ad042 feat:修改Logo
修改主题色
删除首页Tab相关无用代码
2024-02-28 18:21:45 +08:00
max
da86497b95 feat:完成首页TabBarUI改版 2024-02-28 16:52:05 +08:00
max
c37635d6d1 feat:完成首页UI改版 2024-02-28 15:48:27 +08:00
max
1a1d2cf46c feat:完成消息页UI改版(删除部分无用代码) 2024-02-28 14:44:49 +08:00
max
a686dcc19d feat:完成我的页面UI改版 2024-02-28 14:23:45 +08:00
max
1ffd596ab2 feat:完成登录、注册UI改变(删除快捷登录页面) 2024-02-28 10:56:39 +08:00
max
4c01a2eb2c 新增molistar签名文件 2024-02-27 20:58:30 +08:00
max
93ebf4f8e1 删除装扮商城和房间banner入口 2024-02-27 20:58:10 +08:00
Max
c264a25d66 删除礼物面板周星礼物提示 2024-02-27 20:19:41 +08:00
Max
44c76eb00d 删除个人资料-声音签名 2024-02-27 16:05:02 +08:00
Max
36d80dc7f0 删除个人资料-标签 2024-02-27 16:01:28 +08:00
Max
6905425adb 删除抽奖功能 2024-02-27 15:53:53 +08:00
Max
79aa0754d5 删除师徒相关 2024-02-27 15:40:40 +08:00
Max
abad8212a5 删除家族相关代码 2024-02-27 15:07:28 +08:00
Max
f4626dc8b7 删除公聊大厅相关代码 2024-02-27 14:57:51 +08:00
Max
f383b23ad9 删除支付宝&提现相关代码 2024-02-27 12:02:19 +08:00
Max
e31545ddb0 删除提现、转赠、支付密码相关 2024-02-27 11:53:27 +08:00
Max
b9d090cd25 删除首充引导相关 2024-02-27 11:11:09 +08:00
Max
c55b1ba737 补充删除夺宝相关代码 2024-02-27 10:38:57 +08:00
Max
a93f3acdc9 删除房间停留获取免费礼物相关代码 2024-02-27 10:08:45 +08:00
Max
500d5ca1a8 删除首页开启推送通知提醒功能 2024-02-27 10:05:17 +08:00
Max
fdfa571d16 删除装扮商城相关代码 2024-02-26 21:04:28 +08:00
Max
8c14c2e1ab 移除设置-检查版本功能、隐藏设置-支付密码入口 2024-02-26 20:46:53 +08:00
Max
b999193f42 删除幸运礼物顶部提示栏 2024-02-26 20:17:05 +08:00
Max
1c1eb1c959 移除发现萌新相关代码 2024-02-26 19:47:53 +08:00
Max
1b02f13ea2 移除航海冒险相关代码 2024-02-26 18:39:37 +08:00
Max
96e7b58446 删除红包相关代码 2024-02-26 18:22:46 +08:00
Max
3b3b3cea18 去掉基于渠道的判断逻辑,默认按google渠道处理 2024-02-26 17:36:42 +08:00
Max
a1144d47c8 删除社区与话题相关代码 2024-02-26 14:40:27 +08:00
Max
4bd9865ac2 chore:移除原签名包名等信息 2024-02-23 15:17:24 +08:00
4681 changed files with 48850 additions and 81539 deletions

View File

@@ -10,7 +10,7 @@ android {
compileSdkVersion COMPILE_SDK_VERSION.toInteger()
defaultConfig {
applicationId isolationMode ? 'com.example.gogo' : 'app.hiyoo.fun'
applicationId isolationMode ? 'com.e.oos' : 'com.hhchu.molistar'
minSdkVersion MIN_SDK_VERSION.toInteger()
targetSdkVersion TARGET_SDK_VERSION.toInteger()
versionCode Integer.valueOf(version_code)
@@ -20,11 +20,11 @@ android {
flavorDimensions 'default'
buildConfigField "boolean", "ISOLATION_MODE", "$isolationMode"
resConfigs "en", "zh-rTW", "ar"
if (isolationMode) {
resValue "string", "app_name", "Hi-debug"
resValue "string", "app_launch_name", "Mo-debug"
} else {
resValue "string", "app_name", "Hiyoo"
resValue "string", "app_launch_name", "MoliStar"
}
}
@@ -63,7 +63,7 @@ android {
if (abi == null) {
abi = "universal"
}
outputFileName = "hiyoo_${buildType.name}_v${defaultConfig.versionName}_${abi}_${date}.apk"
outputFileName = "MoliStar_${buildType.name}_v${defaultConfig.versionName}_${abi}_${date}.apk"
}
}
@@ -84,19 +84,19 @@ android {
signingConfigs {
debug {
storeFile file('../app_debug.jks')
storePassword "debug2023"
keyAlias "debug"
keyPassword "debug2023"
storeFile file('../molistar_debug.jks')
storePassword "molistar"
keyAlias "molistar"
keyPassword "molistar"
v2SigningEnabled true
v1SigningEnabled true
}
release {
storeFile file('../hiyoo.jks')
storePassword "hiyoo2023"
keyAlias "hiyoo"
keyPassword "hiyoo2023"
storeFile file('../molistar.jks')
storePassword "molistar"
keyAlias "molistar"
keyPassword "molistar"
v2SigningEnabled true
v1SigningEnabled true
}
@@ -107,40 +107,30 @@ android {
main {
java.srcDirs = [
'src/main/java',
'src/module_public_chat_hall/java',
'src/module_upgrade_app/java',
'src/module_mentoring_relationship/java',
'src/module_labour_union/java',
'src/module_room_chat/java',
'src/model_customer_server/java',
'src/module_music/java',
'src/module_mini_world/java',
'src/module_lottery_dialog/java',
'src/module_bank_card/java',
'src/module_super_admin/java',
'src/module_treasure_box/java',
'src/module_community/java',
'src/module_album/java',
'src/module_treasure_box/java',
'src/module_public_chat/java',
]
res.srcDirs = [
'src/main/res',
'src/common/res',
'src/module_public_chat_hall/res',
'src/module_upgrade_app/res',
'src/module_mentoring_relationship/res',
'src/module_labour_union/res',
'src/module_room_chat/res',
'src/model_customer_server/res',
'src/module_music/res',
'src/module_mini_world/res',
'src/module_lottery_dialog/res',
'src/module_bank_card/res',
'src/module_super_admin/res',
'src/module_treasure_box/res',
'src/module_community/res',
'src/module_album/res',
'src/module_treasure_box/res',
'src/module_public_chat/res',
]
@@ -149,15 +139,12 @@ android {
}
buildTypes {
def server_url_debug = '"http://beta.api.hiyoo.fun/"'
def server_url_release = '"https://api.hiyoo.fun/"'
def server_url_debug = '"http://beta.api.molistar.xyz/"'
def server_url_release = '"https://api.molistar.xyz/"'
debug {
println("minifyEnabled = " + minify_enabled)
// ext.enableCrashlytics = false
// ext.alwaysUpdateBuildId = false // Firebase Crashlytics禁用更新构建ID
buildConfigField "String", "BASE_URL", server_url_debug
buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL"
buildConfigField "String", "BASE_URL_STAGING", "BASE_URL"
@@ -178,10 +165,6 @@ android {
release {
ext.enableCrashlytics = CRASHLYTICS_COLLECTION_ENABLED.toBoolean()
ext.alwaysUpdateBuildId = CRASHLYTICS_COLLECTION_ENABLED.toBoolean()
// firebaseCrashlytics {
// //Firebase Crashlytics控制上传混淆文件开关
// mappingFileUploadEnabled CRASHLYTICS_COLLECTION_ENABLED.toBoolean()
// }
buildConfigField "String", "BASE_URL", server_url_release
buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL"
@@ -275,21 +258,8 @@ dependencies {
implementation 'com.github.mmin18:realtimeblurview:1.2.1'
// implementation 'com.appsflyer:af-android-sdk:6.8.2'
implementation 'com.github.zhpanvip:BannerViewPager:3.5.6'
//fireBase
// implementation platform('com.google.firebase:firebase-bom:31.1.1')
// implementation 'com.google.firebase:firebase-crashlytics-ktx'
// implementation 'com.google.firebase:firebase-analytics-ktx'
//Adjust接入
// implementation 'com.adjust.sdk:adjust-android:4.33.0'
// implementation 'com.android.installreferrer:installreferrer:2.2'
// Add the following if you are using the Adjust SDK inside web views on your app
// implementation 'com.adjust.sdk:adjust-android-webbridge:4.33.0'
implementation 'com.github.yalantis:ucrop:2.2.7'
implementation 'com.github.lihangleo2:ShadowLayout:3.3.2'
@@ -297,19 +267,20 @@ dependencies {
//wheelView
implementation 'com.contrarywind:wheelview:4.1.0'
// implementation 'tech.sud.mgp:SudMGP-static:1.3.3.1158'
implementation project(':modules:module_base')
if (!isolationMode && file("../modules/module_google/build.gradle").exists()) {
implementation project(':modules:module_google')
}
implementation 'tech.sud.mgp:SudMGP-static:1.3.3.1158'
}
channel {
//多渠道包的输出目录默认为new File(project.buildDir,"channel")
outputDir = new File(project.buildDir, "channelapk")
//多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}-${buildTime}
apkNameFormat = 'hiyoo-${buildType}-${flavorName}-v${versionName}-${buildTime}'
apkNameFormat = 'MoliStar-${buildType}-${flavorName}-v${versionName}-${buildTime}'
//快速模式生成渠道包时不进行校验速度可以提升10倍以上默认为false
fastMode = false
//buildTime的时间格式默认格式yyyyMMdd-HHmmss
@@ -324,7 +295,7 @@ aabResGuard {
"*.R.raw.*",
"*.R.drawable.icon"
]
obfuscatedBundleFileName = "duplicated-app.aab" // Obfuscated file name, must end with '.aab'
obfuscatedBundleFileName = "MoliStar-app.aab" // Obfuscated file name, must end with '.aab'
mergeDuplicatedRes = true // Whether to allow the merge of duplicate resources
enableFilterFiles = false // Whether to allow filter files
filterList = [ // file filter rules
@@ -334,7 +305,7 @@ aabResGuard {
enableFilterStrings = false // switch of filter strings
unusedStringPath = file("unused.txt").toPath() // strings will be filtered in this file
languageWhiteList = ["en", "zh"] // keep en,en-xx,zh,zh-xx etc. remove others.
languageWhiteList = ["en", "zh", "ar", "zh-rTW"] // keep en,en-xx,zh,zh-xx etc. remove others.
}
//以下均为非必须
@@ -343,5 +314,675 @@ xmlClassGuard {
//用于增量混淆的 mapping 文件
mappingFile = file("xml-class-mapping.txt")
//更改manifest文件的package属性即包名
packageChange = ["com.chwl.app": "co.ch.a"]
packageChange = ["com.chwl.app": "com.hhchu.molistar",
"com.chwl.core": "com.hhchu.core",
"com.chwl.library": "com.hhchu.library"]
moveDir = [
"com.chwl.app.avroom.game" : "bbecfa.babcfd",
"com.chwl.app.ui.webview.baishun" : "caebbec.bfcfbdf",
"com.chwl.core.public_chat_hall.model" : "aada.dceaa",
"com.chwl.app.avroom.rank" : "edadcb.beeaca",
"com.chwl.app.fansteam" : "eabdedaed.cfeadaacfe",
"com.chwl.core.fansteam" : "adbfd.adeecd",
"com.chwl.app.public_chat.core.viewholder" : "fffa.accee",
"com.chwl.app.public_chat.core" : "fcbdcbf.afaafbac",
"com.chwl.app.public_chat.ui.message.headline" : "dfcfcad.cbcfdcf",
"com.chwl.app.public_chat.ui.message" : "afdf.affbd",
"com.chwl.library.language" : "faceb.abded",
"com.chwl.app.ui.invite" : "cfdd.baac",
"com.chwl.app.ui.link" : "fdb.ddbd",
"com.chwl.app.ui.language" : "cffafe.edafba",
"com.chwl.core.file.cos" : "cccdbdcce.eccffeccb",
"com.chwl.app.notify.views" : "fbbdbcaa.dbfaeadb",
"com.chwl.app.notify" : "eaafaa.edeeef",
"com.chwl.app.support.float" : "eadbfff.eccceee",
"com.chwl.app.avroom.gameplay" : "dfcf.dbdcb",
"com.chwl.app.treasure_box.activity" : "fdbac.cdfab",
"com.chwl.app.treasure_box.adapter" : "febab.bdfcb",
"com.chwl.app.treasure_box.fragment" : "ecbbc.baaada",
"com.chwl.app.treasure_box.module" : "aecae.aeacf",
"com.chwl.app.treasure_box.presenter" : "ddaaee.bacbdcb",
"com.chwl.app.treasure_box.widget" : "bedacc.bbbceb",
"com.chwl.app.treasure_box" : "afccebdddd.ecdedbfcea",
"com.chwl.core.treasure_box.bean" : "eeaaaa.bbedeee",
"com.chwl.core.treasure_box.event" : "dfbfa.edacdb",
"com.chwl.core.treasure_box.model" : "abdf.ebeab",
"com.example.lib_utils.spannable" : "babdfb.baacfc",
"com.example.lib_utils.log" : "cade.bebee",
"com.example.lib_utils.ktx" : "aedbdf.cbfffd",
"com.example.lib_utils" : "edadfda.cbddcda",
"com.soundcloud.crop" : "eccbecc.eefdcbdd",
"com.example.lib_core.component" : "cebecef.abcfbdda",
"com.example.lib_core" : "ffedce.affffdf",
"com.chwl.library.luban" : "cdbffbd.eadcbca",
"com.chwl.library.easyphoto.utils.uri" : "dbbffdafc.aaadcdfcca",
"com.chwl.library.easyphoto.utils.system" : "adb.ffd",
"com.chwl.library.easyphoto.utils.string" : "bebbc.efcaca",
"com.chwl.library.easyphoto.utils.settings" : "defee.eaccbb",
"com.chwl.library.easyphoto.utils.result" : "eecdc.cddbfa",
"com.chwl.library.easyphoto.utils.permission" : "fea.fcef",
"com.chwl.library.easyphoto.utils.media" : "ddddcde.bfececea",
"com.chwl.library.easyphoto.utils.color" : "ddc.cacb",
"com.chwl.library.easyphoto.utils.bitmap" : "fadfc.bcaac",
"com.chwl.library.easyphoto.ui.widget" : "bfafdb.ffeeadd",
"com.chwl.library.easyphoto.ui.dialog" : "fbaaaf.cdadedd",
"com.chwl.library.easyphoto.ui.adapter" : "fcada.cbadea",
"com.chwl.library.easyphoto.ui" : "beefbfb.bffbefaf",
"com.chwl.library.easyphoto.setting" : "edfd.dbfda",
"com.chwl.library.easyphoto.result" : "fddd.dbae",
"com.chwl.library.easyphoto.models.sticker.view" : "bacccfc.abbadfec",
"com.chwl.library.easyphoto.models.sticker.listener" : "edecfbdbb.fbdcbfaaed",
"com.chwl.library.easyphoto.models.sticker.entity" : "bbfeef.fdaefba",
"com.chwl.library.easyphoto.models.sticker.cache" : "cfeefddf.daadadef",
"com.chwl.library.easyphoto.models.sticker" : "eadfab.aaffafa",
"com.chwl.library.easyphoto.models.puzzle.template.straight" : "cbbfdd.fdbaab",
"com.chwl.library.easyphoto.models.puzzle.template.slant" : "fcffbcef.cbefeefa",
"com.chwl.library.easyphoto.models.puzzle.straight" : "bbacbff.ecbddeb",
"com.chwl.library.easyphoto.models.puzzle.slant" : "ebbbf.bfcbc",
"com.chwl.library.easyphoto.models.puzzle" : "afbfbfd.dffbcec",
"com.chwl.library.easyphoto.models.album.entity" : "baf.edaf",
"com.chwl.library.easyphoto.models.album" : "daddbf.cebdcdd",
"com.chwl.library.easyphoto.models.ad" : "adecece.cdedecc",
"com.chwl.library.easyphoto.engine" : "ecadb.effbcc",
"com.chwl.library.easyphoto.constant" : "abcfbde.cefbdbb",
"com.chwl.library.easyphoto.callback" : "acbfefebc.aefecbfea",
"com.chwl.library.easyphoto.builder" : "cccbcd.fabeea",
"com.chwl.library.easyphoto" : "cebee.abfded",
"com.chwl.library.easypermisssion.helper" : "dcbcfd.abebba",
"com.chwl.library.easypermisssion" : "fdecdffb.cbddcdadd",
"com.chwl.library.common.widget" : "dbcccf.adbaeab",
"com.chwl.library.common.util" : "abadefdd.bbdedefbe",
"com.chwl.library.common.transform" : "ddecee.dbeafe",
"com.chwl.library.common.photo" : "bdbbad.cbbefbe",
"com.chwl.library.common.glide" : "faacc.afcba",
"com.chwl.library.common.fragmentation.windowcallback" : "bafbddf.cdcdbdb",
"com.chwl.library.common.fragmentation.queue" : "ffceba.caedfea",
"com.chwl.library.common.fragmentation.internal" : "fcfc.dceae",
"com.chwl.library.common.fragmentation" : "cafcfb.febddef",
"com.chwl.library.common.file" : "cdcdeb.ccfddae",
"com.chwl.library.common.entity" : "acdb.aacb",
"com.chwl.library.common.delegate" : "cbdf.beed",
"com.chwl.library.common.base" : "daebfd.bfaada",
"com.chwl.library.common.application" : "afdbd.ffcebb",
"com.chwl.library.common" : "fede.deddf",
"com.chwl.library.widget.xlist" : "ccbecd.ffdfcdb",
"com.chwl.library.widget.decoration" : "dacceb.bcfbca",
"com.chwl.library.widget" : "eacad.fcafd",
"com.chwl.library.utils.valid" : "eccee.fdbec",
"com.chwl.library.utils.pref" : "aaebaf.edefdcf",
"com.chwl.library.utils.net" : "aadbf.cfabd",
"com.chwl.library.utils.log" : "cdefbea.aedfceec",
"com.chwl.library.utils.keyboard" : "acbbf.ecdbcf",
"com.chwl.library.utils.json" : "cad.dcad",
"com.chwl.library.utils.image" : "ccdabf.fefcfbc",
"com.chwl.library.utils.file" : "cfe.bbdd",
"com.chwl.library.utils.constant" : "fcde.abaf",
"com.chwl.library.utils.config" : "edaaebed.afbeccda",
"com.chwl.library.utils.codec" : "ffbedacf.cadbdefa",
"com.chwl.library.utils.cache" : "beaeed.adcfbd",
"com.chwl.library.utils.asynctask" : "dacf.bbfea",
"com.chwl.library.utils.anim" : "dbcbbd.cbccefa",
"com.chwl.library.utils" : "fdeaee.fddfeca",
"com.chwl.library.threadmgr" : "eddebea.dcbdfbf",
"com.chwl.library.swipeactivity" : "eaacbeb.fddeacad",
"com.chwl.library.softinput" : "ecefea.cfddea",
"com.chwl.library.service" : "efdcc.dfcbe",
"com.chwl.library.rxbus" : "aefdcd.dbadbed",
"com.chwl.library.rx" : "eab.bee",
"com.chwl.library.record" : "dafcbfe.afcdffa",
"com.chwl.library.net.rxnet.utils" : "acfbbb.ceeeab",
"com.chwl.library.net.rxnet.model" : "cefdcae.ecabacf",
"com.chwl.library.net.rxnet.manager" : "fdccbc.fbdadfe",
"com.chwl.library.net.rxnet.interceptor" : "fcce.cbdf",
"com.chwl.library.net.rxnet.https" : "dcdca.eafdc",
"com.chwl.library.net.rxnet.factory" : "afbebbbdb.eafdafcbb",
"com.chwl.library.net.rxnet.exception" : "eeeab.bebfa",
"com.chwl.library.net.rxnet.converter" : "baaccbeb.efccaccde",
"com.chwl.library.net.rxnet.callback" : "dfad.eccaf",
"com.chwl.library.net.rxnet" : "facdef.bbedadd",
"com.chwl.library.manager" : "cbaf.aadf",
"com.chwl.library.list" : "bddaaa.ffeead",
"com.chwl.library.coremanager" : "aadcbecd.fedbababd",
"com.chwl.library.bindinglist" : "afabdcf.feacfbfb",
"com.chwl.library.base.factory" : "ddbfbdf.acbaddc",
"com.chwl.library.base" : "bfba.fcbd",
"com.chwl.library.annatation" : "bcfcaaa.cefecab",
"com.chwl.library.animator" : "acbc.afcdd",
"com.chwl.library.adapters" : "caffe.edbbcd",
"com.chwl.core.upgrade.model" : "cad.abdd",
"com.chwl.core.upgrade.event" : "fffdf.aaaccc",
"com.chwl.core.upgrade.bean" : "aea.baaf",
"com.chwl.core.super_admin.util" : "cacffea.cbcafbe",
"com.chwl.core.super_admin.model.exception" : "cabed.eeaede",
"com.chwl.core.super_admin.model" : "bdbd.affda",
"com.chwl.core.super_admin.bean" : "ddfb.edcab",
"com.chwl.core.super_admin.attachment" : "bfeea.cbedcb",
"com.chwl.core.super_admin" : "cddaaf.ddabfc",
"com.chwl.core.code" : "aeabedb.eebbdcaa",
"com.chwl.core.public_chat_hall.manager" : "cefdad.fefbeef",
"com.chwl.core.public_chat_hall.event" : "ccff.dfccf",
"com.chwl.core.public_chat_hall.bean" : "aeaaa.dedad",
"com.chwl.core.public_chat_hall.attachment" : "fedd.fadb",
"com.chwl.core.music.view" : "dafddd.eecfdad",
"com.chwl.core.music.model" : "ecabcfecb.bafeafaeb",
"com.chwl.core.music.event" : "dbbfcd.fcacbed",
"com.chwl.core.music.db.model" : "dcaac.ddecf",
"com.chwl.core.music.db.dao" : "fafafcea.fbfbbfda",
"com.chwl.core.music.db.converter" : "baf.fac",
"com.chwl.core.music.db.bean" : "acbfad.dcbefe",
"com.chwl.core.music.bean" : "deafc.bebac",
"com.chwl.core.miniworld.model" : "cdcbc.cfbbc",
"com.chwl.core.miniworld.event" : "babacc.becdde",
"com.chwl.core.miniworld.bean" : "ffbe.bdac",
"com.chwl.core.mentoring_relationship.view" : "aadffbfa.fedbaace",
"com.chwl.core.mentoring_relationship.model" : "dfdeb.baabec",
"com.chwl.core.mentoring_relationship.exception" : "beebbbe.debeffc",
"com.chwl.core.mentoring_relationship.event" : "fcaceace.afcfdceb",
"com.chwl.core.mentoring_relationship.bean" : "eaedcce.eebdfabf",
"com.chwl.core.mentoring_relationship.attachment" : "faebfdc.bcbbbbfc",
"com.chwl.core.module_hall.team.event" : "ebfdfe.fcefebd",
"com.chwl.core.module_hall.team.bean" : "edcbb.bcfca",
"com.chwl.core.module_hall.team" : "bbeafe.ffebdfa",
"com.chwl.core.module_hall.secretcode.bean" : "ffdab.eabbd",
"com.chwl.core.module_hall.secretcode" : "eedbec.ffbcbed",
"com.chwl.core.module_hall.income.event" : "bdecee.edfdbad",
"com.chwl.core.module_hall.income.bean" : "fcfc.debbb",
"com.chwl.core.module_hall.income" : "afdaaf.afcbfd",
"com.chwl.core.module_hall.im.bean" : "bfbcaedcbf.fddedfaafe",
"com.chwl.core.module_hall.im" : "fabf.dada",
"com.chwl.core.module_hall.hall.event" : "fdcc.edcba",
"com.chwl.core.module_hall.hall.bean" : "eacfafb.adbcafda",
"com.chwl.core.module_hall.hall" : "bfdade.fbabba",
"com.chwl.core.db" : "dccfb.bfeca",
"com.chwl.core.community.square" : "fbacff.ebfcca",
"com.chwl.core.community.im" : "ddfc.bbcdb",
"com.chwl.core.community.event" : "baaeac.edbfbcd",
"com.chwl.core.community.dynamic" : "abdce.bdebca",
"com.chwl.core.community.bean.comment" : "aedfcaaf.cdfbbcce",
"com.chwl.core.community.bean" : "bbcf.abac",
"com.chwl.core.community.attachment" : "ceebd.fefcbb",
"com.chwl.core.community" : "fcefbba.abbefae",
"com.chwl.core.channel_page.model" : "eed.bae",
"com.chwl.core.channel_page.bean" : "edfea.cddcb",
"com.chwl.core.bank_card.view" : "fbefdfd.fecfadeb",
"com.chwl.core.bank_card.model" : "afdeac.aecbbce",
"com.chwl.core.bank_card.exception" : "dccfcc.cbdaacd",
"com.chwl.core.bank_card.bean" : "ccaad.bddfa",
"com.chwl.core.withdraw.bean" : "aaffcba.daeefdac",
"com.chwl.core.web.event" : "ecefca.fecfafc",
"com.chwl.core.web.bean" : "cbcdae.acdabfe",
"com.chwl.core.vip.bean" : "eedbaeb.defbdfae",
"com.chwl.core.vip" : "bfcdb.eeabef",
"com.chwl.core.utils.net" : "dadebe.fbcfaa",
"com.chwl.core.utils.extension" : "aeef.afaa",
"com.chwl.core.utils" : "eafcbdd.abaeccf",
"com.chwl.core.user.event" : "ffbae.efabfb",
"com.chwl.core.user.bean" : "cfeddda.aafffbc",
"com.chwl.core.user" : "afacaed.bbaefab",
"com.chwl.core.treasurefairy.bean" : "eaffcdbc.daeffdba",
"com.chwl.core.treasurefairy" : "bcdefdc.efbefada",
"com.chwl.core.team.model" : "eefedae.dfccaca",
"com.chwl.core.team.bean" : "bfbdcd.fafefd",
"com.chwl.core.support.room.lifecycle.rx" : "defdaecac.ccedeecec",
"com.chwl.core.support.room.lifecycle" : "afcfafa.dffefaa",
"com.chwl.core.support.room" : "ddaddaf.fccabdf",
"com.chwl.core.support.config" : "cfacaac.feafadc",
"com.chwl.core.statistic.protocol" : "ccefcc.aecaac",
"com.chwl.core.statistic" : "dbdef.bfdea",
"com.chwl.core.sound.model" : "beffe.abfeac",
"com.chwl.core.skill.event" : "edaba.ddedb",
"com.chwl.core.skill.entity" : "bacfcf.dddbef",
"com.chwl.core.share.bean" : "aceac.ecabfe",
"com.chwl.core.settings.bean" : "cdccdab.ebdbacb",
"com.chwl.core.settings" : "adcfbfced.fadbfddca",
"com.chwl.core.set.model" : "efcb.ccac",
"com.chwl.core.set.bean" : "bababbc.cecaffca",
"com.chwl.core.room.treasure_box.event" : "fdccbea.eacbffe",
"com.chwl.core.room.treasure_box.bean" : "edbce.fdbbbc",
"com.chwl.core.room.recommendpos.bean" : "dfaabac.aabbefcc",
"com.chwl.core.room.recommendpos" : "ffbadbcda.dfdcbffdf",
"com.chwl.core.room.queuing_mic.event" : "abfbcbe.bceaabda",
"com.chwl.core.room.queuing_mic.bean" : "edccdc.abfbfcc",
"com.chwl.core.room.queuing_mic.attachment" : "eabbdce.ecdbefc",
"com.chwl.core.room.queue.bean" : "eebfd.aaccca",
"com.chwl.core.room.pk.model" : "acefeab.bddecfb",
"com.chwl.core.room.pk.event" : "fbbefcc.efafcfb",
"com.chwl.core.room.pk.bean.response" : "ecaed.eebace",
"com.chwl.core.room.pk.bean.request" : "cfeee.cdeea",
"com.chwl.core.room.pk.bean" : "afb.eaca",
"com.chwl.core.room.pk.attachment" : "cdd.cfde",
"com.chwl.core.room.model.inteface" : "bfcaceb.eaaeaae",
"com.chwl.core.room.model" : "bdefe.abaefa",
"com.chwl.core.room.giftvalue.helper" : "ffaaa.aceba",
"com.chwl.core.room.giftvalue.bean" : "bdebccd.fbfaecdb",
"com.chwl.core.room.giftvalue" : "caeb.acffa",
"com.chwl.core.room.game.bean" : "eacfafb.aadfdcee",
"com.chwl.core.room.game" : "acecfafb.cdacfdabe",
"com.chwl.core.room.face" : "cfcefbebdc.fecabacfcb",
"com.chwl.core.room.exception" : "baebbfcb.debebcfe",
"com.chwl.core.room.event" : "afdece.ecaeae",
"com.chwl.core.room.dragonball" : "adbbbaa.bcccfdf",
"com.chwl.core.room.core" : "efddaaf.aaabbfcd",
"com.chwl.core.room.bean" : "bceba.bbfce",
"com.chwl.core.room.auction.bean" : "fddadcc.fbdbaaa",
"com.chwl.core.room.auction" : "bacebdb.bceeffa",
"com.chwl.core.room.anotherroompk" : "edbcdb.efbadd",
"com.chwl.core.room.activitytimer" : "adabddff.ccfdcfbd",
"com.chwl.core.room" : "fcea.defb",
"com.chwl.core.retry" : "dbee.cafae",
"com.chwl.core.relation.cp.bean" : "bdabfb.aecccbc",
"com.chwl.core.relation.cp" : "caedeb.abacfbc",
"com.chwl.core.redpackage.bean" : "edbaad.bbdcdfc",
"com.chwl.core.redpackage" : "bcc.ffd",
"com.chwl.core.redPacket.event" : "efcdfd.fdfbcae",
"com.chwl.core.redPacket.bean" : "acdfe.ebeaed",
"com.chwl.core.redPacket" : "edfebe.eebcfad",
"com.chwl.core.recall.event" : "eebebe.eeeacfa",
"com.chwl.core.recall.bean" : "fabffdc.ffcdadbe",
"com.chwl.core.recall" : "cbdac.cadea",
"com.chwl.core.realm" : "bdbdef.cffbbf",
"com.chwl.core.radish.task.bean" : "abbefdab.daeaadad",
"com.chwl.core.radish.task" : "bbedaaf.fbdfcce",
"com.chwl.core.radish.signin.bean" : "def.cff",
"com.chwl.core.radish.signin" : "ecabbcaca.eddcdecfe",
"com.chwl.core.radish.event" : "cdfaedb.eecdebad",
"com.chwl.core.radish" : "fdbeeb.eddbbaf",
"com.chwl.core.praise.event" : "fdddf.ceacfd",
"com.chwl.core.praise" : "becbbbfc.beafebfff",
"com.chwl.core.pay.event" : "dbdfe.efdce",
"com.chwl.core.pay.bean" : "fbefaae.fddefebe",
"com.chwl.core.pay" : "eefbfb.ccdcdeb",
"com.chwl.core.patriarch.exception" : "bbcdfae.eddfdbfe",
"com.chwl.core.patriarch.event" : "eabff.eccdc",
"com.chwl.core.patriarch.bean" : "fbdfcae.fefbfee",
"com.chwl.core.noble.bean" : "dfefd.bacabc",
"com.chwl.core.noble" : "fdfb.adfec",
"com.chwl.core.newbie.event" : "facdeeb.fbeaaff",
"com.chwl.core.newbie.bean" : "ffedae.acfcdbb",
"com.chwl.core.msg.sysv2.bean" : "ddeeb.bdcdf",
"com.chwl.core.msg.sysv2" : "accaef.bfedba",
"com.chwl.core.msg.sys.bean" : "dcabc.bbdaea",
"com.chwl.core.msg.sys" : "ecdbfa.bedeee",
"com.chwl.core.msg" : "bafbfed.efeeebd",
"com.chwl.core.monsterhunting.rxevent" : "dfafbbe.afcbecce",
"com.chwl.core.monsterhunting.model" : "eabaaa.afcbcd",
"com.chwl.core.monsterhunting.manager" : "bdabaef.eaeccdc",
"com.chwl.core.monsterhunting.bean" : "adbaee.fffffc",
"com.chwl.core.monsterhunting" : "dddbd.cecfcf",
"com.chwl.core.market_verify.event" : "bedbcf.ffcdfb",
"com.chwl.core.market_verify.bean" : "fffba.cdbfee",
"com.chwl.core.market_verify" : "ecddaa.decfae",
"com.chwl.core.manager.trtc" : "cdffbe.cfbefa",
"com.chwl.core.manager.event" : "ebeccadeab.daaebfafbc",
"com.chwl.core.manager.agora" : "bdfbed.baaadfc",
"com.chwl.core.manager" : "eada.dedbf",
"com.chwl.core.magic.toolbox" : "feaabe.faacdb",
"com.chwl.core.magic.exception" : "bdc.dbdc",
"com.chwl.core.magic.bean" : "cbeee.efcdfb",
"com.chwl.core.magic" : "effdcba.daeaeedf",
"com.chwl.core.luckymoney.bean" : "cdaabd.cfabfca",
"com.chwl.core.linked.event" : "dccdeb.adfceff",
"com.chwl.core.linked.bean" : "dbeef.acefca",
"com.chwl.core.linked" : "dfcbeac.affedbe",
"com.chwl.core.level.event" : "ecbafad.dceddabe",
"com.chwl.core.level" : "eeaeecb.efdafbdc",
"com.chwl.core.kick" : "fccbdc.febfaf",
"com.chwl.core.interceptor" : "abeb.bdbf",
"com.chwl.core.initial.bean" : "edbabbab.acdccacc",
"com.chwl.core.initial" : "dfbcef.ddbeede",
"com.chwl.core.im.sysmsg" : "cdfe.ddaf",
"com.chwl.core.im.state" : "ddcefccc.baeddeeec",
"com.chwl.core.im.room" : "efafb.cccabc",
"com.chwl.core.im.notification" : "cbace.fedfba",
"com.chwl.core.im.login" : "febec.facfc",
"com.chwl.core.im.friend" : "ea.ea",
"com.chwl.core.im.custom.bean" : "dedfdbd.ebffbcba",
"com.chwl.core.im.custom" : "ccfbca.bcccebd",
"com.chwl.core.im.chatterbox.bean" : "dfdefbe.fedadcf",
"com.chwl.core.im.chatterbox" : "ffdffe.ccecbfc",
"com.chwl.core.im.avroom" : "bcafa.eadbc",
"com.chwl.core.im" : "dffa.ebaa",
"com.chwl.core.home.model" : "ffdbfa.ddcfcea",
"com.chwl.core.home.event" : "dfbbd.cefeaf",
"com.chwl.core.home.bean" : "accd.bbdff",
"com.chwl.core.home" : "bccfeaf.fbdedea",
"com.chwl.core.helper" : "fcddab.afabccd",
"com.chwl.core.gift.toolbox" : "bcbed.ffcdaf",
"com.chwl.core.gift.exception" : "beccc.cccee",
"com.chwl.core.gift.event" : "ccde.faea",
"com.chwl.core.gift.bean" : "ebbffdf.beebece",
"com.chwl.core.gift" : "dbbcc.dbceee",
"com.chwl.core.file" : "ccafedb.bddaadf",
"com.chwl.core.fansteam.bean" : "fcfdaa.edabfab",
"com.chwl.core.fansteam" : "adbfd.adeecd",
"com.chwl.core.family.model" : "bbcedbab.caaefbfb",
"com.chwl.core.family.event" : "efa.edde",
"com.chwl.core.family.bean.response.moneyManagement" : "afbba.abdcd",
"com.chwl.core.family.bean.response.memberList" : "dbcce.ecaeff",
"com.chwl.core.family.bean.response.familyPlaza" : "fbbcdb.ddfadba",
"com.chwl.core.family.bean.response" : "bbecb.daedaf",
"com.chwl.core.family.bean" : "cdade.adeda",
"com.chwl.core.exception" : "eeceaead.ceacebbe",
"com.chwl.core.earn.model" : "ffebb.edbcaf",
"com.chwl.core.earn.bean" : "bbcabbb.dcabfcd",
"com.chwl.core.decoration.nameplate.bean" : "cfadf.caddb",
"com.chwl.core.decoration.nameplate" : "cbddeb.bebdcc",
"com.chwl.core.decoration.headwear.throwable" : "bebcb.aefce",
"com.chwl.core.decoration.headwear.bean" : "bdbabbdc.ffafceeac",
"com.chwl.core.decoration.headwear" : "cbcebdb.bdebbebd",
"com.chwl.core.decoration.car.bean" : "ccbd.abca",
"com.chwl.core.decoration.car" : "ebdefd.befcae",
"com.chwl.core.decoration.bean" : "fbeebae.ebcadebe",
"com.chwl.core.decoration.backgroud.bean" : "aaecbd.bfafacd",
"com.chwl.core.decoration.backgroud" : "ecabbc.ccafec",
"com.chwl.core.decoration" : "babeeeb.ecbaceee",
"com.chwl.core.contacts" : "becea.cccca",
"com.chwl.core.community" : "fcefbba.abbefae",
"com.chwl.core.channel" : "ccb.fcf",
"com.chwl.core.certification.event" : "ceecd.bebccf",
"com.chwl.core.certification" : "fafbaf.febcecf",
"com.chwl.core.bills.result" : "defceb.bddedaa",
"com.chwl.core.bills.bean" : "fcef.caffe",
"com.chwl.core.bills" : "ebcfbec.defbbcbc",
"com.chwl.core.bean.response.result" : "decd.efffc",
"com.chwl.core.bean.response" : "cdfaac.caaeba",
"com.chwl.core.bean.attachmsg" : "fdab.dbaad",
"com.chwl.core.bean" : "dbcdb.edafab",
"com.chwl.core.base" : "eadbead.cefeacdf",
"com.chwl.core.auth.exception" : "bfcced.baedbeb",
"com.chwl.core.auth.event" : "ddcbacef.ebcaacba",
"com.chwl.core.auth.entity" : "cfeaf.ddccec",
"com.chwl.core.auth" : "debfc.deefa",
"com.chwl.core.audio.event" : "edfdda.fdabdf",
"com.chwl.core.audio.bean" : "feacbcff.edcaafbbb",
"com.chwl.core.audio" : "eeaca.ebabbb",
"com.chwl.core.association.model" : "eacfeca.adcbbfa",
"com.chwl.core.association.bean" : "ebdeaeb.dbccefdb",
"com.chwl.core.activity.model" : "debbcfdb.edbdfdeaf",
"com.chwl.core.activity.event" : "cfaafeb.ffdedef",
"com.chwl.core.activity.bean" : "feacdf.cefdbd",
"com.chwl.core" : "dddeaae.cfddfded",
"com.chwl.app.sadmin.utils" : "cccafa.feaeab",
"com.chwl.app.sadmin" : "accdab.baeeaee",
"com.chwl.app.room_chat.utils" : "ebdddaa.feeeabb",
"com.chwl.app.room_chat.fragment" : "afeccfe.dcfbfca",
"com.chwl.app.room_chat.event" : "cebb.fcbd",
"com.chwl.app.room_chat.adapter" : "baad.cfcfa",
"com.chwl.app.room_chat.activity" : "eaaadcc.ebdbede",
"com.chwl.app.room_chat" : "cdfaf.eceabb",
"com.chwl.app.music.widget" : "fadfedef.abeacebff",
"com.chwl.app.music.presenter" : "cdfa.baab",
"com.chwl.app.music.fragment" : "edfcdf.aabfdc",
"com.chwl.app.music.adapter" : "fadcdbbe.cebcdaae",
"com.chwl.app.music.activity" : "baddf.dbacfa",
"com.chwl.app.module_hall.viewmodel" : "fddae.dbafab",
"com.chwl.app.module_hall.team.view.widget" : "fecfabd.ffecdfb",
"com.chwl.app.module_hall.team.view" : "fead.fecfb",
"com.chwl.app.module_hall.team.presenter" : "edbfcf.eddebd",
"com.chwl.app.module_hall.team.adapter" : "dceeca.cabfcb",
"com.chwl.app.module_hall.team.activity" : "bdefdae.dbdbbbeb",
"com.chwl.app.module_hall.team" : "acfaacfd.aaddcbfed",
"com.chwl.app.module_hall.secretcode" : "eaafad.ebbdfca",
"com.chwl.app.module_hall.income.view" : "eefbddf.bebcebcf",
"com.chwl.app.module_hall.income.presenter" : "afbba.afcffb",
"com.chwl.app.module_hall.income.adapter" : "eabcac.bebbec",
"com.chwl.app.module_hall.income" : "acaede.cfecbe",
"com.chwl.app.module_hall.im.msgholder" : "decfc.acfca",
"com.chwl.app.module_hall.im.dialog" : "caca.dcdfa",
"com.chwl.app.module_hall.im" : "ebfceeb.dcaaedfe",
"com.chwl.app.module_hall.hall.view.indicator" : "bcdebe.cceeae",
"com.chwl.app.module_hall.hall.view.dialog" : "beffcef.ddaebdd",
"com.chwl.app.module_hall.hall.view" : "efbe.ccbe",
"com.chwl.app.module_hall.hall.presenter" : "bbebecb.bdacbefa",
"com.chwl.app.module_hall.hall.fragment" : "dffdae.dbaeadb",
"com.chwl.app.module_hall.hall.adapter" : "badadbfc.feddfdcae",
"com.chwl.app.module_hall.hall.activity" : "bdcdd.aaccc",
"com.chwl.app.module_hall" : "aedebf.dbedcab",
"com.chwl.app.bank_card.presenter" : "fcefbfa.bbabedeb",
"com.chwl.app.bank_card.adapter" : "ecdae.feffda",
"com.chwl.app.bank_card.activity" : "baaebb.adacabb",
"com.chwl.app.bank_card" : "afdfbbee.acccbcafe",
"com.example.matisse.widget" : "fafdc.ccdcea",
"com.example.matisse.ui" : "bddeecdf.daebcbca",
"com.example.matisse.listener" : "fdeec.edddcc",
"com.example.matisse.internal.utils" : "daadd.dccbda",
"com.example.matisse.internal.ui.widget" : "feebb.dcbfa",
"com.example.matisse.internal.ui.adapter" : "dcaaa.cabef",
"com.example.matisse.internal.ui" : "cabaff.aababab",
"com.example.matisse.internal.model" : "cdadc.cccccd",
"com.example.matisse.internal.loader" : "bcbcac.cfecdb",
"com.example.matisse.internal.entity" : "fecfdeeae.aefaabccf",
"com.example.matisse.filter" : "aabfe.eacfa",
"com.example.matisse.engine.impl" : "debe.ddbed",
"com.example.matisse.engine" : "bfcfa.aabec",
"com.example.matisse" : "badbf.fadfea",
"com.jph.takephoto.uitl" : "fbbaffa.faecdbe",
"com.jph.takephoto.permission" : "accbfce.fccdabb",
"com.jph.takephoto.model" : "afbfaa.afcdcd",
"com.jph.takephoto.compress" : "aecbcaf.acdbabae",
"com.jph.takephoto.app" : "edeebee.fefabfb",
"com.chwl.app.vip.view" : "ecad.baecf",
"com.chwl.app.vip.util" : "bcfe.ccaa",
"com.chwl.app.vip.dialog" : "cafded.caafcba",
"com.chwl.app.vip.bean" : "efbbc.adeda",
"com.chwl.app.vip.adapter" : "dceeffbc.eaffbcfd",
"com.chwl.app.vip" : "abaeec.bdedac",
"com.chwl.app.view.layoutmanager" : "fabcc.cffdbf",
"com.chwl.app.view" : "cabdb.accfda",
"com.chwl.app.utils" : "bcead.dfdbfb",
"com.chwl.app.ui.widget.viewpager" : "cbffcedc.ceeebada",
"com.chwl.app.ui.widget.rollviewpager.hintview" : "eedaced.ccaeddd",
"com.chwl.app.ui.widget.rollviewpager.adapter" : "bdeeebd.aaacacf",
"com.chwl.app.ui.widget.rollviewpager" : "ebffacb.ecccaaf",
"com.chwl.app.ui.widget.recyclerview.layoutmanager" : "faffb.bbcdba",
"com.chwl.app.ui.widget.recyclerview.decoration" : "afbbfef.dbebefb",
"com.chwl.app.ui.widget.password" : "cdbdc.cfcdde",
"com.chwl.app.ui.widget.marqueeview" : "fe.cff",
"com.chwl.app.ui.widget.magicindicator.ext" : "edcebdc.abcdfda",
"com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.titles.badge" : "aefeb.bfcdf",
"com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.titles" : "eacbbaf.edaceeb",
"com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.model" : "afcebbb.bcbbaba",
"com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators" : "ddede.cbafa",
"com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs" : "aebeae.dcddcfc",
"com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator" : "acab.aaea",
"com.chwl.app.ui.widget.magicindicator.buildins.circlenavigator" : "acdcf.aecead",
"com.chwl.app.ui.widget.magicindicator.buildins" : "eaeaabd.ccbaeabc",
"com.chwl.app.ui.widget.magicindicator.abs" : "beeadefa.cffedbfa",
"com.chwl.app.ui.widget.magicindicator" : "deecdc.cefebd",
"com.chwl.app.ui.widget.interfacex" : "afef.cbfae",
"com.chwl.app.ui.widget.higuide" : "cfc.cefd",
"com.chwl.app.ui.widget.dynamicface" : "bacace.febaea",
"com.chwl.app.ui.widget.drawgift" : "cae.cbb",
"com.chwl.app.ui.widget.dialog" : "bccfaa.eeedea",
"com.chwl.app.ui.widget.bubble" : "fccea.caeaa",
"com.chwl.app.ui.widget.XRecyclerView" : "cff.dfb",
"com.chwl.app.ui.widget" : "efaded.babadae",
"com.chwl.app.ui.webview.room_banner" : "cada.eecbe",
"com.chwl.app.ui.webview.event" : "ffbbb.ceebbb",
"com.chwl.app.ui.webview" : "aaadff.eebecc",
"com.chwl.app.ui.wallet.adapter" : "deccfe.bcbbbe",
"com.chwl.app.ui.utils.sys" : "dfcdebe.adfefffe",
"com.chwl.app.ui.utils" : "dcbeeada.dfeedeab",
"com.chwl.app.ui.user.viewmodel" : "fafab.bedbf",
"com.chwl.app.ui.user.fragment" : "dcbf.bdefe",
"com.chwl.app.ui.user.event" : "feea.afda",
"com.chwl.app.ui.user.dialog" : "feeaaf.cdbbab",
"com.chwl.app.ui.user.decorationsend" : "abfbeaad.badffeebd",
"com.chwl.app.ui.user.adapter" : "bbdbd.acccbd",
"com.chwl.app.ui.user.activity" : "cbce.cfaac",
"com.chwl.app.ui.setting.viewmodel" : "bfafaedcc.fbdbadacae",
"com.chwl.app.ui.setting.bean" : "bccd.dddee",
"com.chwl.app.ui.setting.adapter" : "ffcaca.fbfaafc",
"com.chwl.app.ui.setting" : "ecaccbb.beccadff",
"com.chwl.app.ui.search.view" : "fdbeb.deffd",
"com.chwl.app.ui.search.presenter" : "adcae.bcfdca",
"com.chwl.app.ui.search.event" : "acfa.ffcb",
"com.chwl.app.ui.search" : "ddbffcaa.ffbccbbe",
"com.chwl.app.ui.relation.adapter" : "fdcecaf.eabaeaef",
"com.chwl.app.ui.relation" : "bedfeb.eeedcfb",
"com.chwl.app.ui.radish" : "ffbac.dfaec",
"com.chwl.app.ui.praise.base" : "eacffed.bfaeded",
"com.chwl.app.ui.praise" : "cdcbd.fbecf",
"com.chwl.app.ui.pay" : "eaddab.fdfdafb",
"com.chwl.app.ui.patriarch.help" : "dfcbd.cdcfcc",
"com.chwl.app.ui.patriarch" : "dfdeaddb.dbbdcaee",
"com.chwl.app.ui.login.ui" : "aaadcea.bdbfdaba",
"com.chwl.app.ui.login.helper" : "defefbb.cbfaccae",
"com.chwl.app.ui.login.fragment" : "dcfb.bfdce",
"com.chwl.app.ui.login" : "fbdb.abea",
"com.chwl.app.ui.list" : "afbeccf.eeadfbf",
"com.chwl.app.ui.keepalive" : "aabffd.fbaccfa",
"com.chwl.app.ui.indicator_impl" : "cead.ddea",
"com.chwl.app.ui.im.recent.holder" : "bdcb.eedb",
"com.chwl.app.ui.im.recent.adapter" : "eeefed.becfad",
"com.chwl.app.ui.im.recent" : "dfaebff.aabdecc",
"com.chwl.app.ui.im.model" : "cbafae.dbecfdc",
"com.chwl.app.ui.im.friend" : "dbecb.ccfcda",
"com.chwl.app.ui.im.fragment" : "fcfffef.cdaaffee",
"com.chwl.app.ui.im.chat" : "cddcabe.afbdedeb",
"com.chwl.app.ui.im.avtivity" : "bebec.afdec",
"com.chwl.app.ui.im.audio" : "accfdc.cdcbfac",
"com.chwl.app.ui.im.actions" : "feefed.becfccf",
"com.chwl.app.ui.im" : "beafbfbeb.dedfbbdbcb",
"com.chwl.app.ui.gift.widget" : "bfaeacf.aabcdbfa",
"com.chwl.app.ui.gift.util" : "deacecd.addbcee",
"com.chwl.app.ui.gift.gif" : "befcb.affcf",
"com.chwl.app.ui.gift.dialog" : "dccddf.bfcedeb",
"com.chwl.app.ui.gift.callback" : "dceed.febbe",
"com.chwl.app.ui.gift.adapter" : "eceedadb.dcfbbfdec",
"com.chwl.app.ui.behavior" : "ccdfda.debfad",
"com.chwl.app.ui.bean" : "faafdf.cefbbcb",
"com.chwl.app.ui.anim" : "bacee.daccf",
"com.chwl.app.ui.adapter" : "bdbce.adbdfc",
"com.chwl.app.team.viewmodel" : "bfeace.ffbefff",
"com.chwl.app.team.view" : "caead.eedace",
"com.chwl.app.team.event" : "cacdecf.ddebcbd",
"com.chwl.app.team.dialog" : "fdfcfc.aafcdc",
"com.chwl.app.team.bean" : "fcebb.eebee",
"com.chwl.app.team.adapter" : "bfddccfa.eadeaddae",
"com.chwl.app.sys" : "cbebab.dacbed",
"com.chwl.app.support" : "bdbeedc.fcdfcfa",
"com.chwl.app.star" : "bffcec.cebfbb",
"com.chwl.app.skill.widget" : "daeec.fdbbfb",
"com.chwl.app.skill.repository" : "bbcdaeca.dcfbfcfbe",
"com.chwl.app.skill.dialog" : "aedad.fefbab",
"com.chwl.app.skill.decoration" : "bbeee.feabad",
"com.chwl.app.skill.adapter" : "eeababfbe.accdfbdbd",
"com.chwl.app.skill.activity" : "ebceceb.facbeebc",
"com.chwl.app.skill" : "bfbacc.eabfde",
"com.chwl.app.share.viewholder" : "dcdaef.bbcdfa",
"com.chwl.app.share" : "bad.fabf",
"com.chwl.app.service" : "ddacadb.abafdaa",
"com.chwl.app.relation.extention" : "caedcc.deceffc",
"com.chwl.app.relation.cp.widget" : "cefecca.adfcdaf",
"com.chwl.app.relation.cp.viewmodel" : "bcabafedc.ccbfeeada",
"com.chwl.app.relation.cp.model" : "ccfafe.fbdbaec",
"com.chwl.app.relation.cp.fragment" : "bceb.dadfb",
"com.chwl.app.relation.cp.dialog" : "fbceea.cefbefb",
"com.chwl.app.relation.cp.adapter" : "abccbf.eaacbd",
"com.chwl.app.relation.cp.activity" : "efaeff.aececca",
"com.chwl.app.relation.cp" : "eabafed.efacabe",
"com.chwl.app.reciever" : "cca.cba",
"com.chwl.app.radish.widget" : "ffbea.aaddd",
"com.chwl.app.radish.wallet" : "efeedaeccc.cfcaeacafa",
"com.chwl.app.radish.view" : "becee.bcfeee",
"com.chwl.app.radish.task.view" : "faaee.afbce",
"com.chwl.app.radish.task.presenter" : "faedd.eecbcd",
"com.chwl.app.radish.task.fragment" : "abfacfbc.deefaddda",
"com.chwl.app.radish.task.adpter" : "bbdadbc.bcdcddbc",
"com.chwl.app.radish.task.activity" : "dceccff.aafdfebc",
"com.chwl.app.radish.presenter" : "acaecc.eaeddf",
"com.chwl.app.radish.helper" : "faaeb.fffedc",
"com.chwl.app.radish.adapter" : "fcfbbe.ddeecf",
"com.chwl.app.radish.activity" : "bdfffab.dffcdfbf",
"com.chwl.app.photo" : "eecccd.bfdbfcc",
"com.chwl.app.pay.view" : "eacfaa.fbeaac",
"com.chwl.app.pay.presenter" : "afceab.feabbff",
"com.chwl.app.other.view" : "ddacd.cdbfca",
"com.chwl.app.other.present" : "bbddcabe.bebbbdae",
"com.chwl.app.other.dialog" : "cedb.bdeeb",
"com.chwl.app.other.activity" : "e.ba",
"com.chwl.app.other" : "faedfe.fabffda",
"com.chwl.app.monsterhunting.bean" : "cedec.faddde",
"com.chwl.app.monsterhunting" : "fbabff.dbfeac",
"com.chwl.app.module" : "efdfeaf.efcddef",
"com.chwl.app.luckymoney.viewholder" : "dfedf.eedab",
"com.chwl.app.luckymoney.view" : "ddaddcd.caccbde",
"com.chwl.app.luckymoney.dialog" : "ffecde.ebbcfef",
"com.chwl.app.luckymoney.adapter" : "efeefc.eccdbf",
"com.chwl.app.home.widget" : "dfaafb.fcdcae",
"com.chwl.app.home.view" : "edfeb.efbcb",
"com.chwl.app.home.refresh" : "cfadbacde.cfaedfcccf",
"com.chwl.app.home.presenter" : "bdfece.fbefff",
"com.chwl.app.home.helper" : "fadcf.dfbdfa",
"com.chwl.app.home.fragment" : "beffafaea.aaccfbeab",
"com.chwl.app.home.event" : "aadff.cfbdd",
"com.chwl.app.home.dialog" : "bfbfb.ccacbc",
"com.chwl.app.home.adapter" : "dcaaa.bacefa",
"com.chwl.app.home.activity" : "cbafdaea.dabbbcef",
"com.chwl.app.home" : "facc.ffdec",
"com.chwl.app.guide" : "bafbbace.feffabda",
"com.chwl.app.friend.view" : "dabb.cedce",
"com.chwl.app.friend.action" : "deeead.dfedfad",
"com.chwl.app.friend" : "bfddd.dfdef",
"com.chwl.app.fansteam" : "eabdedaed.cfeadaacfe",
"com.chwl.app.event" : "bdff.bafcc",
"com.chwl.app.earn.adapter" : "dbddedf.cecfafa",
"com.chwl.app.earn.activity" : "aedee.bcdadb",
"com.chwl.app.earn" : "ffdbec.afddefd",
"com.chwl.app.decoration.viewmodel" : "dccaca.cbaaeea",
"com.chwl.app.decoration.view.widgets" : "dafde.edfde",
"com.chwl.app.decoration.view" : "affeefb.cddaaab",
"com.chwl.app.decoration.helper" : "bdbfa.aeccba",
"com.chwl.app.decoration.adapter" : "ebbd.edae",
"com.chwl.app.constants" : "ddeeea.cbabbd",
"com.chwl.app.common.widget.dialog" : "adbbdfcb.abacbeeb",
"com.chwl.app.common.widget" : "cdcbfd.cdcdaad",
"com.chwl.app.common.util" : "bcaabadbafe.cbdddabbbcfd",
"com.chwl.app.common.svga" : "dedde.effdb",
"com.chwl.app.common.server" : "abbadac.adcefdc",
"com.chwl.app.common.photo" : "bceefea.bcefcab",
"com.chwl.app.common.permission" : "acfda.dfeeab",
"com.chwl.app.common.dialog" : "deaeba.ffcaae",
"com.chwl.app.common.app" : "dbcedb.cccffe",
"com.chwl.app.common" : "cbaca.adadbb",
"com.chwl.app.bindadapter" : "bacefd.cdbedf",
"com.chwl.app.bills.widget" : "cdcfbd.fcadcaa",
"com.chwl.app.bills.view" : "cda.aedf",
"com.chwl.app.bills.presenter" : "bcbdbd.cfaccfd",
"com.chwl.app.bills.fragmemt" : "baffeb.dedcfc",
"com.chwl.app.bills.event" : "bdacea.effdae",
"com.chwl.app.bills.adapter" : "dffcceeb.cfbbbddde",
"com.chwl.app.bills.activities" : "ffaf.eadaa",
"com.chwl.app.base.list" : "dffcde.efbadaa",
"com.chwl.app.base" : "aedbb.fbfebd",
"com.chwl.app.avroom.widget" : "caeddfb.efcaeecd",
"com.chwl.app.avroom.view" : "bbaff.dbaabe",
"com.chwl.app.avroom.singleroompk" : "bbadb.dbabde",
"com.chwl.app.avroom.room_album" : "fffc.cdafe",
"com.chwl.app.avroom.recommendcard" : "aaefc.cffadd",
"com.chwl.app.avroom.rank" : "edadcb.beeaca",
"com.chwl.app.avroom.presenter" : "dddee.cfdea",
"com.chwl.app.avroom.newuserchargegift" : "bbfcc.bdbbb",
"com.chwl.app.avroom.helper" : "bcfbb.dffeae",
"com.chwl.app.avroom.giftvalue" : "acfcd.fbbcdd",
"com.chwl.app.avroom.fragment" : "beefbb.fbcafec",
"com.chwl.app.avroom.dialog" : "abbcea.ceadbc",
"com.chwl.app.avroom.core" : "fbebb.bdbebf",
"com.chwl.app.avroom.bean" : "affae.fcdff",
"com.chwl.app.avroom.anotherroompk" : "bbdba.edbbe",
"com.chwl.app.avroom.adapter" : "bffc.bbcd",
"com.chwl.app.avroom.activity" : "dccdfed.ccdfdde",
"com.chwl.app.avroom" : "bfedffaa.adfffbef",
"com.chwl.app.audio.widget" : "bfcafa.fbbfdb",
"com.chwl.app.audio.viewmodel" : "bdfe.bfccf",
"com.chwl.app.audio.view" : "abdfdcc.bbcaebb",
"com.chwl.app.audio.presenter" : "aeef.cbbaf",
"com.chwl.app.audio.helper" : "cfeb.ebade",
"com.chwl.app.audio.adapter" : "ddeceecf.dddcbccf",
"com.chwl.app.audio" : "cdedecf.fbddecef",
"com.chwl.app.application" : "cfd.ccae",
"com.chwl.app" : "cfdd.baac",
]
}

158
app/proguard-rules.pro vendored
View File

@@ -481,4 +481,160 @@
-keep public class com.alibaba.android.arouter.routes.**{*;}
-keep public class com.alibaba.android.arouter.facade.**{*;}
-keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;}
-keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;}
#new after proguard
-dontwarn bdcb.eedb.**
-keep class bdcb.eedb.** {*;}
-keep class cddcabe.afbdedeb.** {*;}
-keep class dfedf.eedab.** {*;}
-keep class dcdaef.bbcdfa.** {*;}
-keep class com.chwl.app.public_chat_hall.msg.viewholder.** {*;}
-keep class decfc.acfca.** {*;}
-keep class com.chwl.app.mentoring_relationship.viewholder.** {*;}
-keep class b.** { *; }
-keep class cb.** { *; }
-keep public class * extends b.NP
-keep public class * extends ddbfbdf.acbaddc.AbstractMvpPresenter
-dontwarn bacefd.cdbedf.**
-keep class bacefd.cdbedf.** {*;}
-keep class f.DG{*;}
-keep class bf.CA{*;}
-keep class q.Y {*;}
-keep class bacccfc.abbadfec.** { *; }
-keep class edecfbdbb.fbdcbfaaed.** { *; }
-keep class bbfeef.fdaefba.** { *; }
-keep class cfeefddf.daadadef.** { *; }
-keep class eadfab.aaffafa.** { *; }
-keep class cbbfdd.fdbaab.** { *; }
-keep class fcffbcef.cbefeefa.** { *; }
-keep class bbacbff.ecbddeb.** { *; }
-keep class ebbbf.bfcbc.** { *; }
-keep class afbfbfd.dffbcec.** { *; }
-keep class el.** {*;}
-keep class baf.edaf.** { *; }
-keep class daddbf.cebdcdd.** { *; }
-keep class adecece.cdedecc.** { *; }
-keep class fbbaffa.faecdbe.** { *; }
-keep class accbfce.fccdabb.** { *; }
-keep class afbfaa.afcdcd.** { *; }
-keep class aecbcaf.acdbabae.** { *; }
-keep class edeebee.fefabfb.** { *; }
-dontwarn fbbaffa.faecdbe.**
-dontwarn accbfce.fccdabb.**
-dontwarn afbfaa.afcdcd.**
-dontwarn aecbcaf.acdbabae.**
-dontwarn edeebee.fefabfb.**
-keep class cp.** { *; }
-dontwarn cp.**
-keep public class * extends com.netease.nim.uikit.common.ui.recyclerview.holder.RecyclerViewHolder {*;}
-keep public class * extends com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase {*;}
-keep class aea.baaf.** { *; }
-keep class ddfb.edcab.** { *; }
-keep class aeaaa.dedad.** { *; }
-keep class acbfad.dcbefe.** { *; }
-keep class deafc.bebac.** { *; }
-keep class ffbe.bdac.** { *; }
-keep class eaedcce.eebdfabf.** { *; }
-keep class edcbb.bcfca.** { *; }
-keep class ffdab.eabbd.** { *; }
-keep class fcfc.debbb.** { *; }
-keep class bfbcaedcbf.fddedfaafe.** { *; }
-keep class eacfafb.adbcafda.** { *; }
-keep class aedfcaaf.cdfbbcce.** { *; }
-keep class bbcf.abac.** { *; }
-keep class edfea.cddcb.** { *; }
-keep class ccaad.bddfa.** { *; }
-keep class aaffcba.daeefdac.** { *; }
-keep class cbcdae.acdabfe.** { *; }
-keep class eedbaeb.defbdfae.** { *; }
-keep class cfeddda.aafffbc.** { *; }
-keep class y.** {*;}
-keep class eaffcdbc.daeffdba.** { *; }
-keep class bfbdcd.fafefd.** { *; }
-keep class ba.** {*;}
-keep class aceac.ecabfe.** { *; }
-keep class cdccdab.ebdbacb.** { *; }
-keep class bababbc.cecaffca.** { *; }
-keep class edbce.fdbbbc.** { *; }
-keep class dfaabac.aabbefcc.** { *; }
-keep class edccdc.abfbfcc.** { *; }
-keep class eebfd.aaccca.** { *; }
-keep class ecaed.eebace.** { *; }
-keep class cfeee.cdeea.** { *; }
-keep class afb.eaca.** { *; }
-keep class bdebccd.fbfaecdb.** { *; }
-keep class eacfafb.aadfdcee.** { *; }
-keep class bceba.bbfce.** { *; }
-keep class cd.** {*;}
-keep class fddadcc.fbdbaaa.** { *; }
-keep class bdabfb.aecccbc.** { *; }
-keep class g.** {*;}
-keep class edbaad.bbdcdfc.** { *; }
-keep class acdfe.ebeaed.** { *; }
-keep class fabffdc.ffcdadbe.** { *; }
-keep class abbefdab.daeaadad.** { *; }
-keep class def.cff.** { *; }
-keep class fbefaae.fddefebe.** { *; }
-keep class fbdfcae.fefbfee.** { *; }
-keep class dfefd.bacabc.** { *; }
-keep class ffedae.acfcdbb.** { *; }
-keep class ddeeb.bdcdf.** { *; }
-keep class dcabc.bbdaea.** { *; }
-keep class adbaee.fffffc.** { *; }
-keep class bb.** {*;}
-keep class fffba.cdbfee.** { *; }
-keep class cbeee.efcdfb.** { *; }
-keep class cdaabd.cfabfca.** { *; }
-keep class dbeef.acefca.** { *; }
-keep class edbabbab.acdccacc.** { *; }
-keep class dedfdbd.ebffbcba.** { *; }
-keep class dfdefbe.fedadcf.** { *; }
-keep class accd.bbdff.** { *; }
-keep class u.** {*;}
-keep class ebbffdf.beebece.** { *; }
-keep class fcfdaa.edabfab.** { *; }
-keep class afbba.abdcd.** { *; }
-keep class dbcce.ecaeff.** { *; }
-keep class fbbcdb.ddfadba.** { *; }
-keep class bbecb.daedaf.** { *; }
-keep class cdade.adeda.** { *; }
-keep class bg.** {*;}
-keep class bbcabbb.dcabfcd.** { *; }
-keep class cfadf.caddb.** { *; }
-keep class bdbabbdc.ffafceeac.** { *; }
-keep class bd.** {*;}
-keep class ccbd.abca.** { *; }
-keep class j.** {*;}
-keep class fbeebae.ebcadebe.** { *; }
-keep class aaecbd.bfafacd.** { *; }
-keep class fcef.caffe.** { *; }
-keep class decd.efffc.** { *; }
-keep class cdfaac.caaeba.** { *; }
-keep class fdab.dbaad.** { *; }
-keep class dbcdb.edafab.** { *; }
-keep class feacbcff.edcaafbbb.** { *; }
-keep class ebdeaeb.dbccefdb.** { *; }
-keep class feacdf.cefdbd.** { *; }
-keep class efbbc.adeda.** { *; }
-keep class bccd.dddee.** { *; }
-keep class faafdf.cefbbcb.** { *; }
-keep class fcebb.eebee.** { *; }
-keep class cedec.faddde.** { *; }
-keep class affae.fcdff.** { *; }
-keep class eecdc.cddbfa.** { *; }
-keep class fddd.dbae.** { *; }
-keep class defceb.bddedaa.** { *; }
-keep class decd.efffc.** { *; }
-keep class bbfeef.fdaefba.** { *; }
-keep class baf.edaf.** { *; }
-keep class acdb.aacb.** { *; }
-keep class bacfcf.dddbef.** { *; }
-keep class cfeaf.ddccec.** { *; }

View File

@@ -87,7 +87,7 @@
android:name=".application.App"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:label="@string/app_launch_name"
android:largeHeap="true"
android:networkSecurityConfig="@xml/network_security_config"
android:resizeableActivity="true"
@@ -127,6 +127,24 @@
<!-- </intent-filter>-->
</activity>
<activity
android:name=".ui.link.LinkActivity"
android:configChanges="orientation|screenSize"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/transparent_activity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="app"
android:scheme="molistar" />
</intent-filter>
</activity>
<!-- <meta-data-->
<!-- android:name="firebase_crashlytics_collection_enabled"-->
<!-- android:value="${CRASHLYTICS_COLLECTION_ENABLED}" /> &lt;!&ndash; 刘海屏适配 begin &ndash;&gt;-->
@@ -162,7 +180,7 @@
如果 SDKOptions 中提供了,取 SDKOptions 中的值。
-->
<!-- <activity-->
<!-- android:name="app.hiyoo.fun.lineapi.LineAuthenticationCallbackActivity"-->
<!-- android:name="app.molistar.fun.lineapi.LineAuthenticationCallbackActivity"-->
<!-- android:exported="true"-->
<!-- android:launchMode="singleTask"-->
<!-- android:noHistory="true">-->
@@ -223,7 +241,7 @@
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="Hiyoo"
android:label="MoliStar"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan|stateAlwaysHidden" /> <!-- 配置的service和receiver -->
@@ -303,10 +321,6 @@
android:name=".home.activity.CollectionRoomActivity"
android:label="@string/main_androidmanifest_019"
android:screenOrientation="portrait" />
<activity
android:name=".ui.wallet.ExchangeGoldActivity"
android:label="@string/main_androidmanifest_020"
android:screenOrientation="portrait" />
<activity
android:name=".ui.setting.SettingActivity"
android:screenOrientation="portrait" />
@@ -316,18 +330,6 @@
<activity
android:name=".ui.relation.FansListActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.withdraw.WithdrawActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.withdraw.bankcard.BindWithdrawBankCardActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.withdraw.WithdrawRuleActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.withdraw.BinderAlipayActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.user.activity.AboutActivity"
android:screenOrientation="portrait" />
@@ -404,10 +406,6 @@
android:name=".decoration.view.MyDecorationActivity"
android:label="@string/main_androidmanifest_027"
android:screenOrientation="portrait" />
<activity
android:name=".decoration.view.DecorationStoreActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.user.activity.UserGiftActivity"
android:screenOrientation="portrait"
@@ -416,42 +414,6 @@
android:name=".friend.view.SelectFriendActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilyPlazaActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilyHomeActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilySearchActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilyListActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilyManageActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilyCurrencyActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilyMemberListActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilyInfoActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilyMemberSearchActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".team.view.NimTeamMessageActivity"
android:screenOrientation="portrait"
@@ -496,10 +458,6 @@
android:name=".luckymoney.view.LuckyMoneyDetailActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" /> <!-- android:launchMode="singleTask" -->
<activity
android:name=".family.view.activity.FamilyMemberCurrencyActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ErbanTakePhotoActivity"
android:screenOrientation="portrait"
@@ -509,17 +467,14 @@
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".family.view.activity.FamilySelectFriendActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
android:name=".treasure_box.activity.TreasureBoxActivity"
android:theme="@style/transparent_activity" />
<activity
android:name=".family.view.activity.FamilyTextInputActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
android:name=".treasure_box.activity.BoxRankingActivity"
android:theme="@style/room_message_activity" />
<activity
android:name=".family.view.activity.FamilyGameListActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
android:name=".treasure_box.activity.TreasureBoxHonourActivity"
android:theme="@style/dialog_web_view_activity" />
<activity android:name=".ui.setting.VerifyPhoneActivity" />
<activity android:name=".ui.setting.ModifyPwdActivity" />
<activity
@@ -531,17 +486,6 @@
android:name=".ui.widget.RecallDialog"
android:screenOrientation="portrait"
android:theme="@style/dialog_activity_close_inside" />
<activity
android:name=".public_chat_hall.activity.PublicChatHallHomeActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/main_androidmanifest_028"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".public_chat_hall.activity.PublicChatHallAitFriendsActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/main_androidmanifest_029"
android:screenOrientation="portrait" />
<activity
android:name=".ui.user.decorationsend.DecorationSendActivity"
android:screenOrientation="portrait"
@@ -552,14 +496,6 @@
<activity
android:name=".avroom.activity.RoomOnlineUserActivity"
android:screenOrientation="portrait" />
<activity
android:name=".public_chat_hall.activity.PublicChatHallRelatedToMeActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".public_chat_hall.activity.AitFriendsSearchActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.login.ShowBindPhoneActivity"
android:screenOrientation="portrait" />
@@ -625,9 +561,6 @@
<activity
android:name=".module_hall.hall.activity.MemberSearchActivity"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".avroom.activity.CpRoomInviteActivity"
android:screenOrientation="portrait" />
<activity
android:name=".module_hall.hall.activity.HallSearchActivity"
android:screenOrientation="portrait" />
@@ -640,11 +573,6 @@
<activity
android:name=".module_hall.team.activity.HTeamMemberListActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.chwl.app.mentoring_relationship.activity.MentoringRelationshipActivity"
android:label="@string/main_androidmanifest_030"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".avroom.recommendcard.MyRecommendCardActivity"
android:launchMode="singleTask"
@@ -655,12 +583,6 @@
<activity
android:name="com.chwl.app.room_chat.activity.RoomMsgActivity"
android:theme="@style/room_message_activity" />
<activity
android:name="com.chwl.app.room_chat.activity.RoomNewbieActivity"
android:theme="@style/room_message_activity" />
<activity
android:name="com.chwl.app.room_chat.activity.RoomNewbieMessageActivity"
android:theme="@style/room_message_activity" />
<activity
android:name="com.chwl.app.room_chat.activity.RoomInviteFansActivity"
android:theme="@style/room_message_activity" />
@@ -678,9 +600,6 @@
<activity
android:name=".radish.activity.RadishRecordActivity"
android:screenOrientation="portrait" />
<activity
android:name=".radish.signin.SignInActivity"
android:screenOrientation="portrait" />
<activity
android:name=".radish.task.activity.TaskCenterActivity"
android:screenOrientation="portrait" />
@@ -704,42 +623,6 @@
<activity
android:name=".audio.VoiceMatchActivity"
android:screenOrientation="portrait" />
<activity
android:name=".miniworld.activity.MiniWorldGuestPageActivity"
android:screenOrientation="portrait" /> <!-- 推荐位 -->
<activity
android:name=".miniworld.activity.TopicMainActivity"
android:screenOrientation="portrait" /> <!-- 房间内私聊 -->
<activity
android:name=".miniworld.activity.MiniWorldEditActivity"
android:screenOrientation="portrait" />
<activity
android:name=".miniworld.activity.MiniWorldMemberListActivity"
android:screenOrientation="portrait" />
<activity
android:name=".miniworld.activity.MiniWorldTeamMessageActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".miniworld.activity.MWTeamRoomMessageAct"
android:screenOrientation="portrait"
android:theme="@style/room_message_activity" />
<activity
android:name=".miniworld.activity.MiniWorldGroupThemeActivity"
android:screenOrientation="portrait" />
<activity
android:name=".miniworld.activity.MiniWorldActivity"
android:screenOrientation="portrait" />
<activity
android:name=".miniworld.activity.AllTopicActivity"
android:screenOrientation="portrait" /> <!-- 房间内私聊 -->
<!-- 萝卜-签到-任务 -->
<activity
android:name=".miniworld.activity.MiniWorldSearchActivity"
android:screenOrientation="portrait" />
<activity
android:name=".miniworld.activity.MiniWorldMainActivity"
android:screenOrientation="portrait" />
<activity android:name=".ui.im.friend.ActFriendList" />
<activity
android:name=".bank_card.activity.BankCardListActivity"
@@ -760,19 +643,10 @@
android:name=".home.activity.CommunityNoticeAct"
android:screenOrientation="portrait" />
<activity
android:name=".community.publish.view.PublishActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustNothing" />
<activity
android:name=".community.dynamic.view.DynamicDetailActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".community.photo.PreviewPhotoActivity"
android:name=".photo.PreviewPhotoActivity"
android:screenOrientation="portrait" />
<activity
android:name=".community.photo.BigPhotoActivity"
android:name=".photo.BigPhotoActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.example.matisse.ui.MatisseActivity"
@@ -783,41 +657,25 @@
<activity
android:name="com.example.matisse.internal.ui.SelectedPreviewActivity"
android:screenOrientation="portrait" /> <!-- 房间内私聊 -->
<activity
android:name=".ui.wallet.sendgold.SendGoldActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".pay.activity.GiveGoldActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".pay.activity.GiveGoldDetailActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".pay.activity.GiveGoldToUserActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".pay.activity.GiveGoldSearchActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.setting.PrivacySettingActivity"
android:screenOrientation="portrait" /> <!-- 银行卡列表 -->
<activity
android:name=".ui.setting.NoticeSettingActivity"
android:screenOrientation="portrait" /> <!-- 解除绑定银行卡 -->
<activity
android:name=".ui.login.LoginActivity"
android:label="@string/main_androidmanifest_031"
android:launchMode="singleTask"
android:screenOrientation="portrait" /> <!-- 绑定银行卡 -->
<activity
android:name=".ui.webview.DialogWebViewActivity"
android:theme="@style/dialog_web_view_activity"
android:windowSoftInputMode="adjustPan" /> <!-- 隐私政策 -->
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".ui.webview.baishun.BaiShunGameWebActivity"
android:theme="@style/dialog_web_view_activity"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".ui.webview.room_banner.RoomWebDialogActivity"
android:theme="@style/room_dialog_web_view_activity"
android:windowSoftInputMode="adjustPan" />
<!-- 隐私政策 -->
<activity
android:name=".ui.webview.DatingRuleWebViewActivity"
android:theme="@style/dialog_web_view_activity" />
@@ -830,6 +688,7 @@
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".ui.login.LoginPasswordActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" /> <!-- 社区 -->
<activity
android:name=".ui.setting.ResetPasswordActivity"
@@ -857,9 +716,6 @@
android:name=".avroom.singleroompk.SingleRoomPKSearchActivity"
android:theme="@style/dialog_web_view_activity"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".avroom.firstcharge.FirstChargeDialog"
android:theme="@style/dialogactivity" />
<activity
android:name=".ui.setting.GrantedPermissionsActivity"
android:screenOrientation="portrait" />
@@ -899,21 +755,6 @@
<activity
android:name=".relation.cp.activity.CpInviteRecordActivity"
android:screenOrientation="portrait" />
<activity
android:name=".fansteam.FansTeamJoinActivity"
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".fansteam.FansTeamJoinedActivity"
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".fansteam.FansTeamListActivity"
android:screenOrientation="portrait" />
<activity
android:name=".shipantics.PullRadishActivity"
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".shipantics.RadishRankingActivity"
android:theme="@style/room_message_activity" />
<activity
android:name=".AgentActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
@@ -933,11 +774,6 @@
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name=".earn.activity.EarnWithdrawActivity"
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
android:exported="false"
android:screenOrientation="portrait" /> <!-- com.chwl.core.skill -->
<activity
android:name=".earn.activity.BindWithdrawMsgActivity"
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
@@ -968,11 +804,6 @@
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name=".ui.user.activity.EditUserLabelActivity"
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name=".ui.webview.FairyDialogWebViewActivity"
@@ -1051,6 +882,27 @@
<activity android:name=".avroom.room_album.RoomAlbumActivity" />
<activity android:name=".ui.language.LanguageActivity" />
<activity android:name=".public_chat.ui.message.PublicChatRoomMessageActivity"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".fansteam.FansTeamJoinActivity"
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".fansteam.FansTeamJoinedActivity"
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".fansteam.FansTeamListActivity"
android:screenOrientation="portrait" />
<activity
android:name=".decoration.view.DecorationStoreActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
</application>
</manifest>

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -23,6 +23,9 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProvider;
import com.chwl.app.star.StarFragment;
import com.chwl.app.ui.login.LoginPasswordActivity;
import com.chwl.core.home.bean.MainTabInfo;
import com.chwl.core.settings.SettingsModel;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.log.LogUtil;
@@ -38,7 +41,6 @@ import com.netease.nimlib.sdk.team.constant.TeamMessageNotifyTypeEnum;
import com.netease.nimlib.sdk.team.model.Team;
import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
import com.orhanobut.logger.Logger;
import com.chwl.app.upgrade.AppUpgradeHelper;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.chwl.app.application.IReportConstants;
import com.chwl.app.application.ReportManager;
@@ -47,9 +49,6 @@ import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.common.widget.DragLayout;
import com.chwl.app.community.dynamic.view.DynamicDetailActivity;
import com.chwl.app.community.publish.view.PublishActivity;
import com.chwl.app.family.view.activity.FamilyHomeActivity;
import com.chwl.app.home.HomeViewModel;
import com.chwl.app.home.dialog.NewUserHelloDialog;
import com.chwl.app.home.dialog.ProtocolUpdateDialog;
@@ -59,15 +58,12 @@ import com.chwl.app.home.fragment.MeFragment;
import com.chwl.app.home.presenter.MainPresenter;
import com.chwl.app.home.view.IMainView;
import com.chwl.app.home.widget.AnchorCardView;
import com.chwl.app.main.helper.NoticationsUiHelper;
import com.chwl.app.miniworld.activity.MiniWorldGuestPageActivity;
import com.chwl.app.module.Extras;
import com.chwl.app.module_hall.secretcode.PwdCodeMgr;
import com.chwl.app.service.DaemonService;
import com.chwl.app.ui.im.ImInitHelper;
import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity;
import com.chwl.app.ui.login.BindPhoneActivity;
import com.chwl.app.ui.login.LoginActivity;
import com.chwl.app.ui.login.fragment.AddUserInfoFragment;
import com.chwl.app.ui.patriarch.help.LimitEnterRoomHelper;
import com.chwl.app.ui.patriarch.help.PmDialogShowMrg;
@@ -114,7 +110,6 @@ import com.chwl.core.utils.SharedPreferenceUtils;
import com.chwl.core.utils.StringFormatUtils;
import com.chwl.library.base.factory.CreatePresenter;
import com.chwl.library.threadmgr.ThreadPoolManager;
import com.chwl.library.utils.JavaUtil;
import com.chwl.library.utils.ResUtil;
import org.greenrobot.eventbus.EventBus;
@@ -147,7 +142,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private MainTabLayout mMainTabLayout;
private AnchorCardView anchorCardView;
private View viewClose;
private int mCurrentTabType = MainTabType.TAB_TYPE_HOME;
private int mCurrentTabType = MainTabType.TAB_TYPE_STAR;
/**
* 房间最小化动画换成属性动画原先的补间动画影响了activity的生命周期
*/
@@ -165,8 +160,8 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private Runnable touchRunnable;
{
fragmentArray.put(MainTabType.TAB_TYPE_STAR, new StarFragment());
fragmentArray.put(MainTabType.TAB_TYPE_HOME, new HomeFragment());
// fragmentArray.put(MainTabType.TAB_TYPE_SQUARE, new SquareFragment());
fragmentArray.put(MainTabType.TAB_TYPE_MSG, new ContactsListFragment());
fragmentArray.put(MainTabType.TAB_TYPE_ME, new MeFragment());
}
@@ -199,16 +194,8 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
// 跳转
if (!StringUtil.isEmpty(linkedInfo.getRoomUid()) && linkedInfo.getType().equals("2")) {
AVRoomActivity.start(context, Long.parseLong(linkedInfo.getRoomUid()));
} else if (!StringUtil.isEmpty(linkedInfo.getFamilyId()) && linkedInfo.getType().equals("4")) {
FamilyHomeActivity.start(context, linkedInfo.getFamilyId());
} else if (!TextUtils.isEmpty(linkedInfo.getUrl()) && linkedInfo.getType().equals("3")) {
CommonWebViewActivity.start(context, UriProvider.getLinkUrl(linkedInfo.getUrl()));
} else if (!TextUtils.isEmpty(linkedInfo.getWorldId()) && linkedInfo.getType().equals("5")) {
MiniWorldGuestPageActivity.start(context, linkedInfo.getWorldId());
} else if (linkedInfo.getType().equals("6") && !TextUtils.isEmpty(linkedInfo.getWorldId()) &&
!TextUtils.isEmpty(linkedInfo.getDynamicId())) {
DynamicDetailActivity.start(context, JavaUtil.str2long(linkedInfo.getDynamicId()),
JavaUtil.str2long(linkedInfo.getWorldId()), 6);
} else if (linkedInfo.getType().equals("7") && !TextUtils.isEmpty(linkedInfo.getUid())) {
NimP2PMessageActivity.start(context, linkedInfo.getUid());
} else {
@@ -244,13 +231,10 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
.doOnError(throwable -> onNeedLogin())
.subscribe();
initView();
InitialModel.get().getMainTabInfosLiveData().observeForever(mainTabInfo -> {
if (mainTabInfo != null) {
mMainTabLayout.setMainTabInfoList(mainTabInfo);
}
});
//检测更新
AppUpgradeHelper.checkAppUpgrade(this);
List<MainTabInfo> mainTabInfo = InitialModel.get().getMainTabInfosLiveData().getValue();
if (mainTabInfo != null) {
mMainTabLayout.setMainTabInfoList(mainTabInfo);
}
initMaterialView();
onParseIntent();
updateDatas();
@@ -327,34 +311,9 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
UserInfo userInfo = UserModel.get().getCacheLoginUserInfo();
if (userInfo != null) {
handleLinkedJump(this);
// if (userInfo.isShowLimitCharge() &&
// PmDialogShowMrg.get().isHasShow() &&
// DemoCache.readNewUserChargeGift() == 1) {
// StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_NUGIFT_POP_SHOW, getString(R.string.enjoy_the_popup_exposure));
// NewUserChargeGiftDialog.start(context);
// DemoCache.saveNewUserChargeGift(2);
// }
// checkShowAnchorCardView();
}
}
// private void checkShowAnchorCardView() {
// if (touchRunnable != null || !mResumed || AvRoomDataManager.get().mCurrentRoomInfo != null)
// return;
// int anchorCardViewType = DemoCache.readAnchorCardView();
// if (anchorCardViewType == 2) {
// if (CurrentTimeUtils.getCurrentTime() - DemoCache.readAnchorCardViewTime() > 15 * 60 * 1000) {
// touchRunnable = () -> {
// touchRunnable = null;
// homeViewModel.requestAnchorInfo();
// };
// mMainTabLayout.postDelayed(touchRunnable, 5000);
// }
// } else if (anchorCardViewType == 1 || DemoCache.readLaunchCount() == 1) {
// homeViewModel.requestAnchorInfo();
// }
// }
@Override
protected void onPause() {
super.onPause();
@@ -388,10 +347,10 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
userLivingView.setColor(Color.WHITE);
mMainTabLayout.setOnTabClickListener(this);
anchorCardView = findViewById(R.id.vs_anchor_card);
mMainTabLayout.setDefaultTabType(mCurrentTabType);
}
private void updateDatas() {
mMainTabLayout.setDefaultTabType(mCurrentTabType);
handleNimIntent();
}
@@ -506,8 +465,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
Log.i("checkLostUser", "onLogin");
//登录成功查询未读信息数量
mMainTabLayout.setUnReadDynamicCount(0);
int unreadCount = IMMessageManager.get().queryUnreadMsg();
mMainTabLayout.setMsgNum(unreadCount);
openCommunityNotice();
@@ -522,14 +479,14 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
public void onLogout() {
Logger.e(TAG, "onLogout Success ~~~~");
getMvpPresenter().exitRoom();
LoginActivity.start(MainActivity.this);
LoginPasswordActivity.start(MainActivity.this);
PmDialogShowMrg.get().onLogout();
finish();
}
public void onNeedLogin() {
NimMiddleActivity.openCommunity = false;
LoginActivity.start(MainActivity.this);
LoginPasswordActivity.start(MainActivity.this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -641,9 +598,13 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
transaction.add(R.id.main_fragment, showFragment, null);
}
transaction.show(showFragment);
if (tempFragment != null) transaction.hide(tempFragment);
if (tempFragment != null) {
transaction.hide(tempFragment);
}
tempFragment = showFragment;
if (!isDestroyed()) transaction.commitNowAllowingStateLoss();
if (!isDestroyed()) {
transaction.commitNowAllowingStateLoss();
}
mCurrentTabType = tabType;
//每次点击我的都更新当前用户信息
@@ -655,9 +616,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
case MainTabType.TAB_TYPE_HOME:
reportTabClick(IReportConstants.ELEVEN);
break;
case MainTabType.TAB_TYPE_SQUARE:
reportTabClick(IReportConstants.TWELVE);
break;
case MainTabType.TAB_TYPE_MSG:
reportTabClick(IReportConstants.THIRTEEN);
break;
@@ -676,7 +634,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
//登录页展示时
HashMap<String, Object> map = new HashMap<>(3);
map.put(IReportConstants.HOMEPAGE_TYPE, type);
map.put(IReportConstants.MODULE, IReportConstants.PEKO_HOMEPAGE);
map.put(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE);
ReportManager.get().reportEvent(IReportConstants.MODULE_HOMEPAGE_CLICK, map);
}
@@ -694,9 +652,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
//青少年弹窗处理
PmDialogShowMrg.get().handle(new WeakReference<>(this));
//通知栏权限判断
NoticationsUiHelper.handle(this, getDialogManager());
handleChannelPageInfo();
checkProtocolUpdate();
@@ -847,16 +802,8 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onUnReadCount(UnReadCountEvent event) {
mMainTabLayout.setUnReadDynamicCount(event.getTotal());
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void SquarePublish(SquareTaskEvent event) {
if (getDialogManager() != null) {
PublishActivity.start(getDialogManager());
}
}
private void handlePmExitRoom() {

View File

@@ -0,0 +1,4 @@
package com.chwl.app
interface MainTabContentView {
}

View File

@@ -12,7 +12,6 @@ import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.base.BaseActivity;
import com.chwl.app.radish.signin.SignInActivity;
import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity;
import com.chwl.app.ui.webview.CommonWebViewActivity;
import com.chwl.app.utils.PushMessageHandler;
@@ -106,11 +105,6 @@ public class NimMiddleActivity extends BaseActivity {
if (noticeAttachment.getUid() > 0) {
AVRoomActivity.start(this, noticeAttachment.getUid());
}
} else if (attachment instanceof OpenSignInAttachment) {
if (AuthModel.get().isImLogin()
&& !UIUtils.isTopActivity(this, SignInActivity.class.getSimpleName())) {
SignInActivity.start(this);
}
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MSG_RED_PACKAGE) {
if (attachment.getSecond() == CustomAttachment.CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ALL_DIAMOND) {
RedPackageAttachment redPackageAttachment = (RedPackageAttachment) attachment;

View File

@@ -10,7 +10,6 @@ import com.chwl.app.audio.SoundSignatureActivity;
import com.chwl.app.ui.login.AddUserInfoActivity;
import com.chwl.app.ui.login.ModifyInfoActivity;
import com.chwl.app.ui.setting.SettingActivity;
import com.chwl.app.ui.user.activity.EditUserLabelActivity;
import com.chwl.app.ui.user.activity.UserInfoActivity;
import com.chwl.app.ui.user.activity.UserInfoModifyActivity;
import com.chwl.app.ui.user.activity.UserModifyPhotosActivity;
@@ -108,12 +107,7 @@ public class UIHelper {
public static void showMonsterResult(Context context, String monsterId) {
CommonWebViewActivity.start(context, UriProvider.IM_SERVER_URL +
"/hiyoo/modules/monster/index.html?monsterId=" + monsterId);
}
public static void showLabelInfoAct(Activity mActivity, int requestCode) {
Intent intent = new Intent(mActivity, EditUserLabelActivity.class);
mActivity.startActivityForResult(intent, requestCode);
"/molistar/modules/monster/index.html?monsterId=" + monsterId);
}
/**
@@ -132,11 +126,11 @@ public class UIHelper {
*/
public static void showRecommendPosH5(Context context) {
String cardUrl = UriProvider.JAVA_WEB_URL +
"/hiyoo/modules/recommend-card/index.html";
"/molistar/modules/recommend-card/index.html";
CommonWebViewActivity.start(context, cardUrl);
}
public static void openContactUs(Context context) {
CommonWebViewActivity.start(context, UriProvider.IM_SERVER_URL + "/hiyoo/modules/contact/contact.html");
CommonWebViewActivity.start(context, UriProvider.IM_SERVER_URL + "/molistar/modules/contact/contact.html");
}
}

View File

@@ -5,6 +5,7 @@ import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_HEADER_TY
import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Color;
import android.net.http.HttpResponseCache;
import android.os.Build;
@@ -12,12 +13,14 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.util.Supplier;
import androidx.multidex.MultiDex;
import com.alibaba.android.arouter.launcher.ARouter;
import com.bumptech.glide.request.target.ViewTarget;
import com.chwl.app.support.IMUserInfoProvider;
import com.example.lib_utils.LanguageUtils;
import com.chwl.library.language.LanguageHelper;
import com.coorchice.library.utils.LogUtils;
import com.example.lib_utils.ServiceTime;
import com.hjq.toast.ToastUtils;
@@ -66,9 +69,7 @@ import com.chwl.core.interceptor.TimeSyncInterceptor;
import com.chwl.core.manager.IMMessageManager;
import com.chwl.core.manager.IMSystemMsgManager;
import com.chwl.core.market_verify.MarketVerifyModel;
import com.chwl.core.mentoring_relationship.model.MentoringRelationshipModel;
import com.chwl.core.pay.PayModel;
import com.chwl.core.public_chat_hall.model.PublicChatHallModel;
import com.chwl.core.radish.RadishModel;
import com.chwl.core.radish.signin.bean.ImNotice;
import com.chwl.core.room.face.DynamicFaceModel;
@@ -418,9 +419,9 @@ public class App extends BaseApp {
httpParams.put("deviceId", DeviceUuidFactory.getDeviceId(context));
httpParams.put("androidId", MD5Utils.getMD5String(Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)));
httpParams.put("channel", AppMetaDataUtil.getChannelID());
httpParams.put("lang", LanguageUtils.INSTANCE.getSystemLanguage().toLanguageTag());
httpParams.put("lang", LanguageHelper.INSTANCE.getSystemLanguage().toLanguageTag());
RxNet.init(context)
.debug(Env.isDebug())
.debug(Env.isRealDebug())
.setBaseUrl(url)
.addInterceptors(new ParamsInterceptor(httpParams))
.addInterceptors(new NoParamsInterceptor())//注意:拦截器的添加顺序,请求的拦截顺序
@@ -480,11 +481,9 @@ public class App extends BaseApp {
ChannelModel.get();
MarketVerifyModel.get();
GiftModel.get();
PublicChatHallModel.get();
GiftModel.get().tryLoadGiftList();
// 模厅
HallDataManager.get().application();
// 师徒
MentoringRelationshipModel.get();
//全局处理
GlobalHandleManager.get().init();
@@ -527,11 +526,13 @@ public class App extends BaseApp {
BasicConfig.INSTANCE.setAppContext(this.getApplicationContext());
SharedPreferenceUtils.init(this);
ResUtil.init(this);
ResUtil.contextSupplier = () -> App.gStack.getTopContext();
LanguageHelper.INSTANCE.wrapContext(instance);
initOtherSDK();
initContext(this);
//首次启动事件
HashMap<String, Object> map = new HashMap<>(2);
map.put(IReportConstants.MODULE, IReportConstants.PEKO_ACTIVATE);
map.put(IReportConstants.MODULE, IReportConstants.MOLISTAR_ACTIVATE);
ReportManager.get().reportEvent(IReportConstants.ACTIVATE_FIRST, map);
}
@@ -555,6 +556,12 @@ public class App extends BaseApp {
MultiDex.install(base);
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LanguageHelper.INSTANCE.wrapContext(this);
}
@Override
public void onTerminate() {
super.onTerminate();

View File

@@ -2,15 +2,11 @@ package com.chwl.app.application;
import android.app.Activity;
import com.chwl.app.upgrade.AppUpgradeHelper;
import com.trello.rxlifecycle3.components.support.RxAppCompatActivity;
import com.chwl.app.avroom.newuserchargegift.NewUserChargePrizeDialog;
import com.chwl.app.relation.cp.dialog.CpGlobalDialog;
import com.chwl.app.ui.widget.LevelUpDialog;
import com.chwl.app.ui.widget.RecallDialog;
import com.chwl.app.ui.widget.lottery_dialog.LotteryDialogManager;
import com.chwl.app.vip.dialog.VipUpgradeDialog;
import com.chwl.core.activity.bean.LotteryInfo;
import com.chwl.core.level.event.CharmLevelUpEvent;
import com.chwl.core.level.event.LevelUpEvent;
import com.chwl.core.manager.AvRoomDataManager;
@@ -55,14 +51,6 @@ public class GlobalHandleManager {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onImPushUpdateAppEvent(ImPushUpdateAppEvent event) {
AppUpgradeHelper.checkAppUpgrade((RxAppCompatActivity) getActivity(), event.getInfo());
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onReceiveLotteryActivity(LotteryInfo lotteryInfo) {
Activity activity = getActivity();
if (activity == null) return;
LotteryDialogManager.checkLotteryDialog(activity);
}
@Subscribe(threadMode = ThreadMode.MAIN)

View File

@@ -32,9 +32,9 @@ public interface IReportConstants {
int FIFTEEN = 15;
String ACTIVATE_FIRST = "activate_first";
String PEKO_ACTIVATE = "peko_activate";
String MOLISTAR_ACTIVATE = "molistar_activate";
String AGREEMENT_SHOW = "agreement_show";
String PEKO_LOGIN = "peko_login";
String MOLISTAR_LOGIN = "molistar_login";
String AGREEMENT_CLICK = "agreement_click";
String CLICK_TYPE = "click_type";
String PAGE = "page";
@@ -47,7 +47,7 @@ public interface IReportConstants {
String FAIL_DETAIL = "fail_detail";
String MODULE_HOMEPAGE_CLICK = "module_homepage_click";
String HOMEPAGE_TYPE = "homepage_type";
String PEKO_HOMEPAGE = "peko_homepage";
String MOLISTAR_HOMEPAGE = "molistar_homepage";
String TAB_HOMEPAGE_CLICK = "tab_homepage_click";
String HOMEPAGE_TAB = "homepage_tab";
String PAYPAGE_SHOW = "paypage_show";
@@ -55,6 +55,6 @@ public interface IReportConstants {
String ACCOUNT_BALANCE = "account_balance";
String PAY_CLICK = "pay_click";
String MONEY = "money";
String PEKO_PAY = "peko_pay";
String MOLISTAR_PAY = "molistar_pay";
}

View File

@@ -23,38 +23,8 @@ public class ReportManager implements IReportService {
}
public void init() {
// initFirebase();
// initAdjust();
}
/**
* 初始化Firebase相关库
*/
// private void initFirebase() {
// // FirebaseCrashlytics注册公共属性
// FirebaseCrashlytics.getInstance().setCustomKey(IReportConstants.CHANNEL, AppMetaDataUtil.getChannelID());
// // FirebaseAnalytics注册公共属性
// Bundle params = new Bundle();
// if (AuthModel.get().getCurrentUid() != 0) {
// params.putLong(IReportConstants.UID, AuthModel.get().getCurrentUid());
// }
// params.putString(IReportConstants.CHANNEL, AppMetaDataUtil.getChannelID());
// setFirebaseAnalyticsDefaultEventParameters(params);
// }
//Adjust初始化
// private void initAdjust() {
// String appToken = XChatConstants.ADJUST_APP_TOKEN;
// String environment;
// if (XChatApplication.isDebug()) {
// environment = AdjustConfig.ENVIRONMENT_SANDBOX;
// } else {
// environment = AdjustConfig.ENVIRONMENT_PRODUCTION;
// }
// AdjustConfig config = new AdjustConfig(XChatApplication.instance(), appToken, environment);
// config.setLogLevel(LogLevel.WARN);
// Adjust.onCreate(config);
// }
/**
* 设置FirebaseAnalytics公共属性
@@ -63,9 +33,6 @@ public class ReportManager implements IReportService {
*/
@Override
public void setFirebaseAnalyticsDefaultEventParameters(Bundle bundle) {
// if (bundle != null) {
// FirebaseAnalytics.getInstance(XChatApplication.instance()).setDefaultEventParameters(bundle);
// }
}
/**
@@ -86,30 +53,10 @@ public class ReportManager implements IReportService {
*/
@Override
public void reportEvent(String eventId, Map<String, Object> map) {
// try {
// Logger.i(TAG, "reportEvent: eventId=%s, map=%s", eventId, new Gson().toJson(map));
// Bundle bundle = null;
// if (map != null) {
// bundle = new Bundle();
// for (Map.Entry<String, Object> item : map.entrySet()) {
// String key = item.getKey();
// Object value = item.getValue();
// if (!TextUtils.isEmpty(key) && value != null) {
// bundle.putString(key, String.valueOf(value));
// }
// }
// }
// //所有事件都上报到Google Analytics
// FirebaseAnalytics.getInstance(XChatApplication.instance()).logEvent(eventId, bundle);
// } catch (Exception e) {
// Logger.e(TAG, "reportEvent", e);
// }
}
@Override
public void reportAdjustEvent(String eventId) {
// AdjustEvent adjustEvent = new AdjustEvent(eventId);
// Adjust.trackEvent(adjustEvent);
}

View File

@@ -35,6 +35,8 @@ import com.chwl.library.utils.TimeUtils;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
import io.reactivex.Single;
@@ -519,6 +521,7 @@ public class BottleLayout extends FrameLayout {
double num = likeCountDouble / 10000;
DecimalFormat decimalFormat = new DecimalFormat("0.00");// 构造方法的字符格式这里如果小数不足2位,会以0补足.
decimalFormat.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.ENGLISH));
BigDecimal bigDecimal = new BigDecimal(num);
double likeCountFormat = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
if (likeCountFormat > 9999) {

View File

@@ -47,4 +47,8 @@ public abstract class BottomViewListenerWrapper {
}
public void onRoomGameplayClick(){
}
}

View File

@@ -13,7 +13,6 @@ import com.chwl.app.R;
import com.chwl.app.UIHelper;
import com.chwl.app.avroom.widget.ViewItem;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.public_chat_hall.widget.ShutUpDialog;
import com.chwl.app.ui.im.avtivity.NimFriendModel;
import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity;
import com.chwl.app.ui.widget.ButtonItem;
@@ -27,7 +26,6 @@ import com.chwl.core.initial.bean.InitInfo;
import com.chwl.core.kick.KickModel;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.public_chat_hall.manager.PublicChatHallDataManager;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.model.AvRoomModel;
import com.chwl.core.statistic.StatLogKey;
@@ -195,42 +193,6 @@ public class ButtonItemFactory {
return buttonItems;
}
/**
* 创建相关的buttons 添加到资料卡片
*
* @param context context
* @param uid uid or 云信account
* @param listener dialog的监听回调
* @return List<ViewItem>
*/
public static List<ViewItem> createPublicChatHallButtonItems(
Context context,
long uid,
boolean isInRoom,
GiftDialog.OnGiftDialogBtnClickListener listener) {
if (uid <= 0) return null;
String currentUid = String.valueOf(AuthModel.get().getCurrentUid());
String account = String.valueOf(uid);
//account和chatRoomMember 不会同时为空,如果同时为空,则是前面传参出错
boolean isMySelf = Objects.equals(currentUid, account);
if (isMySelf) {
return null;
}
List<ViewItem> buttonItems = new ArrayList<>();
//不在房间内,也不需要魔法
buttonItems.add(createSendGiftItem(context, uid, true, true, listener));
// 私聊
buttonItems.add(createPrivateChatItem(context, account, isInRoom));
//装扮和关注目前是都有的操作
//buttonItems.add(createSendDecorationItem(context, uid));
buttonItems.add(createAttentItem());
buttonItems.add(createFindMeItem());
if (PublicChatHallDataManager.get().isRoomAdmin()) {
buttonItems.add(createShutupItem(context, uid));
}
return buttonItems;
}
/**
* 踩TA当该人再房间中的时候进入他所在的房间
*
@@ -463,15 +425,6 @@ public class ButtonItemFactory {
});
}
/**
* 公聊大厅禁言
*/
public static ViewItem createShutupItem(Context context, long uid) {
return new ViewItem(ResUtil.getString(R.string.erban_avroom_buttonitemfactory_028), R.drawable.icon_shut_up, () -> {
new ShutUpDialog(context, uid).openDialog();
});
}
/**
* @param isInRoom true 在房间内弹起

View File

@@ -1,17 +1,10 @@
package com.chwl.app.avroom.activity;
import static android.view.View.VISIBLE;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_ALL_SERVICE_GIFT;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_BOX;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_FAIRY;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_HEADER_TYPE_GIFT;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIFT;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIFT_SERVER_ALL;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIFT_SERVER_NOTIFY;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_SEA;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_SEA_GIFT_SERVER_ALL;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_ROOM_PK;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_GIFT_L5;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_ROOM_PK_NOTIFY;
@@ -44,7 +37,12 @@ import androidx.viewpager2.widget.ViewPager2;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.chwl.app.notify.RoomNotifyManager;
import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment;
import com.chwl.app.ui.webview.baishun.IBaiShunGameListener;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.room.game.bean.BaiShunGameConfig;
import com.chwl.core.support.room.RoomWidget;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.NIMSDK;
import com.netease.nimlib.sdk.Observer;
@@ -57,18 +55,15 @@ import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity;
import com.orhanobut.logger.Logger;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.chwl.app.R;
import com.chwl.app.avroom.dialog.NewUserGiftDialog;
import com.chwl.app.avroom.dialog.SingleRoomTipDialog;
import com.chwl.app.avroom.firstcharge.FirstChargeDialog;
import com.chwl.app.avroom.fragment.FakeSingleRoomBackFragment;
import com.chwl.app.avroom.fragment.FakeSingleRoomFragment;
import com.chwl.app.avroom.fragment.HomePartyFragment;
import com.chwl.app.avroom.fragment.InputPwdDialogFragment;
import com.chwl.app.avroom.presenter.AvRoomPresenter;
import com.chwl.app.avroom.presenter.HomePartyPresenter;
import com.chwl.app.avroom.redpackage.RedPackageHandler;
import com.chwl.app.avroom.view.IAvRoomView;
import com.chwl.app.avroom.widget.VerticalViewPagerAdapter;
import com.chwl.app.base.BaseMvpActivity;
@@ -81,12 +76,10 @@ import com.chwl.app.ui.patriarch.help.LimitEnterRoomHelper;
import com.chwl.app.ui.user.activity.UserInfoActivity;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.webview.CommonWebViewActivity;
import com.chwl.app.ui.webview.DialogWebViewActivity;
import com.chwl.app.ui.widget.NobleOpenNoticeView;
import com.chwl.app.ui.widget.dialog.AllServiceGiftLevelDialog;
import com.chwl.app.ui.widget.dialog.MonsterDialog;
import com.chwl.app.utils.UserUtils;
import com.chwl.app.room_chat.activity.RoomMsgActivity;
import com.chwl.core.Constants;
import com.chwl.core.DemoCache;
import com.chwl.core.auth.AuthModel;
@@ -95,18 +88,14 @@ import com.chwl.core.bean.BaseProtocol;
import com.chwl.core.channel_page.bean.HelloMessageInfo;
import com.chwl.core.gift.GiftModel;
import com.chwl.core.gift.bean.GiftInfo;
import com.chwl.core.gift.bean.LuckyBagNoticeInfo;
import com.chwl.core.im.custom.bean.CustomAttachment;
import com.chwl.core.im.custom.bean.FairyMsgAttachment;
import com.chwl.core.im.custom.bean.NotifyH5Attachment;
import com.chwl.core.im.custom.bean.NotifyH5Info;
import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment;
import com.chwl.core.im.custom.bean.RoomBoxPrizeInfo;
import com.chwl.core.im.custom.bean.RoomLuckySeaAttachment;
import com.chwl.core.im.custom.bean.RoomLuckySeaMsgBean;
import com.chwl.core.im.custom.bean.RoomPKAttachment;
import com.chwl.core.im.custom.bean.RoomPkBean;
import com.chwl.core.im.custom.bean.RoomReceivedLuckyGiftAttachment;
import com.chwl.core.im.custom.bean.TarotAttachment;
import com.chwl.core.im.custom.bean.TarotMsgBean;
import com.chwl.core.initial.InitialModel;
@@ -117,7 +106,6 @@ import com.chwl.core.module_hall.hall.HallModel;
import com.chwl.core.module_hall.hall.bean.SuperAdminInfo;
import com.chwl.core.monsterhunting.bean.MonsterHuntingResult;
import com.chwl.core.monsterhunting.bean.MonsterInfo;
import com.chwl.core.monsterhunting.bean.MonsterProtocol;
import com.chwl.core.monsterhunting.manager.MonsterDataManager;
import com.chwl.core.noble.bean.AllServiceGiftProtocol;
import com.chwl.core.noble.bean.NobleInfo;
@@ -142,7 +130,6 @@ import com.chwl.core.support.room.RoomContext;
import com.chwl.core.support.room.RoomView;
import com.chwl.core.treasurefairy.bean.FairyMsgInfoBean;
import com.chwl.core.user.UserModel;
import com.chwl.core.user.bean.FirstChargeInfo;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.core.utils.LogUtils;
import com.chwl.core.utils.StringFormatUtils;
@@ -160,13 +147,12 @@ import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedList;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import io.reactivex.Single;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
/**
@@ -229,6 +215,10 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
// 是否禁用VP滑动true不允许滑动false某些条件下可以滑动
private boolean viewPagerInputDisable;
private RoomNotifyManager roomNotify;
private BaiShunGameWebFragment baiShunGameFragment;
public static void start(Context context, long roomUid) {
startForFromType(context, roomUid, FROM_TYPE_NORMAL, null, null);
}
@@ -507,6 +497,17 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
}
});
roomNotify = new RoomNotifyManager(this);
roomNotify.setOnShowUserCard(new Function1<String, Unit>() {
@Override
public Unit invoke(String s) {
if (mCurrentFragment != null) {
mCurrentFragment.showUserCardDialog(s);
}
return null;
}
});
roomNotify.start();
}
@Override
@@ -690,11 +691,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
if (roomContext != null) {
roomContext.onViewAttach(this);
}
/**
* 每次View重新创建意味着可能在房间外点了红包就重新尝试加载红包并展示
*/
tryShowSourceRedPackage();
}
private void showLiveFinishView(long uid) {
@@ -731,23 +727,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
AvRoomDataManager.get().release();
}
/**
* 尝试展示来源红包(在房间外点击红包入口进入房间时)
*/
private void tryShowSourceRedPackage() {
try {
if (redPackageNotifyInfo != null) {
RedPackageHandler handler = getRoomContext().findAbility(RedPackageHandler.class.getSimpleName());
if (handler != null) {
long id = Long.parseLong(redPackageNotifyInfo.getRedEnvelopeId());
handler.tryShowRedPackage(id);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void dismissRedPackageDialog() {
if (mCurrentFragment != null) {
mCurrentFragment.dismissSendRedPackageDialog();
@@ -938,7 +917,9 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
@Override
public void onBackPressed() {
if (closeBaiShunGame()) {
return;
}
if (AvRoomDataManager.get().isGamePlaying(AvRoomDataManager.get().getMicPosition(AuthModel.get().getCurrentUid()))) {
getDialogManager().showOkCancelDialog(ResUtil.getString(R.string.avroom_activity_avroomactivity_09), false,
this::minRoomCode);
@@ -1194,56 +1175,56 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
if (baseProtocol == null) return;
if (!isValid()) return;
switch (baseProtocol.getFirst()) {
case CUSTOM_MSG_HEADER_TYPE_GIFT:
if (giftList == null) {
giftList = new LinkedList<>();
}
int second2 = baseProtocol.getSecond();
AllServiceGiftProtocol.DataBean data = JSON.parseObject(String.valueOf(baseProtocol.getData()), AllServiceGiftProtocol.DataBean.class);
if (data == null || (data.getGiftUrl()) == null)
return;
giftList.add(data);
if (second2 == CUSTOM_MSG_ALL_SERVICE_GIFT) {
if (giftDialog != null && giftDialog.isShowing()) {
// 如果当前以及有礼物弹窗在展示,则需要等到他 dismiss 后再显示下一个
AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
if (dataBean != null) {
return;
} else {
giftDialog.dismiss();
}
} else {
showGiftDialog();
}
}
break;
case CUSTOM_MSG_BOX://寻爱之旅
if (baseProtocol.getSecond() == CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA) {
RoomBoxPrizeAttachment roomBoxPrizeAttachment = new RoomBoxPrizeAttachment(CUSTOM_MSG_BOX, CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA);
RoomBoxPrizeInfo roomBoxPrizeBean = JSON.parseObject(String.valueOf(baseProtocol.getData()), RoomBoxPrizeInfo.class);
roomBoxPrizeAttachment.setUid(roomBoxPrizeBean.getUid());
roomBoxPrizeAttachment.setPrizeName(roomBoxPrizeBean.getPrizeName());
roomBoxPrizeAttachment.setNick(roomBoxPrizeBean.getNick());
roomBoxPrizeAttachment.setBoxTypeStr(roomBoxPrizeBean.getBoxTypeStr());
roomBoxPrizeAttachment.setRoomUid(roomBoxPrizeBean.getRoomUid());
roomBoxPrizeAttachment.setPrizeNum(roomBoxPrizeBean.getPrizeNum());
roomBoxPrizeAttachment.setUserLevelLimit(roomBoxPrizeBean.getUserLevelLimit());
if (AvRoomDataManager.get().isOpenPureMode()) {
// 純凈模式打開後,僅能看跟自己相關的砸蛋消息
if (Objects.equals(roomBoxPrizeAttachment.getUid(), AuthModel.get().getCurrentUid())) {
ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomCustomMessage(String.valueOf(AvRoomDataManager.get().getRoomId()), roomBoxPrizeAttachment);
IMNetEaseManager.get().addMessages(message);
}
} else {
ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomCustomMessage(String.valueOf(AvRoomDataManager.get().getRoomId()), roomBoxPrizeAttachment);
IMNetEaseManager.get().addMessages(message);
IMNetEaseManager.get().getChatRoomEventObservable()
.onNext(new RoomEvent()
.setEvent(RoomEvent.BOX_NOTIFY_SVGA)
.setChatRoomMessage(message));
}
}
break;
// case CUSTOM_MSG_HEADER_TYPE_GIFT:
// if (giftList == null) {
// giftList = new LinkedList<>();
// }
// int second2 = baseProtocol.getSecond();
// AllServiceGiftProtocol.DataBean data = JSON.parseObject(String.valueOf(baseProtocol.getData()), AllServiceGiftProtocol.DataBean.class);
// if (data == null || (data.getGiftUrl()) == null)
// return;
// giftList.add(data);
// if (second2 == CUSTOM_MSG_ALL_SERVICE_GIFT) {
// if (giftDialog != null && giftDialog.isShowing()) {
// // 如果当前以及有礼物弹窗在展示,则需要等到他 dismiss 后再显示下一个
// AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
// if (dataBean != null) {
// return;
// } else {
// giftDialog.dismiss();
// }
// } else {
// showGiftDialog();
// }
// }
// break;
// case CUSTOM_MSG_BOX://寻爱之旅
// if (baseProtocol.getSecond() == CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA) {
// RoomBoxPrizeAttachment roomBoxPrizeAttachment = new RoomBoxPrizeAttachment(CUSTOM_MSG_BOX, CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA);
// RoomBoxPrizeInfo roomBoxPrizeBean = JSON.parseObject(String.valueOf(baseProtocol.getData()), RoomBoxPrizeInfo.class);
// roomBoxPrizeAttachment.setUid(roomBoxPrizeBean.getUid());
// roomBoxPrizeAttachment.setPrizeName(roomBoxPrizeBean.getPrizeName());
// roomBoxPrizeAttachment.setNick(roomBoxPrizeBean.getNick());
// roomBoxPrizeAttachment.setBoxTypeStr(roomBoxPrizeBean.getBoxTypeStr());
// roomBoxPrizeAttachment.setRoomUid(roomBoxPrizeBean.getRoomUid());
// roomBoxPrizeAttachment.setPrizeNum(roomBoxPrizeBean.getPrizeNum());
// roomBoxPrizeAttachment.setUserLevelLimit(roomBoxPrizeBean.getUserLevelLimit());
// if (AvRoomDataManager.get().isOpenPureMode()) {
// // 純凈模式打開後,僅能看跟自己相關的砸蛋消息
// if (Objects.equals(roomBoxPrizeAttachment.getUid(), AuthModel.get().getCurrentUid())) {
// ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomCustomMessage(String.valueOf(AvRoomDataManager.get().getRoomId()), roomBoxPrizeAttachment);
// IMNetEaseManager.get().addMessages(message);
// }
// } else {
// ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomCustomMessage(String.valueOf(AvRoomDataManager.get().getRoomId()), roomBoxPrizeAttachment);
// IMNetEaseManager.get().addMessages(message);
// IMNetEaseManager.get().getChatRoomEventObservable()
// .onNext(new RoomEvent()
// .setEvent(RoomEvent.BOX_NOTIFY_SVGA)
// .setChatRoomMessage(message));
// }
// }
// break;
case CustomAttachment.CUSTOM_MESS_TAROT:
if (baseProtocol.getSecond() == CustomAttachment.CUSTOM_MESS_TAROT_SENIOR_PRIZE_WINNING) {
TarotMsgBean tarotMsgBean = JSON.parseObject(String.valueOf(baseProtocol.getData()), TarotMsgBean.class);
@@ -1281,15 +1262,15 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
IMNetEaseManager.get().noticeRoomEvent(message, RoomEvent.LUCKY_SEA_GIFT_SERVER_NOTIFY);
}
break;
case CUSTOM_MSG_LUCKY_GIFT://福袋
if (baseProtocol.getSecond() == CUSTOM_MSG_LUCKY_GIFT_SERVER_NOTIFY || baseProtocol.getSecond() == CUSTOM_MSG_LUCKY_GIFT_SERVER_ALL) {
RoomReceivedLuckyGiftAttachment attachment = new RoomReceivedLuckyGiftAttachment(CUSTOM_MSG_LUCKY_GIFT_SERVER_NOTIFY);
attachment.setLuckyBagNoticeInfo(JSON.parseObject(String.valueOf(baseProtocol.getData()), LuckyBagNoticeInfo.class));
ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomCustomMessage(String.valueOf(AvRoomDataManager.get().getRoomId()), attachment);
IMNetEaseManager.get().noticeServiceLuckyBagNotice(message);
IMNetEaseManager.get().addMessages(message);
}
break;
// case CUSTOM_MSG_LUCKY_GIFT://福袋
// if (baseProtocol.getSecond() == CUSTOM_MSG_LUCKY_GIFT_SERVER_NOTIFY || baseProtocol.getSecond() == CUSTOM_MSG_LUCKY_GIFT_SERVER_ALL) {
// RoomReceivedLuckyGiftAttachment attachment = new RoomReceivedLuckyGiftAttachment(CUSTOM_MSG_LUCKY_GIFT_SERVER_NOTIFY);
// attachment.setLuckyBagNoticeInfo(JSON.parseObject(String.valueOf(baseProtocol.getData()), LuckyBagNoticeInfo.class));
// ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomCustomMessage(String.valueOf(AvRoomDataManager.get().getRoomId()), attachment);
// IMNetEaseManager.get().noticeServiceLuckyBagNotice(message);
// IMNetEaseManager.get().addMessages(message);
// }
// break;
case CUSTOM_MSG_FAIRY://夺宝精灵
if (baseProtocol.getSecond() == CUSTOM_MSG_SUB_DRAW_GIFT_L5) {
FairyMsgAttachment attachment = new FairyMsgAttachment(CUSTOM_MSG_FAIRY, CUSTOM_MSG_SUB_DRAW_GIFT_L5);
@@ -1363,22 +1344,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
new NewUserGiftDialog(giftInfo).show(this);
}
@Override
public void showFirstChargeDialog(FirstChargeInfo firstChargeInfo) {
Single.timer(firstChargeInfo.getShowAfterSecond() * 1000L, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.doOnSuccess(aLong -> {
if (!DemoCache.readBoolean("FirstCharge", false) &&
(UIUtils.isTopActivity(AVRoomActivity.this)
// || UIUtils.isTopActivity(this, TreasureBoxActivity.class.getName())
|| UIUtils.isTopActivity(this, DialogWebViewActivity.class.getName())
|| UIUtils.isTopActivity(this, RoomMsgActivity.class.getName()))) {
FirstChargeDialog.start(this);
}
})
.subscribe();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onImPushMsgPmLimitTimeEvent(ImPushMsgPmLimitTimeEvent event) {
//时间到限制时间段之后后台推送im消息
@@ -1403,6 +1368,12 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
return this;
}
@Nullable
@Override
public RoomWidget findWidget(@NonNull String name) {
return null;
}
private static class GiftBroadcastObserver implements Observer<BroadcastMessage> {
private WeakReference<AVRoomActivity> mReference;
@@ -1422,14 +1393,14 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
JSONObject jsonObject;
try {
jsonObject = JSON.parseObject(contentStr);
if (jsonObject == null) return;
if (jsonObject.containsKey("body")) {
String body = jsonObject.getString("body");
if (TextUtils.isEmpty(body)) return;
activity.onReceivedGiftBroadcastMessage(body);
}
} catch (Exception e) {
jsonObject = null;
}
if (jsonObject == null) return;
if (jsonObject.containsKey("body")) {
String body = jsonObject.getString("body");
if (TextUtils.isEmpty(body)) return;
activity.onReceivedGiftBroadcastMessage(body);
e.printStackTrace();
}
}
}
@@ -1472,4 +1443,30 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
}
}
}
public void showBaiShunGame(String url, BaiShunGameConfig config) {
closeBaiShunGame();
baiShunGameFragment = BaiShunGameWebFragment.Companion.newInstance(url, config);
baiShunGameFragment.setListener(new IBaiShunGameListener() {
@Override
public void onGameClose() {
closeBaiShunGame();
}
});
findViewById(R.id.layout_baishun_game).setVisibility(VISIBLE);
getSupportFragmentManager().beginTransaction().add(R.id.layout_baishun_game, baiShunGameFragment).commitAllowingStateLoss();
}
private boolean closeBaiShunGame() {
boolean isClose = false;
if (baiShunGameFragment != null) {
if (baiShunGameFragment.isAdded()) {
getSupportFragmentManager().beginTransaction().remove(baiShunGameFragment).commitAllowingStateLoss();
isClose = true;
}
}
findViewById(R.id.layout_baishun_game).setVisibility(View.GONE);
baiShunGameFragment = null;
return isClose;
}
}

View File

@@ -1,146 +0,0 @@
package com.chwl.app.avroom.activity;
import android.view.View;
import com.chwl.app.R;
import com.chwl.app.avroom.fragment.InviteFriendListFragment;
import com.chwl.app.base.BaseBindingActivity;
import com.chwl.app.databinding.ActivityCpRoomInviteBinding;
import com.chwl.app.public_chat_hall.event.AitFriendEvent;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.model.RoomSettingModel;
import com.chwl.core.share.bean.SessionType;
import com.chwl.core.utils.net.DontWarnObserver;
import com.chwl.library.annatation.ActLayoutRes;
import com.chwl.library.utils.ResUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Single;
import io.reactivex.SingleSource;
import io.reactivex.functions.Function;
@ActLayoutRes(R.layout.activity_cp_room_invite)
public class CpRoomInviteActivity extends BaseBindingActivity<ActivityCpRoomInviteBinding> {
private List<String> uids = new ArrayList<>();
private List<String> userNames = new ArrayList<>();
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Override
protected void init() {
EventBus.getDefault().register(this);
initTitleBar(ResUtil.getString(R.string.avroom_activity_cproominviteactivity_01));
getSupportFragmentManager().beginTransaction().add(R.id.content, new InviteFriendListFragment(), null).commitAllowingStateLoss();
mBinding.tvInvite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (AvRoomDataManager.get().mCurrentRoomInfo == null) return;
if (uids.size() == 0) {
toast(ResUtil.getString(R.string.avroom_activity_cproominviteactivity_02));
return;
}
String uid = "";
for (int i = 0; i < uids.size(); i++) {
String targetUid = uids.get(i);
String nick = userNames.get(i);
uid += uids.get(i) + ",";
int sessionType = SessionType.P2P;
IMNetEaseManager.get().sendSharingRoomMessage(sessionType, targetUid);
}
RoomSettingModel model = new RoomSettingModel();
model.invite(AvRoomDataManager.get().mCurrentRoomInfo.getUid(), uid)
.flatMap((Function<String, SingleSource<RoomInfo>>) s -> updateRoomInfo("", RoomInfo.IS_INVITE))
.subscribe(new DontWarnObserver<RoomInfo>() {
@Override
public void accept(RoomInfo roomInfo, String error) {
super.accept(roomInfo, error);
if (error != null) {
toast(error);
} else {
toast(ResUtil.getString(R.string.avroom_activity_cproominviteactivity_03));
finish();
}
}
});
}
});
}
private Single<RoomInfo> updateRoomInfo(String encryptPwd, String limitType) {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) {
return Single.error(new Throwable(ResUtil.getString(R.string.avroom_activity_cproominviteactivity_04)));
}
//更新房间接口调用成功后会发事件RoomEvent.ROOM_INFO_UPDATE
RoomSettingModel model = new RoomSettingModel();
if (AvRoomDataManager.get().isRoomOwner()) {
return model.updateRoomInfo(roomInfo.title,
roomInfo.getRoomDesc(),
roomInfo.getIntroduction(),
encryptPwd,
roomInfo.getRoomTag(),
roomInfo.tagId,
AuthModel.get().getCurrentUid(),
AuthModel.get().getTicket(),
roomInfo.isHasAnimationEffect(),
roomInfo.getAudioQuality(),
limitType,
roomInfo.isPureMode(),
roomInfo.getType(),
roomInfo.getMgId());
} else {
return model.updateByAdmin(roomInfo.getUid(), roomInfo.title,
roomInfo.getRoomDesc(),
roomInfo.getIntroduction(),
encryptPwd,
roomInfo.getRoomTag(),
roomInfo.tagId,
AuthModel.get().getCurrentUid(),
AuthModel.get().getTicket(),
roomInfo.isHasAnimationEffect(),
roomInfo.getAudioQuality(),
roomInfo.isPureMode());
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void countingAitFriends(AitFriendEvent event) {
switch (event.getType()) {
case AitFriendEvent.TYPE_ADD:
if (uids.size() == 20) {
toast(ResUtil.getString(R.string.avroom_activity_cproominviteactivity_05));
return;
}
if (!uids.contains(event.getUid())) {
uids.add(event.getUid());
userNames.add(event.getNick());
}
break;
case AitFriendEvent.TYTPE_REMOVE:
if (uids.contains(event.getUid())) {
uids.remove(event.getUid());
userNames.remove(event.getNick());
}
break;
}
initTitleBar(ResUtil.getString(R.string.avroom_activity_cproominviteactivity_06) + uids.size() + "/20)");
}
}

View File

@@ -210,7 +210,7 @@ public class CreatePKActivity extends BaseMvpActivity<ICreatePKView, CreatePKPre
redTeamName.get(i).setText(userInfoList.get(i).getNick());
} else {
redTeamAvatar.get(i).setImageResource(R.mipmap.ic_red_seat);
redTeamName.get(i).setText(R.string.wait_for_mic);
redTeamName.get(i).setText(String.valueOf(i+1));
}
}
@@ -248,7 +248,7 @@ public class CreatePKActivity extends BaseMvpActivity<ICreatePKView, CreatePKPre
blueTeamName.get(i).setText(userInfoList.get(i).getNick());
} else {
blueTeamAvatar.get(i).setImageResource(R.mipmap.ic_blue_seat);
blueTeamName.get(i).setText(R.string.wait_for_mic);
blueTeamName.get(i).setText(String.valueOf(i+1));
}
}
}

View File

@@ -7,6 +7,7 @@ import android.text.TextUtils;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.RecyclerView;
import com.chwl.core.room.bean.RoomOnlineUserBean;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.sys.NetworkUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
@@ -20,7 +21,6 @@ import com.chwl.app.avroom.view.IRoomInviteView;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.core.Constants;
import com.chwl.core.noble.NobleResourceType;
import com.chwl.core.room.bean.OnlineChatMember;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.library.base.factory.CreatePresenter;
import com.chwl.library.utils.ListUtils;
@@ -106,8 +106,9 @@ public class RoomInviteActivity extends BaseMvpActivity<IRoomInviteView, RoomInv
getMvpPresenter().requestChatMemberByPage(mPage, time, onlyManager);
}
@Override
public void onRequestChatMemberByPageSuccess(List<OnlineChatMember> memberList, int page) {
public void onRequestRoomOnlineListSuccess(List<RoomOnlineUserBean> memberList) {
}

View File

@@ -7,8 +7,10 @@ import android.view.View;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.widget.ViewPager2;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.CommonVPAdapter;
import com.chwl.app.avroom.fragment.RoomCharmListFragment;
import com.chwl.app.avroom.fragment.RoomContributeListFragment;
import com.chwl.app.base.BaseBindingActivity;
@@ -39,18 +41,8 @@ public class RoomRankListActivity extends BaseBindingActivity<ActivityRoomRankLi
List<Fragment> list = new ArrayList<>();
list.add(RoomCharmListFragment.newInstance());
list.add(new RoomContributeListFragment());
mBinding.viewPager.setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
});
mBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
mBinding.viewPager.setAdapter(new CommonVPAdapter(getSupportFragmentManager(),getLifecycle(),list));
mBinding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback(){
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

View File

@@ -1,134 +0,0 @@
package com.chwl.app.avroom.adapter;
import android.app.Activity;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import androidx.appcompat.widget.AppCompatImageView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.chwl.app.R;
import com.chwl.app.public_chat_hall.bean.PublicChatHallFriendInfo;
import com.chwl.app.public_chat_hall.event.AitFriendEvent;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.widget.NobleAvatarView;
import com.chwl.core.noble.NobleUtil;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import org.greenrobot.eventbus.EventBus;
public class InviteFriendListAdapter extends BaseQuickAdapter<PublicChatHallFriendInfo, BaseViewHolder> {
private Activity context;
public InviteFriendListAdapter(Activity context) {
super(R.layout.item_public_chat_hall_friend_list);
this.context = context;
}
private OnItemClickListener onItemClickListener;
public interface OnItemClickListener {
void sendListener(UserInfo attentionInfo);
}
public void setRylListener(OnItemClickListener onClickListener) {
onItemClickListener = onClickListener;
}
@Override
protected void convert(BaseViewHolder helper, PublicChatHallFriendInfo pchFriendInfo) {
if (pchFriendInfo == null) return;
final UserInfo item = pchFriendInfo.getUserInfo();
CheckBox cbFriend = helper.getView(R.id.cb_friend);
helper.setText(R.id.tv_userName, item.getNick())
.setText(R.id.tv_user_desc, item.getUserDesc() != null ?
item.getUserDesc()
: helper.itemView.getContext().getResources().getString(R.string.msg_no_user_desc))
.setVisible(R.id.view_line, helper.getLayoutPosition() != getItemCount() - 1)
;
NobleAvatarView nobleAvatarView = helper.getView(R.id.noble_avatar_view);
nobleAvatarView.setSize(47, 70, 13);
nobleAvatarView.setData(item.getAvatar(), item.getNobleUsers());
AppCompatImageView ivGender = helper.getView(R.id.iv_gender);
if (item.getGender() == 1) {
ivGender.setImageResource(R.drawable.ic_gender_male);
} else {
ivGender.setImageResource(R.drawable.ic_gender_female);
}
AppCompatImageView ivNobleLevel = helper.getView(R.id.iv_noble_level);
if (item.getNobleUsers() != null) {
ivNobleLevel.setVisibility(View.VISIBLE);
String badgeByLevel = NobleUtil.getBadgeByLevel(item.getNobleUsers().getLevel());
if (!TextUtils.isEmpty(badgeByLevel)) {
NobleUtil.loadResource(badgeByLevel, ivNobleLevel);
} else {
ivNobleLevel.setVisibility(View.GONE);
}
} else {
ivNobleLevel.setVisibility(View.GONE);
}
AppCompatImageView ivUserLevel = helper.getView(R.id.iv_user_level);
ivUserLevel.setVisibility(View.GONE);
if (item.getUserLevelVo() != null && !TextUtils.isEmpty(item.getUserLevelVo().getExperUrl())) {
ivUserLevel.setVisibility(View.VISIBLE);
ImageLoadUtils.loadImage(mContext, item.getUserLevelVo().getExperUrl(), ivUserLevel);
}
AppCompatImageView ivCharmLevel = helper.getView(R.id.iv_charm_level);
ivCharmLevel.setVisibility(View.GONE);
if (item.getUserLevelVo() != null && !TextUtils.isEmpty(item.getUserLevelVo().getCharmUrl())) {
ivCharmLevel.setVisibility(View.VISIBLE);
ImageLoadUtils.loadImage(mContext, item.getUserLevelVo().getCharmUrl(), ivCharmLevel);
}
cbFriend.setChecked(pchFriendInfo.isSelected());
// cbFriend.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// onSelect(cbFriend, pchFriendInfo, item);
// }
// });
// cbFriend.setOnCheckedChangeListener((buttonView, isChecked) -> {
//
// });
helper.getView(R.id.container).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onSelect(cbFriend, pchFriendInfo, item);
}
});
}
private void onSelect(CheckBox cbFriend, PublicChatHallFriendInfo pchFriendInfo, UserInfo item) {
int count = 0;
for (PublicChatHallFriendInfo publicChatHallFriendInfo : getData()) {
if (publicChatHallFriendInfo.isSelected()) {
count++;
}
}
if (count == 20 && !pchFriendInfo.isSelected()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_adapter_invitefriendlistadapter_01));
return;
}
cbFriend.setChecked(!cbFriend.isChecked());
pchFriendInfo.setSelected(!pchFriendInfo.isSelected());
EventBus.getDefault().post(new AitFriendEvent()
.setType(pchFriendInfo.isSelected() ? AitFriendEvent.TYPE_ADD : AitFriendEvent.TYTPE_REMOVE)
.setUid(String.valueOf(item.getUid()))
.setNick(item.getNick()));
}
}

View File

@@ -12,6 +12,9 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.chwl.app.utils.NamePlateHelper;
import com.chwl.core.level.UserLevelVo;
import com.chwl.core.room.bean.RoomOnlineUserBean;
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.uinfo.constant.GenderEnum;
@@ -41,19 +44,16 @@ import io.reactivex.disposables.Disposable;
* @author Administrator
* @date 2017/12/4
*/
public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMember, BaseViewHolder> {
public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<RoomOnlineUserBean, BaseViewHolder> {
private boolean mIsHomeParty;
private Disposable mDisposable;
private Context context;
private OnRoomOnlineNumberChangeListener mListener;
public OnlineUserAdapter(Context context, boolean isHomeParty) {
super(null);
addItemType(OnlineChatMember.NORMAL, R.layout.list_item_online_user);
addItemType(OnlineChatMember.NOBLE, R.layout.list_item_online_user_mystery);
addItemType(RoomOnlineUserBean.NORMAL, R.layout.list_item_online_user);
addItemType(RoomOnlineUserBean.NOBLE, R.layout.list_item_online_user_mystery);
mIsHomeParty = isHomeParty;
this.context = context;
}
@Override
@@ -63,147 +63,76 @@ public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMembe
}
@Override
protected void convert(@NonNull BaseViewHolder baseViewHolder, OnlineChatMember onlineChatMember) {
if (onlineChatMember != null && onlineChatMember.chatRoomMember != null) {
if (onlineChatMember.getItemType() == OnlineChatMember.NORMAL) {
setNormalData(baseViewHolder, onlineChatMember);
} else {
setMysteryData();
}
protected void convert(@NonNull BaseViewHolder helper, RoomOnlineUserBean item) {
if (item.getItemType() == OnlineChatMember.NOBLE) {
return;
}
// 性别
final ImageView sexImage = helper.getView(R.id.sex);
if (item.getGender() == 1) {
sexImage.setVisibility(View.VISIBLE);
sexImage.setImageResource(R.drawable.ic_gender_male);
} else if (item.getGender() == 2) {
sexImage.setVisibility(View.VISIBLE);
sexImage.setImageResource(R.drawable.ic_gender_female);
} else {
sexImage.setVisibility(View.GONE);
}
}
private void setMysteryData() {
//do nothing
}
// 昵称
helper.setText(R.id.nick, RegexUtil.getPrintableString(item.getNick()));
private void setNormalData(BaseViewHolder baseViewHolder, OnlineChatMember onlineChatMember) {
setSexData(baseViewHolder, onlineChatMember);
ImageView roomOnlineTag = baseViewHolder.getView(R.id.room_online_tag);
ImageView managerLogo = baseViewHolder.getView(R.id.manager_logo);
roomOnlineTag.setVisibility(onlineChatMember.isOnMic ? View.VISIBLE : View.GONE);
managerLogo.setVisibility((onlineChatMember.isAdmin || onlineChatMember.isRoomOwer)
? View.VISIBLE : View.GONE);
managerLogo.setImageResource(onlineChatMember.isAdmin ? R.drawable.icon_admin_logo
: R.drawable.icon_user_list_room_ownner);
baseViewHolder.setText(R.id.nick, RegexUtil.getPrintableString(onlineChatMember.chatRoomMember.getNick()));
NobleAvatarView nobleAvatarView = baseViewHolder.getView(R.id.noble_avatar_view);
// 头像
NobleAvatarView nobleAvatarView = helper.getView(R.id.noble_avatar_view);
nobleAvatarView.setSize(37, 54, 0);
nobleAvatarView.setData(onlineChatMember.chatRoomMember);
nobleAvatarView.setData(item);
// 官字
baseViewHolder.getView(R.id.iv_user_official).setVisibility(onlineChatMember.isOfficial() ? View.VISIBLE : View.GONE);
helper.getView(R.id.iv_user_official).setVisibility(item.isOfficial() ? View.VISIBLE : View.GONE);
// 管理
ImageView ivManager = helper.getView(R.id.manager_logo);
if (item.getMemberType() != null && item.getMemberType().equals("MANAGER")) {
ivManager.setVisibility(View.VISIBLE);
ivManager.setImageResource(R.drawable.icon_admin_logo);
} else if (item.getMemberType() != null && item.getMemberType().equals("CREATOR")) {
ivManager.setVisibility(View.VISIBLE);
ivManager.setImageResource(R.drawable.icon_user_list_room_ownner);
} else {
ivManager.setVisibility(View.GONE);
}
// 在麦
ImageView ivMic = helper.getView(R.id.room_online_tag);
ivMic.setVisibility(item.isInMic() ? View.VISIBLE : View.GONE);
//等级
UserLevelVo levelVo = item.getUserLevelVo();
String experLevelUrl = null;
String charmLevelUrl = null;
if (levelVo != null) {
experLevelUrl = levelVo.getExperUrl();
charmLevelUrl = levelVo.getCharmUrl();
}
//经验等级
AppCompatImageView ivUserExper = baseViewHolder.getView(R.id.iv_user_exper);
String experLevelUrl = NobleUtil.getLevel(UserLevelResourceType.EXPER_URL, onlineChatMember.chatRoomMember);
AppCompatImageView ivUserExper = helper.getView(R.id.iv_user_exper);
boolean isExperLevelUrlEmpty = TextUtils.isEmpty(experLevelUrl);
ivUserExper.setVisibility(!isExperLevelUrlEmpty ? View.VISIBLE : View.GONE);
if (!isExperLevelUrlEmpty) {
ImageLoadUtils.loadImage(mContext, experLevelUrl, ivUserExper);
}
//魅力等级
AppCompatImageView ivUserCharm = baseViewHolder.getView(R.id.iv_user_charm);
String charmLevelUrl = NobleUtil.getLevel(UserLevelResourceType.CHARM_URL, onlineChatMember.chatRoomMember);
AppCompatImageView ivUserCharm = helper.getView(R.id.iv_user_charm);
boolean isCharmLevelUrlEmpty = TextUtils.isEmpty(charmLevelUrl);
ivUserCharm.setVisibility(!isCharmLevelUrlEmpty ? View.VISIBLE : View.GONE);
if (!isCharmLevelUrlEmpty) {
ImageLoadUtils.loadImage(mContext, charmLevelUrl, ivUserCharm);
}
// 官方主播铭牌标识
String fixWord = NobleUtil.getLevel(UserInfo.OAC_NAME, onlineChatMember.chatRoomMember);
String iconPic = NobleUtil.getLevel(UserInfo.OAC_ICON, onlineChatMember.chatRoomMember);
View inOfficialMask = baseViewHolder.getView(R.id.in_official_mask);
if (!TextUtils.isEmpty(fixWord) && !TextUtils.isEmpty(iconPic)) {
inOfficialMask.setVisibility(View.VISIBLE);
TextView tvOfficialMask = inOfficialMask.findViewById(R.id.tv_official_mask);
if (tvOfficialMask != null) {
tvOfficialMask.setText(fixWord);
}
ImageView ivOfficialMask = inOfficialMask.findViewById(R.id.iv_official_mask);
if (ivOfficialMask != null) {
ImageLoadUtils.loadImage(mContext, iconPic, ivOfficialMask);
}
} else {
inOfficialMask.setVisibility(View.GONE);
}
// 铭牌
String namePlateWord = NobleUtil.getLevel(UserInfo.NAMEPLATE_WORD, onlineChatMember.chatRoomMember);
String namePlatePic = NobleUtil.getLevel(UserInfo.NAMEPLATE_PIC, onlineChatMember.chatRoomMember);
View inNamePlate = baseViewHolder.getView(R.id.in_nameplate);
if (!TextUtils.isEmpty(namePlateWord) && !TextUtils.isEmpty(namePlatePic)) {
inNamePlate.setVisibility(View.VISIBLE);
TextView tvNamePlate = inNamePlate.findViewById(R.id.tv_official_mask);
if (tvNamePlate != null) {
tvNamePlate.setText(namePlateWord);
}
ImageView ivNamePlate = inNamePlate.findViewById(R.id.iv_official_mask);
if (ivNamePlate != null) {
ImageLoadUtils.loadImage(mContext, namePlatePic, ivNamePlate);
}
} else {
inNamePlate.setVisibility(View.GONE);
}
AppCompatImageView ivUserLevel = baseViewHolder.getView(R.id.iv_noble_level);
String resource = (String) NobleUtil.getResource(NobleResourceType.KEY_BADGE, onlineChatMember.chatRoomMember);
if (TextUtils.isEmpty(resource)) {
ivUserLevel.setVisibility(View.GONE);
return;
}
ivUserLevel.setVisibility(View.VISIBLE);
NobleUtil.loadResource(resource, ivUserLevel);
}
private void setSexData(BaseViewHolder baseViewHolder, OnlineChatMember onlineChatMember) {
final ImageView sexImage = baseViewHolder.getView(R.id.sex);
String gender = NobleUtil.getLevel(UserInfo.GENDER, onlineChatMember.chatRoomMember);
if ("1".equals(gender)) {
sexImage.setVisibility(View.VISIBLE);
sexImage.setImageResource(R.drawable.ic_gender_male);
} else if ("2".equals(gender)) {
sexImage.setVisibility(View.VISIBLE);
sexImage.setImageResource(R.drawable.ic_gender_female);
} else {
NimUserInfo nimUserInfo = NimUserInfoCache.getInstance().getUserInfo(onlineChatMember.chatRoomMember.getAccount());
if (nimUserInfo == null) {
NimUserInfoCache.getInstance().getUserInfoFromRemote(onlineChatMember.chatRoomMember.getAccount(),
new RequestCallbackWrapper<NimUserInfo>() {
@Override
public void onResult(int i, NimUserInfo nimUserInfo, Throwable throwable) {
if (nimUserInfo != null) {
if (nimUserInfo.getGenderEnum() == GenderEnum.MALE) {
sexImage.setVisibility(View.VISIBLE);
sexImage.setImageResource(R.drawable.ic_gender_male);
} else if (nimUserInfo.getGenderEnum() == GenderEnum.FEMALE) {
sexImage.setVisibility(View.VISIBLE);
sexImage.setImageResource(R.drawable.ic_gender_female);
} else {
sexImage.setVisibility(View.GONE);
}
}
}
});
} else {
if (nimUserInfo.getGenderEnum() == GenderEnum.MALE) {
sexImage.setVisibility(View.VISIBLE);
sexImage.setImageResource(R.drawable.ic_gender_male);
} else if (nimUserInfo.getGenderEnum() == GenderEnum.FEMALE) {
sexImage.setVisibility(View.VISIBLE);
sexImage.setImageResource(R.drawable.ic_gender_female);
} else {
sexImage.setVisibility(View.GONE);
}
}
}
View inNamePlate = helper.getView(R.id.in_nameplate);
NamePlateHelper.INSTANCE.load(inNamePlate, inNamePlate.findViewById(R.id.tv_official_mask), inNamePlate.findViewById(R.id.iv_official_mask), item);
}
private void registerRoomEvent() {
@@ -240,7 +169,7 @@ public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMembe
updateMemberIn(roomEvent);
} else if (event == RoomEvent.ROOM_MEMBER_EXIT) {
if (mListener != null) {
mListener.onMemberExit(roomEvent.getAccount(), mData);
mListener.onMemberExit(roomEvent.getAccount());
}
}
});
@@ -248,19 +177,19 @@ public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMembe
private void updateMemberIn(RoomEvent roomEvent) {
if (mListener != null) {
mListener.onMemberIn(roomEvent.getAccount(), mData);
mListener.onMemberIn(roomEvent.getAccount());
}
}
private void updateManager(RoomEvent roomEvent) {
if (mListener != null)
mListener.onUpdateMemberManager(roomEvent.getAccount(),
roomEvent.getEvent() == RoomEvent.ROOM_MANAGER_REMOVE, mData);
roomEvent.getEvent() == RoomEvent.ROOM_MANAGER_REMOVE);
}
private void updateDownUpMic(String account, boolean isUpMic) {
if (mListener != null) {
mListener.onMemberDownUpMic(account, isUpMic, mData);
mListener.onMemberDownUpMic(account, isUpMic);
}
}
@@ -281,34 +210,29 @@ public class OnlineUserAdapter extends BaseMultiItemQuickAdapter<OnlineChatMembe
*
* @param account
*/
void onMemberIn(String account, List<OnlineChatMember> dataList);
void onMemberIn(String account);
/**
* 成员出去回调
*
* @param account
* @param dataList
*/
void onMemberExit(String account, List<OnlineChatMember> dataList);
void onMemberExit(String account);
/**
* 成员上下麦更新
*
* @param account
* @param isUpMic
* @param dataList
*/
void onMemberDownUpMic(String account, boolean isUpMic,
List<OnlineChatMember> dataList);
void onMemberDownUpMic(String account, boolean isUpMic);
/**
* 设置管理员回调
*
* @param account
* @param dataList
*/
void onUpdateMemberManager(String account, boolean isRemoveManager,
List<OnlineChatMember> dataList);
void onUpdateMemberManager(String account, boolean isRemoveManager);
void addMemberBlack();
}

View File

@@ -0,0 +1,17 @@
package com.chwl.app.avroom.adapter
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.load
import com.chwl.core.room.bean.RoomIcon
class RoomGameplayAdapter :
BaseQuickAdapter<RoomIcon, BaseViewHolder>(R.layout.room_gameplay_item2) {
override fun convert(helper: BaseViewHolder, item: RoomIcon?) {
helper.setText(R.id.tv_name, item?.name)
val iconView = helper.getView<ImageView>(R.id.iv_icon)
iconView.load(item?.icon)
}
}

View File

@@ -0,0 +1,106 @@
package com.chwl.app.avroom.adapter;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.core.content.ContextCompat;
import com.chwl.app.R;
import com.chwl.app.ui.widget.XRecyclerView.ScaleTransitionPagerTitleView;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.GradientLineRoundPagerIndicator;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator;
import java.util.List;
public class RoomMessageIndicatorAdapter extends CommonNavigatorAdapter {
private final Context mContext;
private final List<? extends CharSequence> mTitleList;
private int textSize = 14;
private float minScale = 1f;
private boolean showIndicator = true;
private OnItemSelectListener mOnItemSelectListener;
public RoomMessageIndicatorAdapter(Context context, List<? extends CharSequence> charSequences) {
this.mContext = context;
this.mTitleList = charSequences;
}
@Override
public int getCount() {
return mTitleList == null ? 0 : mTitleList.size();
}
@Override
public IPagerTitleView getTitleView(Context context, final int i) {
ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true);
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.white_transparent_60));
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_FFFFFF));
scaleTransitionPagerTitleView.setMinScale(minScale);
scaleTransitionPagerTitleView.setTextSize(textSize);
int padding = UIUtil.dip2px(context, 13);
scaleTransitionPagerTitleView.setPadding(padding, 0, padding, 0);
scaleTransitionPagerTitleView.setText(mTitleList.get(i));
scaleTransitionPagerTitleView.setOnClickListener(view -> {
if (mOnItemSelectListener != null) {
mOnItemSelectListener.onItemSelect(i, scaleTransitionPagerTitleView);
}
});
return scaleTransitionPagerTitleView;
}
@Override
public IPagerIndicator getIndicator(Context context) {
LinePagerIndicator indicator = new LinePagerIndicator(context);
indicator.setMode(LinePagerIndicator.MODE_EXACTLY);
indicator.setLineHeight(UIUtil.dip2px(mContext, 1.5));
indicator.setRoundRadius(UIUtil.dip2px(mContext, 1));
indicator.setLineWidth(UIUtil.dip2px(mContext, 8));
indicator.setColors(context.getResources().getColor(R.color.color_10ECD6));
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
// lp.bottomMargin = mBottomMargin;
indicator.setLayoutParams(lp);
return indicator;
}
public int getTextSize() {
return textSize;
}
public void setTextSize(int textSize) {
this.textSize = textSize;
}
public float getMinScale() {
return minScale;
}
public void setMinScale(float minScale) {
this.minScale = minScale;
}
public boolean isShowIndicator() {
return showIndicator;
}
public void setShowIndicator(boolean showIndicator) {
this.showIndicator = showIndicator;
}
public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) {
mOnItemSelectListener = onItemSelectListener;
}
public interface OnItemSelectListener {
void onItemSelect(int position, TextView view);
}
}

View File

@@ -12,7 +12,7 @@ class RoomPKSearchAdapter :
override fun convert(helper: BaseViewHolder, item: SimpleRoomInfo) {
helper.setText(R.id.tv_room_title,item.title.subAndReplaceDot(7))
.setText(R.id.tv_room_id,"Hiyoo号:${item.erbanNo}")
.setText(R.id.tv_room_id,"ID:${item.erbanNo}")
.setChecked(R.id.check_box,item.checked)
ImageLoadUtils.loadImage(mContext,item.avatar,helper.getView(R.id.iv_avatar))
helper.addOnClickListener(R.id.iv_avatar,R.id.check_box)

View File

@@ -54,7 +54,9 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
roomPkBean.csRank.getOrNull(0)?.let {
binding?.tvNickContribute?.text = it.nick.subAndReplaceDot(7)
binding?.tvValueContribute?.text = "神豪值:${it.amount}"
binding?.tvValueContribute?.text =
context?.getString(R.string.layout_dialog_room_pk_finish_07, it.amount.toString())
?: ""
ImageLoadUtils.loadImage(
context,
it.avatar,
@@ -65,7 +67,8 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
roomPkBean.crRank.getOrNull(0)?.let {
binding?.tvNickCharm?.text = it.nick.subAndReplaceDot(7)
binding?.tvValueCharm?.text = "魅力值:${it.amount}"
binding?.tvValueCharm?.text =
context?.getString(R.string.layout_activity_jewel_09, it.amount?.toString()) ?: ""
ImageLoadUtils.loadImage(
context,
it.avatar,

View File

@@ -3,6 +3,7 @@ package com.chwl.app.avroom.anotherroompk
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.databinding.DialogRoomPkReceivedBinding
import com.chwl.core.im.custom.bean.RoomPkBean
@@ -37,7 +38,7 @@ class RoomPkReceivedDialog : BaseDialog<DialogRoomPkReceivedBinding>() {
@SuppressLint("CheckResult")
override fun init() {
binding?.tvNick?.text = pkBean.inviteRoomTitle.subAndReplaceDot(7)
binding?.tvTime?.text = "${pkBean.pkDuration}分鐘"
binding?.tvTime?.text = "${pkBean.pkDuration}${getString(R.string.layout_activity_room_pk_create_010)}"
pkBean.pkDesc.ifNotNullOrEmpty {
binding?.tvDescTitle?.isVisible = true
binding?.tvDesc?.isVisible = true

View File

@@ -1,6 +1,5 @@
package com.chwl.app.avroom.core
import com.chwl.app.avroom.redpackage.RedPackageHandler
import com.chwl.core.support.room.RoomAbility
import com.chwl.core.support.room.RoomContext
@@ -13,7 +12,5 @@ class AudioRoomContext(roomId: Long) : RoomContext(roomId) {
override fun loadAbility(list: MutableMap<String, RoomAbility>) {
super.loadAbility(list)
// 红包处理器
list[RedPackageHandler::class.java.simpleName] = RedPackageHandler()
}
}

View File

@@ -4,6 +4,8 @@ import android.annotation.SuppressLint
import android.view.Gravity
import android.view.WindowManager
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import com.chwl.app.R
import com.chwl.app.avroom.adapter.CreateRoomGameAdapter
import com.chwl.app.base.BaseActivity
@@ -30,35 +32,35 @@ class CreateRoomDialog : BaseDialog<DialogCreateRoomBinding>() {
@SuppressLint("CheckResult")
override fun init() {
// if(isHomeGame){
// binding?.tvPlayType?.isVisible = false
// binding?.rgType?.isVisible = false
// binding?.rvGame?.isVisible = true
// }
// binding?.rvGame?.itemAnimator = null
// rvDelegate = RVDelegate.Builder<GameInfo>()
// .setAdapter(gameAdapter)
// .setRecyclerView(binding?.rvGame)
// .setLayoutManager(LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false))
// .build()
if(isHomeGame){
binding?.tvPlayType?.isVisible = false
binding?.rgType?.isVisible = false
binding?.rvGame?.isVisible = true
}
binding?.rvGame?.itemAnimator = null
rvDelegate = RVDelegate.Builder<GameInfo>()
.setAdapter(gameAdapter)
.setRecyclerView(binding?.rvGame)
.setLayoutManager(LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false))
.build()
// gameAdapter.setOnItemClickListener { _, _, position ->
// if (selectIndex != -1) {
// gameAdapter.data.getOrNull(selectIndex)?.isSelect = false
// gameAdapter.notifyItemChanged(selectIndex)
// }
// selectIndex = position
// gameAdapter.data.getOrNull(selectIndex)?.isSelect = true
// gameAdapter.notifyItemChanged(selectIndex)
// checkCreateEnable()
// }
gameAdapter.setOnItemClickListener { _, _, position ->
if (selectIndex != -1) {
gameAdapter.data.getOrNull(selectIndex)?.isSelect = false
gameAdapter.notifyItemChanged(selectIndex)
}
selectIndex = position
gameAdapter.data.getOrNull(selectIndex)?.isSelect = true
gameAdapter.notifyItemChanged(selectIndex)
checkCreateEnable()
}
// binding?.rbGameRoom?.setOnCheckedChangeListener { _, isChecked ->
// checkCreateEnable()
// if (isChecked) {
// binding?.rvGame?.isVisible = true
// }
// }
binding?.rbGameRoom?.setOnCheckedChangeListener { _, isChecked ->
checkCreateEnable()
if (isChecked) {
binding?.rvGame?.isVisible = true
}
}
binding?.rbPartyRoom?.setOnCheckedChangeListener { _, isChecked ->
checkCreateEnable()

View File

@@ -6,7 +6,7 @@ import android.view.View;
import com.chwl.app.R;
import com.chwl.app.databinding.DialogDatingVipRuleBinding;
import com.chwl.app.treasure_box.widget.dialog.BaseBindingDialog;
import com.chwl.app.base.BaseBindingDialog;
import com.chwl.library.annatation.ActLayoutRes;

View File

@@ -25,6 +25,7 @@ import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.model.AvRoomModel
import com.chwl.library.annatation.ActLayoutRes
import com.chwl.library.utils.ResUtil
import com.example.lib_utils.UiUtils
import io.reactivex.disposables.Disposable
@@ -64,8 +65,11 @@ class ExitRoomPopupWindow(val avRoomActivity: AVRoomActivity) : PopupWindow() {
}
private fun initView() {
animationStyle = R.style.style_anim_right_in_out
if(UiUtils.isRtl(avRoomActivity)){
animationStyle = R.style.style_anim_left_in_out
}else{
animationStyle = R.style.style_anim_right_in_out
}
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
tvExitRoom.setOnClickListener {

View File

@@ -207,13 +207,13 @@ public class PKResultDialog extends BaseDialog {
private void refreshBgByStatus() {
if (pkResult == PK_RESULT_VICTORY) {
ivResultTop.setImageResource(R.mipmap.pk_result_victory_top);
ivResultTop.setImageResource(R.drawable.pk_result_victory_top);
ivResultBottom.setImageResource(R.mipmap.pk_result_victory_bottom);
} else if (pkResult == PK_RESULT_FAIL) {
ivResultTop.setImageResource(R.mipmap.pk_result_fail_top);
ivResultTop.setImageResource(R.drawable.pk_result_fail_top);
ivResultBottom.setImageResource(R.mipmap.pk_result_fail_bottom);
} else if (pkResult == PK_RESULT_TIE) {
ivResultTop.setImageResource(R.mipmap.pk_result_tie_top);
ivResultTop.setImageResource(R.drawable.pk_result_tie_top);
ivResultBottom.setImageResource(R.mipmap.pk_result_tie_bottom);
}
}

View File

@@ -4,7 +4,7 @@ import android.content.Context
import android.view.View
import com.chwl.app.R
import com.chwl.app.databinding.DialogRequestUpmicBinding
import com.chwl.app.treasure_box.widget.dialog.BaseBindingDialog
import com.chwl.app.base.BaseBindingDialog
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.manager.IMNetEaseManager
import com.chwl.core.user.bean.BaseInfo

View File

@@ -1,68 +0,0 @@
package com.chwl.app.avroom.dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import androidx.databinding.DataBindingUtil;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.chwl.app.R;
import com.chwl.app.databinding.DialogRoomFreeGiftBinding;
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
import com.chwl.core.gift.bean.GiftFreeInfo;
import com.chwl.library.utils.TimeUtils;
/**
* 房间免费礼物弹窗
* Created by wushaocheng on 2022/12/14.
*/
public class RoomFreeGiftDialog extends BottomSheetDialog implements View.OnClickListener {
private Context context;
private GiftFreeInfo giftFreeInfo;
private DialogRoomFreeGiftBinding binding;
public RoomFreeGiftDialog(Context context, GiftFreeInfo giftFreeInfo) {
super(context, R.style.ErbanBottomSheetDialog);
this.context = context;
this.giftFreeInfo = giftFreeInfo;
}
@SuppressWarnings("ConstantConditions")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCanceledOnTouchOutside(true);
setContentView(R.layout.dialog_room_free_gift);
binding = DataBindingUtil.bind(findViewById(R.id.dialog_container));
binding.setClick(this);
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display d = windowManager.getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
params.dimAmount = 0f;
getWindow().setAttributes(params);
binding.tvTop.setText(context.getString(R.string.dialog_free_gift_top, TimeUtils.secondsToTime(giftFreeInfo.getFirstSecond())));
binding.tvBottom.setText(String.format(context.getString(R.string.dialog_free_gift_bottom_text), giftFreeInfo.getGiftName(), giftFreeInfo.getMaxStage()));
ImageLoadUtilsV2.loadImage(binding.ivGiftIcon, giftFreeInfo.getGiftUrl());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_delete:
case R.id.tv_know:
dismiss();
break;
}
}
}

View File

@@ -0,0 +1,200 @@
package com.chwl.app.avroom.dialog
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.avroom.adapter.RoomGameplayAdapter
import com.chwl.app.databinding.RoomGameplayDialogBinding
import com.chwl.app.treasure_box.widget.GoldBoxHelper
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.webview.baishun.BaiShunGameWebActivity
import com.chwl.app.ui.webview.room_banner.RoomWebDialogActivity
import com.chwl.app.utils.CommonJumpHelper
import com.chwl.core.room.bean.RoomIcon
import com.chwl.core.room.core.RoomDataService
import com.chwl.core.room.game.bean.BaiShunGameConfig
import com.chwl.core.room.model.AvRoomModel
import com.chwl.core.support.room.RoomContext
import com.chwl.library.utils.SingleToastUtil
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.gson.Gson
import io.reactivex.disposables.CompositeDisposable
class RoomGameplayDialog :
BottomSheetDialogFragment() {
private var binding: RoomGameplayDialogBinding? = null
private var compositeDisposable: CompositeDisposable? = null
private val adapter = RoomGameplayAdapter()
var listener: RoomGameplayDialog.GameplayDialogListener? = null
override fun getTheme(): Int {
return R.style.ErbanBottomSheetDialogDimFalse
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = RoomGameplayDialogBinding.inflate(LayoutInflater.from(context))
return binding?.root
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return super.onCreateDialog(savedInstanceState).apply {
this.setCanceledOnTouchOutside(true)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
switchStatus(0)
requestData()
}
private fun initView() {
adapter.setOnItemClickListener { _, view, position ->
val item = adapter.getItem(position) as RoomIcon
jump(item)
}
binding?.recyclerView?.adapter = adapter
}
private fun requestData() {
val dataService =
RoomContext.get()?.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
val cacheKey = "gameplay_list#${parentFragment.hashCode()}"
val list = dataService?.getData(cacheKey) as? List<RoomIcon>
if (!list.isNullOrEmpty()) {
loadData(list)
return
}
val disposable = AvRoomModel.get().roomGamePlayList
.doOnError {
SingleToastUtil.showToast(it.message)
switchStatus(-2)
}
.subscribe { it: List<RoomIcon> ->
dataService?.putData(cacheKey, it)
loadData(it)
}
getCompositeDisposable().add(disposable)
}
private fun loadData(list: List<RoomIcon>?) {
if (list.isNullOrEmpty()) {
switchStatus(-1)
} else {
adapter.setNewData(list)
switchStatus(1)
}
}
private fun switchStatus(status: Int) {
when (status) {
// loading
0 -> {
binding?.recyclerView?.isVisible = false
binding?.layoutStatus?.isVisible = true
binding?.groupStatusLoading?.isVisible = true
binding?.groupStatusText?.isVisible = false
}
// 有数据
1 -> {
binding?.recyclerView?.isVisible = true
binding?.layoutStatus?.isVisible = false
}
// 空数据
-1 -> {
binding?.recyclerView?.isVisible = false
binding?.layoutStatus?.isVisible = true
binding?.groupStatusLoading?.isVisible = false
binding?.groupStatusText?.isVisible = true
binding?.tvStatus?.setText(R.string.avroom_presenter_roomnewbiehellowwordpresenter_01)
}
// 失败
else -> {
binding?.recyclerView?.isVisible = false
binding?.layoutStatus?.isVisible = true
binding?.groupStatusLoading?.isVisible = false
binding?.groupStatusText?.isVisible = true
binding?.tvStatus?.setText(R.string.request_failed_again_later)
}
}
}
private fun jump(data: RoomIcon) {
dismissAllowingStateLoss()
if (data.isFindLove()) {
GoldBoxHelper.handleBoxClick(context)
} else if (data.isBaiShunGame()) {
jumpBaiShunGame(data)
} else {
val url = data.skipContent
if (data.skipType == 3 && !url.isNullOrEmpty()) {
if (data.showType == 2) {
RoomWebDialogActivity.start(requireContext(), url, false)
} else {
CommonWebViewActivity.start(context, url)
}
} else {
CommonJumpHelper.bannerJump(context, data)
}
}
}
override fun onDestroy() {
super.onDestroy()
onUnbindContext()
}
private fun getCompositeDisposable(): CompositeDisposable {
var disposable = compositeDisposable
if (disposable == null) {
disposable = CompositeDisposable()
compositeDisposable = disposable
}
return disposable
}
private fun onUnbindContext() {
compositeDisposable?.dispose()
compositeDisposable = null
}
private fun jumpBaiShunGame(data: RoomIcon) {
try {
val url = data.skipContent
val ruleValue = Gson().fromJson<RoomIcon.RuleValueBean>(
data.ruleValue,
RoomIcon.RuleValueBean::class.java
)
val config = Gson().fromJson<BaiShunGameConfig>(
ruleValue.RESERVE,
BaiShunGameConfig::class.java
)
if (config != null && url != null) {
config.reloadDynamicParams()
listener?.onShowBaiShunGame(url, config)
// BaiShunGameWebActivity.start(requireContext(), url, config)
} else {
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
interface GameplayDialogListener {
fun onShowBaiShunGame(url: String, config: BaiShunGameConfig)
}
}

View File

@@ -1,154 +0,0 @@
package com.chwl.app.avroom.dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import androidx.databinding.DataBindingUtil;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.chwl.app.R;
import com.chwl.app.avroom.activity.CpRoomInviteActivity;
import com.chwl.app.avroom.widget.EditRoomTitleDialog;
import com.chwl.app.databinding.DialogRoomImposeBinding;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.library.common.util.Utils;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.model.RoomSettingModel;
import com.chwl.core.utils.net.DontWarnObserver;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import com.chwl.library.utils.codec.DESUtils;
public class RoomImposeDialog extends BottomSheetDialog implements View.OnClickListener {
private Context context;
private DialogRoomImposeBinding binding;
public RoomImposeDialog(Context context) {
super(context, R.style.ErbanBottomSheetDialogDimFalse);
this.context = context;
}
@SuppressWarnings("ConstantConditions")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCanceledOnTouchOutside(true);
setContentView(R.layout.dialog_room_impose);
binding = DataBindingUtil.bind(findViewById(R.id.dialog_container));
binding.setClick(this);
FrameLayout bottomSheet = findViewById(R.id.design_bottom_sheet);
if (bottomSheet != null) {
BottomSheetBehavior.from(bottomSheet).setSkipCollapsed(false);
BottomSheetBehavior.from(bottomSheet).setPeekHeight(
UIUtil.dip2px(context, 270) +
(Utils.hasSoftKeys(context) ? Utils.getNavigationBarHeight(context) : 0));
}
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display d = windowManager.getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
getWindow().setAttributes(params);
getWindow().setWindowAnimations(R.style.ErbanCommonWindowAnimationStyle);
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) return;
if ("lock".equals(roomInfo.getLimitType()) || !TextUtils.isEmpty(roomInfo.roomPwd)) {
binding.tvPwd.setTextColor(context.getResources().getColor(R.color.appColor));
} else if ("isFriend".equals(roomInfo.getLimitType())) {
binding.tvFriend.setTextColor(context.getResources().getColor(R.color.appColor));
} else if ("isInvite".equals(roomInfo.getLimitType())) {
binding.tvInvite.setTextColor(context.getResources().getColor(R.color.appColor));
}
}
@Override
public void onClick(View v) {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) return;
switch (v.getId()) {
case R.id.tv_invite:
context.startActivity(new Intent(context, CpRoomInviteActivity.class));
dismiss();
break;
case R.id.tv_friend:
updateRoomInfo("", roomInfo, RoomInfo.IS_FRIEND);
break;
case R.id.tv_pwd:
String oldContent = "";
try {
oldContent = DESUtils.DESAndBase64Decrypt(roomInfo.roomPwd);
} catch (Exception e) {
e.printStackTrace();
}
EditRoomTitleDialog pwdDialog = new EditRoomTitleDialog(context,
EditRoomTitleDialog.TYPE_EDIT_PASSWORD, oldContent);
pwdDialog.setOnEditTitleListner(new EditRoomTitleDialog.OnEditTitleListner() {
@Override
public void onEditPwdListner(String newPwd) {
String encryptPwd = DESUtils.DESAndBase64(newPwd);
if (encryptPwd.equals(roomInfo.getRoomPwd())) {
return;
}
updateRoomInfo(encryptPwd, roomInfo, RoomInfo.LOCK);
}
});
pwdDialog.show();
break;
case R.id.tv_cancel_limit:
updateRoomInfo("", roomInfo, "");
break;
case R.id.btn_cancel:
dismiss();
break;
}
}
private void updateRoomInfo(String encryptPwd, RoomInfo roomInfo, String limitType) {
//更新房间接口调用成功后会发事件RoomEvent.ROOM_INFO_UPDATE
RoomSettingModel model = new RoomSettingModel();
model.updateRoomInfo(roomInfo.title,
roomInfo.getRoomDesc(),
roomInfo.getIntroduction(),
encryptPwd,
roomInfo.getRoomTag(),
roomInfo.tagId,
AuthModel.get().getCurrentUid(),
AuthModel.get().getTicket(),
roomInfo.isHasAnimationEffect(),
roomInfo.getAudioQuality(),
limitType,
roomInfo.isPureMode(),
roomInfo.getType(),
roomInfo.getMgId())
.subscribe(new DontWarnObserver<RoomInfo>() {
@Override
public void accept(RoomInfo roomInfo, String error) {
super.accept(roomInfo, error);
if (error != null) {
SingleToastUtil.showToast(error);
} else {
if (!limitType.equals(RoomInfo.IS_INVITE)) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomimposedialog_04));
}
}
}
});
dismiss();
}
}

View File

@@ -127,7 +127,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
addOpenOrClosePublicScreenAction(optAdapter);
// addRedPackageSwitch();
addCleanScreenAction(optAdapter);
addRoomLimit(optAdapter);
// addRoomLimit(optAdapter);
addGiftValueAction(optAdapter);
addSuperAdminAction(optAdapter);
addShieldReportAction(optAdapter);
@@ -271,7 +271,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
private void addRoomAlbum(OptAdapter optAdapter) {
if (AvRoomDataManager.get().isHasRoomAlbum()) {
optAdapter.addData(new OptAction(R.drawable.ic_room_operation_album, "房间相册", () -> {
optAdapter.addData(new OptAction(R.drawable.ic_room_operation_album, ResUtil.getString(R.string.room_album), () -> {
RoomAlbumActivity.start(getContext());
}));
}
@@ -361,12 +361,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
*/
private void addRoomLimit(OptAdapter optAdapter) {
//添加
if (AvRoomDataManager.get().isRoomOwner() && AvRoomDataManager.get().isCpRoom()) {
optAdapter.addData(new OptAction(R.drawable.icon_room_limit,
ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_023),
() -> new RoomImposeDialog(context).show()));
}
}
/**

View File

@@ -5,7 +5,7 @@ import android.view.View
import com.donkingliang.labels.LabelsView
import com.chwl.app.R
import com.chwl.app.databinding.DialogSelectLabelBinding
import com.chwl.app.treasure_box.widget.dialog.BaseBindingDialog
import com.chwl.app.base.BaseBindingDialog
import com.chwl.library.annatation.ActLayoutRes
@ActLayoutRes(R.layout.dialog_select_label)

View File

@@ -1,498 +0,0 @@
package com.chwl.app.avroom.firstcharge
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.style.ForegroundColorSpan
import android.util.Log
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager
import android.widget.PopupWindow
import android.widget.TextView
import androidx.recyclerview.widget.GridLayoutManager
//import com.appsflyer.AFInAppEventParameterName
//import com.appsflyer.AFInAppEventType
//import com.appsflyer.AppsFlyerLib
import com.example.module_base.support.billing.IBillingResult
import com.example.module_base.support.billing.IBillingService
import com.example.module_base.support.billing.IProductDetails
import com.example.module_base.support.billing.IPurchase
import com.example.module_base.support.google.IGoogleService
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingActivity
import com.chwl.app.databinding.DialogFirstChargeBinding
import com.chwl.app.ui.setting.ModifyPwdActivity
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
import com.chwl.core.Constants
import com.chwl.core.DemoCache
import com.chwl.core.UriProvider
import com.chwl.core.pay.PayModel
import com.chwl.core.pay.bean.FirstChargeGoods
import com.chwl.core.pay.bean.FirstChargeReward
import com.chwl.core.pay.bean.PayRecordId
import com.chwl.core.pay.event.FirstChargeEvent
import com.chwl.core.room.model.AvRoomModel
import com.chwl.core.utils.net.IgnoreException
import com.chwl.core.utils.extension.toast
import com.chwl.library.common.util.DeviceUtil
import com.chwl.library.utils.AppMetaDataUtil
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* author: wushaocheng
* time: 2022/2/21
* desc: 限时首充
*/
class FirstChargeDialog : BaseViewBindingActivity<DialogFirstChargeBinding>(),
IBillingService.Listener {
private var goodsList: List<FirstChargeGoods>? = null
private var currGoods: FirstChargeGoods? = null
private lateinit var helpPopupWindow: PopupWindow
private var billingManager: IBillingService? = null
private var position = -1
private val mReward2Adapter by lazy { Reward2Adapter() }
companion object {
@JvmStatic
fun start(context: Context) {
val starter = Intent(context, FirstChargeDialog::class.java)
context.startActivity(starter)
}
private const val BIND_CODE_GOLD = 200
private const val TAG = "FirstChargeDialog"
}
@SuppressLint("CheckResult")
override fun init() {
//这里的height用MATCH_PARENT状态栏会被顶上去,不知道什么鬼
val height = ScreenUtil.screenHeight - ScreenUtil.getStatusBarHeight(context)
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, height)
window.setGravity(Gravity.CENTER)
EventBus.getDefault().register(this)
binding.rbPlanA.setOnClickListener {
binding.rbPlanA.isChecked = true
binding.rbPlanB.isChecked = false
binding.rbPlanC.isChecked = false
binding.ivArrow1.visibility = View.VISIBLE
binding.ivArrow2.visibility = View.INVISIBLE
binding.ivArrow3.visibility = View.INVISIBLE
updateCurrGoods(goodsList?.getOrNull(0))
position = 0
}
binding.rbPlanB.setOnClickListener {
binding.rbPlanA.isChecked = false
binding.rbPlanB.isChecked = true
binding.rbPlanC.isChecked = false
binding.ivArrow1.visibility = View.INVISIBLE
binding.ivArrow2.visibility = View.VISIBLE
binding.ivArrow3.visibility = View.INVISIBLE
updateCurrGoods(goodsList?.getOrNull(1))
position = 1
}
binding.rbPlanC.setOnClickListener {
binding.rbPlanA.isChecked = false
binding.rbPlanB.isChecked = false
binding.rbPlanC.isChecked = true
binding.ivArrow1.visibility = View.INVISIBLE
binding.ivArrow2.visibility = View.INVISIBLE
binding.ivArrow3.visibility = View.VISIBLE
updateCurrGoods(goodsList?.getOrNull(2))
position = 2
}
binding.ivHelp.setOnClickListener { showHelpPopup() }
binding.tvCharge.setOnClickListener {
val channel = AppMetaDataUtil.getChannelID()
if (position == -1) {
ResUtil.getString(R.string.avroom_firstcharge_firstchargedialog_01).toast()
}
else{
goodsList?.get(position)?.let { charge ->
buyProduct(charge.productDetails)
}
}
// if (channel.equals(Constants.GOOGLE)) {
// goodsList?.get(position)?.let { charge ->
// buyProduct(charge.productDetails)
// }
// } else {
// CommonWebViewActivity.start(
// context,
// UriProvider.getOfficialPay(6, DeviceUtil.getDeviceId(context))
// )
// }
}
binding.recyclerView.layoutManager = GridLayoutManager(this, 6)
//重新定义每行的item数量
mReward2Adapter.setSpanSizeLookup { _, position ->
val data = mReward2Adapter.data
var spanSize = 0
when (data[position].itemType) {
FirstChargeReward.ONE -> {
spanSize = 6
}
FirstChargeReward.TWO_LEFT -> {
spanSize = 3
}
FirstChargeReward.TWO_RIGHT -> {
spanSize = 3
}
FirstChargeReward.THREE -> {
spanSize = 2
}
FirstChargeReward.TWO_LEFT_SMALL -> {
spanSize = 3
}
FirstChargeReward.TWO_RIGHT_SMALL -> {
spanSize = 3
}
}
spanSize
}
binding.recyclerView.adapter = mReward2Adapter
PayModel.get().firstChargeList
.compose(bindToLifecycle())
.subscribe({
initData(it)
}, {
it.printStackTrace()
SingleToastUtil.showToast(it.message)
finish()
})
binding.viewBg.setOnClickListener {
//do nothing
}
binding.root.setOnClickListener {
finish()
}
DemoCache.saveBoolean("FirstCharge", true)
AvRoomModel.get().postFirstCharge()
.compose(bindToLifecycle())
.subscribe()
}
@SuppressLint("SetTextI18n")
private fun initData(goodsList: List<FirstChargeGoods>) {
this.goodsList = goodsList
binding.rbPlanA.isChecked = true
updateCurrGoods(goodsList.getOrNull(0))
position = 0
when (goodsList.size) {
1 -> {
binding.rbPlanB.visibility = View.GONE
binding.rbPlanC.visibility = View.GONE
binding.rbPlanA.text = "$${goodsList[0].chargeMoney}"
}
2 -> {
binding.rbPlanC.visibility = View.GONE
binding.rbPlanA.text = "$${goodsList[0].chargeMoney}"
binding.rbPlanB.text = "$${goodsList[1].chargeMoney}"
}
3 -> {
binding.rbPlanA.text = "$${goodsList[0].chargeMoney}"
binding.rbPlanB.text = "$${goodsList[1].chargeMoney}"
binding.rbPlanC.text = "$${goodsList[2].chargeMoney}"
}
}
if (AppMetaDataUtil.getChannelID().equals(Constants.GOOGLE)) {
initBilling()
}
}
private fun initBilling() {
billingManager = IGoogleService.newBillingService(this,this)
}
@SuppressLint("CheckResult")
override fun onBillingClientSetupFinished() {
Log.i(TAG, "onBillingClientSetupFinished")
goodsList?.let { initProduceList(it) }
}
private fun initProduceList(goodsList: List<FirstChargeGoods>) {
val productKeys: MutableList<String> = ArrayList()
for (bean in goodsList) {
productKeys.add(bean.chargeProdId)
}
billingManager?.querySkuDetailsAsync(productKeys,object :IBillingService.ProductDetailsResponseListener{
override fun onProductDetailsResponse(
billingResult: IBillingResult,
productDetails: List<IProductDetails>
) {
if (!billingResult.isResponseOk()) {
Log.w(
TAG,
"Unsuccessful query for Error code: " + billingResult.getResponseCode()
)
}else if (productDetails.isNotEmpty()) {
for (chargeBean in goodsList) {
for (skuDetails in productDetails) {
if (skuDetails.getProductId() == chargeBean.chargeProdId) {
chargeBean.productDetails = skuDetails
break
}
}
}
}
}
})
}
/*商品更新回调*/
@SuppressLint("CheckResult")
override fun onPurchasesUpdated(purchases: List<IPurchase>) {
for (purchase in purchases) {
if (purchase.isPurchasedState() &&
purchase.getAccountIdentifiers() != null
) {
PayModel.get().verifyOrder(
purchase.getAccountIdentifiers()!!.getObfuscatedAccountId(),
purchase.getProducts()[0],
purchase.getPackageName(),
purchase.getPurchaseToken()
)
.compose(bindToLifecycle())
.subscribe(
{ token: String ->
//L.i("token=" + token);
billingManager?.consumeAsync(token)
// var skuDetails: IProductDetails? = null
// val goodList = goodsList
// if (!goodList.isNullOrEmpty()) {
// for (datum in goodList) {
// if (datum.chargeProdId == purchase.getProducts()[0]) {
// skuDetails = datum.productDetails
// break
// }
// }
// }
// if (skuDetails != null) {
// val eventValue: MutableMap<String, Any> =
// HashMap()
// eventValue[AFInAppEventParameterName.CONTENT_TYPE] = "Gold"
// eventValue[AFInAppEventParameterName.QUANTITY] = 1
// eventValue[AFInAppEventParameterName.CONTENT_ID] = purchase.getOrderId()!!
// skuDetails.getOneTimePurchaseOfferDetails()?.let {
// eventValue[AFInAppEventParameterName.REVENUE] =
// it.getPriceAmountMicros() / 1000000f
// eventValue["Price"] = it.getFormattedPrice()
// eventValue[AFInAppEventParameterName.CURRENCY] =
// it.getPriceCurrencyCode()
// }
// AppsFlyerLib.getInstance().logEvent(
// applicationContext,
// AFInAppEventType.PURCHASE,
// eventValue
// )
// }
}
) { throwable: Throwable ->
if (throwable !is IgnoreException) {
SingleToastUtil.showToast(throwable.message)
}
}
}
}
Log.i(TAG, "onPurchasesUpdated")
}
override fun onConsumeFinished(token: String?, result: Int) {
}
override fun onFailedHandle(result: Int) {
}
/*购买商品*/
@SuppressLint("CheckResult")
fun buyProduct(skuDetails: IProductDetails?) {
if (skuDetails != null) {
Log.d(TAG, "BuyProduct:" + skuDetails.getProductId())
PayModel.get().placeOrder(skuDetails.getProductId())
.compose(bindToLifecycle())
.subscribe(
{ recordId: PayRecordId ->
billingManager?.initiatePurchaseFlow(
skuDetails,
recordId.recordId
)
}
) { throwable: Throwable ->
SingleToastUtil.showToast(
throwable.message
)
}
} else {
Log.w(TAG, "skuDetails ==null")
}
}
override fun onResume() {
super.onResume()
if (billingManager?.isServiceConnected() == true) {
billingManager?.onQueryPurchases()
}
}
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
billingManager?.destroy()
}
private fun updateCurrGoods(firstChargeGoods: FirstChargeGoods?) {
firstChargeGoods?.let {
currGoods = it
val giveMoneyIndex = it.chargeProdTitle.lastIndexOf(it.giveMoney)
if (giveMoneyIndex == -1) {
binding.tvTitle.text = it.chargeProdTitle
} else {
val builder = SpannableStringBuilder(it.chargeProdTitle)
builder.setSpan(
ForegroundColorSpan(Color.parseColor("#BE5AF6")), giveMoneyIndex,
giveMoneyIndex + (it.giveMoney?.length ?: 0),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.tvTitle.text = builder
}
val firstChargeRewardList = it.firstChargeRewardList ?: return
when (firstChargeRewardList.size) {
1 -> {
for (bean in firstChargeRewardList) {
bean.itemType = FirstChargeReward.ONE
}
}
2 -> {
for (i in firstChargeRewardList.indices) {
if (i == 0) {
firstChargeRewardList[i].itemType = FirstChargeReward.TWO_LEFT
} else if (i == 1) {
firstChargeRewardList[i].itemType = FirstChargeReward.TWO_RIGHT
}
}
}
3 -> {
for (bean in firstChargeRewardList) {
bean.itemType = FirstChargeReward.THREE
}
}
4 -> {
for (i in firstChargeRewardList.indices) {
if ((i + 1) % 2 != 0) {
firstChargeRewardList[i].itemType = FirstChargeReward.TWO_LEFT
} else {
firstChargeRewardList[i].itemType = FirstChargeReward.TWO_RIGHT
}
}
}
else -> {
if (firstChargeRewardList.size % 3 == 0) {
for (bean in firstChargeRewardList) {
bean.itemType = FirstChargeReward.THREE
}
} else {
val num = firstChargeRewardList.size / 3
val residueNUm = firstChargeRewardList.size - (num * 3)
for (i in firstChargeRewardList.indices) {
if ((i + 1) <= num * 3) {
firstChargeRewardList[i].itemType = FirstChargeReward.THREE
} else if (residueNUm == 2) {
if (firstChargeRewardList.size - (i + 1) == 1) {
firstChargeRewardList[i].itemType =
FirstChargeReward.TWO_LEFT_SMALL
} else if (firstChargeRewardList.size - (i + 1) == 0) {
firstChargeRewardList[i].itemType =
FirstChargeReward.TWO_RIGHT_SMALL
}
} else {
firstChargeRewardList[i].itemType = FirstChargeReward.THREE
}
}
}
}
}
mReward2Adapter.setNewData(it.firstChargeRewardList)
}
}
private fun showHelpPopup() {
if (currGoods == null) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_firstcharge_firstchargedialog_02))
return
}
val contentView: View
if (!this::helpPopupWindow.isInitialized) {
contentView =
LayoutInflater.from(context)
.inflate(R.layout.layout_first_charge_help_view, null)
contentView.findViewById<TextView>(R.id.tv_content).text =
currGoods?.chargeProdDesc?.replace("\\n", "\n")?.replace("\\r", "\r")
helpPopupWindow =
PopupWindow(
contentView,
ScreenUtil.dip2px(150f),
WindowManager.LayoutParams.WRAP_CONTENT
)
helpPopupWindow.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
helpPopupWindow.isOutsideTouchable = true
helpPopupWindow.isFocusable = true
}
try {
helpPopupWindow.showAsDropDown(
binding.ivHelp,
UIUtil.dip2px(context, 18.0), UIUtil.dip2px(context, -3.0), Gravity.END
)
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
dialogManager.dismissDialog()
if (resultCode != RESULT_OK) {
return
}
if (requestCode == BIND_CODE_GOLD) {
ModifyPwdActivity.start(this, ModifyPwdActivity.FOGERT_PAY_PWD)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onFirstRechargeEvent(event: FirstChargeEvent?) {
finish()
}
}

View File

@@ -1,41 +0,0 @@
package com.chwl.app.avroom.firstcharge
import android.content.Context
import com.google.android.flexbox.AlignItems
import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.chwl.app.R
import com.chwl.app.databinding.DialogFirstChargePrizeBinding
import com.chwl.app.treasure_box.widget.dialog.BaseBindingDialog
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.pay.bean.FirstChargeReward
import com.chwl.library.annatation.ActLayoutRes
@ActLayoutRes(R.layout.dialog_first_charge_prize)
class FirstChargePrizeDialog(
context: Context,
val title: String?,
private val firstChargeRewardList: List<FirstChargeReward>?
) : BaseBindingDialog<DialogFirstChargePrizeBinding>(context) {
private lateinit var rvDelegate: RVDelegate<FirstChargeReward>
override fun init() {
rvDelegate = RVDelegate.Builder<FirstChargeReward>()
.setAdapter(RewardAdapter(ScreenUtil.dip2px(248f) / 3))
.setLayoutManager(FlexboxLayoutManager(context).apply {
alignItems = AlignItems.STRETCH
justifyContent = JustifyContent.SPACE_EVENLY
})
.setRecyclerView(binding.recyclerView)
.build()
binding.ivKnow.setOnClickListener {
closeDialog()
}
binding.tvDesc.text = title
rvDelegate.setNewData(firstChargeRewardList)
}
}

View File

@@ -1,39 +0,0 @@
package com.chwl.app.avroom.firstcharge
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.pay.bean.FirstChargeReward
import com.chwl.core.utils.CoreTextUtils
class Reward2Adapter : BaseMultiItemQuickAdapter<FirstChargeReward, BaseViewHolder>(null) {
init {
addItemType(FirstChargeReward.ONE, R.layout.item_first_charge_reward_one)
addItemType(FirstChargeReward.TWO_LEFT, R.layout.item_first_charge_reward_two_left)
addItemType(FirstChargeReward.TWO_RIGHT, R.layout.item_first_charge_reward_two_right)
addItemType(FirstChargeReward.THREE, R.layout.item_first_charge_reward_three)
addItemType(
FirstChargeReward.TWO_LEFT_SMALL,
R.layout.item_first_charge_reward_two_left_small
)
addItemType(
FirstChargeReward.TWO_RIGHT_SMALL,
R.layout.item_first_charge_reward_two_right_small
)
}
override fun convert(helper: BaseViewHolder, item: FirstChargeReward) {
ImageLoadUtils.loadImage(
mContext,
item.showPir,
helper.getView(R.id.iv_pic),
R.drawable.ic_first_charge_default
)
helper.setText(R.id.tv_name, item.showText)
.setText(R.id.tv_time, item.showTime)
.setGone(R.id.tv_time, !CoreTextUtils.isEmptyText(item.showTime))
}
}

View File

@@ -1,28 +0,0 @@
package com.chwl.app.avroom.firstcharge
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.pay.bean.FirstChargeReward
import com.chwl.core.utils.CoreTextUtils
class RewardAdapter(private val itemWidth: Int) :
BaseQuickAdapter<FirstChargeReward, BaseViewHolder>(R.layout.item_first_charge_reward) {
override fun convert(helper: BaseViewHolder, item: FirstChargeReward) {
helper.itemView.updateLayoutParams<RecyclerView.LayoutParams> {
width = itemWidth
}
ImageLoadUtils.loadImage(
mContext,
item.showPir,
helper.getView(R.id.iv_pic),
R.drawable.ic_first_charge_default
)
helper.setText(R.id.tv_name, item.showText)
.setText(R.id.tv_time, item.showTime)
.setGone(R.id.tv_time, !CoreTextUtils.isEmptyText(item.showTime))
}
}

View File

@@ -14,6 +14,7 @@ import android.text.TextUtils
import android.view.KeyEvent
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.ViewStub
import android.widget.EditText
import android.widget.ImageView
@@ -21,35 +22,30 @@ import android.widget.RelativeLayout
import android.widget.TextView
import androidx.annotation.CallSuper
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.withResumed
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
import com.chad.library.adapter.base.BaseViewHolder
import com.netease.nim.uikit.common.antispam.AntiSpamEvent
import com.netease.nimlib.sdk.StatusCode
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.orhanobut.logger.Logger
import com.tbruyelle.rxpermissions2.RxPermissions
import com.trello.rxlifecycle3.android.FragmentEvent
import com.chwl.app.R
import com.chwl.app.avroom.BottomViewListenerWrapper
import com.chwl.app.avroom.SoftKeyBoardListener
import com.chwl.app.avroom.SoftKeyBoardListener.OnSoftKeyBoardChangeListener
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.avroom.activity.RoomInviteActivity
import com.chwl.app.avroom.activity.RoomTitleEditActivity
import com.chwl.app.avroom.adapter.OnMicroItemClickListener
import com.chwl.app.avroom.adapter.RoomMessageIndicatorAdapter
import com.chwl.app.avroom.dialog.AttentionHintDialog
import com.chwl.app.avroom.dialog.DatingVipRuleDialog
import com.chwl.app.avroom.dialog.RoomFreeGiftDialog
import com.chwl.app.avroom.dialog.RoomGameplayDialog
import com.chwl.app.avroom.dialog.RoomOperationDialog
import com.chwl.app.avroom.firstcharge.FirstChargeDialog
import com.chwl.app.avroom.presenter.BaseRoomPresenter
import com.chwl.app.avroom.redpackage.send.RedPackageSendDialog
import com.chwl.app.avroom.public_chat.PublicChatRoomMessageWidget
import com.chwl.app.avroom.room_album.RoomAlbumModel
import com.chwl.app.avroom.view.IBaseRoomView
import com.chwl.app.avroom.widget.BottomView
@@ -60,26 +56,26 @@ import com.chwl.app.base.BaseMvpFragment
import com.chwl.app.event.OpenRoomIntroEvent
import com.chwl.app.friend.view.SelectFriendActivity
import com.chwl.app.home.adapter.RoomActAdapter
import com.chwl.app.shipantics.PullRadishActivity
import com.chwl.app.treasure_box.widget.GoldBoxHelper
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.app.music.widget.MusicPlayerView
import com.chwl.app.public_chat.ui.message.HeadlineViewModel
import com.chwl.app.room_chat.activity.RoomMsgActivity
import com.chwl.app.ui.pay.ChargeActivity
import com.chwl.app.ui.widget.ButtonItem
import com.chwl.app.ui.widget.GiftDialog
import com.chwl.app.ui.widget.GiftDialog.OnGiftDialogBtnClickListener
import com.chwl.app.ui.widget.GiftDialog.SenGiftCallback
import com.chwl.app.ui.widget.UserInfoDialog
import com.chwl.app.ui.widget.dialog.CommonTipDialog
import com.chwl.app.ui.widget.dynamicface.DynamicFaceDialog
import com.chwl.app.ui.widget.magicindicator.MagicIndicator
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.app.ui.widget.rollviewpager.RollPagerView
import com.chwl.app.ui.widget.rollviewpager.Util
import com.chwl.app.ui.widget.rollviewpager.hintview.ColorPointHintView
import com.chwl.app.utils.KeyBoardUtils
import com.chwl.app.music.widget.MusicPlayerView
import com.chwl.app.room_chat.activity.RoomMsgActivity
import com.chwl.core.XConstants
import com.chwl.app.vip.dialog.SelectPayTypeDialog
import com.chwl.core.Constants
import com.chwl.core.DemoCache
import com.chwl.core.UriProvider
import com.chwl.core.auth.AuthModel
import com.chwl.core.bean.RoomMicInfo
import com.chwl.core.gift.GiftModel
@@ -97,11 +93,11 @@ import com.chwl.core.manager.RoomEvent
import com.chwl.core.mentoring_relationship.event.MentoringStopCountingEvent
import com.chwl.core.room.anotherroompk.ShowGiftDialogEvent
import com.chwl.core.room.anotherroompk.ShowUserInfoDialogEvent
import com.chwl.core.room.bean.RoomContributeUserInfo
import com.chwl.core.room.bean.RoomInfo
import com.chwl.core.room.event.RoomAtEvent
import com.chwl.core.room.event.RoomClearScreenEvent
import com.chwl.core.room.game.GameStatus
import com.chwl.core.room.game.bean.BaiShunGameConfig
import com.chwl.core.room.giftvalue.helper.GiftValueMrg
import com.chwl.core.room.queue.bean.MicMemberInfo
import com.chwl.core.share.bean.SessionType
@@ -113,15 +109,23 @@ import com.chwl.core.support.room.RoomWidget
import com.chwl.core.user.UserModel
import com.chwl.core.user.bean.BaseInfo
import com.chwl.core.user.bean.UserInfo
import com.chwl.core.utils.CurrentTimeUtils
import com.chwl.core.utils.net.BalanceNotEnoughExeption
import com.chwl.core.utils.net.VipLevelNotEnoughException
import com.chwl.library.common.util.LimitClickUtils
import com.chwl.library.common.util.SPUtils
import com.chwl.library.net.rxnet.utils.RxNetWorkUtils
import com.chwl.library.rxbus.RxBus
import com.chwl.library.utils.*
import com.netease.nim.uikit.common.antispam.AntiSpamEvent
import com.netease.nimlib.sdk.StatusCode
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.orhanobut.logger.Logger
import com.tbruyelle.rxpermissions2.RxPermissions
import com.trello.rxlifecycle3.android.FragmentEvent
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@@ -135,26 +139,26 @@ import org.greenrobot.eventbus.ThreadMode
* @author chenran
* @date 2017/7/26
*/
open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
BaseMvpFragment<V?, P?>(),
open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
BaseMvpFragment<V?, P1?>(),
View.OnClickListener, OnGiftDialogBtnClickListener, IBaseRoomView, OnMicroItemClickListener,
RoomView {
private var myUid: Long = 0
protected lateinit var messagePager: ViewPager2
protected lateinit var messageView: MessageView
protected var publicChatMessageWidget: PublicChatRoomMessageWidget? = null
protected lateinit var bottomView: BottomView
protected lateinit var inputLayout: RelativeLayout
protected lateinit var inputEdit: EditText
protected lateinit var inputSend: ImageView
protected lateinit var inputHeadlineSend: ImageView
protected lateinit var microView: MicroView
private var musicPlayerView: MusicPlayerView? = null
private var ivRadishEntrance: View? = null
private var mVsMusicPlayer: ViewStub? = null
private var mDisposable: Disposable? = null
private var isCloseScreen = false
private var isOpenRedPackage = false
private var roomFreeGiftDialog: RoomFreeGiftDialog? = null
private val mClickLimit by lazy { LimitClickUtils() }
@JvmField
@@ -170,7 +174,6 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
* 是否開啟禮物值顯示
*/
private var showGiftValue = false
private var redPackageSendDialog: RedPackageSendDialog? = null
private val mOnSoftKeyBoardChangeListener: OnSoftKeyBoardChangeListener =
object : OnSoftKeyBoardChangeListener {
override fun keyBoardShow(height: Int) {
@@ -190,9 +193,11 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
// 房间小组件
private var widgets: HashMap<String, RoomWidget> = HashMap()
private val headlineViewModel by activityViewModels<HeadlineViewModel>()
@CallSuper
override fun onFindViews() {
messageView = mView.findViewById(R.id.message_view)
initMessageView()
bottomView = mView.findViewById(R.id.bottom_view)
inputLayout = mView.findViewById(R.id.input_layout)
inputEdit = mView.findViewById(R.id.input_edit)
@@ -205,9 +210,9 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
false
}
inputSend = mView.findViewById(R.id.input_send)
inputHeadlineSend = mView.findViewById(R.id.input_headline_send)
microView = mView.findViewById(R.id.micro_view)
mVsMusicPlayer = mView.findViewById(R.id.vs_music_player)
ivRadishEntrance = mView.findViewById(R.id.iv_radish_entrance)
messageView.setClickConsumer {
if (!TextUtils.isEmpty(it) && it != "0") {
showUserCardDialog(it)
@@ -225,10 +230,80 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
})
}
protected open fun initMessageView() {
messagePager = mView.findViewById<ViewPager2>(R.id.message_pager)
messageView = MessageView(context)
publicChatMessageWidget = PublicChatRoomMessageWidget(requireContext())
val tabList: MutableList<String> = java.util.ArrayList(2)
tabList.add(getString(R.string.room))
tabList.add(getString(R.string.public_chat_room))
val messageIndicator = mView.findViewById<MagicIndicator>(R.id.message_indicator)
messagePager.offscreenPageLimit = tabList.size
messagePager.adapter = object : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): RecyclerView.ViewHolder {
val view = if (viewType == 0) {
messageView
} else {
publicChatMessageWidget
}
view?.layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
return BaseViewHolder(view)
}
override fun getItemCount(): Int {
return tabList.size
}
override fun getItemViewType(position: Int): Int {
return position
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
}
}
val commonNavigator = CommonNavigator(context)
commonNavigator.setTitleWrapContent(false)
val magicIndicatorAdapter = RoomMessageIndicatorAdapter(context, tabList)
magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? ->
messagePager.currentItem = position
}
commonNavigator.adapter = magicIndicatorAdapter
messageIndicator.navigator = commonNavigator
messagePager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
messageIndicator.onPageScrolled(
position,
positionOffset,
positionOffsetPixels
)
}
override fun onPageSelected(position: Int) {
messageIndicator.onPageSelected(position)
}
override fun onPageScrollStateChanged(state: Int) {
messageIndicator.onPageScrollStateChanged(state)
}
})
}
@CallSuper
override fun onSetListener() {
bottomView.setMagicBtnEnable(true)
inputSend.setOnClickListener(this)
inputHeadlineSend.setOnClickListener(this)
inputLayout.setOnTouchListener { _: View?, _: MotionEvent? ->
inputEdit.clearFocus()
inputLayout.visibility = View.GONE
@@ -289,13 +364,47 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
checkFollowOwner()
GiftValueMrg.get().updateRoomGiftValue(false)
//先隐藏航海冒险
// ivRadishEntrance?.isVisible =
// !GoldBoxHelper.needIntegrateBoxEntrance() && GoldBoxHelper.isShowRadish()
//获取免费礼物详情
mvpPresenter?.queryFreeFlower()
initRoomAlbum()
initHeadline()
}
private fun initHeadline() {
headlineViewModel.loadingLiveData.observe(this) {
if (it) dialogManager?.showProgressDialog(context)
else dialogManager?.dismissDialog()
}
lifecycleScope.launch(Dispatchers.Main) {
headlineViewModel.sendHeadlineFlow.collect {
if (it.isSuccess) {
SingleToastUtil.showToast(R.string.sent_success)
inputEdit.setText("")
KeyBoardUtils.hideKeyBoard(activity, inputEdit)
} else {
if (it.code == BalanceNotEnoughExeption.code) {
showBalanceNotEnoughDialog()
} else {
SingleToastUtil.showToast(it.message)
}
}
}
}
headlineViewModel.getHeadlinePayMoneyIsNull()
}
private fun showBalanceNotEnoughDialog() {
val tipDialog = CommonTipDialog(context)
tipDialog.setTipMsg(ResUtil.getString(R.string.insufficient_balance_recharge_tips))
tipDialog.setOkText(getString(R.string.charge))
tipDialog.setOnActionListener(
object : CommonTipDialog.OnActionListener {
override fun onOk() {
ChargeActivity.start(context)
}
}
)
tipDialog.show()
}
@SuppressLint("CheckResult")
@@ -524,7 +633,6 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
}
private fun releaseView() {
roomFreeGiftDialog?.dismiss()
messageView.release()
microView.release()
musicPlayerView?.release()
@@ -586,10 +694,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
} else {
val roomQueueInfo = AvRoomDataManager.get()
.getRoomQueueMemberInfoByAccount(myUid.toString())
if (roomQueueInfo?.mChatRoomMember?.isNoProhibitMic == true && roomQueueInfo.mRoomMicInfo?.isMicMute == false) {
bottomView.setMicBtnEnable(true)
bottomView.setMicBtnOpen(true)
} else if (roomQueueInfo?.mChatRoomMember != null
if (roomQueueInfo?.mChatRoomMember != null
&& myUid.toString() == roomQueueInfo.mChatRoomMember.account
&& roomQueueInfo.mRoomMicInfo?.isMicMute == true
) {
@@ -671,6 +776,10 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
messageView.clear()
}
private fun isPublicMessageTab(): Boolean {
return messagePager.currentItem == 1
}
@CallSuper
override fun onClick(v: View) {
if (mClickLimit.checkForTime(500)) return
@@ -678,17 +787,54 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
R.id.input_send -> {
sendMsg()
}
R.id.iv_first_charge_enter -> FirstChargeDialog.start(mContext)
// R.id.iv_treasure_box,
// R.id.iv_treasure_box_cp -> GoldBoxHelper.handleBoxClick(mContext)
R.id.iv_radish_entrance -> PullRadishActivity.start(mContext)
R.id.input_headline_send -> {
sendHeadline()
}
}
}
private fun sendMsg() {
sendMsg(inputEdit.text.toString())
val message = inputEdit.text.toString().trim()
if (isPublicMessageTab()) {
sendPublicChatMessage(message)
} else {
sendMsg(message)
}
}
private fun sendHeadline() {
val message = inputEdit.text.toString().trim()
if (TextUtils.isEmpty(message)) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_baseroomfragment_08))
return
}
if (message.length > 100) {
toast(R.string.headline_input_length_limit_tips)
return
}
val money = headlineViewModel.headlinePayMoneyLiveData.value
if (money != null) {
showHeadlinePayDialog(money, message)
} else {
SingleToastUtil.showToast(R.string.ui_setting_modifypwdactivity_01)
headlineViewModel.getHeadlinePayMoney()
}
}
private fun showHeadlinePayDialog(money: Long, message: String) {
KeyBoardUtils.hideKeyBoard(activity, inputEdit)
SelectPayTypeDialog.newInstance(
money.toString(),
money,
false
).apply {
setOnDiamondChargeClick {
headlineViewModel.sendHeadline(message)
}
setOnChargeClick {
ChargeActivity.start(context)
}
}.show(context)
}
@SuppressLint("CheckResult")
@@ -711,6 +857,20 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
inputEdit.setText("")
}
private fun sendPublicChatMessage(message: String){
if (!AuthModel.get().isImLogin) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_baseroomfragment_07))
return
}
if (TextUtils.isEmpty(message)) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_baseroomfragment_08))
return
}
mvpPresenter?.sendPublicChatTextMessage(message)
publicChatMessageWidget?.getMessageView()?.setNeedAutoScroll(true) // 發送後自動滾動公屏列表
inputEdit.setText("")
}
/**
* 軟鍵盤顯示與隱藏的監聽
*/
@@ -746,7 +906,12 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
.compose(bindUntilEvent(FragmentEvent.DESTROY))
.doOnError {
if (it is VipLevelNotEnoughException) {
dialogManager.showOkDialog("尚未達到贈送${giftInfo.giftName}所需貴族等級,所需貴族等級:${giftInfo.giftVipInfo?.vipName}")
val message = context?.getString(
R.string.send_gift_vip_level_tips,
giftInfo.giftName ?: "",
giftInfo.giftVipInfo?.vipName ?: ""
)
dialogManager.showOkDialog(message)
}
}
.subscribe { _, throwable ->
@@ -799,7 +964,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
) {
val buttonItems: MutableList<ButtonItem> = ArrayList(4)
val presideMic = AvRoomDataManager.get().isDatingMode && micPosition == -1
val presideText = if (presideMic) "當主持人" else ""
val presideText = if (presideMic) ResUtil.getString(R.string.switch_host) else ""
val buttonItem1 = ButtonItem(
getString(R.string.embrace_up_mic) + presideText,
object : ButtonItem.OnClickListener {
@@ -845,7 +1010,13 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
}
})
val buttonItem4 =
ButtonItem("上麥") { toUpMicroPhone(micPosition, currentUid.toString() + "", false) }
ButtonItem(ResUtil.getString(R.string.up_mic)) {
toUpMicroPhone(
micPosition,
currentUid.toString() + "",
false
)
}
//別問為什麽ui調整了順序
//禁用超管的上麥和抱TA上麥
if (!SuperAdminUtil.isSuperAdmin()) {
@@ -931,7 +1102,6 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
try {
giftDialog?.dismiss()
dynamicFaceDialog?.dismiss()
redPackageSendDialog?.dismissAllowingStateLoss()
} catch (e: Exception) {
e.printStackTrace()
}
@@ -1012,6 +1182,12 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
KeyBoardUtils.hideKeyBoard(activity, inputEdit)
}
override fun onSendPublicChatMsgSuccess(msg: ChatRoomMessage) {
publicChatMessageWidget?.getMessageView()?.addMessages(msg)
inputEdit.setText("")
KeyBoardUtils.hideKeyBoard(activity, inputEdit)
}
/**
* 顯示資料卡片
*/
@@ -1032,7 +1208,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
return
}
if (AvRoomDataManager.get().isSelfGamePlaying) {
SingleToastUtil.showToast("遊戲中不可以換麥!")
SingleToastUtil.showToast(R.string.avroom_presenter_baseroompresenter_01)
return
}
UserModel.get().cacheLoginUserInfo?.gameStatus = GameStatus.STATUS_NOT_JOIN
@@ -1041,9 +1217,13 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
if (result) {
mvpPresenter?.upMicroPhone(micPosition, currentUid, b)
} else {
toast("請給予麥克風權限後再試!")
toast(R.string.permission_mic_tips)
}
}, { _: Throwable? -> toast("發生一些異常,請稍後重試!") })
}, { error: Throwable? ->
error?.let {
toast(it.message)
} ?: toast(R.string.exception_try_again)
})
}
/**
@@ -1107,7 +1287,9 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
}
override fun onFollowFail(msg: String?) {
toast("關註失敗,請稍後重試")
msg?.let {
toast(msg)
}
}
override fun updateMicView() {
@@ -1132,8 +1314,8 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
private fun addOpenDatingTips() {
if (AvRoomDataManager.get().isDatingMode && !isDatingMode && AvRoomDataManager.get().isManager) {
val tipMessage =
ChatRoomMessageBuilder.createTipMessage(XConstants.DATING_TIPS_OPEN)
tipMessage.content = XConstants.DATING_TIPS_OPEN
ChatRoomMessageBuilder.createTipMessage(ResUtil.getString(R.string.yizhuan_xchat_android_constants_xchatconstants_09))
tipMessage.content = ResUtil.getString(R.string.yizhuan_xchat_android_constants_xchatconstants_09)
IMNetEaseManager.get().addMessages(tipMessage)
}
}
@@ -1161,16 +1343,6 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomFreeGiftEvent(event: RoomFreeGiftEvent) {
event.giftFreeInfo?.let {
if (UIUtils.isTopActivity(context as Activity?) && isResumed) {
if (roomFreeGiftDialog?.isShowing == true) {
roomFreeGiftDialog?.dismiss()
}
roomFreeGiftDialog = RoomFreeGiftDialog(context, it)
roomFreeGiftDialog?.show()
SPUtils.putBoolean(Constants.IS_SHOW_FREE_GIFT, true)
}
}
}
@@ -1241,19 +1413,22 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
override fun onMoreBtnClick() {
val dialog = RoomOperationDialog(mContext)
dialog.setOnActionListener {
redPackageSendDialog = RedPackageSendDialog.newInstance(AvRoomDataManager.get().redEnvelopeType)
redPackageSendDialog?.setOnDismissListener {
redPackageSendDialog = null
}
redPackageSendDialog?.show(activity)
}
dialog.show()
}
override fun onRoomMessageClick() {
RoomMsgActivity.start(mContext)
}
override fun onRoomGameplayClick() {
val dialog = RoomGameplayDialog()
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
}
}
dialog.show(childFragmentManager, "ROOM_GAME_PLAY")
}
}
/**
@@ -1278,8 +1453,14 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
return this
}
open fun initWidget() {
override fun findWidget(name: String): RoomWidget? {
return widgets[name]
}
open fun initWidget() {
publicChatMessageWidget?.let {
registerWidget(PublicChatRoomMessageWidget::class.java.simpleName, it)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -1297,6 +1478,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
* 打开公屏输入
*/
fun openMessageInput(text: String?) {
inputHeadlineSend.isVisible = isPublicMessageTab()
inputLayout.visibility = View.VISIBLE
if (text != null) {
inputEdit.setText(text)

View File

@@ -0,0 +1,217 @@
package com.chwl.app.avroom.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
import android.view.View.OnTouchListener
import android.view.ViewGroup
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.avroom.adapter.GameMicroViewAdapter
import com.chwl.app.avroom.adapter.GameMiniMicroViewAdapter
import com.chwl.app.avroom.adapter.OnMicroItemClickListener
import com.chwl.app.avroom.game.GameDelegate
import com.chwl.app.avroom.game.OnGameStatusChangeListener
import com.chwl.app.avroom.presenter.GameRoomPresenter
import com.chwl.app.avroom.rank.RoomRankWidget
import com.chwl.app.avroom.view.IGameRoomView
import com.chwl.app.databinding.FragmentGameRoomBinding
import com.chwl.app.ui.widget.GiftDialog.OnGiftDialogBtnClickListener
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.music.model.PlayerModel
import com.chwl.core.room.event.FinishAvRoomEvent
import com.chwl.library.base.factory.CreatePresenter
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* 轰趴房间
*
* @author chenran
* @date 2017/7/26
*/
@CreatePresenter(GameRoomPresenter::class)
class GameRoomFragment : BaseRoomFragment<IGameRoomView?, GameRoomPresenter?>(),
View.OnClickListener, OnGiftDialogBtnClickListener, IGameRoomView, OnMicroItemClickListener,
OnGameStatusChangeListener {
companion object {
@JvmStatic
fun newInstance(): GameRoomFragment {
val roomFragment = GameRoomFragment()
val bundle = Bundle()
roomFragment.arguments = bundle
return roomFragment
}
}
private lateinit var gameBinding: FragmentGameRoomBinding
private lateinit var gameDelegate: GameDelegate
private var isShowMiniMic = false
override fun getRootLayoutId(): Int {
return R.layout.fragment_game_room
}
override fun onFindViews() {
super.onFindViews()
gameBinding = DataBindingUtil.bind(mView)!!
gameBinding.lifecycleOwner = this
gameBinding.click = this
gameBinding.ktvModel = false
gameDelegate = GameDelegate(
requireActivity(),
gameBinding.flGameContainer,
AvRoomDataManager.get().mCurrentRoomInfo?.mgId
)
gameDelegate.setOnGameStatusChangeListener(this)
gameBinding.rankWidget.setContentBackgroundResource(R.drawable.room_rank_widget_bg_game)
}
@SuppressLint("CheckResult")
override fun initiate() {
gameBinding.microView.bindAdapter(GameMicroViewAdapter(context))
super.initiate()
//游戏模式暂时不需要这个
PlayerModel.get().stop()
gameBinding.roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
gameBinding.tvShowMiniMic.setOnClickListener { showMiniMic() }
gameBinding.ivShowMic.setOnClickListener { showMic() }
}
@SuppressLint("ClickableViewAccessibility")
override fun initMessageView() {
super.initMessageView()
messageView.messageListView?.let {
setMessagePagerAutoHeight(it)
}
publicChatMessageWidget?.getMessageView()?.messageListView?.let {
setMessagePagerAutoHeight(it)
}
}
@SuppressLint("ClickableViewAccessibility")
private fun setMessagePagerAutoHeight(recyclerView: RecyclerView){
recyclerView.setOnTouchListener(OnTouchListener { v: View?, event: MotionEvent ->
if (recyclerView.scrollState == RecyclerView.SCROLL_STATE_IDLE
&& event.action == MotionEvent.ACTION_UP
) {
val layoutParams: ViewGroup.LayoutParams = messagePager.layoutParams
val bigHeight = ScreenUtil.dip2px(200f)
val littleHeight = ScreenUtil.dip2px(80f)
layoutParams.height =
if (layoutParams.height == littleHeight) bigHeight else littleHeight
messagePager.layoutParams = layoutParams
}
false
})
}
private fun showMiniMic() {
if (isShowMiniMic) return
isShowMiniMic = true
gameBinding.microView.bindAdapter(GameMiniMicroViewAdapter(context).apply {
setOnClick { showMic() }
})
gameBinding.tvShowMiniMic.isVisible = false
gameBinding.microView.postDelayed({
gameBinding.ivShowMic.isVisible = true
gameBinding.llMicView.setBackgroundResource(R.drawable.bg_mini_mic_entrance)
}, 100)
}
private fun showMic() {
if (!isShowMiniMic) return
isShowMiniMic = false
gameBinding.microView.bindAdapter(GameMicroViewAdapter(context))
gameBinding.tvShowMiniMic.isVisible = true
gameBinding.llMicView.background = null
gameBinding.ivShowMic.isVisible = false
}
override fun onSetListener() {
super.onSetListener()
bottomView.setBottomViewListener(BaseRoomBottomViewWrapper())
}
override fun updateView() {
super.updateView()
gameDelegate.updateGame(AvRoomDataManager.get().mCurrentRoomInfo?.mgId)
gameBinding.roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
if (isSixMic()) {
gameBinding.tvShowMiniMic.isVisible = !isShowMiniMic
gameBinding.ivShowMic.isVisible = isShowMiniMic
} else {
showMic()
gameBinding.tvShowMiniMic.isInvisible = true
gameBinding.ivShowMic.isVisible = false
}
gameBinding.microView.adapter.notifyDataSetChanged()
}
override fun onGameStart() {
if (isSixMic()) {
showMiniMic()
}
}
override fun onGameEnd() {
if (isSixMic()) {
showMic()
}
}
private fun isSixMic(): Boolean {
return AvRoomDataManager.get().mgMicNum == AvRoomDataManager.GAME_DEF_MIC_COUNT
}
override fun onSendMsgSuccess(msg: String?) {
super.onSendMsgSuccess(msg)
msg?.let {
if (AvRoomDataManager.get().isSelfGamePlaying) {
gameDelegate.hitTheMark(msg)
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onFinishAvRoomEvent(event: FinishAvRoomEvent) {
gameDelegate.exitGame()
}
override fun onStart() {
super.onStart()
gameDelegate.onStart()
}
override fun onResume() {
super.onResume()
gameDelegate.onResume()
}
override fun onPause() {
super.onPause()
gameDelegate.onPause()
}
override fun onStop() {
super.onStop()
gameDelegate.onStop()
}
override fun onDestroy() {
gameDelegate.onDestroy()
super.onDestroy()
}
override fun initWidget() {
super.initWidget()
registerWidget(RoomRankWidget::class.java.simpleName, gameBinding.rankWidget)
}
}

View File

@@ -16,7 +16,17 @@ import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.chwl.app.avroom.adapter.SelectGameAdapter;
import com.chwl.app.home.helper.OpenRoomHelper;
import com.chwl.app.ui.widget.GiftDialog;
import com.chwl.app.ui.widget.UserInfoDialog;
import com.chwl.core.room.bean.RoomModeType;
import com.chwl.core.room.game.GameModel;
import com.chwl.core.room.game.bean.GameInfo;
import com.chwl.library.utils.JavaUtil;
import com.example.lib_utils.UiUtils;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
@@ -31,8 +41,6 @@ import com.chwl.app.avroom.widget.GiftV2View;
import com.chwl.app.avroom.widget.RoomEffectView;
import com.chwl.app.base.BaseFragment;
import com.chwl.app.databinding.FragmentChatroomGameMainBinding;
import com.chwl.app.friend.view.SelectFriendActivity;
import com.chwl.app.ui.widget.ShareDialog;
import com.chwl.app.utils.RegexUtil;
import com.chwl.core.gift.bean.GiftMultiReceiverInfo;
import com.chwl.core.gift.bean.GiftReceiveInfo;
@@ -50,7 +58,6 @@ import com.chwl.core.manager.RoomEvent;
import com.chwl.core.praise.PraiseModel;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.queuing_mic.event.HasAnimationEffect;
import com.chwl.core.share.ShareModel;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.core.user.UserModel;
import com.chwl.core.user.bean.UserInfo;
@@ -64,10 +71,8 @@ import org.greenrobot.eventbus.ThreadMode;
import java.lang.reflect.Field;
import cn.sharesdk.framework.Platform;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import kotlin.jvm.functions.Function0;
/**
@@ -76,7 +81,7 @@ import kotlin.jvm.functions.Function0;
*
* @author Administrator
*/
public class HomePartyFragment extends BaseFragment implements View.OnClickListener, ShareDialog.OnShareDialogItemClick {
public class HomePartyFragment extends BaseFragment implements View.OnClickListener {
private Fragment roomFragment;
@@ -97,12 +102,9 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
private UserInfo mUserInfo;
private FragmentChatroomGameMainBinding gameMainBinding;
// private ShareDialog shareDialog;
//收藏房间
private String FOLLOW_ROOM_TYPE = "";
// private SelectGameAdapter gameAdapter;
private SelectGameAdapter gameAdapter;
public static HomePartyFragment newInstance() {
HomePartyFragment homePartyFragment = new HomePartyFragment();
@@ -221,71 +223,71 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
}
}
// private void initRvGame() {
// RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
// if (roomInfo == null || gameAdapter != null) return;
// gameMainBinding.rvGame.setLayoutManager(new LinearLayoutManager(mContext));
// gameMainBinding.rvGame.setAdapter(gameAdapter = new SelectGameAdapter());
// gameMainBinding.llSelectGame.setOnClickListener(v -> {
// if (gameMainBinding.rvGame.getVisibility() == View.VISIBLE) {
// gameMainBinding.rvGame.setVisibility(View.GONE);
// gameMainBinding.ivChangeGameArrow.setImageResource(R.drawable.ic_room_arrow_type_below);
// } else {
// if (!isShowChangeGame()) {
// SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_01));
// return;
// }
// if (AvRoomDataManager.get().isGamePlaying()) {
// SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_02));
// } else {
// gameMainBinding.rvGame.setVisibility(View.VISIBLE);
// gameMainBinding.ivChangeGameArrow.setImageResource(R.drawable.ic_room_arrow_type);
// }
// }
// });
//
// gameAdapter.setOnItemClickListener((adapter, view, position) -> {
// if (AvRoomDataManager.get().isGamePlaying()) {
// SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_03));
// }
// if (!isShowChangeGame()) {
// SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_04));
// return;
// }
//
// GameInfo gameInfo = gameAdapter.getItem(position);
// if (gameInfo != null) {
// int type;
// long mgId = 0;
// if (Objects.equals(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_05), gameInfo.getName())) {
// type = RoomInfo.ROOMTYPE_HOME_PARTY;
// } else {
// type = RoomInfo.ROOMTYPE_GAME;
// mgId = JavaUtil.str2long(gameInfo.getMgId());
// }
// gameMainBinding.rvGame.setVisibility(View.GONE);
// gameMainBinding.ivChangeGameArrow.setImageResource(R.drawable.ic_room_arrow_type_below);
// OpenRoomHelper.updateRoomInfo(
// getBaseActivity(),
// AvRoomDataManager.get().mCurrentRoomInfo,
// type,
// mgId,
// false);
// }
// });
// }
private void initRvGame() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null || gameAdapter != null) return;
gameMainBinding.rvGame.setLayoutManager(new LinearLayoutManager(mContext));
gameMainBinding.rvGame.setAdapter(gameAdapter = new SelectGameAdapter());
gameMainBinding.llSelectGame.setOnClickListener(v -> {
if (gameMainBinding.rvGame.getVisibility() == View.VISIBLE) {
gameMainBinding.rvGame.setVisibility(View.GONE);
gameMainBinding.ivChangeGameArrow.setImageResource(R.drawable.ic_room_arrow_type_below);
} else {
if (!isShowChangeGame()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_01));
return;
}
if (AvRoomDataManager.get().isGamePlaying()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_02));
} else {
gameMainBinding.rvGame.setVisibility(View.VISIBLE);
gameMainBinding.ivChangeGameArrow.setImageResource(R.drawable.ic_room_arrow_type);
}
}
});
gameAdapter.setOnItemClickListener((adapter, view, position) -> {
if (AvRoomDataManager.get().isGamePlaying()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_03));
}
if (!isShowChangeGame()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_04));
return;
}
GameInfo gameInfo = gameAdapter.getItem(position);
if (gameInfo != null) {
gameMainBinding.rvGame.setVisibility(View.GONE);
gameMainBinding.ivChangeGameArrow.setImageResource(R.drawable.ic_room_arrow_type_below);
if (gameInfo.isStandardRoom()) {
OpenRoomHelper.updateRoomInfo(
getBaseActivity(),
AvRoomDataManager.get().mCurrentRoomInfo,
RoomInfo.ROOMTYPE_HOME_PARTY,
0,
false);
} else {
OpenRoomHelper.updateRoomInfo(
getBaseActivity(),
AvRoomDataManager.get().mCurrentRoomInfo,
RoomInfo.ROOMTYPE_GAME,
JavaUtil.str2long(gameInfo.getMgId()),
false);
}
}
});
}
//这里的2和4是服务端定义的错误状态 关闭排麦模式和关闭PK模式!
private boolean isShowChangeGame() {
return false;
// RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
// return currentRoomInfo != null &&
// AvRoomDataManager.get().isRoomOwner() &&
// currentRoomInfo.getIsPermitRoom() != 1 &&
// currentRoomInfo.getType() != RoomInfo.ROOM_TYPE_SINGLE &&
// (currentRoomInfo.getRoomModeType() == RoomModeType.NORMAL_MODE ||
// currentRoomInfo.getRoomModeType() == 2 ||
// currentRoomInfo.getRoomModeType() == 4);
RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
return currentRoomInfo != null &&
AvRoomDataManager.get().isRoomOwner() &&
currentRoomInfo.getIsPermitRoom() != 1 &&
currentRoomInfo.getType() != RoomInfo.ROOM_TYPE_SINGLE &&
(currentRoomInfo.getRoomModeType() == RoomModeType.NORMAL_MODE ||
currentRoomInfo.getRoomModeType() == 2 ||
currentRoomInfo.getRoomModeType() == 4);
}
public void setRoomBg(RoomInfo roomInfo) {
@@ -423,11 +425,11 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
Fragment tempFragment = roomFragment;
switch (currentRoomInfo.getType()) {
// case RoomInfo.ROOMTYPE_GAME:
// if (!(tempFragment instanceof GameRoomFragment)) {
// tempFragment = GameRoomFragment.newInstance();
// }
// break;
case RoomInfo.ROOMTYPE_GAME:
if (!(tempFragment instanceof GameRoomFragment)) {
tempFragment = GameRoomFragment.newInstance();
}
break;
case RoomInfo.ROOM_TYPE_SINGLE:
if (!(tempFragment instanceof SingleRoomFragment)) {
tempFragment = SingleRoomFragment.newInstance();
@@ -463,34 +465,36 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
ivFollowRoom.setImageResource(AvRoomDataManager.get().isRoomFans ? R.drawable.room_ic_collect_yes : R.drawable.room_ic_collect_no);
setIdOnlineData();
// if (isShowChangeGame()) {
// initRvGame();
// gameMainBinding.llChangeGame.setVisibility(View.VISIBLE);
// if (AvRoomDataManager.get().isOpenGame()) {
// gameMainBinding.tvCurrGame.setText(currentRoomInfo.getMgName());
// } else {
// gameMainBinding.tvCurrGame.setText(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_08));
// }
// GameModel.INSTANCE.getGameList()
// .compose(bindToLifecycle())
// .subscribe(gameInfos -> {
// if (AvRoomDataManager.get().isOpenGame()) {
// for (int i = 0; i < gameInfos.size(); i++) {
// GameInfo gameInfo = gameInfos.get(i);
// if (JavaUtil.str2long(gameInfo.getMgId()) == currentRoomInfo.getMgId()) {
// gameInfos.remove(i);
// break;
// }
// }
// GameInfo gameInfo = new GameInfo();
// gameInfo.setName(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_09));
// gameInfos.add(gameInfo);
// }
// gameAdapter.setNewData(gameInfos);
// });
// } else {
// gameMainBinding.llChangeGame.setVisibility(View.GONE);
// }
if (isShowChangeGame()) {
initRvGame();
gameMainBinding.llChangeGame.setVisibility(View.VISIBLE);
if (AvRoomDataManager.get().isOpenGame()) {
gameMainBinding.tvCurrGame.setText(currentRoomInfo.getMgName());
} else {
gameMainBinding.tvCurrGame.setText(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_08));
}
GameModel.INSTANCE.getGameList()
.compose(bindToLifecycle())
.subscribe(gameInfos -> {
if (AvRoomDataManager.get().isOpenGame()) {
for (int i = 0; i < gameInfos.size(); i++) {
GameInfo gameInfo = gameInfos.get(i);
if (JavaUtil.str2long(gameInfo.getMgId()) == currentRoomInfo.getMgId()) {
gameInfos.remove(i);
break;
}
}
GameInfo gameInfo = new GameInfo();
gameInfo.asStandardRoom();
gameInfo.setName(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_09));
gameInfos.add(gameInfo);
}
gameAdapter.setNewData(gameInfos);
});
} else {
gameMainBinding.llChangeGame.setVisibility(View.GONE);
}
}
}
@@ -513,15 +517,16 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
public void onClick(View v) {
switch (v.getId()) {
case R.id.room_more:
int gravity = Gravity.END;
if(UiUtils.INSTANCE.isRtl(requireContext())){
gravity = Gravity.START;
}
ExitRoomPopupWindow.newInstance((AVRoomActivity) requireActivity())
.showAtLocation(gameMainBinding.getRoot(), Gravity.END, 0, 0);
.showAtLocation(gameMainBinding.getRoot(), gravity, 0, 0);
break;
case R.id.ll_room_info:
RoomOnlineUserActivity.start(getActivity());
break;
// case R.id.iv_room_share:
// shareRoom();
// break;
case R.id.iv_follow_room:
followRoom();
break;
@@ -571,67 +576,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
ivFollowRoom.setImageResource(AvRoomDataManager.get().isRoomFans ? R.drawable.room_ic_collect_yes : R.drawable.room_ic_collect_no);
}
// @Subscribe(threadMode = ThreadMode.MAIN)
// public void onShareRoomEvent(ShareRoomEvent event) {
//// shareRoom();
// }
// /**
// * 分享房间
// */
// public void shareRoom() {
// if (shareDialog != null && shareDialog.isShowing()) {
// shareDialog.dismiss();
// }
// shareDialog = new ShareDialog(getActivity());
// shareDialog.setOnShareDialogItemClick(this);
// shareDialog.show();
// }
@Override
public void onInAppSharingItemClick() {
// shareDialog.dismiss();
SelectFriendActivity.startForSharingRoom(getActivity());
}
@Override
public void onSharePlatformClick(Platform platform) {
RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (currentRoomInfo != null) {
UserModel.get().getUserInfo(currentRoomInfo.getUid())
.flatMap(userInfo -> ShareModel.get().shareRoom(
platform,
currentRoomInfo.getUid(),
userInfo.getErbanNo(),
currentRoomInfo.getTitle(),
currentRoomInfo.getAvatar()
))
.compose(bindUntilEvent(FragmentEvent.DESTROY))
.doAfterTerminate(new Action() {
@Override
public void run() throws Exception {
getDialogManager().dismissDialog();
}
})
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(String s) {
toast(s);
}
@Override
public void onError(Throwable e) {
toast(e.getMessage());
}
});
}
}
@Override
public void onDestroy() {
if (giftView != null) {
@@ -720,4 +664,20 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
gameMainBinding.roomNums.setText(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_013) + onlineNumber);
}
public void showUserCardDialog(String uid){
long id = JavaUtil.str2long(uid);
if (id == 0) {
return;
}
if (roomFragment instanceof GiftDialog.OnGiftDialogBtnClickListener) {
UserInfoDialog.showNewUserInfoDialog(
mContext,
id,
true,
true,
true, (GiftDialog.OnGiftDialogBtnClickListener) roomFragment
);
}
}
}

View File

@@ -8,10 +8,11 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import com.chwl.app.avroom.gameplay.RoomGameplayListWidget;
import com.chwl.app.avroom.gameplay.RoomGameplayWidget;
import com.chwl.app.avroom.rank.RoomRankWidget;
import com.chwl.app.music.widget.MusicPlayerView;
import com.chwl.app.ui.webview.DialogWebViewActivity;
import com.chwl.core.home.bean.BannerInfo;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.chwl.app.R;
@@ -27,10 +28,8 @@ import com.chwl.app.avroom.dialog.MicQueueDialog;
import com.chwl.app.avroom.dialog.PKMicQueueDialog;
import com.chwl.app.avroom.dialog.PKResultDialog;
import com.chwl.app.avroom.dialog.PKScoreBoardDialog;
import com.chwl.app.avroom.firstcharge.FirstChargePrizeDialog;
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
import com.chwl.app.avroom.presenter.HomePartyPresenter;
import com.chwl.app.avroom.redpackage.RedPackageWidget;
import com.chwl.app.avroom.view.IHomePartyView;
import com.chwl.app.avroom.widget.PKBoardView;
import com.chwl.app.base.BaseMvpActivity;
@@ -47,7 +46,6 @@ import com.chwl.core.im.custom.bean.RoomPkBean;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.RoomEvent;
import com.chwl.core.market_verify.MarketVerifyModel;
import com.chwl.core.pay.event.FirstChargeEvent;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.event.DatingSelectUserEvent;
import com.chwl.core.room.face.DynamicFaceModel;
@@ -137,7 +135,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
@Override
public void initWidget() {
super.initWidget();
registerWidget(RedPackageWidget.class.getSimpleName(), gameBinding.redPackageWidget);
registerWidget(RoomRankWidget.class.getSimpleName(), gameBinding.rankWidget);
}
@@ -151,7 +148,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
updateQueuingMicBtn();
updatePkScoreBoard();
initRoomPkOrder(AvRoomDataManager.get().showPkBeginTime, AvRoomDataManager.get().pkBeginTime);
getMvpPresenter().getBannerList();
}
@Override
@@ -593,7 +589,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
getMvpPresenter().cancelDragon();
});
break;
case R.id.tv_hour_rank:
case R.id.layout_hour_rank:
DialogWebViewActivity.start(
mContext,
UriProvider.getRoomHourRankUrl(AvRoomDataManager.get().getRoomUid())
@@ -787,42 +783,11 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
if (AvRoomDataManager.get().mCurrentRoomInfo == null) {
return;
}
if (AvRoomDataManager.get().mCurrentRoomInfo.getIsPermitRoom() == 1) {
gameBinding.tvHourRank.setVisibility(View.VISIBLE);
gameBinding.layoutHourRank.setVisibility(View.VISIBLE);
} else {
gameBinding.tvHourRank.setVisibility(View.GONE);
gameBinding.layoutHourRank.setVisibility(View.GONE);
}
// if (!GoldBoxHelper.needIntegrateBoxEntrance()) {
// GoldBoxHelper.isHideBox().subscribe(
// hide -> {
// if (hide != null && !hide) {
// if (AvRoomDataManager.get().isCpRoom()) {
// gameBinding.ivTreasureBoxCp.setVisibility(View.VISIBLE);
// gameBinding.ivTreasureBox.setVisibility(View.GONE);
// } else {
// gameBinding.ivTreasureBoxCp.setVisibility(View.GONE);
// gameBinding.ivTreasureBox.setVisibility(View.VISIBLE);
// GlideApp.with(BasicConfig.INSTANCE.getAppContext())
// .load(GoldBoxHelper.getBoxIcon())
// .error(R.drawable.icon_room_treasure_box)
// .into(gameBinding.ivTreasureBox);
// }
// } else {
// gameBinding.ivTreasureBoxCp.setVisibility(View.GONE);
// gameBinding.ivTreasureBox.setVisibility(View.GONE);
// }
// },
// throwable -> {
// gameBinding.ivTreasureBoxCp.setVisibility(View.GONE);
// gameBinding.ivTreasureBox.setVisibility(View.GONE);
// });
// } else {
// gameBinding.ivTreasureBoxCp.setVisibility(View.GONE);
// gameBinding.ivTreasureBox.setVisibility(View.GONE);
// }
setDragonView();
}
@@ -956,18 +921,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
return pkMicQueueDialog != null && pkMicQueueDialog.isShowing();
}
@Override
public void onShowBanner(List<BannerInfo> bannerInfos) {
initRoomAct(gameBinding.activityImg, bannerInfos, 11f);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onFirstRechargeEvent(FirstChargeEvent event) {
gameBinding.ivFirstChargeEnter.setVisibility(View.GONE);
new FirstChargePrizeDialog(requireContext(), event.getChargeProdTitle(), event.getFirstChargeRewardList()).openDialog();
}
/**
* 底部按钮点击处理
*/

View File

@@ -1,152 +0,0 @@
package com.chwl.app.avroom.fragment;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.InviteFriendListAdapter;
import com.chwl.app.base.BaseFragment;
import com.chwl.app.public_chat_hall.bean.PublicChatHallFriendInfo;
import com.chwl.core.im.friend.IMFriendModel;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.manager.RelationShipEvent;
import com.chwl.core.user.UserModel;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.library.utils.ListUtils;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
/**
* 公聊大厅选择艾特人的好友页面
*/
public class InviteFriendListFragment extends BaseFragment {
private static final String TAG = "InviteFriendListFragment";
private InviteFriendListAdapter adapter = null;
private SwipeRefreshLayout mSwipeRefresh;
private RecyclerView mRecyclerView;
public static InviteFriendListFragment newInstances() {
return new InviteFriendListFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Override
public void onFindViews() {
mSwipeRefresh = mView.findViewById(R.id.swipe_refresh);
mRecyclerView = mView.findViewById(R.id.recycler_view);
}
@Override
public void onSetListener() {
}
@Override
public void initiate() {
mSwipeRefresh.setEnabled(false);
if (adapter == null) {
adapter = new InviteFriendListAdapter(getActivity());
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerView.setAdapter(adapter);
loadFriends();
} else {
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerView.setAdapter(adapter);
}
Disposable d = IMNetEaseManager.get().getRelationShipEventObservable().subscribe(this::onGetRelationShipEvent);
mCompositeDisposable.add(d);
}
private void onGetRelationShipEvent(RelationShipEvent event) {
if (event.event == RelationShipEvent.EVENT_FRIEND_UPDATE) {
onFriendListUpdate(event.accounts);
}
}
private void loadFriends() {
onFriendListUpdate(IMFriendModel.get().getMyFriendsAccounts());
}
@Override
public int getRootLayoutId() {
return R.layout.fragment_fans_list;
}
private void onFriendListUpdate(List<String> accounts) {
if (ListUtils.isListEmpty(accounts)) {
showNoData(getString(R.string.no_frenids_text));
return;
}
ArrayList<Long> ids = new ArrayList<>(accounts.size());
for (String account : accounts) {
ids.add(Long.valueOf(account));
}
UserModel.get().loadUserInfoByUids(accounts).subscribe(new SingleObserver<List<UserInfo>>() {
@Override
public void onSubscribe(Disposable d) {
mCompositeDisposable.add(d);
}
@Override
public void onSuccess(List<UserInfo> userInfos) {
List<PublicChatHallFriendInfo> publicChatHallFriendInfoList = new ArrayList<>();
for (UserInfo userInfo : userInfos) {
PublicChatHallFriendInfo friendInfo = new PublicChatHallFriendInfo();
friendInfo.setUserInfo(userInfo);
publicChatHallFriendInfoList.add(friendInfo);
}
setData(publicChatHallFriendInfoList);
}
@Override
public void onError(Throwable e) {
toast(e.getMessage());
}
});
}
private void setData(List<PublicChatHallFriendInfo> userInfos) {
if (userInfos != null && !userInfos.isEmpty()) {
hideStatus();
adapter.setNewData(userInfos);
//adapter.notifyDataSetChanged();
} else {
showNoData(getString(R.string.no_frenids_text));
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onCurrentUserInfoUpdate(UserInfo userInfo) {
mRecyclerView.postDelayed(() -> onFriendListUpdate(IMFriendModel.get().getMyFriendsAccounts())
, 250);
}
}

View File

@@ -6,11 +6,13 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chwl.core.room.bean.RoomOnlineUserBean;
import com.netease.nim.uikit.common.util.sys.NetworkUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.orhanobut.logger.Logger;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadmoreListener;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.OnlineUserAdapter;
@@ -44,7 +46,6 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
private SmartRefreshLayout mRefreshLayout;
private OnlineUserAdapter mOnlineUserAdapter;
private int mPage = Constants.PAGE_START;
private boolean isShowToUser = false;
@Override
@@ -58,25 +59,12 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
public void onFindViews() {
mRecyclerView = mView.findViewById(R.id.recycler_view);
mRefreshLayout = mView.findViewById(R.id.refresh_layout);
mRefreshLayout.setEnableLoadmore(false);
}
@Override
public void onSetListener() {
mRefreshLayout.setOnRefreshLoadmoreListener(new OnRefreshLoadmoreListener() {
@Override
public void onLoadmore(RefreshLayout refreshLayout) {
if (!NetworkUtil.isNetAvailable(mContext)) {
mRefreshLayout.finishLoadmore();
return;
}
List<OnlineChatMember> data = mOnlineUserAdapter.getData();
if (ListUtils.isListEmpty(data)) {
mRefreshLayout.finishLoadmore();
return;
}
loadData(data.get(data.size() - 1).chatRoomMember.getEnterTime());
}
mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshLayout) {
if (!NetworkUtil.isNetAvailable(mContext)) {
@@ -106,53 +94,24 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
public void firstLoad() {
mPage = Constants.PAGE_START;
loadData(0);
loadData();
}
private void loadData(long time) {
getMvpPresenter().requestChatMemberByPage(mPage, time,
mOnlineUserAdapter == null ? null : mOnlineUserAdapter.getData());
private void loadData() {
getMvpPresenter().requestRoomOnlineList(AvRoomDataManager.get().getRoomUid());
}
@Override
public void onRequestChatMemberByPageSuccess(List<OnlineChatMember> chatRoomMemberList, int page) {
mPage = page;
if (!ListUtils.isListEmpty(chatRoomMemberList)) {
//超管不显示
Iterator<OnlineChatMember> iterator = chatRoomMemberList.iterator();
while (iterator.hasNext()) {
OnlineChatMember member = iterator.next();
if (member != null && SuperAdminUtil.isSuperAdmin(member.chatRoomMember)) {
iterator.remove();
}
}
mOnlineUserAdapter.setNewData(chatRoomMemberList);
if (mPage == Constants.PAGE_START) {
mRefreshLayout.finishRefresh();
} else {
mRefreshLayout.finishLoadmore(0);
}
mPage++;
} else {
if (mPage == Constants.PAGE_START) {
mRefreshLayout.finishRefresh();
} else {
mRefreshLayout.finishLoadmore(0);
}
}
public void onRequestRoomOnlineListSuccess(List<RoomOnlineUserBean> chatRoomMemberList) {
mOnlineUserAdapter.setNewData(chatRoomMemberList);
mRefreshLayout.finishRefresh();
}
@Override
public void onRequestChatMemberByPageFail(String errorStr, int page) {
Logger.i(ResUtil.getString(R.string.avroom_fragment_onlineuserfragment_01) + page);
mPage = page;
if (mPage == Constants.PAGE_START) {
mRefreshLayout.finishRefresh();
} else {
mRefreshLayout.finishLoadmore(0);
}
mRefreshLayout.finishRefresh();
}
@Override
@@ -166,16 +125,15 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
public void onItemClick(BaseQuickAdapter baseQuickAdapter, View view, int position) {
RoomInfo currentRoom = AvRoomDataManager.get().mCurrentRoomInfo;
if (currentRoom != null) {
List<OnlineChatMember> chatRoomMembers = mOnlineUserAdapter.getData();
List<RoomOnlineUserBean> chatRoomMembers = mOnlineUserAdapter.getData();
if (ListUtils.isListEmpty(chatRoomMembers)) return;
OnlineChatMember onlineChatMember = chatRoomMembers.get(position);
ChatRoomMember chatRoomMember = onlineChatMember.chatRoomMember;
if (chatRoomMember != null) {
RoomOnlineUserBean onlineChatMember = chatRoomMembers.get(position);
if (onlineChatMember != null) {
if (onlineChatMember.getItemType() == OnlineChatMember.NOBLE) {
return;
}
UserInfoDialog.showNewUserInfoDialog(mContext,
JavaUtil.str2long(chatRoomMember.getAccount()),
onlineChatMember.getUid(),
true,
false,
true,
@@ -185,28 +143,24 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
}
@Override
public void onMemberIn(String account, List<OnlineChatMember> dataList) {
public void onMemberIn(String account) {
// if (!isResumed()) return;
// getMvpPresenter().onMemberInRefreshData(account, dataList, mPage);
}
@Override
public void onMemberExit(String account, List<OnlineChatMember> dataList) {
public void onMemberExit(String account) {
// if (!isResumed()) return;
// if (!isShowToUser()) return;
// firstLoad();
}
@Override
public void onMemberDownUpMic(String account, boolean isUpMic, List<OnlineChatMember> dataList) {
if (!isResumed()) return;
getMvpPresenter().onMemberDownUpMic(account, isUpMic, dataList, mPage);
public void onMemberDownUpMic(String account, boolean isUpMic) {
}
@Override
public void onUpdateMemberManager(String account, boolean isRemoveManager, List<OnlineChatMember> dataList) {
if (!isResumed()) return;
getMvpPresenter().onUpdateMemberManager(account, dataList, isRemoveManager, mPage);
public void onUpdateMemberManager(String account, boolean isRemoveManager) {
}
@Override

View File

@@ -3,6 +3,7 @@ package com.chwl.app.avroom.fragment;
import androidx.fragment.app.Fragment;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.CommonVPAdapter;
import com.chwl.app.avroom.adapter.RoomContributeListAdapter;
import com.chwl.app.avroom.widget.RankNavigatorAdapter;
import com.chwl.app.base.BaseBindingFragment;
@@ -26,7 +27,7 @@ public class RoomCharmListFragment extends BaseBindingFragment<FragmentRoomCharm
ArrayList<Fragment> fragments = new ArrayList<>(2);
fragments.add(RoomCharmRankingListFragment.newInstance(RoomContributeDataInfo.TYPE_ROOM_DAY_RANKING));
fragments.add(RoomCharmRankingListFragment.newInstance(RoomContributeDataInfo.TYPE_ROOM_WEEK_RANKING));
mBinding.vpCharmRankings.setAdapter(new RoomContributeListAdapter(getChildFragmentManager(), fragments));
mBinding.vpCharmRankings.setAdapter(new CommonVPAdapter(getChildFragmentManager(), getLifecycle(),fragments));
CommonNavigator commonNavigator = new CommonNavigator(getActivity());
commonNavigator.setAdjustMode(false);

View File

@@ -2,8 +2,10 @@ package com.chwl.app.avroom.fragment;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.widget.ViewPager2;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.CommonVPAdapter;
import com.chwl.app.avroom.adapter.RoomContributeListAdapter;
import com.chwl.app.avroom.widget.RankNavigatorAdapter;
import com.chwl.app.base.BaseMvpFragment;
@@ -21,7 +23,7 @@ import java.util.ArrayList;
*/
public class RoomContributeListFragment extends BaseMvpFragment implements IMvpBaseView {
private ViewPager viewPager;
private ViewPager2 viewPager;
private MagicIndicator viewIndicator;
@Override
@@ -43,7 +45,7 @@ public class RoomContributeListFragment extends BaseMvpFragment implements IMvpB
if (AvRoomDataManager.get().isDatingMode()) {
fragments.add(RoomContributeFragment.newInstance(RoomContributeDataInfo.TYPE_ROOM_MONTH_RANKING));
}
viewPager.setAdapter(new RoomContributeListAdapter(getChildFragmentManager(), fragments));
viewPager.setAdapter(new CommonVPAdapter(getChildFragmentManager(),getLifecycle(), fragments));
CommonNavigator commonNavigator = new CommonNavigator(getActivity());
commonNavigator.setAdjustMode(false);
RankNavigatorAdapter indicator = new RankNavigatorAdapter(AvRoomDataManager.get().isDatingMode());

View File

@@ -5,6 +5,7 @@ import android.view.View;
import androidx.fragment.app.Fragment;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.CommonVPAdapter;
import com.chwl.app.avroom.adapter.RoomContributeListAdapter;
import com.chwl.app.avroom.widget.RoomRankNavigatorAdapter;
import com.chwl.app.base.BaseBindingFragment;
@@ -29,7 +30,7 @@ public class RoomRankListFragment extends BaseBindingFragment<FragmentRoomRankLi
List<Fragment> list = new ArrayList<>(2);
list.add(new RoomContributeListFragment());
list.add(RoomCharmListFragment.newInstance());
mBinding.viewPager.setAdapter(new RoomContributeListAdapter(getChildFragmentManager(), list));
mBinding.viewPager.setAdapter(new CommonVPAdapter(getChildFragmentManager(), getLifecycle(), list));
CommonNavigator commonNavigator = new CommonNavigator(getActivity());
commonNavigator.setAdjustMode(true);

View File

@@ -13,10 +13,10 @@ import com.chwl.app.avroom.adapter.OnMicroItemClickListener
import com.chwl.app.avroom.adapter.SingleAnchorMicroViewAdapter
import com.chwl.app.avroom.adapter.SingleRoomPKMicroViewAdapter
import com.chwl.app.avroom.dialog.RequestUpMicDialog
import com.chwl.app.avroom.firstcharge.FirstChargePrizeDialog
import com.chwl.app.avroom.gameplay.RoomGameplayListWidget
import com.chwl.app.avroom.gameplay.RoomGameplayWidget
import com.chwl.app.avroom.presenter.SingleRoomPresenter
import com.chwl.app.avroom.rank.RoomRankWidget
import com.chwl.app.avroom.redpackage.RedPackageWidget
import com.chwl.app.avroom.singleroompk.SingleRoomPkFinishDialog
import com.chwl.app.avroom.singleroompk.SingleRoomPkForceFinishDialog
import com.chwl.app.avroom.singleroompk.SingleRoomPkReceivedDialog
@@ -31,19 +31,14 @@ import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.core.UriProvider
import com.chwl.core.auth.AuthModel
import com.chwl.core.fansteam.bean.FansTeamInitInfo
import com.chwl.core.home.bean.BannerInfo
import com.chwl.core.im.custom.bean.FansTeamMsgAttachment
import com.chwl.core.im.custom.bean.RequestUpmicAttachment
import com.chwl.core.im.custom.bean.RoomPKAttachment
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.manager.RoomEvent
import com.chwl.core.pay.event.FirstChargeEvent
import com.chwl.core.user.bean.UserInfo
import com.chwl.library.base.factory.CreatePresenter
import com.example.lib_utils.ktx.singleClick
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* 個播房間
@@ -84,8 +79,12 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
@SuppressLint("CheckResult")
override fun initiate() {
super.initiate()
mvpPresenter?.getBannerList()
// initSpeedyMessage(gameBinding.flSpeedyMessage)
gameBinding.layoutHourRank.setOnClickListener {
DialogWebViewActivity.start(
mContext,
UriProvider.getSingleRoomHourRankUrl(AvRoomDataManager.get().roomUid)
)
}
fansTeamViewModel.loadFansTeamInitInfo()
fansTeamViewModel.fansTeamInitInfoLiveData.observe(viewLifecycleOwner) {
@@ -93,64 +92,6 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
updateFansTeamInfo(it)
}
}
gameBinding.tvHourRank.singleClick {
DialogWebViewActivity.start(
mContext,
UriProvider.getSingleRoomHourRankUrl(AvRoomDataManager.get().roomUid)
)
}
}
@SuppressLint("SetTextI18n")
private fun updateFansTeamInfo(initInfo: FansTeamInitInfo) {
var clickListener: View.OnClickListener? = null
if (initInfo.hasFansTeamCurrentRoom) {
if (AvRoomDataManager.get().isRoomOwner) {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text = "粉絲團(${initInfo.anchorFansNum})"
clickListener = View.OnClickListener {
DialogWebViewActivity.start(
requireContext(),
UriProvider.getFansTeamMyFansUrl(AvRoomDataManager.get().roomUid)
)
}
} else {
if (initInfo.isAnchorFans) {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text =
"粉絲LV.${if (initInfo.fansLevelSeq == 0) 1 else initInfo.fansLevelSeq}"
clickListener = View.OnClickListener {
FansTeamJoinedActivity.start(requireContext())
}
} else {
gameBinding.flFansTeamJoinTip.isVisible = true
gameBinding.tvFansTeamOpt.isVisible = false
clickListener = View.OnClickListener {
FansTeamJoinActivity.start(requireContext())
}
}
}
} else {
if (AvRoomDataManager.get().isRoomOwner) {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text = "開通粉絲團"
clickListener = View.OnClickListener {
CommonWebViewActivity.start(
requireContext(),
UriProvider.getFansTeamOpenUrl(AvRoomDataManager.get().roomUid)
)
}
} else {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text = "TA暫未開通粉絲團"
}
}
gameBinding.flFansTeam.setOnClickListener(clickListener)
}
override fun onReceiveRoomEvent(roomEvent: RoomEvent?) {
@@ -162,6 +103,20 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
showInviteDialog(it)
}
}
RoomEvent.ROOM_PK_INVITE ->
SingleRoomPkReceivedDialog.newInstance((roomEvent.chatRoomMessage.attachment as RoomPKAttachment).roomPkBean)
.show(mContext)
RoomEvent.ROOM_PK_FINISH -> {
val roomPkBean =
(roomEvent.chatRoomMessage.attachment as RoomPKAttachment).roomPkBean
if (roomPkBean.isForce) {
SingleRoomPkForceFinishDialog.newInstance(roomPkBean).show(mContext)
} else {
SingleRoomPkFinishDialog.newInstance(roomPkBean).show(mContext)
}
gameBinding.microView.adapter?.notifyDataSetChanged()
}
RoomEvent.FANS_TEAM_OPEN_SUCCESS,
RoomEvent.FANS_TEAM_OPEN_FAILED,
RoomEvent.FANS_TEAM_JOIN,
@@ -184,23 +139,62 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
)
}
}
RoomEvent.ROOM_PK_INVITE ->
SingleRoomPkReceivedDialog.newInstance((roomEvent.chatRoomMessage.attachment as RoomPKAttachment).roomPkBean)
.show(mContext)
RoomEvent.ROOM_PK_FINISH -> {
val roomPkBean =
(roomEvent.chatRoomMessage.attachment as RoomPKAttachment).roomPkBean
if (roomPkBean.isForce) {
SingleRoomPkForceFinishDialog.newInstance(roomPkBean).show(mContext)
} else {
SingleRoomPkFinishDialog.newInstance(roomPkBean).show(mContext)
}
gameBinding.microView.adapter?.notifyDataSetChanged()
}
}
}
@SuppressLint("SetTextI18n")
private fun updateFansTeamInfo(initInfo: FansTeamInitInfo) {
var clickListener: View.OnClickListener? = null
if (initInfo.hasFansTeamCurrentRoom) {
if (AvRoomDataManager.get().isRoomOwner) {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text = String.format(getString(R.string.fans_team_4),"${initInfo.anchorFansNum}")
clickListener = View.OnClickListener {
DialogWebViewActivity.start(
requireContext(),
UriProvider.getFansTeamMyFansUrl(AvRoomDataManager.get().roomUid)
)
}
} else {
if (initInfo.isAnchorFans) {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
val level = if (initInfo.fansLevelSeq == 0) 1 else initInfo.fansLevelSeq
val levelStr =
String.format(requireContext().getString(R.string.fans_team_5), level.toString())
gameBinding.tvFansTeamOpt.text = levelStr
clickListener = View.OnClickListener {
FansTeamJoinedActivity.start(requireContext())
}
} else {
gameBinding.flFansTeamJoinTip.isVisible = true
gameBinding.tvFansTeamOpt.isVisible = false
clickListener = View.OnClickListener {
FansTeamJoinActivity.start(requireContext())
}
}
}
} else {
if (AvRoomDataManager.get().isRoomOwner) {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text = getString(R.string.fans_team_6)
clickListener = View.OnClickListener {
CommonWebViewActivity.start(
requireContext(),
UriProvider.getFansTeamOpenUrl(AvRoomDataManager.get().roomUid)
)
}
} else {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text = getString(R.string.layout_fragment_single_room_03)
}
}
gameBinding.flFansTeam.setOnClickListener(clickListener)
}
//顯示請求上麥彈窗
private fun showInviteDialog(userInfo: UserInfo) {
if (!this::upMicDialog.isInitialized) {
@@ -241,23 +235,8 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
}
}
override fun onShowBanner(dialogInfos: List<BannerInfo>) {
initRoomAct(gameBinding.activityImg, dialogInfos, 10f)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onFirstRechargeEvent(event: FirstChargeEvent) {
gameBinding.ivFirstChargeEnter.visibility = View.GONE
FirstChargePrizeDialog(
requireContext(),
event.chargeProdTitle,
event.firstChargeRewardList
).openDialog()
}
override fun initWidget() {
super.initWidget()
registerWidget(RedPackageWidget::class.java.simpleName, gameBinding.redPackageWidget)
registerWidget(RoomRankWidget::class.java.simpleName, gameBinding.rankWidget)
}

View File

@@ -0,0 +1,16 @@
/*
Copyright © Sud.Tech
https://sud.tech
*/
package com.chwl.app.avroom.game;
import com.chwl.app.BuildConfig;
public class AppConfig {
protected static final String APP_ID = "1578948593831571457";
protected static final String APP_KEY = "J9lHOXvFWkAZiTfl4SK7IGt0wDnW3fWd";
protected static boolean isTestEnv = BuildConfig.DEBUG;
}

View File

@@ -0,0 +1,695 @@
package com.chwl.app.avroom.game
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.text.TextUtils
import android.util.Log
import android.view.View
import android.view.ViewTreeObserver.OnGlobalLayoutListener
import android.widget.FrameLayout
import com.google.gson.Gson
import com.chwl.app.R
import com.chwl.core.auth.AuthModel
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.game.bean.GameCfg
import com.chwl.core.room.game.GameModel
import com.chwl.core.room.game.GameStatus
import com.chwl.core.room.model.HomePartyModel
import com.chwl.core.user.UserModel
import com.chwl.core.utils.LogUtils
import com.chwl.core.utils.net.RxHelper
import com.chwl.library.language.LanguageHelper
import com.chwl.library.net.rxnet.callback.CallBack
import com.chwl.library.utils.SingleToastUtil
import okhttp3.*
import org.json.JSONException
import org.json.JSONObject
import tech.sud.mgp.core.*
import java.util.*
class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId: Long?) {
private val TAG = "GameDelegate"
private var APP_CODE = ""
private val mRoomID :String get() = AvRoomDataManager.get().roomUid.toString()
private var mLanguage = "zh-TW" //語言
//調用遊戲SDK的接口,成功加載遊戲後可用:
private var iSudFSTAPP: ISudFSTAPP? = null
private val gson = Gson()
//小遊戲ID
private var mMGID = 0L
//通用狀態-遊戲,關鍵詞
private var mKeyWord: String? = null
private val mUid = AuthModel.get().currentUid.toString()
private val homePartyModel = HomePartyModel()
private var onGameStatusChangeListener: OnGameStatusChangeListener? = null
fun setOnGameStatusChangeListener(onGameStatusChangeListener: OnGameStatusChangeListener) {
this.onGameStatusChangeListener = onGameStatusChangeListener
}
private val loginCallback: AppLoginListener =
object : AppLoginListener {
override fun onLoginFailure(err: String?) {
SingleToastUtil.showToast(err)
}
override fun onLoginSuccess(new_code: String, expire_Date: Long) {
APP_CODE = new_code
Handler(Looper.getMainLooper()).post {
//初始化遊戲SDK
initGameSDK(
activity,
AppConfig.APP_ID,
AppConfig.APP_KEY,
AppConfig.isTestEnv
)
}
}
}
init {
mMGID = mgId ?: 0L
mLanguage = getGameLanguage()
login(loginCallback)
}
fun updateGame(mgId: Long?) {
if (mgId == null || mgId == 0L) return
if (mgId == mMGID && iSudFSTAPP != null) {
return
}
mMGID = mgId
updateMyMicQueue(GameStatus.STATUS_NOT_JOIN)
loadMG(activity, mUid, mRoomID, APP_CODE, mMGID, mLanguage)
}
fun exitGame() {
UserModel.get().cacheLoginUserInfo?.gameStatus = GameStatus.STATUS_NOT_JOIN
notifySelfPlayingState(false)
notifySelfInState(false)
}
/**
* 例如"你畫我猜"遊戲的文字命中
*/
fun hitTheMark(msg: String) {
mKeyWord?.let {
if (msg.contains(it)) {
notifySelfTextHit(it, msg)
}
}
}
/**
* "接入方客戶端"登陸接口, 從"接入方服務端"獲得Code
* "接入方服務端"是通過"服務端接入SDK"獲得Code來返回給"接入方客戶端"的
* @param listener
*/
@SuppressLint("CheckResult")
private fun login(listener: AppLoginListener) {
GameModel.getGameCode()
.compose(RxHelper.bindContext(activity))
.subscribe({
listener.onLoginSuccess(it.code, it.expireDate)
}, {
listener.onLoginFailure(it.message)
})
}
/**
* 1初始化遊戲SDK
*
* @param context 上下文
* @param appID appID
* @param appKey appKey
* @param isTestEnv 是否是測試環境true測試環境false正式環境
*/
private fun initGameSDK(context: Context, appID: String, appKey: String, isTestEnv: Boolean) {
SudMGP.initSDK(context, appID, appKey, isTestEnv, object : ISudListenerInitSDK {
override fun onSuccess() {
loadMG(activity, mUid, mRoomID, APP_CODE, mMGID, mLanguage)
}
override fun onFailure(code: Int, errInfo: String) {
val msg = context.getString(R.string.game_failed_tips).format("$code-${errInfo}")
showToast(msg)
}
})
}
/**
* 2加載遊戲
*
* @param activity 上下文Activity
* @param userID 用戶ID業務系統保證每個用戶擁有唯一ID
* @param roomID 房間ID進入同一房間內的
* @param code 令牌
* @param mgID 小遊戲ID
* @param language 遊戲語言 現支持簡體zh-CN 繁體zh-TW 英語en-US 馬來語ms-MY
*/
private fun loadMG(
activity: Activity,
userID: String,
roomID: String,
code: String,
mgID: Long,
language: String
) {
iSudFSTAPP?.destroyMG()
iSudFSTAPP = SudMGP.loadMG(activity, userID, roomID, code, mgID, language, mISudFSMMG)
iSudFSTAPP?.apply {
addGameView(gameView)
}
}
/**
* 3將遊戲view添加到我們的布局當中
*
* @param gameView
*/
private fun addGameView(gameView: View) {
container.removeAllViews()
container.addView(gameView)
}
private fun showToast(content: String?) {
SingleToastUtil.showToast(content)
}
/**
* 通知"文字命中狀態"到遊戲端
*
* @param iSudFSTAPP
* @param keyWord
*/
private fun notifySelfTextHit(keyWord: String?, msg: String) {
LogUtils.d("notifySelfTextHit")
try {
//狀態名稱
val state: String = SudMGPAPPState.APP_COMMON_SELF_TEXT_HIT
//狀態數據
val jsonObject = JSONObject()
jsonObject.put("isHit", true) // true 命中false 未命中
jsonObject.put("keyWord", keyWord) // true 命中false 未命中
jsonObject.put("text", msg) // 聊天原始內容,這裏的值只是一個示例,意指內容當中包含關鍵詞則命中,具體按業務規則定。
val dataJson = jsonObject.toString()
//調用接口
iSudFSTAPP?.notifyStateChange(state, dataJson, null)
} catch (e: Exception) {
e.printStackTrace()
}
}
/**
* 設置當前關鍵詞
*
* @param keyWord
*/
private fun setKeyWord(keyWord: String?) {
mKeyWord = keyWord
}
private fun getGameLanguage(): String {
return when (LanguageHelper.getCurrentLanguageType()) {
LanguageHelper.ZH -> {
"zh-TW"
}
LanguageHelper.AR -> {
"ar-SA"
}
else -> {
"en-US"
}
}
}
/**
* 遊戲SDK調用app的接口
*/
private val mISudFSMMG: ISudFSMMG = object : ISudFSMMG {
override fun onGameLog(p0: String?) {
LogUtils.d(p0)
}
override fun onGameLoadingProgress(p0: Int, p1: Int, p2: Int) {
}
override fun onGameStarted() {
}
override fun onGameDestroyed() {
}
/**
* 回調此方法表示令牌過期此時需要刷新令牌並使用ISudFSMStateHandle回調
* @param handle
* @param dataJson
*/
override fun onExpireCode(handle: ISudFSMStateHandle, dataJson: String) {
login(object : AppLoginListener {
override fun onLoginFailure(err: String?) {
}
override fun onLoginSuccess(new_code: String, expire_Date: Long) {
APP_CODE = new_code
try {
val jsonObject = JSONObject()
jsonObject.put("ret_code", 0)
jsonObject.put("ret_msg", "success")
handle.success(jsonObject.toString())
} catch (e: JSONException) {
e.printStackTrace()
}
iSudFSTAPP?.updateCode(APP_CODE, null)
}
})
}
/**
* 處理獲取遊戲視圖信息
* @param handle
* @param dataJson
*/
override fun onGetGameViewInfo(handle: ISudFSMStateHandle, dataJson: String) {
//拿到遊戲View的寬高
val gameViewWidth = container.measuredWidth
val gameViewHeight = container.measuredHeight
if (gameViewWidth > 0 && gameViewHeight > 0) {
notifyGameViewInfo(handle, gameViewWidth, gameViewHeight)
return
}
//如果遊戲View未加載完成則監聽加載完成時回調
container.viewTreeObserver.addOnGlobalLayoutListener(object : OnGlobalLayoutListener {
override fun onGlobalLayout() {
container.viewTreeObserver.removeOnGlobalLayoutListener(this)
val width = container.measuredWidth
val height = container.measuredHeight
notifyGameViewInfo(handle, width, height)
}
})
}
override fun onGetGameCfg(handle: ISudFSMStateHandle?, p1: String?) {
handle?.success(gson.toJson(GameCfg()))
}
/**
* 通知遊戲,遊戲視圖信息
* @param handle
* @param gameViewWidth
* @param gameViewHeight
*/
private fun notifyGameViewInfo(
handle: ISudFSMStateHandle,
gameViewWidth: Int,
gameViewHeight: Int
) {
try {
val jsonObject = JSONObject()
jsonObject.put("ret_code", 0)
jsonObject.put("ret_msg", "success")
//遊戲View大小
val viewSize = JSONObject()
viewSize.put("width", gameViewWidth)
viewSize.put("height", gameViewHeight)
jsonObject.put("view_size", viewSize)
//遊戲安全操作區域
val viewGameRect = JSONObject()
viewGameRect.put("left", 0)
viewGameRect.put("top", container.context.resources.getDimensionPixelOffset(R.dimen.dp_180))
viewGameRect.put("right", 0)
viewGameRect.put("bottom", container.context.resources.getDimensionPixelOffset(R.dimen.dp_150))
jsonObject.put("view_game_rect", viewGameRect)
//通知遊戲
val json = jsonObject.toString()
Log.d(TAG, "notifyGameViewInfo:$json")
handle.success(json)
} catch (e: JSONException) {
e.printStackTrace()
}
}
/**
* 遊戲狀態變化
* @param handle
* @param state 狀態名
* @param dataJson 狀態數據json字符串
*/
override fun onGameStateChange(
handle: ISudFSMStateHandle,
state: String,
dataJson: String
) {
Log.d(TAG, "onGameStateChange state:$state--dataJson:$dataJson")
when (state) {
//SudMGPMGState.MG_COMMON_PUBLIC_MESSAGE -> showToast("遊戲:公屏消息")
SudMGPMGState.MG_COMMON_KEY_WORD_TO_HIT -> {
if (TextUtils.isEmpty(dataJson)) {
setKeyWord(null)
} else {
try {
val jsonObject = JSONObject(dataJson)
if (jsonObject.isNull("word")) {
setKeyWord(null)
} else {
val keyWord = jsonObject.getString("word")
setKeyWord(keyWord)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
SudMGPMGState.APP_COMMON_SELF_CLICK_JOIN_BTN -> {
try {
val jsonObject = JSONObject(dataJson)
val seatIndex = jsonObject.optInt("seatIndex", -1)
updateMyMicQueue(GameStatus.STATUS_NOT_READY, true, seatIndex)
} catch (e: Exception) {
e.printStackTrace()
}
}
SudMGPMGState.APP_COMMON_SELF_CLICK_START_BTN -> {
notifySelfPlayingState(true)
}
SudMGPMGState.MG_COMMON_GAME_STATE -> handleGameState(dataJson)
}
}
/**
* 玩家狀態變化
* @param handle
* @param userId 玩家用戶ID
* @param state 狀態名
* @param dataJson 狀態數據json字符串。參考文檔
*/
override fun onPlayerStateChange(
handle: ISudFSMStateHandle,
userId: String,
state: String,
dataJson: String
) {
Log.d(TAG, "onPlayerStateChange userId:$userId--state:$state--dataJson:$dataJson")
when (state) {
SudMGPMGState.MG_COMMON_PLAYER_IN -> handlePlayerIn(userId, dataJson)
SudMGPMGState.MG_COMMON_PLAYER_READY -> handlePlayerReady(userId, dataJson)
SudMGPMGState.MG_COMMON_PLAYER_CAPTAIN -> handlePlayerCaptain(dataJson)
SudMGPMGState.MG_COMMON_PLAYER_PLAYING -> handlePlayerPlaying(userId, dataJson)
}
}
}
private fun handlePlayerIn(userId: String, dataJson: String) {
if (userId != mUid) return
try {
val jsonObject = JSONObject(dataJson)
val retCode = jsonObject.getInt("retCode")
val isIn = jsonObject.getBoolean("isIn")
if (retCode != 0) {
return
}
if (isIn) { // 已加入
if (AvRoomDataManager.get().isRoomOwner) {
notifySelfCaptainState(mUid)
}
} else { // 未加入
var reason = 0
if (jsonObject.has("reason")) {
reason = jsonObject.getInt("reason")
}
if (reason == 0) {
updateMyMicQueue(GameStatus.STATUS_NOT_JOIN)
} else if (reason == 1) {
updateMyMicQueue(GameStatus.STATUS_NOT_JOIN)
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun updateMyMicQueue(gameStatus: Int, isJoin: Boolean = false, seatIndex: Int = -1) {
UserModel.get().cacheLoginUserInfo?.gameStatus = gameStatus
val position = AvRoomDataManager.get().getMicPosition(mUid)
if (position != AvRoomDataManager.POSITON_NOT_ON_MIC) {
if (isJoin) notifySelfInState(true, seatIndex)
homePartyModel.updateMyMicQueue(
position,
AvRoomDataManager.get().roomId.toString(),
UserModel.get().cacheLoginUserInfo
).subscribe()
} else if (isJoin) {
val upPosition = AvRoomDataManager.get().findGamePosition()
if (upPosition == Int.MIN_VALUE) {
showToast("當前遊戲人數已滿!")
} else {
UserModel.get().cacheLoginUserInfo?.gameStatus = 1
homePartyModel.upMicroPhone(upPosition,
mUid,
AvRoomDataManager.get().roomId.toString(),
false, object : CallBack<String> {
override fun onSuccess(data: String?) {
notifySelfInState(true, seatIndex)
}
override fun onFail(code: Int, error: String?) {
showToast(error)
}
})
}
}
}
private fun handlePlayerReady(userId: String, dataJson: String) {
if (userId != mUid) return
try {
val jsonObject = JSONObject(dataJson)
val retCode = jsonObject.getInt("retCode")
val isReady = jsonObject.getBoolean("isReady")
if (retCode != 0) {
return
}
updateMyMicQueue(if (isReady) GameStatus.STATUS_READY else GameStatus.STATUS_NOT_READY)
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun handlePlayerCaptain(dataJson: String) {
try {
val jsonObject = JSONObject(dataJson)
val retCode = jsonObject.getInt("retCode")
if (retCode != 0) {
return
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun handleGameState(dataJson: String) {
try {
val jsonObject = JSONObject(dataJson)
val gameState = jsonObject.getInt("gameState")
if (gameState == 0) {
onGameStatusChangeListener?.onGameEnd()
} else if (gameState == 2) {
onGameStatusChangeListener?.onGameStart()
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun handlePlayerPlaying(userId: String, dataJson: String) {
if (userId != mUid) return
try {
val jsonObject = JSONObject(dataJson)
val retCode = jsonObject.getInt("retCode")
if (retCode != 0) {
return
}
val isPlaying = jsonObject.getBoolean("isPlaying")
if (isPlaying) {
updateMyMicQueue(GameStatus.STATUS_PLAYING)
} else {
updateMyMicQueue(GameStatus.STATUS_NOT_READY)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun notifySelfInState(isIn: Boolean, seatIndex: Int = -1) {
try {
if (!isIn) {
notifySelfReadyState(false)
}
//狀態名稱
val state = SudMGPAPPState.APP_COMMON_SELF_IN
//狀態數據
val jsonObject = JSONObject()
jsonObject.put("isIn", isIn) // true 加入遊戲false 退出遊戲
if (seatIndex != -1) {
jsonObject.put("seatIndex", seatIndex)
}
jsonObject.put("teamId", 1) //哪一隊伍(2v2,4v4)
val dataJson = jsonObject.toString()
//調用接口
iSudFSTAPP?.notifyStateChange(state, dataJson, null)
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun notifySelfReadyState(isReady: Boolean) {
try {
//狀態名稱
val state = SudMGPAPPState.APP_COMMON_SELF_READY
//狀態數據
val jsonObject = JSONObject()
jsonObject.put("isReady", isReady) // true 準備false 取消準備
val dataJson = jsonObject.toString()
//調用接口
iSudFSTAPP?.notifyStateChange(state, dataJson, null)
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun notifySelfPlayingState(isPlaying: Boolean) {
try {
//狀態名稱
val state = SudMGPAPPState.APP_COMMON_SELF_PLAYING
//狀態數據
val jsonObject = JSONObject()
jsonObject.put("isPlaying", isPlaying) // true 開始遊戲false 結束遊戲
val dataJson = jsonObject.toString()
//調用接口
iSudFSTAPP?.notifyStateChange(state, dataJson, null)
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun notifySelfCaptainState(uid: String) {
try {
//狀態名稱
val state = SudMGPAPPState.APP_COMMON_SELF_CAPTAIN
//狀態數據
val jsonObject = JSONObject()
jsonObject.put("curCaptainUID", uid) // 必填指定隊長uid
val dataJson = jsonObject.toString()
//調用接口
iSudFSTAPP?.notifyStateChange(state, dataJson, null)
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun notifySelfKickState(uid: String) {
try {
//狀態名稱
val state = SudMGPAPPState.APP_COMMON_SELF_KICK
//狀態數據
val jsonObject = JSONObject()
jsonObject.put("kickedUID", uid) // 被踢用戶uid
val dataJson = jsonObject.toString()
//調用接口
iSudFSTAPP?.notifyStateChange(state, dataJson, null)
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun notifySelfEndState() {
try {
//狀態名稱
val state = SudMGPAPPState.APP_COMMON_SELF_END
//狀態數據
val jsonObject = JSONObject()
val dataJson = jsonObject.toString()
//調用接口
iSudFSTAPP?.notifyStateChange(state, dataJson, null)
} catch (e: Exception) {
e.printStackTrace()
}
}
fun onStart() {
iSudFSTAPP?.startMG() //啟動遊戲
}
fun onResume() {
iSudFSTAPP?.playMG() //開始遊戲
}
fun onPause() {
iSudFSTAPP?.pauseMG() //暫停遊戲
}
fun onStop() {
iSudFSTAPP?.stopMG() //停止遊戲
}
fun onDestroy() {
updateMyMicQueue(GameStatus.STATUS_NOT_JOIN)
iSudFSTAPP?.destroyMG()
}
}
internal interface AppLoginListener {
/**
* App Server 登陸失敗, App Server 不能返回CODE
*/
fun onLoginFailure(err: String?)
/**
* App Server 登陸成功, App Server調用服務端接入SDK的API獲取Code 返回給 App
* App 就要用CODE和自己生成的UserID去調用SDK的初始化函數登陸小遊戲
* 小遊戲登陸成功後其UserID就是App傳的UserID
*/
fun onLoginSuccess(new_code: String, expire_Date: Long)
}

View File

@@ -0,0 +1,13 @@
package com.chwl.app.avroom.game
interface OnGameStatusChangeListener {
/**
* 游戏开始
*/
fun onGameStart()
/**
* 游戏结束
*/
fun onGameEnd()
}

View File

@@ -0,0 +1,61 @@
/*
Copyright © Sud.Tech
https://sud.tech
*/
package com.chwl.app.avroom.game;
/**
* Time:2021/10/19
* Description: APP to MG 的状态定义
*/
public class SudMGPAPPState {
// region 通用状态
/**
* 加入状态
* 最低版本: v1.1.30.xx
*/
public static final String APP_COMMON_SELF_IN = "app_common_self_in";
/**
* 准备状态
* 最低版本: v1.1.30.xx
*/
public static final String APP_COMMON_SELF_READY = "app_common_self_ready";
/**
* 游戏状态
* 最低版本: v1.1.30.xx
*/
public static final String APP_COMMON_SELF_PLAYING = "app_common_self_playing";
/**
* 队长状态
* 最低版本: v1.1.30.xx
*/
public static final String APP_COMMON_SELF_CAPTAIN = "app_common_self_captain";
/**
* 踢人
* v1.1.30.xx
*/
public static final String APP_COMMON_SELF_KICK = "app_common_self_kick";
/**
* 结束游戏
* v1.1.30.xx
*/
public static final String APP_COMMON_SELF_END = "app_common_self_end";
/**
* 麦克风状态
*/
public static final String APP_COMMON_SELF_MICROPHONE = "app_common_self_microphone";
/**
* 文字命中状态
*/
public static final String APP_COMMON_SELF_TEXT_HIT = "app_common_self_text_hit";
}

View File

@@ -0,0 +1,125 @@
/*
Copyright © Sud.Tech
https://sud.tech
*/
package com.chwl.app.avroom.game;
/**
* Time:2021/10/19
* Description: MG to APP 的状态定义
*/
public class SudMGPMGState {
// region 通用状态-游戏
/**
* 公屏消息 (已修改)
* 最低版本: v1.1.30.xx
*/
public static final String MG_COMMON_PUBLIC_MESSAGE = "mg_common_public_message";
/**
* 关键词状态
*/
public static final String MG_COMMON_KEY_WORD_TO_HIT = "mg_common_key_word_to_hit";
// endregion 通用状态-游戏
// region 通用状态-玩家
/**
* 加入状态 (已修改)
* 最低版本: v1.1.30.xx
*/
public static final String MG_COMMON_PLAYER_IN = "mg_common_player_in";
/**
* 准备状态 (已修改)
* 最低版本: v1.1.30.xx
*/
public static final String MG_COMMON_PLAYER_READY = "mg_common_player_ready";
/**
* 队长状态 (已修改)
* 最低版本: v1.1.30.xx
*/
public static final String MG_COMMON_PLAYER_CAPTAIN = "mg_common_player_captain";
/**
* 游戏状态 (已修改)
* 最低版本: v1.1.30.xx
*/
public static final String MG_COMMON_PLAYER_PLAYING = "mg_common_player_playing";
/**
* 游戏状态(已修改)
* 最低版本: v1.1.30.xx
*/
public static final String MG_COMMON_GAME_STATE = "mg_common_game_state";
// endregion 通用状态-玩家
// region 碰碰我最强
// endregion 碰碰我最强
// region 飞刀达人
// endregion 飞刀达人
// region 你画我猜
/**
* 选词中
*/
public static final String MG_DG_SELECTING = "mg_dg_selecting";
/**
* 作画中
*/
public static final String MG_DG_PAINTING = "mg_dg_painting";
/**
* 错误答案
*/
public static final String MG_DG_ERRORANSWER = "mg_dg_erroranswer";
/**
* 总积分
*/
public static final String MG_DG_TOTALSCORE = "mg_dg_totalscore";
/**
* 本次积分
*/
public static final String MG_DG_SCORE = "mg_dg_score";
// endregion 你画我猜
/**
* 加入游戏按钮点击状态
*/
public static final String APP_COMMON_SELF_CLICK_JOIN_BTN = "mg_common_self_click_join_btn";
/**
* 取消加入游戏按钮点击状态
*/
public static final String APP_COMMON_SELF_CLICK_CANCEL_JOIN_BTN = "mg_common_self_click_cancel_join_btn";
/**
* 准备按钮点击状态
*/
public static final String APP_COMMON_SELF_CLICK_READY_BTN = "mg_common_self_click_ready_btn";
/**
* 取消准备按钮点击状态
*/
public static final String APP_COMMON_SELF_CLICK_CANCEL_READY_BTN = "mg_common_self_click_cancel_ready_btn";
/**
* 开始游戏按钮点击状态
*/
public static final String APP_COMMON_SELF_CLICK_START_BTN = "mg_common_self_click_start_btn";
/**
* 分享按钮点击状态
*/
public static final String APP_COMMON_SELF_CLICK_SHARE_BTN = "mg_common_self_click_share_btn";
}

View File

@@ -0,0 +1,22 @@
package com.chwl.app.avroom.gameplay
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.recyclerview.widget.RecyclerView
class GameplayRecyclerView : RecyclerView {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
override fun onInterceptTouchEvent(e: MotionEvent?): Boolean {
parent.requestDisallowInterceptTouchEvent(true)
return super.onInterceptTouchEvent(e)
}
}

View File

@@ -0,0 +1,66 @@
package com.chwl.app.avroom.gameplay
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewConfiguration
import androidx.databinding.DataBindingUtil
import com.chwl.core.support.room.FrameLayoutRoomWidget
import com.chwl.app.R
import com.chwl.app.databinding.RoomGameplayListWidgetBinding
import com.chwl.core.room.bean.RoomIcon
class RoomGameplayListWidget : FrameLayoutRoomWidget {
private val adapter = RoomPlayListAdapter()
private val binding: RoomGameplayListWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.room_gameplay_list_widget, this, true
)
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
constructor(
context: Context,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes)
init {
binding.recyclerView.adapter = adapter
binding.ivSwitch.setOnClickListener {
getGameplayIconWidget()?.switchUI(false)
}
adapter.setOnItemClickListener { adapter, view, position ->
(adapter.getItem(position) as? RoomIcon)?.let {
getGameplayIconWidget()?.jump(it)
}
}
}
private fun getGameplayIconWidget(): RoomGameplayWidget? {
return roomView?.findWidget(
RoomGameplayWidget::class.simpleName ?: ""
) as? RoomGameplayWidget
}
fun loadData(list: List<RoomIcon>) {
adapter.setNewData(list)
if (list.size > 6) {
binding.recyclerView.isScrollbarFadingEnabled = false
binding.recyclerView.scrollBarFadeDuration = 0
} else {
binding.recyclerView.isScrollbarFadingEnabled = true
binding.recyclerView.scrollBarFadeDuration =
ViewConfiguration.getScrollBarFadeDuration()
}
}
}

View File

@@ -0,0 +1,119 @@
package com.chwl.app.avroom.gameplay
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import com.chwl.app.R
import com.chwl.app.databinding.RoomGameplayWidgetBinding
import com.chwl.app.treasure_box.widget.GoldBoxHelper
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.webview.room_banner.RoomWebDialogActivity
import com.chwl.app.utils.CommonJumpHelper
import com.chwl.core.room.bean.RoomIcon
import com.chwl.core.room.model.AvRoomModel
import com.chwl.core.support.room.FrameLayoutRoomWidget
import com.chwl.core.support.room.RoomContext
import com.chwl.core.support.room.RoomView
import com.example.lib_utils.ktx.singleClick
class RoomGameplayWidget : FrameLayoutRoomWidget {
private val binding: RoomGameplayWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.room_gameplay_widget, this, true
)
private var isOpened = false
private var list: List<RoomIcon>? = null
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
constructor(
context: Context,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes)
init {
binding.ivSwitch.setOnClickListener {
switchUI(!isOpened)
}
binding.ivIcon.singleClick {
list?.getOrNull(0)?.let {
jump(it)
}
}
}
override fun onInitialize(roomView: RoomView, roomContext: RoomContext) {
super.onInitialize(roomView, roomContext)
refreshData()
}
private fun refreshData() {
val disposable = AvRoomModel.get().roomGamePlayList
.subscribe { list: List<RoomIcon> ->
loadData(list)
}
getCompositeDisposable().add(disposable)
}
fun switchUI(openListWidget: Boolean) {
this.isOpened = openListWidget
if (openListWidget) {
this.visibility = View.INVISIBLE
getGameplayListWidget()?.visibility = View.VISIBLE
} else {
this.visibility = View.VISIBLE
getGameplayListWidget()?.visibility = View.GONE
}
}
private fun loadData(list: List<RoomIcon>) {
this.list = list
this.isVisible = list.isNotEmpty()
val listWidget = getGameplayListWidget()
if (list.isEmpty()) {
listWidget?.isVisible = false
}
listWidget?.loadData(list)
binding.ivIcon.load(list.firstOrNull()?.icon)
}
fun jump(data: RoomIcon) {
if (data.isFindLove()) {
GoldBoxHelper.handleBoxClick(context)
} else {
val url = data.skipContent
if (data.skipType == 3 && !url.isNullOrEmpty()) {
if (data.showType == 2) {
RoomWebDialogActivity.start(context, url, false)
} else {
CommonWebViewActivity.start(context, url)
}
} else {
CommonJumpHelper.bannerJump(context, data)
}
}
}
private fun getGameplayListWidget(): RoomGameplayListWidget? {
return roomView?.findWidget(
RoomGameplayListWidget::class.simpleName ?: ""
) as? RoomGameplayListWidget
}
}

View File

@@ -0,0 +1,16 @@
package com.chwl.app.avroom.gameplay
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.load
import com.chwl.core.room.bean.RoomIcon
class RoomPlayListAdapter :
BaseQuickAdapter<RoomIcon, BaseViewHolder>(R.layout.room_gameplay_item) {
override fun convert(helper: BaseViewHolder, item: RoomIcon?) {
helper.getView<ImageView>(R.id.iv_icon).load(item?.icon)
}
}

View File

@@ -5,7 +5,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.databinding.DialogNewUserChargePrizeBinding
import com.chwl.app.treasure_box.widget.dialog.BaseBindingDialog
import com.chwl.app.base.BaseBindingDialog
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.pay.bean.FirstChargeReward
import com.chwl.library.annatation.ActLayoutRes

View File

@@ -155,6 +155,9 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
AvRoomDataManager.get().roomPkLiveData.setValue(roomPkBean);
if (AvRoomDataManager.get().isSingleRoom()){
AudioEngineManager.get().setRemoteMute(roomPkBean.getAUid(), roomPkBean.getAMicStatus() == 0);
if (AvRoomDataManager.get().isRoomOwner()) {
AudioEngineManager.get().connectOtherRoom(String.valueOf(roomPkBean.getARoomId()), roomPkBean.getAUid());
}
}
});
}
@@ -459,13 +462,6 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
*/
@SuppressLint("CheckResult")
public void checkFirstCharge() {
AvRoomModel.get().getFirstCharge()
.compose(bindToLifecycle())
.subscribe(firstChargeInfo -> {
if (getMvpView() != null && firstChargeInfo.getNeedToShow()) {
getMvpView().showFirstChargeDialog(firstChargeInfo);
}
});
}
/**

View File

@@ -6,6 +6,9 @@ import android.util.Log;
import androidx.annotation.Nullable;
import com.chwl.app.public_chat.core.ChatRoomClient;
import com.chwl.app.public_chat.core.ChatRoomClientManager;
import com.chwl.core.initial.InitialModel;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@@ -26,7 +29,6 @@ import com.chwl.core.im.custom.bean.RoomInfoAttachment;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.praise.PraiseModel;
import com.chwl.core.room.bean.RoomContributeDataInfo;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.exception.AntiSpamHitException;
import com.chwl.core.room.game.GameStatus;
@@ -34,7 +36,6 @@ import com.chwl.core.room.giftvalue.helper.GiftValueMrg;
import com.chwl.core.room.model.AvRoomModel;
import com.chwl.core.room.model.HomePartyModel;
import com.chwl.core.room.model.RoomBaseModel;
import com.chwl.core.room.model.RoomContributeListModel;
import com.chwl.core.room.queue.bean.MicMemberInfo;
import com.chwl.core.super_admin.model.SuperAdminModel;
import com.chwl.core.super_admin.util.SuperAdminUtil;
@@ -52,7 +53,6 @@ import com.chwl.library.utils.SingleToastUtil;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.BiConsumer;
@@ -455,12 +455,12 @@ public class BaseRoomPresenter<V extends IBaseRoomView> extends BaseMvpPresenter
ChatRoomMessage firstMsg = IMNetEaseManager.get().getFirstMessageContent();
IMNetEaseManager.get().addCloseScreenMessages(firstMsg);
if (AvRoomDataManager.get().closeScreenBySAdmin()) {
contentText = "系統檢測涉嫌違規,予以關閉公屏消息警告";
contentText = ResUtil.getString(R.string.avroom_fragment_homepartyfragment_015);
} else {
contentText = "管理員已關閉聊天公屏";
contentText = ResUtil.getString(R.string.avroom_fragment_homepartyfragment_06);
}
} else {
contentText = "管理員已開啟聊天公屏";
contentText = ResUtil.getString(R.string.avroom_fragment_homepartyfragment_014);
}
RoomInfoAttachment attachment = new RoomInfoAttachment(CustomAttachment.CUSTOM_MSG_UPDATE_ROOM_INFO,
CustomAttachment.CUSTOM_MSG_UPDATE_ROOM_INFO_CLOSE_SCREEN);
@@ -496,10 +496,10 @@ public class BaseRoomPresenter<V extends IBaseRoomView> extends BaseMvpPresenter
.doOnNext(aBoolean -> getMvpView().showAttentionDialog())
.subscribe();
Observable.interval(1, 5, TimeUnit.MINUTES)
.compose(bindUntilEvent(PresenterEvent.DESTROY))
.takeWhile(aLong -> !AvRoomDataManager.get().isRoomFans && getMvpView() != null)
.subscribe(aLong -> getMvpView().noFollow2());
// Observable.interval(1, 5, TimeUnit.MINUTES)
// .compose(bindUntilEvent(PresenterEvent.DESTROY))
// .takeWhile(aLong -> !AvRoomDataManager.get().isRoomFans && getMvpView() != null)
// .subscribe(aLong -> getMvpView().noFollow2());
}
/**
@@ -562,4 +562,25 @@ public class BaseRoomPresenter<V extends IBaseRoomView> extends BaseMvpPresenter
.subscribe();
}
@SuppressLint("CheckResult")
public void sendPublicChatTextMessage(String message) {
if (TextUtils.isEmpty(message)) return;
String sessionId = InitialModel.get().getPublicChatSessionId();
if (sessionId == null) {
SingleToastUtil.showToast(R.string.public_chat_not_found);
return;
}
ChatRoomClient client = ChatRoomClientManager.INSTANCE.getClient(sessionId);
ChatRoomMessage textMessage = ChatRoomMessageBuilder.createChatRoomTextMessage(sessionId, message);
client.sendMessage(textMessage).compose(bindToLifecycle()).subscribe(new BiConsumer<Object, Throwable>() {
@Override
public void accept(Object o, Throwable throwable) throws Exception {
if (throwable != null) {
SingleToastUtil.showToast(throwable.getMessage());
} else {
getMvpView().onSendPublicChatMsgSuccess(textMessage);
}
}
});
}
}

View File

@@ -12,12 +12,10 @@ import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.chwl.app.R;
import com.chwl.app.avroom.view.IHomePartyView;
import com.chwl.app.treasure_box.widget.GoldBoxHelper;
import com.chwl.app.utils.UserUtils;
import com.chwl.core.Constants;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.home.bean.BannerInfo;
import com.chwl.core.im.custom.bean.CustomAttachment;
import com.chwl.core.im.custom.bean.FaceAttachment;
import com.chwl.core.manager.AvRoomDataManager;
@@ -298,49 +296,4 @@ public class HomePartyPresenter extends BaseRoomPresenter<IHomePartyView> {
, e -> SingleToastUtil.showToast(e.getMessage()));
}
@SuppressLint("CheckResult")
public void getBannerList() {
mAvRoomModel.getRoomBanner()
.compose(bindToLifecycle())
.subscribe(bannerInfos -> {
// final boolean firstCharge = UserUtils.getUserInfo().isFirstCharge();
if (GoldBoxHelper.needIntegrateBoxEntrance()) {
// if (firstCharge) {
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setFirstCharge(true);
// bannerInfos.add(0, bannerInfo);
// }
// if (GoldBoxHelper.isShowRadish()) {
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setRadish(true);
// bannerInfos.add(firstCharge ? 1 : 0, bannerInfo);
// }
getMvpView().onShowBanner(bannerInfos);
// GoldBoxHelper.isHideBox()
// .subscribe(isHide -> {
// if (!isHide) {
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setBox(true);
// int index = 0;
// if (firstCharge) index++;
// if (GoldBoxHelper.isShowRadish()) index++;
// bannerInfos.add(index, bannerInfo);
// }
// getMvpView().onShowBanner(bannerInfos);
// }, throwable -> getMvpView().onShowBanner(bannerInfos));
} else {
// if(GoldBoxHelper.isShowFairy()){
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setFairy(true);
// bannerInfos.add(0, bannerInfo);
// }
// if (firstCharge) {
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setFirstCharge(true);
// bannerInfos.add(0, bannerInfo);
// }
getMvpView().onShowBanner(bannerInfos);
}
});
}
}

View File

@@ -2,15 +2,9 @@ package com.chwl.app.avroom.presenter;
import android.annotation.SuppressLint;
import com.orhanobut.logger.Logger;
import com.chwl.app.R;
import com.chwl.app.avroom.view.IHomePartyUserListView;
import com.chwl.app.base.BaseMvpPresenter;
import com.chwl.core.room.bean.OnlineChatMember;
import com.chwl.core.room.model.HomePartyUserListModel;
import com.chwl.library.utils.ResUtil;
import java.util.List;
/**
* <p> </p>
@@ -26,49 +20,17 @@ public class HomePartyUserListPresenter extends BaseMvpPresenter<IHomePartyUserL
mHomePartyUserListMode = new HomePartyUserListModel();
}
/**
* 分页获取房间成员第一页包含队列成员固定成员游客50人之后每一页获取游客50人
*
* @param page 页数
* @param time 固定成员列表用updateTime,
* 游客列表用进入enterTime
* 填0会使用当前服务器最新时间开始查询即第一页单位毫秒
*/
@SuppressLint("CheckResult")
public void requestChatMemberByPage(final int page, long time, List<OnlineChatMember> oldList) {
mHomePartyUserListMode.getOnLinePageMembers(page, time, oldList)
.subscribe(onlineChatMembers -> {
Logger.i(ResUtil.getString(R.string.avroom_presenter_homepartyuserlistpresenter_01), page, onlineChatMembers.size());
if (getMvpView() != null) {
getMvpView().onRequestChatMemberByPageSuccess(onlineChatMembers, page);
}
}, throwable -> {
throwable.printStackTrace();
Logger.i(ResUtil.getString(R.string.avroom_presenter_homepartyuserlistpresenter_02), page, throwable.getMessage());
if (getMvpView() != null) {
getMvpView().onRequestChatMemberByPageFail(throwable.getMessage(), page);
}
});
public void requestRoomOnlineList(long roomUid){
mHomePartyUserListMode.getRoomOnlineList(roomUid).compose(bindToLifecycle()).subscribe((data, throwable) -> {
if (getMvpView() != null) {
if (data != null) {
getMvpView().onRequestRoomOnlineListSuccess(data);
} else {
getMvpView().onRequestChatMemberByPageFail(throwable.getMessage(), 1);
}
}
});
}
public void onMemberDownUpMic(String account, boolean isUpMic, List<OnlineChatMember> dataList,
final int page) {
mHomePartyUserListMode.onMemberDownUpMic(account, isUpMic, dataList)
.subscribe(onlineChatMembers -> {
if (getMvpView() != null)
getMvpView().onRequestChatMemberByPageSuccess(onlineChatMembers, page);
});
}
public void onUpdateMemberManager(String account, List<OnlineChatMember> dataList,
boolean isRemoveManager, final int page) {
mHomePartyUserListMode.onUpdateMemberManager(account, isRemoveManager, dataList)
.subscribe(onlineChatMembers -> {
if (getMvpView() != null)
getMvpView().onRequestChatMemberByPageSuccess(onlineChatMembers, page);
});
}
}

View File

@@ -1,52 +0,0 @@
package com.chwl.app.avroom.presenter;
import com.chwl.app.R;
import com.chwl.app.base.BaseMvpPresenter;
import com.chwl.app.module.IRoomNewbieMessageView;
import com.chwl.app.module.RoomNewbieModel;
import com.chwl.core.bean.RoomNewbieMessageInfo;
import com.chwl.library.utils.ResUtil;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
public class RoomNewbieHellowWordPresenter extends BaseMvpPresenter<IRoomNewbieMessageView> {
private int start = 0;
private int pageSize = 5;//发现萌新-打招呼列表
public void loadData(int start) {
RoomNewbieModel.get().getMessageList(start, pageSize)
.compose(bindToLifecycle()).subscribe(new SingleObserver<RoomNewbieMessageInfo>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(RoomNewbieMessageInfo messageInfos) {
if (messageInfos != null) {
if (mMvpView != null) {
mMvpView.getRoomNewbieMessageSuccess(messageInfos);
}
} else {
if (mMvpView != null) {
mMvpView.getRoomNewbieMessageFails(ResUtil.getString(R.string.avroom_presenter_roomnewbiehellowwordpresenter_01));
}
}
}
@Override
public void onError(Throwable e) {
if (mMvpView != null) {
mMvpView.getRoomNewbieMessageFails(e.getMessage());
}
}
});
}
public int getStart() {
return start;
}
}

View File

@@ -1,12 +1,8 @@
package com.chwl.app.avroom.presenter;
import android.annotation.SuppressLint;
import com.chwl.app.avroom.view.ISingleRoomView;
import com.chwl.app.treasure_box.widget.GoldBoxHelper;
import com.chwl.app.utils.UserUtils;
import com.chwl.core.home.bean.BannerInfo;
/**
* <p> </p>
@@ -16,50 +12,4 @@ import com.chwl.core.home.bean.BannerInfo;
*/
public class SingleRoomPresenter extends BaseRoomPresenter<ISingleRoomView> {
@SuppressLint("CheckResult")
public void getBannerList() {
mAvRoomModel.getRoomBanner()
.compose(bindToLifecycle())
.subscribe(bannerInfos -> {
// final boolean firstCharge = UserUtils.getUserInfo().isFirstCharge();
if (GoldBoxHelper.needIntegrateBoxEntrance()) {
// if (firstCharge) {
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setFirstCharge(true);
// bannerInfos.add(0, bannerInfo);
// }
// if (GoldBoxHelper.isShowRadish()) {
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setRadish(true);
// bannerInfos.add(firstCharge ? 1 : 0, bannerInfo);
// }
getMvpView().onShowBanner(bannerInfos);
// GoldBoxHelper.isHideBox()
// .subscribe(isHide -> {
// if (!isHide) {
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setBox(true);
// int index = 0;
// if (firstCharge) index++;
// if (GoldBoxHelper.isShowRadish()) index++;
// bannerInfos.add(index, bannerInfo);
// }
// getMvpView().onShowBanner(bannerInfos);
// }, throwable -> getMvpView().onShowBanner(bannerInfos));
} else {
// if(GoldBoxHelper.isShowFairy()){
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setFairy(true);
// bannerInfos.add(0, bannerInfo);
// }
// if (firstCharge) {
// BannerInfo bannerInfo = new BannerInfo();
// bannerInfo.setFirstCharge(true);
// bannerInfos.add(0, bannerInfo);
// }
getMvpView().onShowBanner(bannerInfos);
}
});
}
}

View File

@@ -0,0 +1,880 @@
package com.chwl.app.avroom.public_chat;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.SimpleItemAnimator;
import com.chwl.app.R;
import com.chwl.app.UIHelper;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.avroom.dialog.PKResultDialog;
import com.chwl.app.avroom.widget.OnMsgLongClickListener;
import com.chwl.app.avroom.widget.TemplateMessageAdapter;
import com.chwl.app.common.widget.CustomImageSpan;
import com.chwl.app.common.widget.OriginalDrawStatusClickSpan;
import com.chwl.app.photo.BigPhotoActivity;
import com.chwl.app.photo.PagerOption;
import com.chwl.app.public_chat.core.viewholder.ChatRoomMessageViewHolderThumbBase;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
import com.chwl.app.ui.widget.DividerItemDecoration;
import com.chwl.app.ui.widget.MyItemAnimator;
import com.chwl.app.ui.widget.RecyclerViewNoViewpagerScroll;
import com.chwl.app.ui.widget.TextSpannableBuilder;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.utils.ObjectTypeHelper;
import com.chwl.app.utils.RegexUtil;
import com.chwl.core.DemoCache;
import com.chwl.core.XConstants;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.bean.attachmsg.RoomQueueMsgAttachment;
import com.chwl.core.decoration.car.bean.CarInfo;
import com.chwl.core.home.event.FollowRoomEvent;
import com.chwl.core.home.model.CollectionRoomModel;
import com.chwl.core.im.custom.bean.CustomAttachment;
import com.chwl.core.im.custom.bean.HeadlineChangedAttachment;
import com.chwl.core.im.custom.bean.MonsterHuntingResultAttachment;
import com.chwl.core.im.custom.bean.MonsterStatusAttachment;
import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment;
import com.chwl.core.im.custom.bean.RoomFollowOwnerAttachment2;
import com.chwl.core.im.custom.bean.RoomTipAttachment;
import com.chwl.core.im.custom.bean.TarotAttachment;
import com.chwl.core.level.UserLevelResourceType;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.monsterhunting.bean.MonsterHuntingResult;
import com.chwl.core.noble.NobleUtil;
import com.chwl.core.praise.PraiseModel;
import com.chwl.core.public_chat_hall.bean.HeadlineBean;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.pk.attachment.RoomPkAttachment;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.core.utils.ExtensionUtil;
import com.chwl.library.common.util.Utils;
import com.chwl.library.utils.JavaUtil;
import com.chwl.library.utils.ListUtils;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import com.chwl.library.utils.SizeUtils;
import com.example.lib_utils.UiUtils;
import com.example.lib_utils.spannable.SpannableTextBuilder;
import com.netease.nim.uikit.business.session.emoji.MoonUtil;
import com.netease.nim.uikit.common.util.media.ImageUtil;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessageExtension;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomNotificationAttachment;
import com.netease.nimlib.sdk.msg.attachment.ImageAttachment;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.constant.NotificationType;
import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import io.reactivex.Single;
import io.reactivex.functions.Consumer;
import kotlin.jvm.functions.Function1;
/**
* 直播間消息界面
*
* @author xiaoyu
*/
public class PublicChatMessageView extends FrameLayout {
private static final String TAG = "PublicChatMessageView";
private final static int MAX_MESSAGE_SIZE = 100;//公屏最多展示條數
private final static int BLOCK_MAX_MESSAGE_SIZE = MAX_MESSAGE_SIZE * 3 / 2;//在查看消息停住的時候 最多消息條數.
private final List<ChatRoomMessage> atMessages = new ArrayList<>();
private final List<ChatRoomMessage> chatRoomMessages = new LinkedList<>();
private RecyclerView messageListView;
private TextView tvBottomTip;
private TextView tvAtTip;
private MessageAdapter mMessageAdapter;
private LinearLayoutManager layoutManger;
private int paddingWidth;
private int paddingHeight;
private int whiteColor;
private int greyColor;
private int roomTipColor;
private int badgeWidth;
private int badgeHeight;
private int expLevelHeight;
private int defTextSize = 12;
private volatile boolean needAutoScroll = true;//是否自動滾動到底部
private Consumer<String> clickConsumer;
private OnClick onClick;
private OnMsgLongClickListener onLongClickListener;
private TemplateMessageAdapter templateMessageAdapter;
public PublicChatMessageView(Context context) {
this(context, null);
}
public PublicChatMessageView(Context context, AttributeSet attr) {
this(context, attr, 0);
}
public PublicChatMessageView(Context context, AttributeSet attr, int i) {
super(context, attr, i);
init(context);
}
public void setOnLongClickListener(OnMsgLongClickListener onLongClickListener) {
this.onLongClickListener = onLongClickListener;
}
public void setClickConsumer(Consumer<String> clickConsumer) {
this.clickConsumer = clickConsumer;
}
public void setOnClick(OnClick onClick) {
this.onClick = onClick;
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
@SuppressLint("ClickableViewAccessibility")
private void init(Context context) {
whiteColor = ContextCompat.getColor(context, R.color.white);
greyColor = ContextCompat.getColor(context, R.color.white_transparent_50);
roomTipColor = ContextCompat.getColor(context, R.color.color_FEE057);
paddingWidth = Utils.dip2px(context, 11);
paddingHeight = Utils.dip2px(context, 6);
badgeWidth = Utils.dip2px(context, 15);
badgeHeight = Utils.dip2px(context, 15);
//經驗等級圖片後臺已經更換尺寸了公屏同步下尺寸是36:18
expLevelHeight = Utils.dip2px(context, 18);
// 內容區域
layoutManger = new LinearLayoutManager(context, RecyclerView.VERTICAL, false);
LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
messageListView = new RecyclerViewNoViewpagerScroll(context);
messageListView.setLayoutParams(params);
messageListView.setFadingEdgeLength(60);
messageListView.setVerticalFadingEdgeEnabled(true);
messageListView.setOverScrollMode(OVER_SCROLL_NEVER);
messageListView.setHorizontalScrollBarEnabled(false);
addView(messageListView);
messageListView.setLayoutManager(layoutManger);
messageListView.addItemDecoration(new DividerItemDecoration(context, layoutManger.getOrientation(), 16, R.color.transparent));
mMessageAdapter = new MessageAdapter(getContext());
mMessageAdapter.setData(chatRoomMessages);
messageListView.setAdapter(mMessageAdapter);
messageListView.setItemAnimator(new MyItemAnimator());
messageListView.getItemAnimator().setAddDuration(0);
messageListView.getItemAnimator().setChangeDuration(0);
messageListView.getItemAnimator().setMoveDuration(0);
messageListView.getItemAnimator().setRemoveDuration(0);
((SimpleItemAnimator) messageListView.getItemAnimator()).setSupportsChangeAnimations(false);
// 底部有新消息
tvBottomTip = new TextView(context);
LayoutParams params1 = new LayoutParams(
Utils.dip2px(context, 115F), Utils.dip2px(context, 27));
params1.gravity = Gravity.BOTTOM;
params1.leftMargin = UIUtil.getScreenWidth(context) / 2 - UIUtil.dip2px(context, 115 / 2);
tvBottomTip.setBackgroundResource(R.drawable.bg_messge_view_bottom_tip);
tvBottomTip.setGravity(Gravity.CENTER);
tvBottomTip.setText(context.getString(R.string.message_view_bottom_tip));
tvBottomTip.setTextColor(context.getResources().getColor(R.color.appColor));
tvBottomTip.setLayoutParams(params1);
tvBottomTip.setVisibility(GONE);
tvBottomTip.setOnClickListener(v -> {
tvBottomTip.setVisibility(GONE);
needAutoScroll = true;
if (mMessageAdapter.getItemCount() > 0) {
messageListView.smoothScrollToPosition(mMessageAdapter.getItemCount() - 1);
}
});
addView(tvBottomTip);
//有人@我
tvAtTip = new TextView(context);
LayoutParams params2 = new LayoutParams(
Utils.dip2px(context, 115F), Utils.dip2px(context, 27));
params2.gravity = Gravity.BOTTOM;
params2.leftMargin = UIUtil.getScreenWidth(context) / 2 - UIUtil.dip2px(context, 115 / 2);
tvAtTip.setBackgroundResource(R.drawable.bg_messge_view_bottom_tip);
tvAtTip.setGravity(Gravity.CENTER);
tvAtTip.setText(context.getString(R.string.message_view_bottom_tip));
tvAtTip.setTextColor(context.getResources().getColor(R.color.color_FD85C9));
tvAtTip.setLayoutParams(params2);
tvAtTip.setVisibility(GONE);
tvAtTip.setOnClickListener(v -> {
if (!atMessages.isEmpty()) {
int scrollIndex = chatRoomMessages.indexOf(atMessages.remove(0));
if (scrollIndex != -1 && scrollIndex < mMessageAdapter.getItemCount()) {
messageListView.smoothScrollToPosition(scrollIndex);
}
}
needAutoScroll = false;
checkShowAtTip();
});
addView(tvAtTip);
messageListView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
}
@Override
public void onScrollStateChanged(final RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
// Logger.e(TAG, "onScrollStateChanged: SCROLL_STATE_DRAGGING");
needAutoScroll = false;
}
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
// Logger.e(TAG, "onScrollStateChanged: SCROLL_STATE_IDLE");
int lastVisibleItemPosition = layoutManger.findLastVisibleItemPosition();
if (lastVisibleItemPosition == RecyclerView.NO_POSITION) {
// Logger.e(TAG, "lastCompletelyVisibleItemPosition : RecyclerView.NO_POSITION");
needAutoScroll = true;
} else if (!atMessages.isEmpty() && atMessages.remove(chatRoomMessages.get(lastVisibleItemPosition))) {
checkShowAtTip();
}
// Log.e(TAG, "lastVisibleItemPosition:" + lastVisibleItemPosition
// + " mMessageAdapter.getItemCount()-1:" + (recyclerView.getAdapter().getItemCount()-1)
// + " dis:"+ (lastVisibleItemPosition-(recyclerView.getAdapter().getItemCount()-1)));
if (lastVisibleItemPosition >= recyclerView.getAdapter().getItemCount() - 3) {
//最後一個顯示出來了
// Logger.e(TAG, ResUtil.getString(R.string.avroom_widget_messageview_01));
needAutoScroll = true;
tvBottomTip.setVisibility(GONE);
keepSizeUnderLimit();
} else {
// Logger.e(TAG, ResUtil.getString(R.string.avroom_widget_messageview_02));
// needAutoScroll = false;
}
}
}
});
}
private TemplateMessageAdapter getTemplateMessageAdapter() {
if (templateMessageAdapter == null) {
templateMessageAdapter = new TemplateMessageAdapter(uid -> {
if (clickConsumer != null) {
Single.just(String.valueOf(uid)).subscribe(clickConsumer);
}
});
}
return templateMessageAdapter;
}
/**
* 添加公屏消息請使用 {@link AvRoomDataManager#addChatRoomMessage(ChatRoomMessage)}
*/
public void addMessages(ChatRoomMessage msg) {
if (msg == null) return;
chatRoomMessages.add(msg);
//通知adapter 刷新
mMessageAdapter.notifyItemInserted(mMessageAdapter.getItemCount() - 1);
showTipsOrScrollToBottom();
checkAtMe(msg, false);
}
public void addMessages(List<ChatRoomMessage> messages) {
if (messages == null) return;
chatRoomMessages.addAll(messages);
//通知adapter 刷新
mMessageAdapter.notifyDataSetChanged();
showTipsOrScrollToBottom();
for (ChatRoomMessage message : messages) {
checkAtMe(message, true);
}
}
public void addHistoryMessages(List<ChatRoomMessage> messages) {
chatRoomMessages.addAll(0, messages);
mMessageAdapter.notifyDataSetChanged();
messageListView.scrollToPosition(mMessageAdapter.getItemCount() - 1);
for (ChatRoomMessage message : messages) {
checkAtMe(message, true);
}
}
private void keepSizeUnderLimit() {
while (chatRoomMessages.size() > MAX_MESSAGE_SIZE) {
Log.i("keepSizeUnderLimit", "size" + chatRoomMessages.size());
ChatRoomMessage message = chatRoomMessages.remove(0);
if (atMessages.remove(message)) {
checkShowAtTip();
}
mMessageAdapter.notifyItemRemoved(0);
}
}
private void checkShowAtTip() {
tvAtTip.setText(getContext().getString(R.string.message_at_tip, atMessages.size()));
tvAtTip.setVisibility(atMessages.size() == 0 ? GONE : VISIBLE);
}
private void checkAtMe(ChatRoomMessage msg, boolean history) {
if (msg.getMsgType() != MsgTypeEnum.text) return;
List<String> atUids = ExtensionUtil.getListExtension(msg, UserInfo.AT_UIDS);
List<String> atNames = ExtensionUtil.getListExtension(msg, UserInfo.AT_NAMES);
if (!ListUtils.isListEmpty(atUids) && !ListUtils.isListEmpty(atNames)) {
for (int i = 0; i < atUids.size(); i++) {
String uid = atUids.get(i);
// 只有當被 @ 人的數組中包含自己的時候才會去變色
if (Objects.equals(uid, String.valueOf(AuthModel.get().getCurrentUid()))) {
Map<String, Long> atMap = DemoCache.readAtMsgUuid();
if (atMap == null || !atMap.containsKey(msg.getUuid())) {
if (!atMessages.contains(msg) && (!needAutoScroll || history)) {
atMessages.add(msg);
checkShowAtTip();
}
DemoCache.saveAtMsgUuid(msg.getUuid());
}
}
}
}
}
public void showTipsOrScrollToBottom() {
if (!needAutoScroll) {
tvBottomTip.setVisibility(VISIBLE);
//超過某值後自動滾動下去
if (mMessageAdapter.getItemCount() > BLOCK_MAX_MESSAGE_SIZE) {
if (mMessageAdapter.getItemCount() > 0) {
messageListView.smoothScrollToPosition(mMessageAdapter.getItemCount() - 1);
}
}
return;
}
if (mMessageAdapter.getItemCount() > 0) {
messageListView.smoothScrollToPosition(mMessageAdapter.getItemCount() - 1);
}
}
public void release() {
}
public void clear() {
if (mMessageAdapter != null) {
chatRoomMessages.clear();
mMessageAdapter.notifyDataSetChanged();
}
if (tvBottomTip != null) {
needAutoScroll = true;
tvBottomTip.setVisibility(GONE);
}
}
public void setNeedAutoScroll(boolean needAutoScroll) {
this.needAutoScroll = needAutoScroll;
}
public RecyclerView getMessageListView(){
return messageListView;
}
public interface OnClick {
/**
* 公屏查看公告
*/
void onShowRoomIntroduction();
}
private class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MessageViewHolder> implements OnClickListener,Function1<Drawable, ImageSpan> {
private Context mContext;
private List<ChatRoomMessage> data;
private int ITEM_TYPE_IMAGE = 1;
public MessageAdapter(Context mContext) {
this.mContext = mContext;
}
public void setData(List<ChatRoomMessage> data) {
this.data = data;
}
@Override
public int getItemViewType(int position) {
ChatRoomMessage chatRoomMessage = data.get(position);
if (chatRoomMessage.getMsgType() == MsgTypeEnum.image) {
return ITEM_TYPE_IMAGE;
}
return super.getItemViewType(position);
}
@Override
public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ITEM_TYPE_IMAGE) {
return new MessageAdapter.MessageViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_chatroom_msg_image, parent, false));
}
return new MessageViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_chatrrom_msg, parent, false));
}
@Override
public void onBindViewHolder(MessageViewHolder holder, int position) {
if (getItemViewType(position) == ITEM_TYPE_IMAGE) {
convertImage(holder, data.get(position));
} else {
convert(holder, data.get(position));
}
}
@Override
public int getItemCount() {
return data.size();
}
protected void convertImage(MessageViewHolder baseViewHolder, ChatRoomMessage chatRoomMessage) {
TextView tvContent = baseViewHolder.tvContent;
tvContent.setLineSpacing(0, 1);
tvContent.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
tvContent.setOnClickListener(this);
tvContent.setTag(chatRoomMessage);
if (UiUtils.INSTANCE.isRtl(tvContent.getContext())) {
tvContent.setTextDirection(View.TEXT_DIRECTION_RTL);
}
try {
setVIPMessageBackground(chatRoomMessage, baseViewHolder.itemView);
ChatRoomMessageExtension extension = chatRoomMessage.getChatRoomMessageExtension();
TextSpannableBuilder text = new TextSpannableBuilder(tvContent);
addCommonTag(chatRoomMessage, text, tvContent);
String nickName = extension == null ? ResUtil.getString(R.string.avroom_widget_messageview_0116) : RegexUtil.getPrintableString(extension.getSenderNick());
text.append(nickName, new ForegroundColorSpan(greyColor));
tvContent.setText(text.build());
ImageView imageView = baseViewHolder.itemView.findViewById(R.id.iv_image);
ImageAttachment msgAttachment = (ImageAttachment) chatRoomMessage.getAttachment();
String path = msgAttachment.getThumbPath();
if (TextUtils.isEmpty(path)) {
path = msgAttachment.getPath();
}
if (TextUtils.isEmpty(path)) {
path = "";
}
ImageLoadUtilsV2.loadImage(imageView, path);
int[] bounds = new int[]{msgAttachment.getWidth(), msgAttachment.getHeight()};
ImageUtil.ImageSize imageSize = ImageUtil.getThumbnailDisplaySize(bounds[0], bounds[1], ChatRoomMessageViewHolderThumbBase.getImageMaxEdge(), ChatRoomMessageViewHolderThumbBase.getImageMinEdge());
ViewGroup.LayoutParams maskParams = imageView.getLayoutParams();
maskParams.width = imageSize.width;
maskParams.height = imageSize.height;
imageView.setLayoutParams(maskParams);
String finalPath = path;
imageView.setOnClickListener(v -> {
BigPhotoActivity.start((Activity) mContext, ObjectTypeHelper.pathToCustomItems(finalPath),
0, new PagerOption());
});
} catch (Exception e) {
e.printStackTrace();
}
}
protected void convert(MessageViewHolder baseViewHolder, ChatRoomMessage chatRoomMessage) {
if (chatRoomMessage == null) return;
TextView tvContent = baseViewHolder.tvContent;
tvContent.setLineSpacing(0, 1);
tvContent.setTextColor(Color.WHITE);
tvContent.setTextSize(defTextSize);
tvContent.setOnClickListener(this);
tvContent.setOnLongClickListener(null);
tvContent.setTag(chatRoomMessage);
tvContent.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
if (UiUtils.INSTANCE.isRtl(tvContent.getContext())) {
tvContent.setTextDirection(View.TEXT_DIRECTION_RTL);
}
clearBackground(tvContent);
try {
if (chatRoomMessage.getMsgType() == MsgTypeEnum.tip) {
// 房間通告
tvContent.setTextColor(ContextCompat.getColor(mContext, R.color.color_92F9E8));
tvContent.setText(chatRoomMessage.getContent());
tvContent.setBackgroundResource(R.drawable.shape_room_message_tip_bg);
} else if (chatRoomMessage.getMsgType() == MsgTypeEnum.text) {
setMsgText(chatRoomMessage, tvContent);
setVIPMessageBackground(chatRoomMessage, tvContent);
} else if (chatRoomMessage.getMsgType() == MsgTypeEnum.notification) {
// 加上勛章
setMsgNotification(chatRoomMessage, tvContent, baseViewHolder.getAdapterPosition());
setVIPMessageBackground(chatRoomMessage, tvContent);
} else if (chatRoomMessage.getMsgType() == MsgTypeEnum.custom) {
CustomAttachment attachment = (CustomAttachment) chatRoomMessage.getAttachment();
int first = attachment.getFirst();
int second = attachment.getSecond();
if (first == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED) {
if (second == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB) {
setHeadlineMsg(chatRoomMessage, tvContent, attachment);
}
} else {
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
}
}
} catch (UnsupportedOperationException e) {
e.printStackTrace();
clearBackground(tvContent);
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
}
}
private void clearBackground(TextView textView) {
// 清除文字
textView.setText("");
// 清除聊天氣泡
textView.setBackgroundResource(R.drawable.shape_room_message_bg);
textView.setPadding(paddingWidth, paddingHeight, paddingWidth, paddingHeight);
}
private void setNullBackground(TextView textView) {
// 清除聊天氣泡
textView.setBackground(null);
textView.setPadding(0, 0, 0, 0);
}
public void setVIPMessageBackground(ChatRoomMessage chatRoomMessage, View view) {
String androidBubbleUrl = NobleUtil.getResource(UserInfo.BUBBLE_URL_ANDROID, chatRoomMessage);
if (TextUtils.isEmpty(androidBubbleUrl)) return;
view.setPadding(paddingWidth, ScreenUtil.dip2px(10), paddingWidth, ScreenUtil.dip2px(10));
ImageLoadUtils.loadNinePatchBg(view, androidBubbleUrl);
}
/**
* {badge}{level}xxx: 文字內容
*
* @param chatRoomMessage -
* @param tvContent -
*/
private void setMsgText(ChatRoomMessage chatRoomMessage, TextView tvContent) {
TextSpannableBuilder text = new TextSpannableBuilder(tvContent);
addCommonTag(chatRoomMessage, text, tvContent);
String nickName;
if (chatRoomMessage.getFromAccount() != null && chatRoomMessage.getFromAccount().equals(AuthModel.get().getCurrentUid() + "")) {
nickName = ResUtil.getString(R.string.avroom_widget_messageview_0116);
} else {
nickName = NobleUtil.getNamePlate(UserInfo.NICK, chatRoomMessage);
}
text.append(nickName, new ForegroundColorSpan(greyColor));
text.append(": " + chatRoomMessage.getContent(), new ForegroundColorSpan(getResources().getColor(R.color.white)));
List<String> atUids = ExtensionUtil.getListExtension(chatRoomMessage, UserInfo.AT_UIDS);
List<String> atNames = ExtensionUtil.getListExtension(chatRoomMessage, UserInfo.AT_NAMES);
if (!ListUtils.isListEmpty(atUids) && !ListUtils.isListEmpty(atNames)) {
for (int i = 0; i < atUids.size(); i++) {
String name = atNames.get(i);
String uid = atUids.get(i);
// 只有當被 @ 人的數組中包含自己的時候才會去變色
if (Objects.equals(uid, String.valueOf(AuthModel.get().getCurrentUid()))) {
Pattern pattern = Pattern.compile(Pattern.quote(name));
Matcher matcher = pattern.matcher(text.build().toString());
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
text.build().setSpan(new ForegroundColorSpan(getContext().getResources().getColor(R.color.color_FD85C9)),
start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
}
}
}
if (Objects.equals(chatRoomMessage.getFromAccount(), String.valueOf(AuthModel.get().getCurrentUid()))) {
tvContent.setOnLongClickListener(null);
} else {
tvContent.setOnLongClickListener(v -> {
if (onLongClickListener != null) {
onLongClickListener.onLongClick(v, chatRoomMessage.getFromAccount(), nickName);
}
return true;
});
}
MoonUtil.replaceEmoticons(getContext(), text.builder.toString(), text.builder, this);
tvContent.setText(text.build());
}
private void addCommonTag(ChatRoomMessage chatRoomMessage, @NonNull TextSpannableBuilder builder, TextView tvContent) {
ChatRoomMessageExtension extension = chatRoomMessage.getChatRoomMessageExtension();
String userLevel = NobleUtil.getLevel(UserLevelResourceType.EXPER_URL, chatRoomMessage);
boolean isOfficial = NobleUtil.getIsOfficial(UserInfo.IS_OFFICIAL, chatRoomMessage);
String vipIcon = NobleUtil.getResource(UserInfo.VIP_ICON, chatRoomMessage);
builder.append(vipIcon, expLevelHeight)
.append(isOfficial ? ResourcesCompat.getDrawable(getResources(),
R.mipmap.ic_user_official_13dp, null) : null,
badgeWidth, badgeHeight)
.append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight)
.append(AvRoomDataManager.get().isSuperAdmin(chatRoomMessage.getFromAccount()) ? ResourcesCompat.getDrawable(getResources(),
R.drawable.ic_room_super_admin, null) : null,
SizeUtils.dp2px(tvContent.getContext(), 23), expLevelHeight);
// 官方主播認證
String tvOfficialMask = NobleUtil.getLevel(UserInfo.OAC_NAME, chatRoomMessage).trim();
String ivOfficialMask = NobleUtil.getLevel(UserInfo.OAC_ICON, chatRoomMessage);
if (!TextUtils.isEmpty(tvOfficialMask) && !TextUtils.isEmpty(ivOfficialMask) && extension != null) { // extension != null 表示自己
builder.appendBgAndContent(ivOfficialMask, tvOfficialMask);
} else if (!TextUtils.isEmpty(ivOfficialMask)) {
builder.append(ivOfficialMask, SizeUtils.dp2px(tvContent.getContext(), 62), expLevelHeight);
}
//等級
builder.append(userLevel, expLevelHeight);
//銘牌
String tvNamePlate = NobleUtil.getNamePlate(UserInfo.NAMEPLATE_WORD, chatRoomMessage).trim();
String ivNamePlate = NobleUtil.getNamePlate(UserInfo.NAMEPLATE_PIC, chatRoomMessage);
if (!TextUtils.isEmpty(tvNamePlate) && !TextUtils.isEmpty(ivNamePlate)) { // extension != null 表示自己
builder.appendBgAndContent(ivNamePlate, tvNamePlate);
} else if (!TextUtils.isEmpty(ivNamePlate)) {
builder.append(ivNamePlate, expLevelHeight);
}
}
private void setHeadlineMsg(ChatRoomMessage chatRoomMessage, TextView tvContent, CustomAttachment attachment) {
HeadlineChangedAttachment headlineAttachment = (HeadlineChangedAttachment) attachment;
SpannableTextBuilder builder = new SpannableTextBuilder(tvContent);
if (attachment.getSecond() == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB) {
HeadlineBean data = headlineAttachment.getHeadlineData();
String nick = null;
if (data != null) {
nick = data.getNick();
}
if (nick == null) {
nick = "";
}
builder.appendText(String.format(ResUtil.getString(R.string.headline_message_format), nick), null, null, null, null, null, null);
builder.setTextStyle(nick, ContextCompat.getColor(getContext(), R.color.color_DE3446), null, null, null, null, null);
}
tvContent.setText(builder.build());
tvContent.setTextSize(11);
setNullBackground(tvContent);
}
/**
* {badge}xxx來了
*
* @param chatRoomMessage -
* @param tvContent -
*/
private void setMsgNotification(ChatRoomMessage chatRoomMessage, TextView tvContent, int position) {
int fromType = 0;
String fromNick = "";
String fromUid = "";
Map<String, Object> remoteExtension = chatRoomMessage.getRemoteExtension();
if (remoteExtension != null) {
fromType = (int) remoteExtension.get("fromType");
fromNick = (String) remoteExtension.get("fromNick");
fromUid = (String) remoteExtension.get("fromUid");
}
ChatRoomNotificationAttachment attachment = (ChatRoomNotificationAttachment) chatRoomMessage.getAttachment();
String senderNick = "";
List<String> nicks = attachment.getTargetNicks();
if (nicks != null && nicks.size() > 0)
senderNick = RegexUtil.getPrintableString(attachment.getTargetNicks().get(0));
if (attachment.getType() != NotificationType.ChatRoomMemberIn) return;
// 座駕
String carName = NobleUtil.getCarName(CarInfo.CAR_NAME, chatRoomMessage);
carName = TextUtils.isEmpty(carName) ? "" : "\"" + carName + "\"";
TextSpannableBuilder text = new TextSpannableBuilder(tvContent);
addCommonTag(chatRoomMessage, text, tvContent);
text.append(senderNick, new ForegroundColorSpan(roomTipColor),
new OriginalDrawStatusClickSpan() {
@Override
public void onClick(@NonNull View view) {
if (clickConsumer != null) {
Single.just(chatRoomMessage.getFromAccount())
.doOnSuccess(clickConsumer).subscribe();
}
}
});
text.append(TextUtils.isEmpty(carName) ? "" : ResUtil.getString(R.string.avroom_widget_messageview_0150), new ForegroundColorSpan(greyColor))
.append(carName, new ForegroundColorSpan(roomTipColor));
String enterText = ResUtil.getString(R.string.avroom_widget_messageview_0151);
if (fromType == AVRoomActivity.FROM_TYPE_RECOMMEND) {
enterText = ResUtil.getString(R.string.avroom_widget_messageview_0152);
}
if (fromType == AVRoomActivity.FROM_TYPE_USER || fromType == AVRoomActivity.FROM_TYPE_HELLO) {
String finalFromUid = fromUid;
text.append(ResUtil.getString(R.string.avroom_widget_messageview_0153), new ForegroundColorSpan(whiteColor))
.append(fromNick, new ForegroundColorSpan(roomTipColor),
new OriginalDrawStatusClickSpan() {
@Override
public void onClick(@NonNull View view) {
if (clickConsumer != null) {
Single.just(finalFromUid).doOnSuccess(clickConsumer).subscribe();
}
}
});
enterText = ResUtil.getString(R.string.avroom_widget_messageview_0154);
}
if (fromType == AVRoomActivity.FROM_TYPE_GAME_RECOMMEND) {
String finalFromUid = fromUid;
text.append(ResUtil.getString(R.string.avroom_widget_messageview_0155), new ForegroundColorSpan(whiteColor))
.append(fromNick, new ForegroundColorSpan(roomTipColor),
new OriginalDrawStatusClickSpan() {
@Override
public void onClick(@NonNull View view) {
if (clickConsumer != null) {
Single.just(finalFromUid).doOnSuccess(clickConsumer).subscribe();
}
}
});
enterText = ResUtil.getString(R.string.avroom_widget_messageview_0156);
}
text.append(enterText, new ForegroundColorSpan(whiteColor));
tvContent.setText(text.build());
tvContent.setOnClickListener(null);
tvContent.setMovementMethod(new LinkMovementMethod());
}
@Nullable
private Drawable getNewUserDrawable(ChatRoomMessage chatRoomMessage) {
boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage);
boolean isHelloUser = NobleUtil.getIsNewUser(UserInfo.IS_FROM_SAY_HELLO_CHANNEL, chatRoomMessage);
if (newUser) {
return ResourcesCompat.getDrawable(getResources(),
isHelloUser ? R.drawable.ic_new_user_hello : R.drawable.ic_new_user,
null);
}
return null;
}
@SuppressLint("CheckResult")
@Override
public void onClick(View v) {
String account = "";
ChatRoomMessage chatRoomMessage = (ChatRoomMessage) v.getTag();
if (chatRoomMessage.getMsgType() != MsgTypeEnum.tip) {
if (chatRoomMessage.getMsgType() == MsgTypeEnum.text) {
account = chatRoomMessage.getFromAccount();
} else if (chatRoomMessage.getMsgType() == MsgTypeEnum.notification) {
account = chatRoomMessage.getFromAccount();
} else if (chatRoomMessage.getMsgType() == MsgTypeEnum.custom) {
CustomAttachment attachment = (CustomAttachment) chatRoomMessage.getAttachment();
if (attachment.getFirst() == CustomAttachment.CUSTOM_MSG_HEADER_TYPE_ROOM_TIP) {
account = ((RoomTipAttachment) attachment).getUid() + "";
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MSG_BOX) {
account = String.valueOf(((RoomBoxPrizeAttachment) attachment).getUid());
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MSG_HEADER_TYPE_QUEUE) {
long handleUid = ((RoomQueueMsgAttachment) attachment).handleUid;
if (handleUid > 0) {
account = ((RoomQueueMsgAttachment) attachment).handleUid + "";
} else {
//ios沒用handleUid導致iOS發的自定義消息拿不到uid
account = chatRoomMessage.getFromAccount();
}
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MSG_HEADER_TYPE_MONSTER_HUNTING) {
switch (attachment.getSecond()) {
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_MONSTER_HUNTING:
MonsterDataBean dataBean = ((MonsterStatusAttachment) attachment).getDataBean();
RoomInfo mCurrentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (!Objects.equals(mCurrentRoomInfo.getUid(), dataBean.getAppearRoomUid())) {
AVRoomActivity.start(getContext(), dataBean.getAppearRoomUid());
} else {
SingleToastUtil.showToast("你已經在怪獸房間內");
}
break;
case CustomAttachment.CUSTOM_NOTI_SUB_GAME_RESULT:
MonsterHuntingResult result = ((MonsterHuntingResultAttachment) attachment).getResult();
UIHelper.showMonsterResult(getContext(), String.valueOf(result.getMonster().getMonsterId()));
break;
}
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MESS_HEAD_ROOM_PK) {
if (attachment.getSecond() == CustomAttachment.CUSTOM_MESS_SUB_ROOM_PK_RESULT) {
PKResultDialog pkResultDialog = new PKResultDialog(getContext(), ((RoomPkAttachment) attachment).getRoomPkData());
pkResultDialog.show();
}
} else if (attachment instanceof RoomFollowOwnerAttachment2 && !AvRoomDataManager.get().isRoomFans) {
CollectionRoomModel.get().followRoom("1", ((RoomFollowOwnerAttachment2) attachment).getOwnerUid())
.subscribe(s -> {
AvRoomDataManager.get().isRoomFans = true;
SingleToastUtil.showToast("收藏成功!");
EventBus.getDefault().post(new FollowRoomEvent());
PraiseModel.get().setFollowRoomSuccessRoomTip(JavaUtil.str2long(chatRoomMessage.getFromAccount()));
});
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MESS_TAROT) {
if (attachment instanceof TarotAttachment) {
account = ((TarotAttachment) attachment).getTarotMsgBean().getUid() + "";
}
}
}
if (TextUtils.isEmpty(account)) return;
if (clickConsumer != null) {
Single.just(account).subscribe(clickConsumer);
}
} else {
String content = chatRoomMessage.getContent();
if (!TextUtils.isEmpty(content) && content.equals(ResUtil.getString(R.string.yizhuan_xchat_android_constants_xchatconstants_08)))
if (onClick != null) {
onClick.onShowRoomIntroduction();
}
}
}
@Override
public ImageSpan invoke(Drawable drawable) {
return new CustomImageSpan(drawable);
}
class MessageViewHolder extends RecyclerView.ViewHolder {
TextView tvContent;
public MessageViewHolder(View itemView) {
super(itemView);
tvContent = itemView.findViewById(R.id.tv_content);
}
}
}
}

View File

@@ -0,0 +1,153 @@
package com.chwl.app.avroom.public_chat
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import com.chwl.app.R
import com.chwl.app.databinding.RoomPublicChatMessageWidgetBinding
import com.chwl.app.public_chat.core.ChatRoomClient
import com.chwl.app.public_chat.core.ChatRoomClientManager
import com.chwl.core.im.custom.bean.CustomAttachment
import com.chwl.core.im.custom.bean.HeadlineChangedAttachment
import com.chwl.core.initial.InitialModel
import com.chwl.core.public_chat_hall.bean.HeadlineBean
import com.chwl.core.public_chat_hall.model.PublicChatModel
import com.chwl.core.support.room.FrameLayoutRoomWidget
import com.chwl.core.support.room.RoomView
import com.chwl.library.utils.SingleToastUtil
import com.netease.nim.uikit.api.model.NimException
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum
import com.netease.nimlib.sdk.msg.model.QueryDirectionEnum
class PublicChatRoomMessageWidget : FrameLayoutRoomWidget {
private val binding: RoomPublicChatMessageWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.room_public_chat_message_widget, this, true
)
private var chatRoomClient: ChatRoomClient? = null
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
constructor(
context: Context,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes)
override fun onStart(roomView: RoomView) {
super.onStart(roomView)
val sessionId = InitialModel.get().publicChatSessionId
if (sessionId != null) {
chatRoomClient = ChatRoomClientManager.getClient(sessionId);
} else {
SingleToastUtil.showToast(R.string.public_chat_not_found)
}
chatRoomClient?.let {
initChatRoom(it)
}
requestCurrentHeadline()
}
private fun onReceiveMessage(message: ChatRoomMessage) {
if (!filterMessageForMessageList(message)) {
binding.messageView.addMessages(message)
}
if (message.msgType == MsgTypeEnum.custom) {
val attachment: CustomAttachment = (message.attachment as? CustomAttachment) ?: return
when (attachment.first) {
CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED -> {
when (attachment.second) {
CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB -> {
val data = (attachment as? HeadlineChangedAttachment) ?: return
updateHeadline(data.headlineData)
}
}
}
}
}
}
private fun initChatRoom(chatRoomClient: ChatRoomClient) {
getCompositeDisposable().add(
chatRoomClient.enterChatRoom()
.subscribe({ requestHistory(chatRoomClient) },
{
if (it is NimException) {
SingleToastUtil.showToast(context.getString(R.string.avroom_fragment_homepartyroomfragment_011) + "(${it.code})")
} else {
SingleToastUtil.showToast(R.string.avroom_fragment_homepartyroomfragment_011)
}
})
)
getCompositeDisposable().add(chatRoomClient.messageObservable.subscribe {
it.forEach { message ->
onReceiveMessage(message)
}
})
}
private fun requestHistory(chatRoomClient: ChatRoomClient) {
val typeEnums = arrayOf(MsgTypeEnum.text, MsgTypeEnum.image)
getCompositeDisposable().add(
chatRoomClient.requestRemoteMessageType(
0,
50,
QueryDirectionEnum.QUERY_OLD,
typeEnums
).subscribe({
binding.messageView.addHistoryMessages(it.reversed())
}, {
it.printStackTrace()
})
)
}
private fun requestCurrentHeadline() {
safeLaunch {
val data = PublicChatModel.getCurrentHeadline()
updateHeadline(data)
}
}
private fun updateHeadline(data: HeadlineBean?) {
val content = data?.content
if (data?.isValid() == true && !content.isNullOrEmpty()) {
binding.tvHeadlineContent.text = content
binding.tvHeadlineContent.isVisible = true
} else {
binding.tvHeadlineContent.isVisible = false
}
}
private fun filterMessageForMessageList(message: ChatRoomMessage): Boolean {
if (message.msgType == MsgTypeEnum.custom && message.attachment is HeadlineChangedAttachment) {
val data = (message.attachment as HeadlineChangedAttachment).headlineData
if (data == null || !data.isValid()) {
return true
}
}
return false
}
fun getMessageView() = binding.messageView
override fun onStop() {
super.onStop()
chatRoomClient = null
}
}

View File

@@ -5,6 +5,8 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import com.chwl.core.support.room.FrameLayoutRoomWidget
import com.chwl.core.support.room.RoomWidget
import com.chwl.app.R
import com.chwl.app.databinding.RoomRankWidgetBinding
import com.chwl.app.ui.utils.loadAvatar
@@ -13,10 +15,8 @@ import com.chwl.core.UriProvider
import com.chwl.core.room.bean.RoomContributeDataInfo
import com.chwl.core.room.bean.RoomContributeUserInfo
import com.chwl.core.room.model.RoomContributeListModel
import com.chwl.core.support.room.FrameLayoutRoomWidget
import com.chwl.core.support.room.RoomContext
import com.chwl.core.support.room.RoomView
import com.chwl.core.support.room.RoomWidget
import com.chwl.core.utils.net.RxHelper
import com.example.lib_utils.ktx.singleClick
@@ -87,4 +87,8 @@ class RoomRankWidget : FrameLayoutRoomWidget, RoomWidget {
}
}
}
fun setContentBackgroundResource(resId: Int) {
binding.layoutRoot.setBackgroundResource(resId)
}
}

View File

@@ -9,6 +9,7 @@ import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.CommonVPAdapter;
import com.chwl.app.base.BaseViewBindingActivity;
import com.chwl.app.base.TitleBar;
import com.chwl.app.databinding.ActivityMyRecommendCardBinding;
@@ -49,7 +50,7 @@ public class MyRecommendCardActivity extends BaseViewBindingActivity<ActivityMyR
fragmentList.add(RecommendCardFragment.newInstance(RcmdCardType.HAS_USED));
//已失效
fragmentList.add(RecommendCardFragment.newInstance(RcmdCardType.INVALID));
binding.viewPager.setAdapter(new CardPagerAdapter(getSupportFragmentManager()));
binding.viewPager.setAdapter(new CommonVPAdapter(getSupportFragmentManager() ,getLifecycle(), fragmentList));
}
@Override
@@ -60,7 +61,7 @@ public class MyRecommendCardActivity extends BaseViewBindingActivity<ActivityMyR
@Override
public void performAction(View view) {
CommonWebViewActivity.start(context, UriProvider.JAVA_WEB_URL +
"/hiyoo/modules/recommend-card/help.html");
"/molistar/modules/recommend-card/help.html");
}
});
}
@@ -82,21 +83,4 @@ public class MyRecommendCardActivity extends BaseViewBindingActivity<ActivityMyR
ViewPagerHelper.bind(binding.indicator, binding.viewPager);
}
class CardPagerAdapter extends FragmentStatePagerAdapter {
public CardPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
}

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.text.style.AbsoluteSizeSpan;
import android.view.View;
import com.chwl.app.ui.widget.TextSpannableBuilder;
import com.coorchice.library.SuperTextView;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.chwl.app.R;
@@ -34,7 +35,7 @@ public class RecommendCardListAdapter extends CommonAdapter<RecommendCard, BaseV
protected void convert(BaseViewHolder holder, RecommendCard item) {
holder.setText(R.id.tv_time_title, item.getCardName());
MessageView.SpannableBuilder builder = new MessageView.SpannableBuilder(null);
TextSpannableBuilder builder = new TextSpannableBuilder(null);
builder.append("X", new AbsoluteSizeSpan(ScreenUtil.sp2px(12)))
.append(String.valueOf(item.getCount()));
holder.setText(R.id.tv_card_count, builder.build());

View File

@@ -1,4 +0,0 @@
package com.chwl.app.avroom.redpackage;
public class RedPackageEvent {
}

View File

@@ -1,84 +0,0 @@
package com.chwl.app.avroom.redpackage
import android.os.Bundle
import android.view.WindowManager
import android.view.animation.AnimationUtils
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseDialog
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.databinding.DialogRedPackageGoRoomBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.redpackage.bean.RedPackageNotifyInfo
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
class RedPackageGoRoomDialog : BaseDialog<DialogRedPackageGoRoomBinding>() {
private val redPackageNotifyInfo by lazy { arguments?.getSerializable(KEY_NOTIFY_INFO) as RedPackageNotifyInfo }
companion object {
private const val KEY_NOTIFY_INFO = "redPackageNotifyInfo"
private var dialogManager: DialogManager? = null
fun newInstance(redPackageNotifyInfo: RedPackageNotifyInfo): RedPackageGoRoomDialog {
return RedPackageGoRoomDialog().apply {
arguments = Bundle().apply {
putSerializable(KEY_NOTIFY_INFO, redPackageNotifyInfo)
}
}
}
}
override fun onStart() {
width = WindowManager.LayoutParams.MATCH_PARENT
height = WindowManager.LayoutParams.MATCH_PARENT
super.onStart()
}
override fun init() {
AnimationUtils.loadAnimation(context, R.anim.anim_all_red_package).apply {
binding?.clRed?.animation = this
start()
}
AnimationUtils.loadAnimation(context, R.anim.anim_all_red_package_in_btn).let {
binding?.ivGoRoom?.animation = it
it.start()
}
binding?.ivClose?.setOnClickListener { dismissAllowingStateLoss() }
binding?.ivGoRoom?.setOnClickListener {
val jump = {
AVRoomActivity.start(context, redPackageNotifyInfo.roomUid,
AVRoomActivity.FROM_TYPE_ALL_RED, redPackageNotifyInfo.sendUserNick, redPackageNotifyInfo)
dismissAllowingStateLoss()
EventBus.getDefault().post(RedPackageEvent())
}
// StatUtil.onEvent("gethongbao_get", ResUtil.getString(R.string.avroom_redpackage_redpackagegoroomdialog_01))
if (AvRoomDataManager.get().isOwnerOnMic && AvRoomDataManager.get().roomId != redPackageNotifyInfo.roomUid) {
//如果显示这个弹窗的时候,又收到了一个全服,再次点击进房抢的时候需要关闭前面的那个
dialogManager?.dismissDialog()
dialogManager = DialogManager(context)
dialogManager?.showOkCancelDialog(ResUtil.getString(R.string.avroom_redpackage_redpackagegoroomdialog_02), true, jump)
} else {
jump()
}
}
redPackageNotifyInfo.let {
ImageLoadUtils.loadAvatar(context, it.sendUserAvatar, binding?.ivAvatar)
binding?.tvContent?.text = it.redEnvelopeMessage
binding?.tvNickname?.text = it.sendUserNick.subAndReplaceDot()
binding?.tvRoomName?.text = it.roomTitle.subAndReplaceDot()
}
// StatUtil.onEvent("gethongbao", ResUtil.getString(R.string.avroom_redpackage_redpackagegoroomdialog_03))
}
override fun onDestroy() {
super.onDestroy()
dialogManager = null
}
}

View File

@@ -1,169 +0,0 @@
package com.chwl.app.avroom.redpackage
import android.content.Context
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.avroom.redpackage.open.RedPackageOpenDialog
import com.chwl.core.im.custom.bean.RedPackageAttachment
import com.chwl.core.manager.IMNetEaseManager
import com.chwl.core.manager.RoomEvent
import com.chwl.core.redpackage.RedPackageModel
import com.chwl.core.redpackage.bean.RedPackageNotifyInfo
import com.chwl.core.support.room.RoomContext
import com.chwl.core.support.room.RoomHandler
/**
* Created by Max on 2023/10/26 11:26
* Desc:红包处理器
**/
class RedPackageHandler : RoomHandler() {
// 入口图标-数据
val iconLiveData: MutableLiveData<RedPackageNotifyInfo?> = MutableLiveData()
/**
* 红包相关操作计数;目前的红包操作为:【正在打开当前房间的红包弹窗】。
* 展示时+1销毁时-1以此来判断是否正在进行红包操作
*/
private var operationCount: Int = 0
val inOperation get() = operationCount > 0
override fun onStart(context: RoomContext) {
super.onStart(context)
registerSignaling()
}
override fun onStop(context: RoomContext) {
super.onStop(context)
}
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
super.onStateChanged(source, event)
if (event == Lifecycle.Event.ON_RESUME) {
requestLatestRoomRedPackage()
}
}
/**
* 尝试展示红包
* PS目前这个方法仅为了解决通过房间外的红包入口进入房间后需要查询该红包展示出来。
*/
fun tryShowRedPackage(redPackageId: Long) {
val disposable = RedPackageModel.getRedPackage(redPackageId)
.compose(bindToLifecycle())
.subscribe({ item ->
if (item.state != 3 && item.state != 6 && item.state != 4) {
roomView?.getActivity().let {
RedPackageOpenDialog.newInstance(item).show(it)
}
}
}, {})
}
/**
* 监听房间信令
*/
private fun registerSignaling() {
// TODO 临时方案不应在这里直接监听IM后续会统一分发出口
// 信令来源:新/旧版的厅内红包,非全服红包
IMNetEaseManager.get().chatRoomEventObservable
.compose<RoomEvent>(bindToLifecycle<RoomEvent>())
.filter {
it?.event == RoomEvent.RECEIVE_RED_PACKAGE && it?.chatRoomMessage?.attachment is RedPackageAttachment
}.map {
(it.chatRoomMessage.attachment as RedPackageAttachment).getRedPackageNotifyInfo()
}
.subscribe { data: RedPackageNotifyInfo ->
handleRoomRedPackage(data, true)
}
}
/**
* 查找最新的厅内红包(新/旧版的厅内红包,非全服红包)
*/
private fun requestLatestRoomRedPackage() {
val roomId = roomContext?.roomId ?: return
RedPackageModel.getLatestRoomRedPackage(roomId)
.compose(bindToLifecycle())
.subscribe({ data ->
handleRoomRedPackage(data, false)
}, {
if (it.message == "No RedPackage") {
updateIcon(null)
} else {
// 网络等原因的失败,不处理就好
}
})
}
/**
* 处理厅内红包,非全服红包
* @param isSignaling 是否来自信令?
*/
private fun handleRoomRedPackage(data: RedPackageNotifyInfo, isSignaling: Boolean) {
tryShowOpenDialog(data, isSignaling)
updateIcon(data)
}
/**
* 更新红包入口图标
*/
private fun updateIcon(data: RedPackageNotifyInfo?) {
iconLiveData.postValue(data)
}
/**
* 尝试展示红包领取弹窗
*/
private fun tryShowOpenDialog(data: RedPackageNotifyInfo, isSignaling: Boolean) {
val activity = roomView?.getActivity() ?: return
if (activity.isFinishing) {
return
}
if (!isSignaling) {
return
}
if (data.kind == 0 || (data.kind == 1 && data.validityType == 0)) {
//【旧版本-厅内红包kind=0】、【新版本-厅内无门槛-立即生效红包kind=1&validityType=0】
RedPackageOpenDialog.newInstance(data).show(activity)
}
}
/**
* 请求刷新Icon数据已过期
*/
fun requestRefreshIcon() {
// updateIcon(null)
requestLatestRoomRedPackage()
}
fun startOperation() {
operationCount++
}
fun stopOperation() {
operationCount--
}
/**
* 全服红包信令之前是在BaseActivity中处理的现在为了红包的一个需求暂且拦截到这里处理
*/
fun onAllServiceSignaling(context: Context, data: RedPackageNotifyInfo) {
if (context is AVRoomActivity) {
if (roomContext?.roomId == data.roomUid) {
RedPackageOpenDialog.newInstance(data).show(context)
} else {
if (!inOperation) {
RedPackageGoRoomDialog.newInstance(data).show(context)
} else {
// 需求:正在房间中领取红包时,不展示其他房间的全服红包
}
}
} else {
RedPackageGoRoomDialog.newInstance(data).show(context)
}
}
}

View File

@@ -1,239 +0,0 @@
package com.chwl.app.avroom.redpackage
import android.content.Context
import android.util.AttributeSet
import android.util.TypedValue
import android.view.LayoutInflater
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import com.example.lib_utils.ServiceTime
import com.example.lib_utils.ktx.singleClick
import com.chwl.app.R
import com.chwl.app.avroom.redpackage.open.RedPackageOpenDialog
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.databinding.RedPackageWidgetBinding
import com.chwl.core.redpackage.RedPackageModel
import com.chwl.core.redpackage.bean.RedPackageNotifyInfo
import com.chwl.core.support.room.FrameLayoutRoomWidget
import com.chwl.core.support.room.RoomContext
import com.chwl.core.support.room.RoomView
import com.chwl.core.support.room.RoomWidget
import com.chwl.library.utils.SingleToastUtil
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.disposables.Disposable
import okhttp3.internal.toLongOrDefault
import java.text.SimpleDateFormat
import java.util.TimeZone
import java.util.concurrent.TimeUnit
/**
* Created by Max on 2023/10/24 16:37
* Desc:房间内的红包入口
**/
class RedPackageWidget : FrameLayoutRoomWidget, RoomWidget {
private var countDownDisposable: Disposable? = null
private var data: RedPackageNotifyInfo? = null
private val redPackageHandler: RedPackageHandler?
get() = RoomContext.get()
?.findAbility<RedPackageHandler>(RedPackageHandler::class.java.simpleName)
// 临时这样实现,后续优化进度弹窗
private var dialogManager: DialogManager? = null
// 倒计时格式(分:秒)
private val mmssFormat by lazy(LazyThreadSafetyMode.NONE) {
SimpleDateFormat("mm:ss").apply {
timeZone = TimeZone.getTimeZone("GMT+00:00")
}
}
private val binding: RedPackageWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.red_package_widget, this, true
)
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
constructor(
context: Context,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes)
init {
// 默认不可见
this.isVisible = false
this.setBackgroundResource(R.drawable.red_package_widget_bg)
singleClick {
data?.let {
tryShowRedPackage(it)
}
}
}
/**
* 开始倒计时
* @param time 开抢时间
*/
private fun startCountDown(time: Long) {
val count = time - ServiceTime.time
if (count <= 0) {
switchUI(false)
return
}
countDownDisposable =
Observable.intervalRange(0, count / 1000, 0, 1000L, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext {
val gap = time - ServiceTime.time
if (gap >= 0) {
binding.tvText.text = mmssFormat.format(gap)
}
}
.doOnComplete {
switchUI(false)
}
.subscribe()
}
/**
* 切换UI
* @param isCountDown 是否倒计时模式?否则为可抢红包模式
*/
private fun switchUI(isCountDown: Boolean) {
if (isCountDown) {
binding.tvText.setBackgroundResource(R.drawable.shape_99292929_8)
binding.tvText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10f)
} else {
binding.tvText.setBackgroundResource(R.drawable.red_package_widget_bg_text)
binding.tvText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 9f)
binding.tvText.setText(R.string.red_package_widget_get)
}
}
override fun onStart(roomView: RoomView) {
super.onStart(roomView)
roomView.getActivity()?.let {
this.dialogManager = DialogManager(it)
this.dialogManager?.setCanceledOnClickOutside(false)
}
}
override fun onInitialize(roomView: RoomView, roomContext: RoomContext) {
super.onInitialize(roomView, roomContext)
val lifecycleOwner = roomView.getLifecycleOwner()
redPackageHandler?.iconLiveData?.observe(lifecycleOwner) {
loadData(it)
}
}
/**
* 更新数据
*/
private fun loadData(data: RedPackageNotifyInfo?) {
this.data = data
stopCountDown()
if (data != null) {
val num = data.redEnvelopeNum
if (num > 0) {
if (num > 99) {
binding.tvNum.text = "99+"
} else {
binding.tvNum.text = num.toString()
}
binding.tvNum.isVisible = true
} else {
binding.tvNum.isVisible = false
}
if (data.validityType == 1) {
// 限时生效
switchUI(true)
startCountDown(data.beginTime)
} else {
// 立即生效
switchUI(false)
}
this.isVisible = true
} else {
this.isVisible = false
}
}
/**
* 尝试展示红包
*/
private fun tryShowRedPackage(data: RedPackageNotifyInfo) {
dialogManager?.context?.let {
dialogManager?.showProgressDialog(it, false)
}
val disposable = RedPackageModel.getRedPackage(data.redEnvelopeId.toLongOrDefault(0))
.subscribe({ item ->
dialogManager?.dismissDialog()
when (item.state) {
3 -> {
redPackageHandler?.requestRefreshIcon()
SingleToastUtil.showToast(R.string.red_package_result_empty_tips)
}
4 -> {
val newData = item.result?.redEnvelopeVO
if (newData != null && newData.pickNum == newData.totalNum) {
redPackageHandler?.requestRefreshIcon()
SingleToastUtil.showToast(R.string.red_package_result_empty_tips)
} else {
roomView?.getActivity().let {
RedPackageOpenDialog.newInstance(item).show(it)
}
}
}
2, 6 -> {
redPackageHandler?.requestRefreshIcon()
SingleToastUtil.showToast(R.string.red_package_disabled_tips)
}
else -> {
roomView?.getActivity().let {
RedPackageOpenDialog.newInstance(item).show(it)
}
}
}
}, {
SingleToastUtil.showToast(it.message)
dialogManager?.dismissDialog()
})
getCompositeDisposable().add(disposable)
}
override fun onStop() {
super.onStop()
this.dialogManager?.dismissDialog()
this.dialogManager = null
}
override fun onUnbindContext() {
super.onUnbindContext()
loadData(null)
}
override fun onBindContext(roomContext: RoomContext) {
super.onBindContext(roomContext)
}
private fun stopCountDown() {
if (countDownDisposable?.isDisposed == false) {
countDownDisposable?.dispose()
}
}
}

View File

@@ -1,561 +0,0 @@
package com.chwl.app.avroom.redpackage.open
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import android.view.WindowManager
import android.view.animation.LinearInterpolator
import androidx.core.view.isVisible
import com.example.lib_utils.ServiceTime
import com.example.lib_utils.ktx.getColorById
import com.example.lib_utils.ktx.singleClick
import com.example.lib_utils.ktx.toStringRes
import com.example.lib_utils.log.ILog
import com.example.lib_utils.spannable.spannableBuilder
import com.trello.rxlifecycle3.android.FragmentEvent
import com.chwl.app.R
import com.chwl.app.avroom.redpackage.RedPackageHandler
import com.chwl.app.base.BaseDialog
import com.chwl.app.databinding.RedPackageOpenDialogBinding
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.app.ui.widget.UserInfoDialog
import com.chwl.core.auth.AuthModel
import com.chwl.core.home.event.FollowRoomEvent
import com.chwl.core.home.event.OpenRoomMessageInputEvent
import com.chwl.core.home.event.ShareRoomEvent
import com.chwl.core.home.model.CollectionRoomModel
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.pay.PayModel
import com.chwl.core.redpackage.*
import com.chwl.core.redpackage.bean.RedEnvelopeState
import com.chwl.core.redpackage.bean.RedPackageData
import com.chwl.core.redpackage.bean.RedPackageInfo
import com.chwl.core.redpackage.bean.RedPackageNotifyInfo
import com.chwl.core.support.config.Constants
import com.chwl.core.support.room.RoomContext
import com.chwl.library.annatation.ActLayoutRes
import com.chwl.library.utils.SingleToastUtil
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus
import java.text.SimpleDateFormat
import java.util.TimeZone
import java.util.concurrent.TimeUnit
/**
* Created by Max on 2023/10/24 10:14
* Desc:领取红包
**/
@ActLayoutRes(R.layout.red_package_open_dialog)
class RedPackageOpenDialog : BaseDialog<RedPackageOpenDialogBinding>(), ILog {
private var btnAnimator: ObjectAnimator? = null
private var countDownDisposable: Disposable? = null
// 倒计时格式(分:秒)
private val mmssFormat by lazy(LazyThreadSafetyMode.NONE) {
SimpleDateFormat("mm:ss").apply {
timeZone = TimeZone.getTimeZone("GMT+00:00")
}
}
private val data by lazy(LazyThreadSafetyMode.NONE) {
arguments?.getSerializable(Constants.KEY_INTENT) as? RedPackageData
}
// 打开红包的结果
private var openResultRunnable: (() -> Unit)? = null
// 按钮动画是否有效(至少转过了一周期)
private var isValidOfBtnAnimator: Boolean = false
// 按钮执行函数
private var btnRunnable: (() -> Unit)? = null
// 打开红包接口请求中
private var opening = false
companion object {
/**
* 此入口来源仅限:【全服红包信令】、【厅内无门槛-立即生效红包信令】
*/
fun newInstance(data: RedPackageNotifyInfo): RedPackageOpenDialog {
/**
* 收到这两种信令直接展示即可,无需再次请求接口查询状态,
* 但由于信令和接口查询的数据格式不一致,所以这里做下转换,达到逻辑共用
*/
val item = RedPackageData(
amount = null,
avatar = data.sendUserAvatar,
beginTime = data.beginTime,
commissionAmount = null,
createTime = null,
duration = null,
endTime = null,
finish = true,
id = data.redEnvelopeId.toLongOrNull(),
kind = data.kind,
message = data.redEnvelopeMessage,
nick = data.sendUserNick,
num = null,
originalAmount = null,
position = null,
roomTitle = null,
roomUid = data.roomUid,
//红包状态 1 开抢中 2 过时 3 抢光了 4 抢到了 5 将要开始 6 超时已退还
state = null,
type = null,
updateTime = null,
userId = null,
validityType = data.validityType,
result = null
)
return newInstance(item)
}
fun newInstance(data: RedPackageData): RedPackageOpenDialog {
return RedPackageOpenDialog().apply {
arguments = Bundle().apply {
putSerializable(Constants.KEY_INTENT, data)
}
}
}
}
override fun onStart() {
width = WindowManager.LayoutParams.MATCH_PARENT
height = WindowManager.LayoutParams.WRAP_CONTENT
super.onStart()
}
override fun init() {
val data = this.data
if (data == null) {
dismissAllowingStateLoss()
return
}
dialog?.setCanceledOnTouchOutside(false)
binding.ivClose.singleClick {
dismissAllowingStateLoss()
}
binding.layoutBtn.singleClick {
btnRunnable?.invoke()
}
loadData(data)
}
/**
* 加载红包数据
*/
private fun loadData(data: RedPackageData) {
//红包状态 1 开抢中 2 过时 3 抢光了 4 抢到了 5 将要开始 6 超时已退还
if (data.state == 4) {
loadResult(data.result)
} else {
// else简单理解为可领取状态正常情况下在RedPackageWidget点击时有异常状态过滤
loadOpen(data)
}
}
/**
* 加载可领取数据
*/
private fun loadOpen(data: RedPackageData) {
switchResultViewVisible(false)
switchOpenViewVisible(true)
binding.ivSendAvatar.loadAvatar(data.avatar)
binding.tvSendName.text = data.nick
loadTips(data)
loadBtnState(data)
}
/**
* 加载红包提示
*/
private fun loadTips(data: RedPackageData) {
binding.tvOpenTips.isVisible = false
when (data.kind) {
0 -> {
loadTips(data.message)
}
1 -> {
binding.tvOpenTips.setText(R.string.red_package_quick_tips)
binding.tvOpenTips.isVisible = true
}
2 -> {
if (data.finish == true) {
binding.tvOpenTips.setText(R.string.red_package_complete_tips)
} else {
binding.tvOpenTips.spannableBuilder()
.appendText(
text = R.string.red_package_open_tips_follow.toStringRes(),
textColor = getColorById(R.color.color_FFF87A)
)
.appendText(text = R.string.red_package_open_tips_msg_end.toStringRes())
.apply()
}
binding.tvOpenTips.isVisible = true
}
3 -> {
if (data.finish == true) {
binding.tvOpenTips.setText(R.string.red_package_complete_tips)
} else {
binding.tvOpenTips.spannableBuilder()
.appendText(
text = R.string.red_package_open_tips_share.toStringRes(),
textColor = getColorById(R.color.color_FFF87A)
)
.appendText(text = R.string.red_package_open_tips_msg_end.toStringRes())
.apply()
}
binding.tvOpenTips.isVisible = true
}
4 -> {
if (data.finish == true) {
binding.tvOpenTips.setText(R.string.red_package_complete_tips)
} else {
binding.tvOpenTips.spannableBuilder()
.appendText(text = R.string.red_package_open_tips_msg1.toStringRes())
.appendText(
text = data.message ?: "",
textColor = getColorById(R.color.color_FFF87A)
)
.appendText(text = R.string.red_package_open_tips_msg_end.toStringRes())
.apply()
}
binding.tvOpenTips.isVisible = true
}
else -> {
loadTips(data.message)
}
}
}
/**
* 加载按钮状态
*/
private fun loadBtnState(data: RedPackageData) {
binding.groupBtnTime.isVisible = false
binding.ivBtnGet.isVisible = false
binding.tvBtnMsg.isVisible = false
btnRunnable = null
val gap = (data.beginTime ?: 0) - ServiceTime.time
// 开始了?
val started = gap < 0
if (data.kind == 0) {
// 旧厅内红包or全服红包
switchToOpenState()
return
}
if (data.kind == 1 || data.finish == true) {
if (started) {
switchToOpenState()
} else {
startCountDown(data.beginTime ?: 0)
}
} else {
binding.tvBtnMsg.isVisible = true
if (started) {
binding.tvBtnMsg.setText(R.string.red_package_open_btn_no)
btnRunnable = {
SingleToastUtil.showToast(R.string.red_package_open_no_tips)
}
} else {
when (data.kind) {
2 -> {
binding.tvBtnMsg.setText(R.string.red_package_open_btn_follow)
btnRunnable = {
dismissAllowingStateLoss()
showUserDialog(data.userId)
}
}
3 -> {
binding.tvBtnMsg.setText(R.string.red_package_open_btn_share)
btnRunnable = {
dismissAllowingStateLoss()
EventBus.getDefault().post(ShareRoomEvent())
}
}
4 -> {
binding.tvBtnMsg.setText(R.string.red_package_open_btn_msg)
btnRunnable = {
dismissAllowingStateLoss()
EventBus.getDefault().post(OpenRoomMessageInputEvent(data.message))
}
}
else -> {
binding.tvBtnMsg.text = ""
}
}
startTimerForUncompletedState(gap)
}
}
}
/**
* 开启定时器未完成状态更新倒计时结束时更新对应View状态
*/
private fun startTimerForUncompletedState(time: Long) {
val d = Observable.timer(time, TimeUnit.MILLISECONDS)
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
binding.tvBtnMsg.setText(R.string.red_package_open_btn_no)
btnRunnable = {
SingleToastUtil.showToast(R.string.red_package_open_no_tips)
}
}
}
/**
* 开始倒计时
* @param time 开抢时间
*/
private fun startCountDown(time: Long) {
stopCountDown()
val count = time - ServiceTime.time
if (count <= 0) {
switchToOpenState()
return
}
binding.groupBtnTime.isVisible = true
countDownDisposable =
Observable.intervalRange(0, count / 1000, 0, 1000L, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext {
val gap = time - ServiceTime.time
if (gap >= 0) {
binding.tvBtnTime.text = mmssFormat.format(gap)
}
}
.doOnComplete {
switchToOpenState()
}
.subscribe()
}
private fun stopCountDown() {
if (countDownDisposable?.isDisposed == false) {
countDownDisposable?.dispose()
}
}
/**
* 切换为可抢状态
*/
private fun switchToOpenState() {
binding.tvBtnMsg.isVisible = false
binding.groupBtnTime.isVisible = false
binding.ivBtnGet.isVisible = true
btnRunnable = {
if (!opening) {
this.data?.let {
openRedPackage(it)
}
}
}
}
private fun loadTips(msg: String?) {
if (msg.isNullOrEmpty()) {
binding.tvOpenTips.isVisible = false
} else {
binding.tvOpenTips.text = msg
binding.tvOpenTips.isVisible = true
}
}
/**
* 打开红包
*/
private fun openRedPackage(data: RedPackageData) {
opening = true
openResultRunnable = null
startRedPacketAnim(binding.layoutBtn)
val d = RedPackageModel.openRedPackage(data.id ?: 0)
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW)).subscribe({
if (isValidOfBtnAnimator) {
btnAnimator?.cancel()
onOpenSuccess(it)
} else {
openResultRunnable = {
onOpenSuccess(it)
}
}
}, {
if (isValidOfBtnAnimator) {
btnAnimator?.cancel()
onOpenFail(it)
} else {
openResultRunnable = {
onOpenFail(it)
}
}
})
}
/**
* 加载结果
*/
private fun loadResult(data: RedPackageInfo?) {
binding.layoutContent.setBackgroundResource(R.drawable.red_package_result_bg)
switchOpenViewVisible(false)
switchResultViewVisible(true)
binding.groupResultMoney.isVisible = false
binding.tvResultEmptyTips.isVisible = false
binding.ivResultSendAvatar.loadAvatar(data?.redEnvelopeVO?.userVO?.avatar)
binding.tvResultSendName.text = data?.redEnvelopeVO?.userVO?.nick ?: ""
val name = data?.redEnvelopeVO?.userVO?.nick ?: ""
if (name.length > 8) {
binding.tvResultSendName.text = name?.take(8) + "..的紅包"
} else {
binding.tvResultSendName.text = name + "的紅包"
}
binding.tvMessage.text = data?.redEnvelopeVO?.message
binding.tvCount.text = R.string.red_package_result_count_format.toStringRes()
.format(data?.redEnvelopeVO?.pickNum ?: 0, data?.redEnvelopeVO?.totalNum ?: 0)
val adapter = RedPackageResultAdapter()
binding.recyclerView.adapter = adapter
adapter.setNewData(data?.redEnvelopeItemVOs)
when (data?.redEnvelopeState) {
RedEnvelopeState.SUCCESS -> {
binding.tvMoney.text = data.currentUserAmount.toString().substringBefore(".")
binding.groupResultMoney.isVisible = true
}
RedEnvelopeState.TIME_OUT, RedEnvelopeState.REMAIN_ZERO, RedEnvelopeState.TIME_OUT_BACK -> {
binding.tvResultEmptyTips.isVisible = true
}
}
}
/**
* 打开红包响应成功
* @param data 结果
*/
private fun onOpenSuccess(data: RedPackageInfo) {
loadResult(data)
RoomContext.get()
?.findAbility<RedPackageHandler>(RedPackageHandler::class.simpleName)
?.requestRefreshIcon()
when (data.redEnvelopeState) {
RedEnvelopeState.SUCCESS -> {
// 下面这段是延续老代码保留的
if (!AvRoomDataManager.get().isRoomFans) {
AvRoomDataManager.get().roomUid.let {
CollectionRoomModel.get().followRoom("1", it)
.subscribe { _: String? ->
AvRoomDataManager.get().isRoomFans = true
EventBus.getDefault().post(FollowRoomEvent())
}
}
}
}
}
PayModel.get().getWalletInfo(AuthModel.get().currentUid).subscribe()
opening = false
}
/**
* 打开红包响应失败
*/
private fun onOpenFail(throwable: Throwable) {
switchToOpenState()
btnAnimator?.cancel()
SingleToastUtil.showToast(throwable.message)
opening = false
}
@SuppressLint("CheckResult")
private fun startRedPacketAnim(v: View) {
if (btnAnimator?.isRunning == true) {
btnAnimator?.cancel()
}
isValidOfBtnAnimator = false
btnAnimator = ObjectAnimator.ofFloat(v, "rotationY", 0f, 360f)
btnAnimator?.let {
it.duration = 600
it.repeatCount = ValueAnimator.INFINITE
it.repeatMode = ValueAnimator.RESTART
it.interpolator = LinearInterpolator()
it.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationRepeat(animation: Animator) {
super.onAnimationRepeat(animation)
isValidOfBtnAnimator = true
if (openResultRunnable != null) {
animation.cancel()
openResultRunnable?.invoke()
}
}
})
it.start()
}
}
private fun switchResultViewVisible(isVisible: Boolean) {
binding.groupResult.isVisible = isVisible
binding.groupResultMoney.isVisible = isVisible
binding.tvResultEmptyTips.isVisible = isVisible
}
private fun switchOpenViewVisible(isVisible: Boolean) {
binding.groupOpen.isVisible = isVisible
binding.tvOpenTips.isVisible = isVisible
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
RoomContext.get()
?.findAbility<RedPackageHandler>(RedPackageHandler::class.simpleName)
?.startOperation()
super.onViewCreated(view, savedInstanceState)
}
override fun onDestroyView() {
super.onDestroyView()
btnAnimator?.cancel()
btnAnimator = null
stopCountDown()
RoomContext.get()
?.findAbility<RedPackageHandler>(RedPackageHandler::class.simpleName)
?.stopOperation()
}
override fun onPause() {
super.onPause()
dismissAllowingStateLoss()
}
private fun showUserDialog(uid: Long?) {
if (uid == null) {
return
}
activity?.let {
UserInfoDialog.showNewUserInfoDialog(
activity,
uid
)
}
}
}

View File

@@ -1,45 +0,0 @@
package com.chwl.app.avroom.redpackage.open
import android.view.View
import android.widget.ImageView
import androidx.core.view.isVisible
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.app.utils.UserUtils
import com.chwl.core.redpackage.bean.RedEnvelopeItemVO
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.library.utils.ResUtil
import java.text.SimpleDateFormat
import java.util.Locale
/**
* Created by Max on 2023/10/27 20:24
* Desc:红包领取结果
**/
class RedPackageResultAdapter :
BaseQuickAdapter<RedEnvelopeItemVO, BaseViewHolder>(R.layout.red_package_open_item_result) {
private val dateFormat = SimpleDateFormat(
ResUtil.getString(R.string.avroom_redpackage_redpackageopenadapter_01),
Locale.CHINA
)
override fun convert(helper: BaseViewHolder, item: RedEnvelopeItemVO) {
helper.getView<ImageView>(R.id.iv_avatar).loadAvatar(item.userVO.avatar)
val isSelf = item.userVO.uid == UserUtils.getUserUid()
helper.setText(
R.id.tv_name,
if (isSelf) ResUtil.getString(R.string.avroom_redpackage_redpackageopenadapter_02) else item.userVO.nick.subAndReplaceDot(
6
)
)
helper.setText(R.id.tv_money, item.amount.substringBefore("."))
try {
helper.setText(R.id.tv_time, dateFormat.format(item.createTime))
} catch (e: Exception) {
helper.setText(R.id.tv_time, "")
}
helper.getView<View>(R.id.v_line).isVisible = helper.bindingAdapterPosition != itemCount - 1
}
}

View File

@@ -1,284 +0,0 @@
package com.chwl.app.avroom.redpackage.send
import android.graphics.Color
import androidx.core.view.isVisible
import com.example.lib_utils.ktx.addDisableFilter
import com.example.lib_utils.ktx.getColorById
import com.example.lib_utils.ktx.singleClick
import com.example.lib_utils.ktx.toStringRes
import com.example.lib_utils.log.ILog
import com.chwl.app.R
import com.chwl.app.base.BaseBindingFragment
import com.chwl.app.databinding.RedPackagePrivateFragmentBinding
import com.chwl.app.pay.password.GiveGoldPassWordFragment
import com.chwl.app.pay.widget.GridPasswordNoFocusView
import com.chwl.app.ui.setting.ModifyPwdActivity
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
import com.chwl.app.ui.widget.recyclerview.decoration.ColorDecoration
import com.chwl.core.auth.AuthModel
import com.chwl.core.initial.InitialModel
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.pay.PayModel
import com.chwl.core.redpackage.RedPackageModel
import com.chwl.core.user.UserModel
import com.chwl.core.utils.extension.toIntOrDef
import com.chwl.library.annatation.ActLayoutRes
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
import com.chwl.library.utils.codec.DESUtils
import okhttp3.internal.toLongOrDefault
import java.math.RoundingMode
import java.text.NumberFormat
/**
* Created by Max on 2023/10/23 12:14
* Desc: 厅内红包
**/
@ActLayoutRes(R.layout.red_package_private_fragment)
class PrivateRedPackageEditorFragment : BaseBindingFragment<RedPackagePrivateFragmentBinding>(),
ILog {
private var passWordFragment: GiveGoldPassWordFragment? = null
private var typeAdapter: RedPackageTypeItemAdapter? = null
// 生效时间类型 0 立即生效 1 限时生效
private var timeType = 0
override fun initiate() {
mBinding.etText.addDisableFilter(" ", "\n")
initTypeView()
updateTimeView(true)
initTips()
}
override fun onSetListener() {
super.onSetListener()
mBinding.tvNow.singleClick {
updateTimeView(true)
}
mBinding.tvDelay.singleClick {
updateTimeView(false)
}
mBinding.tvSend.singleClick {
checkSend()
}
}
private fun initTips() {
val time = InitialModel.get().cacheInitInfo?.redEnvelopeConfig?.endSecond
if (time != null) {
try {
val hour = NumberFormat.getInstance().apply {
maximumFractionDigits = 2
roundingMode = RoundingMode.FLOOR
}.format(time / 3600.0)
mBinding.tvTips.text = R.string.red_package_tips_format.toStringRes().format(hour)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
private fun initTypeView() {
mBinding.recyclerView.addItemDecoration(
ColorDecoration(
Color.TRANSPARENT, UIUtil.dip2px(context, 6.0), 0, false
)
)
val list = ArrayList<RedPackageTypeItemAdapter.ItemData>()
list.add(
RedPackageTypeItemAdapter.ItemData(
1,
R.string.red_package_type_unlimited_name,
R.string.red_package_type_unlimited_tips
)
)
list.add(
RedPackageTypeItemAdapter.ItemData(
2,
R.string.red_package_type_follow_name,
R.string.red_package_type_follow_tips
)
)
list.add(
RedPackageTypeItemAdapter.ItemData(
3,
R.string.red_package_type_share_name,
R.string.red_package_type_share_tips
)
)
list.add(
RedPackageTypeItemAdapter.ItemData(
4,
R.string.red_package_type_msg_name,
R.string.red_package_type_msg_tips
)
)
val adapter = RedPackageTypeItemAdapter(list)
typeAdapter = adapter
adapter.setOnItemClickListener { _, view, position ->
adapter.select(position)
updateTypeView(adapter.getSelect()?.type)
}
mBinding.recyclerView.adapter = adapter
// 默认选择第一个
adapter.select(0)
updateTypeView(adapter.getSelect()?.type)
}
/**
* 更新红包类型对应的视图
*/
private fun updateTypeView(type: Int?) {
when (type) {
1 -> {
mBinding.tvNow.isVisible = true
mBinding.tvDelay.isVisible = true
mBinding.etText.isVisible = false
}
4 -> {
mBinding.tvNow.isVisible = false
mBinding.tvDelay.isVisible = false
mBinding.etText.isVisible = true
}
else -> {
mBinding.tvNow.isVisible = false
mBinding.tvDelay.isVisible = false
mBinding.etText.isVisible = false
}
}
}
/**
* 更新时间选项
*/
private fun updateTimeView(nowOrDelay: Boolean) {
if (nowOrDelay) {
timeType = 0
mBinding.tvNow.setBackgroundResource(R.drawable.red_package_bg_type_selected)
mBinding.tvDelay.setBackgroundResource(R.drawable.shape_f8f8fa_8)
mBinding.tvNow.setTextColor(mBinding.root.context.getColorById(R.color.color_FF285C))
mBinding.tvDelay.setTextColor(mBinding.root.context.getColorById(R.color.color_767585))
} else {
timeType = 1
mBinding.tvNow.setBackgroundResource(R.drawable.shape_f8f8fa_8)
mBinding.tvDelay.setBackgroundResource(R.drawable.red_package_bg_type_selected)
mBinding.tvNow.setTextColor(mBinding.root.context.getColorById(R.color.color_767585))
mBinding.tvDelay.setTextColor(mBinding.root.context.getColorById(R.color.color_FF285C))
}
}
private fun checkSend() {
val initInfo = InitialModel.get().cacheInitInfo
if (initInfo == null) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_redpackage_redpackagesenddialog_01))
return
}
val typeItem = typeAdapter?.getSelect()
if (typeItem?.type == 4) {
if (mBinding.etText.text.toString().trim().isEmpty()) {
toast(R.string.red_package_msg_empty_tips)
return
}
}
val minNum = initInfo.redEnvelopeConfig.roomRedEnvelopeMinNum
val maxNum = initInfo.redEnvelopeConfig.roomRedEnvelopeMaxNum
val minGold = initInfo.redEnvelopeConfig.roomRedEnvelopeMinAmount
val maxGold = initInfo.redEnvelopeConfig.roomRedEnvelopeMaxAmount
val rate =
if (initInfo.redEnvelopeConfig.exchangeDiamondsRate == 0.0) 0.68 else initInfo.redEnvelopeConfig.exchangeDiamondsRate
val redNum = mBinding?.etNum?.text.toString().toIntOrDef()
if (redNum < minNum || redNum > maxNum) {
SingleToastUtil.showToast("紅包數量不能小於${minNum}或大於${maxNum}!")
return
}
val goldNum = mBinding?.etMoney?.text.toString().toIntOrDef()
if (goldNum % 10 != 0) {
SingleToastUtil.showToast("鉆石數必須為10的倍數!")
return
}
if (goldNum < minGold || goldNum > maxGold) {
SingleToastUtil.showToast("鉆石數量不能小於${minGold}或大於${maxGold}!")
return
}
if (goldNum.toFloat() / redNum * rate < 0.1) {//單個手氣紅包價值不低於0.1水晶
SingleToastUtil.showToast("單個紅包金額過低")
return
}
UserModel.get().cacheLoginUserInfo?.let {
if (!it.isBindPaymentPwd) {
ModifyPwdActivity.start(context, ModifyPwdActivity.PAY_PWD)
return
}
}
GiveGoldPassWordFragment.newInstance(
childFragmentManager,
mBinding?.etMoney?.text.toString()
).apply {
setListener(object : GridPasswordNoFocusView.OnPasswordChangedListener {
override fun onTextChanged(psw: String?) {
val password = passWordFragment?.password?.password ?: ""
if (password.length == 6) {
send(password)
}
}
override fun onInputFinish(psw: String?) {
}
})
passWordFragment = this
}
}
/**
* 密码输入完成
*/
private fun send(password: String) {
dialogManager.showProgressDialog(context)
val kind = typeAdapter?.getSelect()?.type ?: 1
val message = if (kind == 4) {
mBinding.etText.text.trim().toString()
} else {
null
}
val validityType = if (kind == 1) {
timeType
} else {
// 非无门槛红包 默认限时
1
}
RedPackageModel.sendRedPackage(
goldNum = mBinding.etMoney.text.trim().toString().toLongOrDefault(0),
message = message,
num = mBinding.etNum.text.trim().toString().toLongOrDefault(0),
roomUId = AvRoomDataManager.get().mCurrentRoomInfo?.uid.toString(),
type = 1,
kind = kind,
validityType = validityType,
password = DESUtils.DESAndBase64(password)
)
.compose(bindToLifecycle())
.doOnError {
dialogManager.dismissDialog()
SingleToastUtil.showToast(it.message)
passWordFragment?.password?.clearPassword()
}
.subscribe { _ ->
PayModel.get().getWalletInfo(AuthModel.get().currentUid).subscribe()
dialogManager.dismissDialog()
SingleToastUtil.showToast("發送成功")
passWordFragment?.dismissAllowingStateLoss()
(parentFragment as? RedPackageSendDialog)?.dismissAllowingStateLoss()
}
}
override fun onDestroy() {
super.onDestroy()
passWordFragment?.dismissAllowingStateLoss()
passWordFragment = null
}
}

View File

@@ -1,157 +0,0 @@
package com.chwl.app.avroom.redpackage.send
import com.example.lib_utils.ktx.addDisableFilter
import com.example.lib_utils.ktx.setOnInputChangedListener
import com.example.lib_utils.ktx.singleClick
import com.example.lib_utils.ktx.toStringRes
import com.chwl.app.R
import com.chwl.app.base.BaseBindingFragment
import com.chwl.app.databinding.RedPackagePublicFragmentBinding
import com.chwl.app.pay.password.GiveGoldPassWordFragment
import com.chwl.app.pay.widget.GridPasswordNoFocusView
import com.chwl.app.ui.setting.ModifyPwdActivity
import com.chwl.core.auth.AuthModel
import com.chwl.core.initial.InitialModel
import com.chwl.core.initial.bean.InitInfo
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.pay.PayModel
import com.chwl.core.redpackage.RedPackageModel
import com.chwl.core.user.UserModel
import com.chwl.core.utils.extension.toIntOrDef
import com.chwl.library.annatation.ActLayoutRes
import com.chwl.library.utils.SingleToastUtil
import com.chwl.library.utils.codec.DESUtils
import okhttp3.internal.toLongOrDefault
import java.math.RoundingMode
import java.text.NumberFormat
/**
* Created by Max on 2023/10/23 12:14
* Desc:全服红包
**/
@ActLayoutRes(R.layout.red_package_public_fragment)
class PublicRedPackageEditorFragment : BaseBindingFragment<RedPackagePublicFragmentBinding>() {
private var passWordFragment: GiveGoldPassWordFragment? = null
override fun initiate() {
initTips()
mBinding.etText.addDisableFilter("\n")
mBinding.etText.setOnInputChangedListener {
mBinding.tvTextLength.text =
R.string.red_package_result_count_format.toStringRes().format(this, 10)
true
}
mBinding.tvSend.singleClick {
checkSend()
}
}
private fun initTips() {
val time = InitialModel.get().cacheInitInfo?.redEnvelopeConfig?.endSecond
if (time != null) {
try {
val hour = NumberFormat.getInstance().apply {
maximumFractionDigits = 2
roundingMode = RoundingMode.FLOOR
}.format(time / 3600.0)
mBinding.tvTips.text = R.string.red_package_tips_format.toStringRes().format(hour)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
private fun checkSend() {
val initInfo = InitialModel.get().cacheInitInfo ?: InitInfo()
val minNum = initInfo.redEnvelopeConfig.serverRedEnvelopeMinNum
val maxNum = initInfo.redEnvelopeConfig.serverRedEnvelopeMaxNum
val minGold = initInfo.redEnvelopeConfig.serverRedEnvelopeMinAmount
val maxGold = initInfo.redEnvelopeConfig.serverRedEnvelopeMaxAmount
val rate =
if (initInfo.redEnvelopeConfig.exchangeDiamondsRate == 0.0) 0.68 else initInfo.redEnvelopeConfig.exchangeDiamondsRate
val redNum = mBinding?.etNum?.text.toString().toIntOrDef()
if (redNum < minNum || redNum > maxNum) {
SingleToastUtil.showToast("紅包數量不能小於${minNum}或大於${maxNum}!")
return
}
val goldNum = mBinding?.etMoney?.text.toString().toIntOrDef()
if (goldNum % 100 != 0) {
SingleToastUtil.showToast("鉆石數必須為100的倍數!")
return
}
if (goldNum < minGold || goldNum > maxGold) {
SingleToastUtil.showToast("鉆石數量不能小於${minGold}或大於${maxGold}!")
return
}
if (goldNum.toFloat() / redNum * rate < 0.1) {//單個手氣紅包價值不低於0.1水晶
SingleToastUtil.showToast("單個紅包金額過低")
return
}
UserModel.get().cacheLoginUserInfo?.let {
if (!it.isBindPaymentPwd) {
ModifyPwdActivity.start(context, ModifyPwdActivity.PAY_PWD)
return
}
}
GiveGoldPassWordFragment.newInstance(
childFragmentManager,
mBinding?.etMoney?.text.toString()
).apply {
setListener(object : GridPasswordNoFocusView.OnPasswordChangedListener {
override fun onTextChanged(psw: String?) {
val password = passWordFragment?.password?.password ?: ""
if (password.length == 6) {
send(password)
}
}
override fun onInputFinish(psw: String?) {
}
})
passWordFragment = this
}
}
/**
* 密码输入完成
*/
private fun send(password: String) {
dialogManager.showProgressDialog(context)
var message = mBinding.etText.text.trim().toString()
if (message.isEmpty()) {
message = R.string.red_package_msg_def.toStringRes()
}
RedPackageModel.sendRedPackage(
goldNum = mBinding.etMoney.text.trim().toString().toLongOrDefault(0),
message = message,
num = mBinding.etNum.text.trim().toString().toLongOrDefault(0),
roomUId = AvRoomDataManager.get().mCurrentRoomInfo?.uid.toString(),
type = 2,
kind = 0,
validityType = 0,
password = DESUtils.DESAndBase64(password)
)
.compose(bindToLifecycle())
.doOnError {
dialogManager.dismissDialog()
SingleToastUtil.showToast(it.message)
passWordFragment?.password?.clearPassword()
}
.subscribe { _ ->
PayModel.get().getWalletInfo(AuthModel.get().currentUid).subscribe()
dialogManager.dismissDialog()
SingleToastUtil.showToast("發送成功")
passWordFragment?.dismissAllowingStateLoss()
(parentFragment as? RedPackageSendDialog)?.dismissAllowingStateLoss()
}
}
override fun onDestroy() {
super.onDestroy()
passWordFragment?.dismissAllowingStateLoss()
passWordFragment = null
}
}

View File

@@ -1,172 +0,0 @@
package com.chwl.app.avroom.redpackage.send
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import androidx.fragment.app.Fragment
import com.example.lib_utils.ktx.singleClick
import com.example.lib_utils.ktx.toStringRes
import com.chwl.app.R
import com.chwl.app.avroom.redpackage.RedPackageEvent
import com.chwl.app.base.BaseDialog
import com.chwl.app.common.ViewPagerAdapter
import com.chwl.app.databinding.RedPackageSendDialogBinding
import com.chwl.app.ui.pay.ChargeActivity
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.core.Constants
import com.chwl.core.UriProvider
import com.chwl.core.initial.InitialModel
import com.chwl.core.pay.PayModel
import com.chwl.core.pay.event.UpdateWalletInfoEvent
import com.chwl.core.redpackage.*
import com.chwl.library.annatation.ActLayoutRes
import com.chwl.library.common.util.DeviceUtil
import com.chwl.library.utils.AppMetaDataUtil
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* Created by Max on 2023/10/23 12:14
* Desc:发红包
**/
@ActLayoutRes(R.layout.red_package_send_dialog)
class RedPackageSendDialog : BaseDialog<RedPackageSendDialogBinding>() {
private val permissionType: Int
get() = arguments?.getInt(com.chwl.core.support.config.Constants.KEY_INTENT)
?: 0
/**
* 是否有厅内红包权限
*/
private val haveRoomRedPackagePermission get() = (permissionType and 1) != 0
/**
* 是否有全服红包权限
*/
private val haveAllServicePackagePermission get() = (permissionType and 2) != 0
companion object {
/**
* 红包权限类型
*/
fun newInstance(permissionType: Int): RedPackageSendDialog {
return RedPackageSendDialog().apply {
this.arguments = Bundle().apply {
putInt(
com.chwl.core.support.config.Constants.KEY_INTENT,
permissionType
)
}
}
}
}
override fun onStart() {
gravity = Gravity.BOTTOM
width = WindowManager.LayoutParams.MATCH_PARENT
height = WindowManager.LayoutParams.WRAP_CONTENT
super.onStart()
}
@SuppressLint("SetTextI18n")
override fun init() {
EventBus.getDefault().register(this)
if (!haveRoomRedPackagePermission && !haveAllServicePackagePermission) {
SingleToastUtil.showToast(R.string.avroom_presenter_avroompresenter_04)
dismissAllowingStateLoss()
return
}
if (InitialModel.get().cacheInitInfo == null) {
InitialModel.get().init(true)
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_redpackage_redpackagesenddialog_01))
dismissAllowingStateLoss()
return
}
initView()
initEvent()
PayModel.get().currentWalletInfo?.let {
binding.tvBalance.text = it.diamondNum.toLong().toString()
}
}
private fun initView() {
val tabTitles = ArrayList<String>()
val fragments = ArrayList<Fragment>()
if (haveRoomRedPackagePermission) {
tabTitles.add(R.string.red_package_room.toStringRes())
fragments.add(PrivateRedPackageEditorFragment())
}
if (haveAllServicePackagePermission) {
tabTitles.add(R.string.red_package_public.toStringRes())
fragments.add(PublicRedPackageEditorFragment())
}
val topMagicIndicatorAdapter = TabIndicatorAdapter(context, tabTitles)
topMagicIndicatorAdapter.setOnItemSelectListener {
binding.viewPager.currentItem = it
}
val commonNavigator = CommonNavigator(context)
commonNavigator.isAdjustMode = true
commonNavigator.adapter = topMagicIndicatorAdapter
binding.tabLayout.navigator = commonNavigator
binding.viewPager.adapter = ViewPagerAdapter(
childFragmentManager,
fragments.toList(),
null
)
ViewPagerHelper.bind(binding.tabLayout, binding.viewPager)
}
private fun initEvent() {
binding.vTopBlank.singleClick {
dismissAllowingStateLoss()
}
binding.ivHelp.singleClick {
DialogWebViewActivity.start(
context,
UriProvider.getRedPacketRule()
)
}
binding.tvBalance.singleClick {
// if (AppMetaDataUtil.getChannelID() == Constants.GOOGLE) {
ChargeActivity.start(context)
// } else {
// CommonWebViewActivity.start(
// context, UriProvider.getOfficialPay(
// 4,
// DeviceUtil.getDeviceId(context)
// )
// )
// }
}
}
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onWalletInfoUpdate(event: UpdateWalletInfoEvent?) {
if (!isViewLoaded) {
return
}
binding.tvBalance.text = PayModel.get().currentWalletInfo?.diamondNum?.toString()
?: "0"
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun handleRedPackageDialog(event: RedPackageEvent?) {
dismissAllowingStateLoss()
}
}

View File

@@ -1,76 +0,0 @@
package com.chwl.app.avroom.redpackage.send
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.example.lib_utils.ktx.getColorById
import com.chwl.app.R
import io.realm.internal.Keep
/**
* Created by Max on 2023/10/23 18:02
* Desc:
**/
class RedPackageTypeItemAdapter(list: List<ItemData>) :
BaseQuickAdapter<RedPackageTypeItemAdapter.ItemData, BaseViewHolder>(
R.layout.red_package_private_item_type,
list
) {
private var selectPosition = -1
@Keep
data class ItemData(
/**
* 红包种类 0 旧版本 1 无门槛红包 2 关注红包 3 分享红包 4 弹幕红包
*/
val type: Int, val name: Int, val tips: Int
)
override fun convert(helper: BaseViewHolder, item: ItemData) {
helper.setText(R.id.tv_name, item.name)
helper.setText(R.id.tv_tips, item.tips)
convertState(helper, item)
}
override fun convertPayloads(
helper: BaseViewHolder,
item: ItemData,
payloads: MutableList<Any>
) {
super.convertPayloads(helper, item, payloads)
convertState(helper, item)
}
private fun convertState(helper: BaseViewHolder, item: ItemData) {
if (helper.bindingAdapterPosition == selectPosition) {
helper.setBackgroundRes(R.id.layout_root, R.drawable.red_package_bg_type_selected)
helper.setTextColor(
R.id.tv_name,
helper.itemView.context.getColorById(R.color.color_FF285C)
)
helper.setTextColor(
R.id.tv_tips,
helper.itemView.context.getColorById(R.color.color_FF285C)
)
} else {
helper.setBackgroundRes(R.id.layout_root, R.drawable.shape_f8f8fa_8)
helper.setTextColor(
R.id.tv_name,
helper.itemView.context.getColorById(R.color.color_767585)
)
helper.setTextColor(
R.id.tv_tips,
helper.itemView.context.getColorById(R.color.color_94959C)
)
}
}
fun select(position: Int) {
this.selectPosition = position
notifyItemRangeChanged(0, itemCount, true)
}
fun getSelect(): ItemData? {
return data.getOrNull(selectPosition)
}
}

View File

@@ -1,115 +0,0 @@
package com.chwl.app.avroom.redpackage.send;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.appcompat.widget.AppCompatTextView;
import com.chwl.app.R;
import com.chwl.library.common.util.Utils;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator;
import java.util.List;
/**
* @author jack
* @Description
* @Date 2018/11/1
*/
public class TabIndicatorAdapter extends CommonNavigatorAdapter {
private List<String> mTitleList;
private Context mContext;
public TabIndicatorAdapter(Context mContext, List<String> mTitleList ) {
this.mTitleList = mTitleList;
this.mContext = mContext;
}
@Override
public int getCount() {
return mTitleList == null ? 0 : mTitleList.size();
}
@Override
public IPagerTitleView getTitleView(Context context, int index) {
ContactsPagerTitleView categoryPagerTitleView = new ContactsPagerTitleView(context, mTitleList.get(index));
categoryPagerTitleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mOnItemSelectListener) {
mOnItemSelectListener.onItemSelect(index);
}
}
});
return categoryPagerTitleView;
}
@Override
public IPagerIndicator getIndicator(Context context) {
LinePagerIndicator indicator = new LinePagerIndicator(context);
indicator.setMode(LinePagerIndicator.MODE_EXACTLY);
indicator.setLineHeight(UIUtil.dip2px(mContext, 4));
indicator.setRoundRadius(UIUtil.dip2px(mContext, 4));
indicator.setLineWidth(UIUtil.dip2px(mContext, 12));
indicator.setColors(context.getResources().getColor(R.color.color_FF285C));
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
lp.topMargin = UIUtil.dip2px(mContext, 2);
indicator.setLayoutParams(lp);
return indicator;
}
private OnItemSelectListener mOnItemSelectListener;
public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) {
mOnItemSelectListener = onItemSelectListener;
}
public interface OnItemSelectListener {
void onItemSelect(int position);
}
class ContactsPagerTitleView extends AppCompatTextView implements IPagerTitleView {
public ContactsPagerTitleView(Context context, String tabInfo) {
super(context);
setHeight(Utils.dip2px(getContext(), 25));
setTextSize(18);
setText(tabInfo);
setGravity(Gravity.CENTER);
}
@Override
public void onSelected(int index, int totalCount) {
// setBackgroundResource(R.drawable.shape_bg_contact_indicator_item);
setTextColor(getResources().getColor(R.color.color_FF285C));
}
@Override
public void onDeselected(int index, int totalCount) {
// setBackgroundDrawable(null);
setTextColor(getResources().getColor(R.color.color_767585));
}
@Override
public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) {
}
@Override
public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) {
}
}
}

View File

@@ -13,14 +13,14 @@ import com.chad.library.adapter.base.diff.BaseQuickDiffCallback
import com.chwl.app.R
import com.chwl.app.avroom.bean.RoomAlbumPhotoInfo
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.community.photo.BigPhotoActivity
import com.chwl.app.community.photo.PagerOption
import com.chwl.app.community.utils.ObjectTypeHelper
import com.chwl.app.databinding.FragmentRoomAlbumBinding
import com.chwl.app.photo.BigPhotoActivity
import com.chwl.app.photo.PagerOption
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.widget.ButtonItem
import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration
import com.chwl.app.utils.ObjectTypeHelper
import com.chwl.core.Constants
class RoomAlbumFragment : BaseViewBindingFragment<FragmentRoomAlbumBinding>() {

View File

@@ -251,7 +251,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
}
if (requestCode == 200) {
PhotoProvider.getResultPathListAsync(data) {
it?.let { paths ->
it?.mapNotNull { it.path }?.let { paths ->
compressPhotos(paths.toMutableList())
}
}

View File

@@ -68,7 +68,7 @@ class SingleRoomPKBoardView @JvmOverloads constructor(
.subscribe()
}
} else {
"主播已關閉對方房間的聲音".toast()
ResUtil.getString(R.string.close_other_room_sound).toast()
}
}
}

View File

@@ -9,6 +9,7 @@ import com.chwl.app.R
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.room.anotherroompk.SimpleRoomInfo
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.library.utils.ResUtil
class SingleRoomPKSearchAdapter :
BaseQuickAdapter<SimpleRoomInfo, BaseViewHolder>(R.layout.item_single_room_pk_search) {
@@ -21,13 +22,13 @@ class SingleRoomPKSearchAdapter :
val tvSelect = helper.getView<TextView>(R.id.tv_select)
tvSelect.isEnabled = !item.crossPking && item.valid
if (!item.valid) {
tvSelect.text = "離線"
tvSelect.text = ResUtil.getString(R.string.offline)
tvSelect.setTextColor("#80C6C6E9".toColorInt())
} else if (item.crossPking) {
tvSelect.text = "PK中"
tvSelect.text = tvSelect.context.getString(R.string.layout_item_home_tab_map_02)
tvSelect.setTextColor("#80C6C6E9".toColorInt())
} else {
tvSelect.text = "選擇"
tvSelect.text = ResUtil.getString(R.string.select)
tvSelect.setTextColor(Color.WHITE)
}
}

View File

@@ -3,6 +3,7 @@ package com.chwl.app.avroom.singleroompk
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.databinding.DialogSingleRoomPkReceivedBinding
import com.chwl.core.im.custom.bean.RoomPkBean
@@ -37,7 +38,7 @@ class SingleRoomPkReceivedDialog : BaseDialog<DialogSingleRoomPkReceivedBinding>
@SuppressLint("CheckResult")
override fun init() {
binding?.tvNick?.text = pkBean.inviteRoomTitle.subAndReplaceDot(7)
binding?.tvTime?.text = "${pkBean.pkDuration}分鐘"
binding?.tvTime?.text = "${pkBean.pkDuration}${getString(R.string.layout_activity_room_pk_create_010)}"
pkBean.pkDesc.ifNotNullOrEmpty {
binding?.tvDescTitle?.isVisible = true
binding?.tvDesc?.isVisible = true

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